diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 2499692c7..f1f41598c 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -344,6 +344,13 @@ jobs: Withdraw_Package_Form_Medicaid_SPA.spec.feature, Withdraw_Package_Form_Waiver_Amendment.spec.feature, Withdraw_Package_Form_Waiver_Renewal.spec.feature, + Subsequent_Submission_1915b_Amendment_Waiver.spec.feature, + Subsequent_Submission_1915c_Appendix_K.spec.feature, + Subsequent_Submission_CHIP_Spa.spec.feature, + Subsequent_Submission_Initial_Waiver.spec.feature, + Subsequent_Submission_Medicaid_Spa.spec.feature, + Subsequent_Submission_Renewal_Waiver.spec.feature, + Dashboard_RAI_Withdraw_Enabled_Actions.spec.feature, ] steps: - name: set branch_name diff --git a/services/app-api/email/CMSSubsequentSubmissionNotice.js b/services/app-api/email/CMSSubsequentSubmissionNotice.js new file mode 100644 index 000000000..8743ab7b0 --- /dev/null +++ b/services/app-api/email/CMSSubsequentSubmissionNotice.js @@ -0,0 +1,60 @@ +import { formatPackageDetails } from "./formatPackageDetails.js"; +import { getCPOCandSRTEmailAddresses } from "../utils/getCpocAndSrtEmail.js"; + +/** + * Package Submission email to CMS + * @param {Object} data from the package. + * @returns {Object} email parameters in generic format. + */ +export const CMSSubsequentSubmissionNotice = async (data, config) => { + data.submitterName = ""; // remove this bc we dont want it on the cms email + const CMSEmailItem = await getCPOCandSRTEmailAddresses(data.componentId); + + const ToAddresses = CMSEmailItem.reviewTeamEmailList + ? [...CMSEmailItem.reviewTeamEmailList] + : []; + + CMSEmailItem?.cpocEmail && ToAddresses.push(CMSEmailItem.cpocEmail); + // changing config to match the docs in this one instance + if (config.idLabel === "SPA ID") { + let typeLabel = config.typeLabel; + // cut the type label at sub sub and set that at the new idLabel + typeLabel = typeLabel + .substring(0, typeLabel.indexOf("Subsequent Submission")) + .trim(); + config.idLabel = `${typeLabel} Package ID`; + } + + return { + ToAddresses: ToAddresses, + CcAddresses: [], + Subject: `Action required: review new documents for ${config.typeLabel} ${data.componentId}`, + HTML: ` +

New documents have been submitted for ${config.typeLabel} ${ + data.componentId + } in OneMAC.

+ ${formatPackageDetails(data, config)} +

How to access:

+ +
+

If the contents of this email seem suspicious, do not open them, and instead forward this email to SPAM@cms.hhs.gov.

+

Thank you!

+ `, + }; +}; diff --git a/services/app-api/email/CMSSubsequentSubmissionNotice.test.js b/services/app-api/email/CMSSubsequentSubmissionNotice.test.js new file mode 100644 index 000000000..85a782336 --- /dev/null +++ b/services/app-api/email/CMSSubsequentSubmissionNotice.test.js @@ -0,0 +1,26 @@ +import { CMSSubsequentSubmissionNotice } from "./CMSSubsequentSubmissionNotice"; + +it("builds the CMS Submission Notice Email", async () => { + const testData = { + submitterName: "name", + componentId: "MI-11-1111-22", + proposedEffectiveDate: "2022-06-07", + }; + const testConfig = { + typeLabel: "Test Type", + }; + const warnings = []; + + const response2 = await CMSSubsequentSubmissionNotice(testData, testConfig); + + expect(response2.Subject).toBe( + "Subsequent Documentation for " + + testConfig.typeLabel + + " " + + testData.componentId + ); + + expect(response2.HTML.includes(testData.componentId)).toBe(true); + expect(response2.HTML.includes(process.env.applicationEndpoint)).toBe(true); + expect(response2.HTML.length).toBe(1293); +}); diff --git a/services/app-api/email/CMSWithdrawRaiNotice.js b/services/app-api/email/CMSWithdrawRaiNotice.js index 34959f740..a181ef79c 100644 --- a/services/app-api/email/CMSWithdrawRaiNotice.js +++ b/services/app-api/email/CMSWithdrawRaiNotice.js @@ -1,27 +1,6 @@ -import dynamoDb from "../libs/dynamodb-lib"; - import { ONEMAC_TYPE } from "cmscommonlib/workflow.js"; import { formatPackageDetails } from "./formatPackageDetails.js"; - -export const getCPOCandSRTEmailAddresses = async (packageId) => { - let returnObj = {}; - const qParams = { - TableName: process.env.oneMacTableName, - Key: { - pk: `${packageId}`, - sk: "Package", - }, - ProjectionExpression: "cpocEmail, reviewTeamEmailList", - }; - try { - const packageItem = await dynamoDb.get(qParams); - - returnObj = packageItem.Item; - } catch (e) { - console.log("query error: ", e.message); - } - return returnObj; -}; +import { getCPOCandSRTEmailAddresses } from "../utils/getCpocAndSrtEmail"; /** * RAI Response withdrawal email to CMS diff --git a/services/app-api/email/CMSWithdrawalRaiNotice.test.js b/services/app-api/email/CMSWithdrawalRaiNotice.test.js index 025e2529a..fde47c3eb 100644 --- a/services/app-api/email/CMSWithdrawalRaiNotice.test.js +++ b/services/app-api/email/CMSWithdrawalRaiNotice.test.js @@ -1,10 +1,8 @@ import dynamoDb from "../libs/dynamodb-lib"; import { ONEMAC_TYPE } from "cmscommonlib/workflow.js"; -import { - CMSWithdrawRaiNotice, - getCPOCandSRTEmailAddresses, -} from "./CMSWithdrawRaiNotice"; +import { CMSWithdrawRaiNotice } from "./CMSWithdrawRaiNotice"; +import { getCPOCandSRTEmailAddresses } from "../utils/getCpocAndSrtEmail"; jest.mock("../libs/dynamodb-lib"); diff --git a/services/app-api/email/stateSubsequentSubmissionReceipt.js b/services/app-api/email/stateSubsequentSubmissionReceipt.js new file mode 100644 index 000000000..163de810f --- /dev/null +++ b/services/app-api/email/stateSubsequentSubmissionReceipt.js @@ -0,0 +1,31 @@ +import { formatPackageDetails } from "./formatPackageDetails.js"; + +/** + * Package submission receipt email to state user(s) + * @param {Object} data from the package. + * @returns {Object} email parameters in generic format. + */ +export const stateSubsequentSubmissionReceipt = (data, config) => { + // changing config to match the docs in this one instance + if (config.idLabel === "SPA ID") { + let typeLabel = config.typeLabel; + // cut the type label at sub sub and set that at the new idLabel + typeLabel = typeLabel + .substring(0, typeLabel.indexOf("Subsequent Submission")) + .trim(); + config.idLabel = `${typeLabel} Package ID`; + } + + return { + ToAddresses: [`${data.submitterName} <${data.submitterEmail}>`], + CcAddresses: [], + Subject: `Additional documents submitted for ${config.typeLabel} ${data.componentId}`, + HTML: ` +

You’ve successfully submitted the following to CMS reviewers for ${ + config.typeLabel + } ${data.componentId}:

+ ${formatPackageDetails(data, config)} +

If you have questions or did not expect this email, please contact SPA@CMS.HHS.gov.

+

Thank you.

`, + }; +}; diff --git a/services/app-api/email/stateSubsequentSubmissionReceipt.test.js b/services/app-api/email/stateSubsequentSubmissionReceipt.test.js new file mode 100644 index 000000000..3db878c07 --- /dev/null +++ b/services/app-api/email/stateSubsequentSubmissionReceipt.test.js @@ -0,0 +1,19 @@ +import { stateSubsequentSubmissionReceipt } from "./stateSubsequentSubmissionReceipt"; + +it("builds the State Submission Receipt Email", async () => { + const testData = { + submitterName: "name", + submitterEmail: "theemail@email.com", + componentId: "MI-11-1111-22", + clockEndTimestamp: 1631626754502, + }; + const testConfig = { + typeLabel: "Test Type", + }; + try { + const response2 = stateSubsequentSubmissionReceipt(testData, testConfig); + expect(response2.HTML.length).toBe(999); + } catch (e) { + console.log("reeived error: ", e); + } +}); diff --git a/services/app-api/form/defaultFormConfig.js b/services/app-api/form/defaultFormConfig.js index ea51b9a84..1d6436d1f 100644 --- a/services/app-api/form/defaultFormConfig.js +++ b/services/app-api/form/defaultFormConfig.js @@ -3,6 +3,8 @@ import Joi from "joi"; import { RESPONSE_CODE, Workflow } from "cmscommonlib"; import { CMSWithdrawalNotice } from "../email/CMSWithdrawalNotice"; import { stateWithdrawalReceipt } from "../email/stateWithdrawalReceipt"; +import { CMSSubsequentSubmissionNotice } from "../email/CMSSubsequentSubmissionNotice"; +import { stateSubsequentSubmissionReceipt } from "../email/stateSubsequentSubmissionReceipt"; export const defaultFormConfig = { CMSToAddresses: [process.env.reviewerEmail, process.env.testingEmail].filter( @@ -28,6 +30,31 @@ export const defaultWaiverSchema = { proposedEffectiveDate: defaultProposedEffectiveDateSchema, }; +export const defaultSubsequentSubmissionSchema = { + parentId: defaultParentId, + parentType: defaultParentType, +}; + +export const defaultSubsequentSubmissionConfig = { + ...defaultFormConfig, + newStatus: null, //use parent's current package status + successResponseCode: + RESPONSE_CODE.SUCCESSFULLY_SUBMITTED_SUBSEQUENT_SUBMISSION, + buildCMSNotice: CMSSubsequentSubmissionNotice, + buildStateReceipt: stateSubsequentSubmissionReceipt, + appendToSchema: { + ...defaultSubsequentSubmissionSchema, + }, +}; + +export const defaultWaiverSubsequentSubmissionConfig = { + ...defaultSubsequentSubmissionConfig, + appendToSchema: { + ...defaultSubsequentSubmissionSchema, + waiverAuthority: defaultWaiverAuthoritySchema, + }, +}; + export const defaultWithdrawConfig = { ...defaultFormConfig, successResponseCode: RESPONSE_CODE.WITHDRAW_REQUESTED, diff --git a/services/app-api/form/submitAny.js b/services/app-api/form/submitAny.js index 2a402fa91..32d656483 100644 --- a/services/app-api/form/submitAny.js +++ b/services/app-api/form/submitAny.js @@ -12,8 +12,8 @@ import { getUser } from "../getUser"; import { validateSubmission } from "./validateSubmission"; import packageExists from "../utils/packageExists"; import { newEvent } from "../utils/newEvent"; +import { getPackage } from "../utils/getPackage"; import { saveEmail } from "../utils/saveEmail"; -import { getPackageType } from "../utils/getPackageType"; import { CMSSubmissionNotice } from "../email/CMSSubmissionNotice"; import { stateSubmissionReceipt } from "../email/stateSubmissionReceipt"; @@ -82,7 +82,13 @@ export const submitAny = async (event, config) => { // if a parent ID is included, need to validate parent and grab type if (data.parentId) { try { - data.parentType = await getPackageType(data.parentId); + const parentPackage = await getPackage(data.parentId); + console.log("got package", parentPackage); + data.parentType = parentPackage.componentType; + // if no new status is provided, use the parent's current status + if (!config.newStatus) { + config.newStatus = parentPackage.currentStatus; + } } catch (e) { console.log( "%s parent ID %s validation failed: ", @@ -98,9 +104,8 @@ export const submitAny = async (event, config) => { // Add the details from this submission action data.submissionTimestamp = rightNowNormalized; data.eventTimestamp = rightNowNormalized; - - data.currentStatus = config.newStatus; data.componentType = config.componentType; + data.currentStatus = config.newStatus; // record the current end timestamp (can be start/stopped/changed) // 90 days is current CMS review period and it is based on CMS time!! diff --git a/services/app-api/form/submitChipSPASubsequentSubmission.js b/services/app-api/form/submitChipSPASubsequentSubmission.js new file mode 100644 index 000000000..50f9b9cd0 --- /dev/null +++ b/services/app-api/form/submitChipSPASubsequentSubmission.js @@ -0,0 +1,13 @@ +import { chipSPASubsequentSubmission } from "cmscommonlib"; +import handler from "../libs/handler-lib"; +import { submitAny } from "./submitAny"; +import { defaultSubsequentSubmissionConfig } from "./defaultFormConfig"; + +export const chipSPASubsequentSubmissionFormConfig = { + ...defaultSubsequentSubmissionConfig, + ...chipSPASubsequentSubmission, +}; + +export const main = handler(async (event) => + submitAny(event, chipSPASubsequentSubmissionFormConfig) +); diff --git a/services/app-api/form/submitInitialWaiverSubsequentSubmission.js b/services/app-api/form/submitInitialWaiverSubsequentSubmission.js new file mode 100644 index 000000000..a293e78a8 --- /dev/null +++ b/services/app-api/form/submitInitialWaiverSubsequentSubmission.js @@ -0,0 +1,39 @@ +import handler from "../libs/handler-lib"; +import { submitAny } from "./submitAny"; +import { defaultWaiverSubsequentSubmissionConfig } from "./defaultFormConfig"; +import { + initialWaiverB4SubsequentSubmission, + initialWaiverBSubsequentSubmission, + waiverAuthorityB, + waiverAuthorityB4, +} from "cmscommonlib"; + +export const initialWaiverB4SubsequentFormConifg = { + ...defaultWaiverSubsequentSubmissionConfig, + ...initialWaiverB4SubsequentSubmission, +}; + +export const initialWaiverBSubsequentFormConifg = { + ...defaultWaiverSubsequentSubmissionConfig, + ...initialWaiverBSubsequentSubmission, +}; + +export const main = handler(async (event) => { + let data, formConfig; + try { + data = JSON.parse(event.body); + } catch (error) { + console.log("event couldn't parse: ", error); + throw error; + } + + if (data.waiverAuthority === waiverAuthorityB4.value) { + formConfig = initialWaiverB4SubsequentFormConifg; + } else if (data.waiverAuthority === waiverAuthorityB.value) { + formConfig = initialWaiverBSubsequentFormConifg; + } else { + throw new Error("Waiver Authority not found"); + } + + return await submitAny(event, formConfig); +}); diff --git a/services/app-api/form/submitInitialWaiverSubsequentSubmissionT.test.js b/services/app-api/form/submitInitialWaiverSubsequentSubmissionT.test.js new file mode 100644 index 000000000..c3d78a1e3 --- /dev/null +++ b/services/app-api/form/submitInitialWaiverSubsequentSubmissionT.test.js @@ -0,0 +1,61 @@ +import { + main, + initialWaiverB4SubsequentFormConifg, + initialWaiverBSubsequentFormConifg, +} from "./submitInitialWaiverSubsequentSubmission"; +import { waiverAuthorityB4, waiverAuthorityB } from "cmscommonlib"; +import { submitAny } from "./submitAny"; +import handler from "../libs/handler-lib"; + +//jest.mock("../libs/handler-lib"); +jest.mock("./submitAny"); + +const testResult = { + body: "submitAny result", + headers: { + "Access-Control-Allow-Credentials": true, + "Access-Control-Allow-Origin": "*", + }, + statusCode: 200, +}; + +describe("main function", () => { + beforeEach(() => { + //handler.mockImplementation((func) => func); + submitAny.mockResolvedValue(testResult); + }); + + it("should call submitAny with B4 form config when waiverAuthority is B4", async () => { + const event = { + body: JSON.stringify({ waiverAuthority: waiverAuthorityB4.value }), + }; + const result = await main(event); + expect(submitAny).toHaveBeenCalledWith( + event, + initialWaiverB4SubsequentFormConifg + ); + }); + + it("should call submitAny with B form config when waiverAuthority is B", async () => { + const event = { + body: JSON.stringify({ waiverAuthority: waiverAuthorityB.value }), + }; + const result = await main(event); + expect(submitAny).toHaveBeenCalledWith( + event, + initialWaiverBSubsequentFormConifg + ); + }); + + it("should throw an error when waiverAuthority is not found", async () => { + const event = { body: JSON.stringify({ waiverAuthority: "not-found" }) }; + const result = await main(event); + expect(result.statusCode).toEqual(500); + //await expect(main(event)).rejects.toThrow("Waiver Authority not found"); + }); + + // it("should throw an error when body is not a valid JSON", async () => { + // const event = { body: "invalid json" }; + // await expect(main(event)).rejects.toThrow(); + // }); +}); diff --git a/services/app-api/form/submitMedicaidSPASubsequentSubmission.js b/services/app-api/form/submitMedicaidSPASubsequentSubmission.js new file mode 100644 index 000000000..993b3d41e --- /dev/null +++ b/services/app-api/form/submitMedicaidSPASubsequentSubmission.js @@ -0,0 +1,13 @@ +import { medicaidSPASubsequentSubmission } from "cmscommonlib"; +import handler from "../libs/handler-lib"; +import { submitAny } from "./submitAny"; +import { defaultSubsequentSubmissionConfig } from "./defaultFormConfig"; + +export const medicaidSPASubsequentSubmissionFormConfig = { + ...defaultSubsequentSubmissionConfig, + ...medicaidSPASubsequentSubmission, +}; + +export const main = handler(async (event) => + submitAny(event, medicaidSPASubsequentSubmissionFormConfig) +); diff --git a/services/app-api/form/submitWaiverAmendmentSubsequentSubmission.js b/services/app-api/form/submitWaiverAmendmentSubsequentSubmission.js new file mode 100644 index 000000000..848577516 --- /dev/null +++ b/services/app-api/form/submitWaiverAmendmentSubsequentSubmission.js @@ -0,0 +1,45 @@ +import { + waiverAmendmentSubsequentSubmission, + waiverAmendmentB4SubsequentSubmission, + waiverAmendmentBSubsequentSubmission, + waiverAuthorityB, + waiverAuthorityB4, +} from "cmscommonlib"; +import handler from "../libs/handler-lib"; +import { submitAny } from "./submitAny"; +import { defaultWaiverSubsequentSubmissionConfig } from "./defaultFormConfig"; + +export const waiverAmendmentSubsequentSubmissionFormConfig = { + ...defaultWaiverSubsequentSubmissionConfig, + ...waiverAmendmentSubsequentSubmission, +}; + +export const waiverAmendmentB4SubsequentFormConifg = { + ...waiverAmendmentSubsequentSubmissionFormConfig, + ...waiverAmendmentB4SubsequentSubmission, +}; + +export const waiverAmendmentBSubsequentFormConifg = { + ...waiverAmendmentSubsequentSubmissionFormConfig, + ...waiverAmendmentBSubsequentSubmission, +}; + +export const main = handler(async (event) => { + let data, formConfig; + try { + data = JSON.parse(event.body); + } catch (error) { + console.log("event couldn't parse: ", error); + throw error; + } + + if (data.waiverAuthority === waiverAuthorityB4.value) { + formConfig = waiverAmendmentB4SubsequentFormConifg; + } else if (data.waiverAuthority === waiverAuthorityB.value) { + formConfig = waiverAmendmentBSubsequentFormConifg; + } else { + throw new Error("Waiver Authority not found"); + } + + return await submitAny(event, formConfig); +}); diff --git a/services/app-api/form/submitWaiverAmendmentSubsequentSubmissionT.test.js b/services/app-api/form/submitWaiverAmendmentSubsequentSubmissionT.test.js new file mode 100644 index 000000000..27c4c670c --- /dev/null +++ b/services/app-api/form/submitWaiverAmendmentSubsequentSubmissionT.test.js @@ -0,0 +1,60 @@ +import { + main, + waiverAmendmentB4SubsequentFormConifg, + waiverAmendmentBSubsequentFormConifg, +} from "./submitWaiverAmendmentSubsequentSubmission"; +import { waiverAuthorityB4, waiverAuthorityB } from "cmscommonlib"; +import { submitAny } from "./submitAny"; +import handler from "../libs/handler-lib"; + +//jest.mock("../libs/handler-lib"); +jest.mock("./submitAny"); + +const testResult = { + body: "submitAny result", + headers: { + "Access-Control-Allow-Credentials": true, + "Access-Control-Allow-Origin": "*", + }, + statusCode: 200, +}; + +describe("main function", () => { + beforeEach(() => { + submitAny.mockResolvedValue(testResult); + }); + + it("should call submitAny with B4 form config when waiverAuthority is B4", async () => { + const event = { + body: JSON.stringify({ waiverAuthority: waiverAuthorityB4.value }), + }; + const result = await main(event); + expect(submitAny).toHaveBeenCalledWith( + event, + waiverAmendmentB4SubsequentFormConifg + ); + }); + + it("should call submitAny with B form config when waiverAuthority is B", async () => { + const event = { + body: JSON.stringify({ waiverAuthority: waiverAuthorityB.value }), + }; + const result = await main(event); + expect(submitAny).toHaveBeenCalledWith( + event, + waiverAmendmentBSubsequentFormConifg + ); + }); + + it("should throw an error when waiverAuthority is not found", async () => { + const event = { body: JSON.stringify({ waiverAuthority: "not-found" }) }; + const result = await main(event); + expect(result.statusCode).toEqual(500); + //await expect(main(event)).rejects.toThrow("Waiver Authority not found"); + }); + + // it("should throw an error when body is not a valid JSON", async () => { + // const event = { body: "invalid json" }; + // await expect(main(event)).rejects.toThrow(); + // }); +}); diff --git a/services/app-api/form/submitWaiverAppKSubsequentSubmission.js b/services/app-api/form/submitWaiverAppKSubsequentSubmission.js new file mode 100644 index 000000000..64a46ea0f --- /dev/null +++ b/services/app-api/form/submitWaiverAppKSubsequentSubmission.js @@ -0,0 +1,13 @@ +import { waiverAppKSubsequentSubmission } from "cmscommonlib"; +import handler from "../libs/handler-lib"; +import { submitAny } from "./submitAny"; +import { defaultWaiverSubsequentSubmissionConfig } from "./defaultFormConfig"; + +export const waiverAppKSubsequentSubmissionFormConfig = { + ...defaultWaiverSubsequentSubmissionConfig, + ...waiverAppKSubsequentSubmission, +}; + +export const main = handler(async (event) => + submitAny(event, waiverAppKSubsequentSubmissionFormConfig) +); diff --git a/services/app-api/form/submitWaiverRenewalSubsequentSubmission.js b/services/app-api/form/submitWaiverRenewalSubsequentSubmission.js new file mode 100644 index 000000000..fc5c56f8b --- /dev/null +++ b/services/app-api/form/submitWaiverRenewalSubsequentSubmission.js @@ -0,0 +1,13 @@ +import { waiverRenewalSubsequentSubmission } from "cmscommonlib"; +import handler from "../libs/handler-lib"; +import { submitAny } from "./submitAny"; +import { defaultWaiverSubsequentSubmissionConfig } from "./defaultFormConfig"; + +export const waiverRenewalSubsequentSubmissionFormConfig = { + ...defaultWaiverSubsequentSubmissionConfig, + ...waiverRenewalSubsequentSubmission, +}; + +export const main = handler(async (event) => + submitAny(event, waiverRenewalSubsequentSubmissionFormConfig) +); diff --git a/services/app-api/getMyPackages.js b/services/app-api/getMyPackages.js index e6b8f4dcf..91cb1f4ee 100644 --- a/services/app-api/getMyPackages.js +++ b/services/app-api/getMyPackages.js @@ -42,7 +42,7 @@ export const getMyPackages = async (email, group) => { ExclusiveStartKey: null, ScanIndexForward: false, ProjectionExpression: - "componentId,componentType,currentStatus,submissionTimestamp,latestRaiResponseTimestamp,submitterName,submitterEmail,waiverAuthority, cpocName, reviewTeam, subStatus, finalDispositionDate", + "componentId,componentType,currentStatus,submissionTimestamp,latestRaiResponseTimestamp,lastActivityTimestamp,submitterName,submitterEmail,waiverAuthority, cpocName, reviewTeam, subStatus, finalDispositionDate", }; const grouppk = "OneMAC#" + group; let paramList = []; diff --git a/services/app-api/serverless.yml b/services/app-api/serverless.yml index 17458f449..78a24d3a7 100644 --- a/services/app-api/serverless.yml +++ b/services/app-api/serverless.yml @@ -128,6 +128,17 @@ functions: method: post cors: true authorizer: aws_iam + + submitMedicaidSpaSubsequent: + handler: form/submitMedicaidSPASubsequentSubmission.main + role: LambdaApiRole + timeout: 30 + events: + - http: + path: submitMedicaidSPASubsequent + method: post + cors: true + authorizer: aws_iam submitChipSpa: handler: form/submitCHIPSPA.main @@ -154,6 +165,17 @@ functions: method: post cors: true authorizer: aws_iam + + submitChipSpaSubsequent: + handler: form/submitChipSPASubsequentSubmission.main + role: LambdaApiRole + timeout: 30 + events: + - http: + path: submitChipSPASubsequent + method: post + cors: true + authorizer: aws_iam submitWaiverExtension: handler: form/submitWaiverExtension.main @@ -215,6 +237,50 @@ functions: cors: true authorizer: aws_iam + submitInitialWaiverSubsequent: + handler: form/submitInitialWaiverSubsequentSubmission.main + role: LambdaApiRole + timeout: 30 + events: + - http: + path: submitInitialWaiverSubsequent + method: post + cors: true + authorizer: aws_iam + + submitWaiverRenewalSubsequent: + handler: form/submitWaiverRenewalSubsequentSubmission.main + role: LambdaApiRole + timeout: 30 + events: + - http: + path: submitWaiverRenewalSubsequent + method: post + cors: true + authorizer: aws_iam + + submitWaierAmendmentSubsequent: + handler: form/submitWaiverAmendmentSubsequentSubmission.main + role: LambdaApiRole + timeout: 30 + events: + - http: + path: submitWaiverAmendmentSubsequent + method: post + cors: true + authorizer: aws_iam + + submitWaiverAppKSubsequent: + handler: form/submitWaiverAppKSubsequentSubmission.main + role: LambdaApiRole + timeout: 30 + events: + - http: + path: submitWaiverAppKSubsequent + method: post + cors: true + authorizer: aws_iam + validateParentOfWaiverRenewal: handler: validation/validateParentOfWaiverRenewal.main role: LambdaApiRole diff --git a/services/app-api/utils/actionDelegate.js b/services/app-api/utils/actionDelegate.js index dc718ed26..c74630c7b 100644 --- a/services/app-api/utils/actionDelegate.js +++ b/services/app-api/utils/actionDelegate.js @@ -9,8 +9,10 @@ function getDefaultActions( const actions = []; switch (packageStatus) { case Workflow.ONEMAC_STATUS.PENDING: - if (userRole.canAccessForms) + if (userRole.canAccessForms) { actions.push(Workflow.PACKAGE_ACTION.WITHDRAW); + actions.push(Workflow.PACKAGE_ACTION.SUBSEQUENT_SUBMISSION); + } if ( userRole.isCMSUser && hasRaiResponse && @@ -24,6 +26,7 @@ function getDefaultActions( case Workflow.ONEMAC_STATUS.PENDING_APPROVAL: if (userRole.canAccessForms) actions.push(Workflow.PACKAGE_ACTION.WITHDRAW); + actions.push(Workflow.PACKAGE_ACTION.SUBSEQUENT_SUBMISSION); break; case Workflow.ONEMAC_STATUS.RAI_ISSUED: if (userRole.canAccessForms) @@ -78,7 +81,7 @@ export function getActionsForPackage( userRole, formSource ) { - const actions = getDefaultActions( + let actions = getDefaultActions( packageStatus, hasRaiResponse, packageSubStatus, @@ -95,7 +98,19 @@ export function getActionsForPackage( case Workflow.ONEMAC_TYPE.WAIVER_EXTENSION: case Workflow.ONEMAC_TYPE.WAIVER_EXTENSION_B: case Workflow.ONEMAC_TYPE.WAIVER_EXTENSION_C: - actions.push(...getWaiverExtensionActions(packageStatus, userRole)); + actions.push( + ...getDefaultActions( + packageStatus, + hasRaiResponse, + userRole, + formSource + ), + ...getWaiverExtensionActions(packageStatus, userRole) + ); + //Extensions should remove SUBSEQUENT_SUBMISSION action + actions = actions.filter( + (action) => action !== Workflow.PACKAGE_ACTION.SUBSEQUENT_SUBMISSION + ); break; } // Filter out duplicates diff --git a/services/app-api/utils/actionDelegate.test.js b/services/app-api/utils/actionDelegate.test.js index a78c0159c..d0616e5a8 100644 --- a/services/app-api/utils/actionDelegate.test.js +++ b/services/app-api/utils/actionDelegate.test.js @@ -24,7 +24,10 @@ describe("getActionsForPackage", () => { formSource ); - expect(actions).toEqual(["Withdraw Package"]); + expect(actions).toEqual([ + "Withdraw Package", + "Upload Subsequent Documents", + ]); }); it("returns correct actions for chipspa with PENDING status for CMS user", () => { @@ -117,6 +120,9 @@ describe("getActionsForPackage", () => { formSource ); - expect(actions).toEqual(["Withdraw Package"]); + expect(actions).toEqual([ + "Withdraw Package", + "Upload Subsequent Documents", + ]); }); }); diff --git a/services/app-api/utils/getCpocAndSrtEmail.js b/services/app-api/utils/getCpocAndSrtEmail.js new file mode 100644 index 000000000..2cc6ad371 --- /dev/null +++ b/services/app-api/utils/getCpocAndSrtEmail.js @@ -0,0 +1,21 @@ +import dynamoDb from "../libs/dynamodb-lib"; + +export const getCPOCandSRTEmailAddresses = async (packageId) => { + let returnObj = {}; + const qParams = { + TableName: process.env.oneMacTableName, + Key: { + pk: `${packageId}`, + sk: "Package", + }, + ProjectionExpression: "cpocEmail, reviewTeamEmailList", + }; + try { + const packageItem = await dynamoDb.get(qParams); + + returnObj = packageItem.Item; + } catch (e) { + console.log("query error: ", e.message); + } + return returnObj; +}; diff --git a/services/app-api/utils/getPackage.js b/services/app-api/utils/getPackage.js new file mode 100644 index 000000000..6b6153fcf --- /dev/null +++ b/services/app-api/utils/getPackage.js @@ -0,0 +1,16 @@ +import dynamoDb from "../libs/dynamodb-lib"; + +export const getPackage = async (packageId) => { + const getParams = { + TableName: process.env.oneMacTableName, + Key: { + pk: packageId, + sk: "Package", + }, + }; + + const result = await dynamoDb.get(getParams); + if (!result || !result.Item || !result.Item.componentType) + throw Error(`${packageId} did not get result for package!`); + return result.Item; +}; diff --git a/services/app-api/utils/getPackage.test.js b/services/app-api/utils/getPackage.test.js new file mode 100644 index 000000000..bd076824f --- /dev/null +++ b/services/app-api/utils/getPackage.test.js @@ -0,0 +1,46 @@ +import { getPackage } from "./getPackage"; +import dynamoDb from "../libs/dynamodb-lib"; + +jest.mock("../libs/dynamodb-lib"); + +describe("getPackage", () => { + afterEach(() => { + jest.resetAllMocks(); + }); + + it("should return the package if found", async () => { + const packageId = "my-package-id"; + const result = { + Item: { + componentType: "anyType", + }, + }; + dynamoDb.get.mockResolvedValueOnce(result); + + const oneMacPackage = await getPackage(packageId); + + expect(dynamoDb.get).toHaveBeenCalledTimes(1); + expect(oneMacPackage).toBe(result.Item); + }); + + it("should throw an error if package is not found", async () => { + const packageId = "my-package-id"; + const result = { + Item: null, + }; + dynamoDb.get.mockResolvedValueOnce(result); + + await expect(getPackage(packageId)).rejects.toThrow( + `${packageId} did not get result for package!` + ); + + expect(dynamoDb.get).toHaveBeenCalledTimes(1); + expect(dynamoDb.get).toHaveBeenCalledWith({ + TableName: process.env.oneMacTableName, + Key: { + pk: packageId, + sk: "Package", + }, + }); + }); +}); diff --git a/services/common/index.d.ts b/services/common/index.d.ts index bd19fce21..267eafb84 100644 --- a/services/common/index.d.ts +++ b/services/common/index.d.ts @@ -153,9 +153,28 @@ export { waiverRAIResponse } from "./type/waiverRAIResponse.js"; export { medicaidSPA } from "./type/medicaidSPA.js"; export { medicaidSPARAIResponse } from "./type/medicaidSPARAIResponse.js"; export { medicaidSPAWithdraw } from "./type/medicaidSPAWithdraw.js"; +export { medicaidSPASubsequentSubmission } from "./type/medicaidSPASubsequentSubmission.js"; export { chipSPA } from "./type/chipSPA.js"; export { chipSPARAIResponse } from "./type/chipSPARAIResponse.js"; export { chipSPAWithdraw } from "./type/chipSPAWithdraw.js"; +export { chipSPASubsequentSubmission } from "./type/chipSPASubsequentSubmission.js"; +export { waiverAppKSubsequentSubmission } from "./type/waiverAppKSubsequentSubmission.js"; export { enableRaiWithdraw } from "./type/enableRaiWithdraw.js"; export { disableRaiWithdraw } from "./type/disableRaiWithdraw.js"; export { withdrawRAIResponse } from "./type/withdrawRAIResponse.js"; +export { + initialWaiverSubsequentSubmission, + initialWaiverB4SubsequentSubmission, + initialWaiverBSubsequentSubmission, +} from "./type/initialWaiverSubsequentSubmission.js"; +export { + waiverRenewalSubsequentSubmission, + waiverRenewalB4SubsequentSubmission, + waiverRenewalBSubsequentSubmission, +} from "./type/waiverRenewalSubsequentSubmission.js"; +export { + waiverAmendmentSubsequentSubmission, + waiverAmendmentB4SubsequentSubmission, + waiverAmendmentBSubsequentSubmission, +} from "./type/waiverAmendmentSubsequentSubmission.js"; +export { waiverAppKSubsequentSubmission } from "./type/waiverAppKSubsequentSubmission.js"; diff --git a/services/common/index.js b/services/common/index.js index a908fde0e..73c391eb7 100644 --- a/services/common/index.js +++ b/services/common/index.js @@ -36,12 +36,30 @@ export { waiverRAIResponse } from "./type/waiverRAIResponse.js"; export { medicaidSPA } from "./type/medicaidSPA.js"; export { medicaidSPARAIResponse } from "./type/medicaidSPARAIResponse.js"; export { medicaidSPAWithdraw } from "./type/medicaidSPAWithdraw.js"; +export { medicaidSPASubsequentSubmission } from "./type/medicaidSPASubsequentSubmission.js"; export { chipSPA } from "./type/chipSPA.js"; export { chipSPARAIResponse } from "./type/chipSPARAIResponse.js"; export { chipSPAWithdraw } from "./type/chipSPAWithdraw.js"; +export { chipSPASubsequentSubmission } from "./type/chipSPASubsequentSubmission.js"; export { enableRaiWithdraw } from "./type/enableRaiWithdraw.js"; export { disableRaiWithdraw } from "./type/disableRaiWithdraw.js"; export { withdrawRAIResponse } from "./type/withdrawRAIResponse.js"; +export { + initialWaiverSubsequentSubmission, + initialWaiverB4SubsequentSubmission, + initialWaiverBSubsequentSubmission, +} from "./type/initialWaiverSubsequentSubmission.js"; +export { + waiverRenewalSubsequentSubmission, + waiverRenewalB4SubsequentSubmission, + waiverRenewalBSubsequentSubmission, +} from "./type/waiverRenewalSubsequentSubmission.js"; +export { + waiverAmendmentSubsequentSubmission, + waiverAmendmentB4SubsequentSubmission, + waiverAmendmentBSubsequentSubmission, +} from "./type/waiverAmendmentSubsequentSubmission.js"; +export { waiverAppKSubsequentSubmission } from "./type/waiverAppKSubsequentSubmission.js"; import { ROUTES, ONEMAC_ROUTES } from "./routes.js"; export { @@ -64,6 +82,7 @@ export const RESPONSE_CODE = { NONE: "NONE", LOGIN_ERROR: "UR403", SUCCESSFULLY_SUBMITTED: "SC000", + SUCCESSFULLY_SUBMITTED_SUBSEQUENT_SUBMISSION: "SS000", DATA_MISSING: "SC001", SUBMISSION_SAVE_FAILURE: "SC003", ATTACHMENTS_MISSING: "SC002", @@ -102,6 +121,7 @@ export const FORM_SUCCESS_RESPONSE_CODES = [ RESPONSE_CODE.SUCCESSFULLY_SUBMITTED, RESPONSE_CODE.WITHDRAW_REQUESTED, RESPONSE_CODE.WITHDRAW_RAI_REQUESTED, + RESPONSE_CODE.SUCCESSFULLY_SUBMITTED_SUBSEQUENT_SUBMISSION, ]; /** diff --git a/services/common/routes.js b/services/common/routes.js index 410ed8d0c..d1f75912e 100644 --- a/services/common/routes.js +++ b/services/common/routes.js @@ -56,26 +56,35 @@ export const ONEMAC_ROUTES = { MEDICAID_SPA_DETAIL: "/detail/medicaid-spa", MEDICAID_SPA_RAI: "/medicaid-spa-rai", MEDICAID_SPA_WITHDRAW: "/medicaid-spa-withdraw", + MEDICAID_SPA_SUBSEQUENT_SUBMSISSION: "/medicaid-spa-subsequent-submission", CHIP_SPA: "/chip-spa", CHIP_SPA_DETAIL: "/detail/chip-spa", CHIP_SPA_RAI: "/chip-spa-rai", CHIP_SPA_WITHDRAW: "/chip-spa-withdraw", + CHIP_SPA_SUBSEQUENT_SUBMSISSION: "/chip-spa-subsequent-submission", INITIAL_WAIVER_B_4: "/initial-waiver-b-4", INITIAL_WAIVER_B_OTHER: "/initial-waiver-b-other", INITIAL_WAIVER_DETAIL: "/detail/initial-waiver", INITIAL_WAIVER_WITHDRAW: "/initial-waiver-withdraw", + INITIAL_WAIVER_SUBSEQUENT_SUBMSISSION: + "/initial-waiver-subsequent-submission", WAIVER_RENEWAL_B_4: "/waiver-renewal-b-4", WAIVER_RENEWAL_B_OTHER: "/waiver-renewal-b-other", WAIVER_RENEWAL_DETAIL: "/detail/waiver-renewal", WAIVER_RENEWAL_WITHDRAW: "/waiver-renewal-withdraw", + WAIVER_RENEWAL_SUBSEQUENT_SUBMSISSION: + "/waiver-renewal-subsequent-submission", WAIVER_AMENDMENT_B_4: "/waiver-amendment-b-4", WAIVER_AMENDMENT_B_OTHER: "/waiver-amendment-b-other", WAIVER_AMENDMENT_DETAIL: "/detail/waiver-amendment", WAIVER_AMENDMENT_WITHDRAW: "/waiver-amendment-withdraw", + WAIVER_AMENDMENT_SUBSEQUENT_SUBMSISSION: + "/waiver-amendment-subsequent-submission", WAIVER_APP_K: "/waiver-app-k", WAIVER_APP_K_DETAIL: "/detail/waiver-app-k", WAIVER_APP_K_RAI: "/waiver-app-k-rai", WAIVER_APP_K_WITHDRAW: "/waiver-app-k-withdraw", + WAIVER_APP_K_SUBSEQUENT_SUBMSISSION: "/waiver-app-k-subsequent-submission", WAIVER_RAI: "/waiver-rai", WITHDRAW_RAI: "/withdraw-rai", APPENDIX_K_AMENDMENT: "/appendix-k-amendment", diff --git a/services/common/type/chipSPASubsequentSubmission.js b/services/common/type/chipSPASubsequentSubmission.js new file mode 100644 index 000000000..596ee60d0 --- /dev/null +++ b/services/common/type/chipSPASubsequentSubmission.js @@ -0,0 +1,17 @@ +import { chipSPA } from "./chipSPA.js"; +import { ONEMAC_TYPE } from "../workflow.js"; + +export const chipSPASubsequentSubmission = { + ...chipSPA, + componentType: ONEMAC_TYPE.CHIP_SPA_SUBSEQUENT_SUBMISSION, + typeLabel: "Chip SPA Subsequent Submission", + idMustExist: true, + allowMultiplesWithSameId: true, + requiredAttachments: [], + optionalAttachments: [ + ...chipSPA.requiredAttachments, + ...chipSPA.optionalAttachments, + ], + allowedParentTypes: [ONEMAC_TYPE.CHIP_SPA], + allowedParentStatuses: ["Under Review"], +}; diff --git a/services/common/type/initialWaiverSubsequentSubmission.js b/services/common/type/initialWaiverSubsequentSubmission.js new file mode 100644 index 000000000..fbaa04d69 --- /dev/null +++ b/services/common/type/initialWaiverSubsequentSubmission.js @@ -0,0 +1,39 @@ +import { + initialWaiver, + initialWaiverB, + initialWaiverB4, +} from "./initialWaiver.js"; +import { waiverAuthorityB, waiverAuthorityB4 } from "../waiverAuthorities.js"; +import { ONEMAC_TYPE } from "../workflow.js"; + +export const initialWaiverSubsequentSubmission = { + ...initialWaiver, + componentType: ONEMAC_TYPE.WAIVER_INITIAL_SUBSEQUENT_SUBMISSION, + typeLabel: "1915(b) Initial Waiver Subsequent Submission", + idMustExist: true, + allowMultiplesWithSameId: true, + requiredAttachments: [], //default to empty and let subtype B or B4 override + optionalAttachments: [], + allowedParentTypes: ["waivernew"], + allowedParentStatuses: ["Under Review"], +}; + +export const initialWaiverB4SubsequentSubmission = { + ...initialWaiverSubsequentSubmission, + waiverAuthority: waiverAuthorityB4, + requiredAttachments: [], + optionalAttachments: [ + ...initialWaiverB4.requiredAttachments, + ...initialWaiverB4.optionalAttachments, + ], +}; + +export const initialWaiverBSubsequentSubmission = { + ...initialWaiverSubsequentSubmission, + waiverAuthority: waiverAuthorityB, + requiredAttachments: [], + optionalAttachments: [ + ...initialWaiverB.requiredAttachments, + ...initialWaiverB.optionalAttachments, + ], +}; diff --git a/services/common/type/medicaidSPASubsequentSubmission.js b/services/common/type/medicaidSPASubsequentSubmission.js new file mode 100644 index 000000000..7ad688bf2 --- /dev/null +++ b/services/common/type/medicaidSPASubsequentSubmission.js @@ -0,0 +1,17 @@ +import { medicaidSPA } from "./medicaidSPA.js"; +export const medicaidSPASubsequentSubmission = { + ...medicaidSPA, + componentType: "medicaidspasubsequent", + typeLabel: "Medicaid SPA Subsequent Submission", + idMustExist: true, + allowMultiplesWithSameId: true, + requiredAttachments: [], + optionalAttachments: [ + ...medicaidSPA.requiredAttachments, + ...medicaidSPA.optionalAttachments.filter( + (attachment) => attachment !== "Cover Letter" + ), + ], + allowedParentTypes: ["medicaidspa"], + allowedParentStatuses: ["Under Review"], +}; diff --git a/services/common/type/waiverAmendmentSubsequentSubmission.js b/services/common/type/waiverAmendmentSubsequentSubmission.js new file mode 100644 index 000000000..44f17dd74 --- /dev/null +++ b/services/common/type/waiverAmendmentSubsequentSubmission.js @@ -0,0 +1,38 @@ +import { + waiverAmendment, + waiverAmendmentB4, + waiverAmendmentB, +} from "./waiverAmendment.js"; +import { waiverAuthorityB, waiverAuthorityB4 } from "../waiverAuthorities.js"; +import { ONEMAC_TYPE } from "../workflow.js"; + +export const waiverAmendmentSubsequentSubmission = { + ...waiverAmendment, + componentType: ONEMAC_TYPE.WAIVER_AMENDMENT_SUBSEQUENT_SUBMISSION, + typeLabel: "Waiver Amendment Subsequent Submission", + idMustExist: true, + allowMultiplesWithSameId: true, + allowedParentStatuses: ["Under Review"], + requiredAttachments: [], //default to empty and let subtype B or B4 override + optionalAttachments: [], +}; + +export const waiverAmendmentB4SubsequentSubmission = { + ...waiverAmendmentSubsequentSubmission, + waiverAuthority: waiverAuthorityB4, + requiredAttachments: [], + optionalAttachments: [ + ...waiverAmendmentB4.requiredAttachments, + ...waiverAmendmentB4.optionalAttachments, + ], +}; + +export const waiverAmendmentBSubsequentSubmission = { + ...waiverAmendmentSubsequentSubmission, + waiverAuthority: waiverAuthorityB, + requiredAttachments: [], + optionalAttachments: [ + ...waiverAmendmentB.requiredAttachments, + ...waiverAmendmentB.optionalAttachments, + ], +}; diff --git a/services/common/type/waiverAppKSubsequentSubmission.js b/services/common/type/waiverAppKSubsequentSubmission.js new file mode 100644 index 000000000..3874798b0 --- /dev/null +++ b/services/common/type/waiverAppKSubsequentSubmission.js @@ -0,0 +1,16 @@ +import { waiverAppendixK } from "./waiverAppendixK.js"; +import { ONEMAC_TYPE } from "../workflow.js"; + +export const waiverAppKSubsequentSubmission = { + ...waiverAppendixK, + componentType: ONEMAC_TYPE.WAIVER_APP_K_SUBSEQUENT_SUBMISSION, + typeLabel: "Waiver Appendix K Subsequent Submission", + idMustExist: true, + allowMultiplesWithSameId: true, + requiredAttachments: [], + optionalAttachments: [ + ...waiverAppendixK.requiredAttachments, + ...waiverAppendixK.optionalAttachments, + ], + allowedParentStatuses: ["Under Review"], +}; diff --git a/services/common/type/waiverRenewalSubsequentSubmission.js b/services/common/type/waiverRenewalSubsequentSubmission.js new file mode 100644 index 000000000..464d81ba9 --- /dev/null +++ b/services/common/type/waiverRenewalSubsequentSubmission.js @@ -0,0 +1,40 @@ +import { + waiverRenewal, + waiverRenewalB4, + waiverRenewalB, +} from "./waiverRenewal.js"; +import { ONEMAC_TYPE } from "../workflow.js"; +import { waiverAuthorityB, waiverAuthorityB4 } from "../waiverAuthorities.js"; + +export const waiverRenewalSubsequentSubmission = { + ...waiverRenewal, + ...waiverRenewalB4, + componentType: ONEMAC_TYPE.WAIVER_RENEWAL_SUBSEQUENT_SUBMISSION, + typeLabel: "Waiver Renewal Subsequent Submission", + idMustExist: true, + allowMultiplesWithSameId: true, + allowedParentTypes: ["waiverrenewal"], + allowedParentStatuses: ["Under Review"], + requiredAttachments: [], //default to empty and let subtype B or B4 override + optionalAttachments: [], +}; + +export const waiverRenewalB4SubsequentSubmission = { + ...waiverRenewalSubsequentSubmission, + waiverAuthority: waiverAuthorityB4, + requiredAttachments: [], + optionalAttachments: [ + ...waiverRenewalB4.requiredAttachments, + ...waiverRenewalB4.optionalAttachments, + ], +}; + +export const waiverRenewalBSubsequentSubmission = { + ...waiverRenewalSubsequentSubmission, + waiverAuthority: waiverAuthorityB, + requiredAttachments: [], + optionalAttachments: [ + ...waiverRenewalB.requiredAttachments, + ...waiverRenewalB.optionalAttachments, + ], +}; diff --git a/services/common/workflow.js b/services/common/workflow.js index a2296e39c..9ac6ecafa 100644 --- a/services/common/workflow.js +++ b/services/common/workflow.js @@ -2,16 +2,21 @@ export const ONEMAC_TYPE = { CHIP_SPA: "chipspa", CHIP_SPA_RAI: "chipsparai", CHIP_SPA_WITHDRAW: "chipspawithdraw", + CHIP_SPA_SUBSEQUENT_SUBMISSION: "chipspasubsequent", MEDICAID_SPA: "medicaidspa", MEDICAID_SPA_RAI: "medicaidsparai", MEDICAID_SPA_WITHDRAW: "medicaidspawithdraw", + MEDICAID_SPA_SUBSEQUENT_SUBMISSION: "medicaidspasubsequent", WAIVER: "waiver", WAIVER_INITIAL: "waivernew", WAIVER_INITIAL_WITHDRAW: "waivernewwithdraw", + WAIVER_INITIAL_SUBSEQUENT_SUBMISSION: "waivernewsubsequent", WAIVER_AMENDMENT: "waiveramendment", WAIVER_AMENDMENT_WITHDRAW: "waiveramendmentwithdraw", + WAIVER_AMENDMENT_SUBSEQUENT_SUBMISSION: "waiveramendmentsubsequent", WAIVER_RENEWAL: "waiverrenewal", WAIVER_RENEWAL_WITHDRAW: "waiverrenewalwithdraw", + WAIVER_RENEWAL_SUBSEQUENT_SUBMISSION: "waiverrenewalsubsequent", WAIVER_RAI: "waiverrai", WAIVER_EXTENSION: "waiverextension", WAIVER_EXTENSION_B: "waiverextensionb", @@ -19,6 +24,7 @@ export const ONEMAC_TYPE = { WAIVER_APP_K: "waiverappk", WAIVER_APP_K_RAI: "waiverappkrai", WAIVER_APP_K_WITHDRAW: "waiverappkwithdraw", + WAIVER_APP_K_SUBSEQUENT_SUBMISSION: "waiverappksubsequent", ENABLE_RAI_WITHDRAW: "enableraiwithdraw", DISABLE_RAI_WITHDRAW: "disableraiwithdraw", RAI_RESPONSE_WITHDRAW: "rairesponsewithdraw", @@ -75,6 +81,7 @@ export const PACKAGE_ACTION = { REQUEST_TEMPORARY_EXTENSION: "Request a Temporary Extension", ADD_AMENDMENT: "Add Amendment", ENABLE_RAI_WITHDRAWAL: "Enable Formal RAI Response Withdraw", + SUBSEQUENT_SUBMISSION: "Upload Subsequent Documents", DISABLE_RAI_WITHDRAWAL: "Disable Formal RAI Response Withdraw", }; diff --git a/services/one-stream/handleOneStream.js b/services/one-stream/handleOneStream.js index d849094b3..07b51f4ea 100644 --- a/services/one-stream/handleOneStream.js +++ b/services/one-stream/handleOneStream.js @@ -15,6 +15,12 @@ const buildParentPackageTypes = [ Workflow.ONEMAC_TYPE.ENABLE_RAI_WITHDRAW, Workflow.ONEMAC_TYPE.DISABLE_RAI_WITHDRAW, Workflow.ONEMAC_TYPE.RAI_RESPONSE_WITHDRAW, + Workflow.ONEMAC_TYPE.WAIVER_INITIAL_SUBSEQUENT_SUBMISSION, + Workflow.ONEMAC_TYPE.WAIVER_RENEWAL_SUBSEQUENT_SUBMISSION, + Workflow.ONEMAC_TYPE.WAIVER_AMENDMENT_SUBSEQUENT_SUBMISSION, + Workflow.ONEMAC_TYPE.WAIVER_APP_K_SUBSEQUENT_SUBMISSION, + Workflow.ONEMAC_TYPE.MEDICAID_SPA_SUBSEQUENT_SUBMISSION, + Workflow.ONEMAC_TYPE.CHIP_SPA_SUBSEQUENT_SUBMISSION, ]; export const main = async (eventBatch) => { console.log("One Stream event: ", eventBatch); diff --git a/services/one-stream/lib/default-lib.js b/services/one-stream/lib/default-lib.js index e5fca40e2..275c4688a 100644 --- a/services/one-stream/lib/default-lib.js +++ b/services/one-stream/lib/default-lib.js @@ -3,6 +3,7 @@ export const initialSubmissionType = "Initial Package"; export const packageType = "Package"; export const submitAction = "Submitted"; export const withdrawalRequestedAction = "Withdrawal Requested"; +export const subsequentSubmissionType = "Subsequent Documentation Uploaded"; export const defaultInitialSubmissionMap = { type: initialSubmissionType, @@ -16,6 +17,12 @@ export const defaultInitialSubmissionMap = { ], }; +export const defaultSubsequentSubmissionMap = { + type: subsequentSubmissionType, + action: submitAction, + packageAttributes: ["currentStatus"], +}; + export const defaultCreateMap = { type: null, action: null, @@ -67,6 +74,7 @@ export const defaultEventMapping = { submitrai: defaultRAIResponseMap, submitwithdraw: defaultWithdrawPackageMap, submitrairesponsewithdraw: defaultWithdrawRAIResponseMap, + submitsubsequent: defaultSubsequentSubmissionMap, }; export const defaultWaiverEventMapping = { diff --git a/services/one-stream/package/buildAnyPackage.js b/services/one-stream/package/buildAnyPackage.js index 13d4ef347..b8e52327b 100644 --- a/services/one-stream/package/buildAnyPackage.js +++ b/services/one-stream/package/buildAnyPackage.js @@ -74,6 +74,7 @@ export const buildAnyPackage = async (packageId, config) => { reviewTeam: [], reviewTeamEmailList: [], adminChanges: [], + lastActivityTimestamp: 0, }, }; let currentPackage; @@ -127,6 +128,10 @@ export const buildAnyPackage = async (packageId, config) => { } showPackageOnDashboard = true; + if (anEvent.eventTimestamp > putParams.Item.lastActivityTimestamp) { + putParams.Item.lastActivityTimestamp = anEvent.eventTimestamp; + } + // the normalized eventLabel is the GSI1pk without the source and componentType // but waiver rai should only remove waiver part const eventLabel = anEvent.GSI1pk.replace("OneMAC#", "") @@ -313,21 +318,30 @@ export const buildAnyPackage = async (packageId, config) => { putParams.Item?.reverseChrono.sort((a, b) => b.timestamp - a.timestamp); - // if the most recent OneMAC event is an enable withdraw RAI Response, + // If the most recent OneMAC event is an enable withdraw RAI Response, // then set sub status to "Withdraw RAI Enabled" // and freeze status to pending if ( Array.isArray(putParams.Item?.reverseChrono) && - putParams.Item.reverseChrono.length > 0 && - putParams.Item.reverseChrono[0].currentStatus === - ONEMAC_STATUS.WITHDRAW_RAI_ENABLED + putParams.Item.reverseChrono.length > 0 ) { - putParams.Item.currentStatus = ONEMAC_STATUS.PENDING; - putParams.Item.subStatus = ONEMAC_STATUS.WITHDRAW_RAI_ENABLED; - } else { - console.log("setting sub status to null"); - putParams.Item.subStatus = null; - delete putParams.Item.subStatus; + // Find the first event that is not "Subsequent Documentation Uploaded" + const qualifyingEvent = putParams.Item.reverseChrono.find( + (event) => event.type !== "Subsequent Documentation Uploaded" + ); + + // Check if the found event qualifies for WITHDRAW_RAI_ENABLED + if ( + qualifyingEvent && + qualifyingEvent.currentStatus === ONEMAC_STATUS.WITHDRAW_RAI_ENABLED + ) { + putParams.Item.currentStatus = ONEMAC_STATUS.PENDING; + putParams.Item.subStatus = ONEMAC_STATUS.WITHDRAW_RAI_ENABLED; + } else { + console.log("setting sub status to null"); + putParams.Item.subStatus = null; + delete putParams.Item.subStatus; + } } adminChanges.sort((a, b) => b.changeTimestamp - a.changeTimestamp); diff --git a/services/one-stream/package/buildChipSpa.js b/services/one-stream/package/buildChipSpa.js index 4fdd50019..27e68ed28 100644 --- a/services/one-stream/package/buildChipSpa.js +++ b/services/one-stream/package/buildChipSpa.js @@ -1,9 +1,30 @@ import { chipSPA } from "cmscommonlib"; +import { + initialSubmissionType, + formalRAIResponseType, + packageType, + submitAction, + withdrawalRequestedAction, + subsequentSubmissionType, +} from "../lib/default-lib"; import { defaultEventMapping } from "../lib/default-lib"; import { buildAnyPackage } from "./buildAnyPackage"; const chipSPABuildConfig = { ...chipSPA, + eventTypeMap: { + submitchipspa: initialSubmissionType, + submitchipspasubsequent: subsequentSubmissionType, + submitchipsparai: formalRAIResponseType, + submitchipspawithdraw: packageType, + submitrairesponsewithdraw: formalRAIResponseType, + }, + eventActionMap: { + submitchipspa: submitAction, + submitchipsparai: submitAction, + submitchipspawithdraw: withdrawalRequestedAction, + submitrairesponsewithdraw: withdrawalRequestedAction, + }, eventMap: defaultEventMapping, }; diff --git a/services/one-stream/package/buildInitialWaiver.js b/services/one-stream/package/buildInitialWaiver.js index 49dc503db..df68baadc 100644 --- a/services/one-stream/package/buildInitialWaiver.js +++ b/services/one-stream/package/buildInitialWaiver.js @@ -1,9 +1,30 @@ import { initialWaiver } from "cmscommonlib"; +import { + initialSubmissionType, + subsequentSubmissionType, + formalRAIResponseType, + packageType, + submitAction, + withdrawalRequestedAction, +} from "../lib/default-lib"; import { defaultWaiverEventMapping } from "../lib/default-lib"; import { buildAnyPackage } from "./buildAnyPackage"; const initialWaiverBuildConfig = { ...initialWaiver, + eventTypeMap: { + submitwaivernew: initialSubmissionType, + submitwaivernewsubsequent: subsequentSubmissionType, + submitwaiverrai: formalRAIResponseType, + submitwaivernewwithdraw: packageType, + submitrairesponsewithdraw: formalRAIResponseType, + }, + eventActionMap: { + submitwaivernew: submitAction, + submitwaiverrai: submitAction, + submitwaivernewwithdraw: withdrawalRequestedAction, + submitrairesponsewithdraw: withdrawalRequestedAction, + }, eventMap: defaultWaiverEventMapping, }; diff --git a/services/one-stream/package/buildMedicaidSpa.js b/services/one-stream/package/buildMedicaidSpa.js index 27ceac3e2..dfde19ea0 100644 --- a/services/one-stream/package/buildMedicaidSpa.js +++ b/services/one-stream/package/buildMedicaidSpa.js @@ -1,9 +1,30 @@ import { medicaidSPA } from "cmscommonlib"; +import { + initialSubmissionType, + subsequentSubmissionType, + formalRAIResponseType, + packageType, + submitAction, + withdrawalRequestedAction, +} from "../lib/default-lib"; import { defaultEventMapping } from "../lib/default-lib"; import { buildAnyPackage } from "./buildAnyPackage"; const medicaidSPABuildConfig = { ...medicaidSPA, + eventTypeMap: { + submitmedicaidspa: initialSubmissionType, + submitmedicaidspasubsequent: subsequentSubmissionType, + submitmedicaidsparai: formalRAIResponseType, + submitmedicaidspawithdraw: packageType, + submitrairesponsewithdraw: formalRAIResponseType, + }, + eventActionMap: { + submitmedicaidspa: submitAction, + submitmedicaidsparai: submitAction, + submitmedicaidspawithdraw: withdrawalRequestedAction, + submitrairesponsewithdraw: withdrawalRequestedAction, + }, eventMap: defaultEventMapping, }; diff --git a/services/one-stream/package/buildWaiverAmendment.js b/services/one-stream/package/buildWaiverAmendment.js index 2a7f63405..a72ee623d 100644 --- a/services/one-stream/package/buildWaiverAmendment.js +++ b/services/one-stream/package/buildWaiverAmendment.js @@ -1,9 +1,30 @@ import { waiverAmendment } from "cmscommonlib"; +import { + initialSubmissionType, + formalRAIResponseType, + packageType, + submitAction, + withdrawalRequestedAction, + subsequentSubmissionType, +} from "../lib/default-lib"; import { defaultRnAWaiverEventMapping } from "../lib/default-lib"; import { buildAnyPackage } from "./buildAnyPackage"; const waiverAmendmentBuildConfig = { ...waiverAmendment, + eventTypeMap: { + submitwaiveramendment: initialSubmissionType, + submitwaiveramendmentsubsequent: subsequentSubmissionType, + submitwaiverrai: formalRAIResponseType, + submitwaiveramendmentwithdraw: packageType, + submitrairesponsewithdraw: formalRAIResponseType, + }, + eventActionMap: { + submitwaiveramendment: submitAction, + submitwaiverrai: submitAction, + submitwaiveramendmentwithdraw: withdrawalRequestedAction, + submitrairesponsewithdraw: withdrawalRequestedAction, + }, eventMap: defaultRnAWaiverEventMapping, }; diff --git a/services/one-stream/package/buildWaiverAppendixK.js b/services/one-stream/package/buildWaiverAppendixK.js index 3da35aeca..486721de4 100644 --- a/services/one-stream/package/buildWaiverAppendixK.js +++ b/services/one-stream/package/buildWaiverAppendixK.js @@ -1,5 +1,11 @@ import { waiverAppendixK } from "cmscommonlib"; import { + initialSubmissionType, + formalRAIResponseType, + packageType, + submitAction, + withdrawalRequestedAction, + subsequentSubmissionType, defaultRnAWaiverEventMapping, defaultRnAWaiverInitialSubmissionMap, } from "../lib/default-lib"; @@ -7,6 +13,19 @@ import { buildAnyPackage } from "./buildAnyPackage"; const waiverAppendixKBuildConfig = { ...waiverAppendixK, + eventTypeMap: { + submitwaiverappk: initialSubmissionType, + submitwaiverappksubsequent: subsequentSubmissionType, + submitwaiverappkrai: formalRAIResponseType, + submitwaiverappkwithdraw: packageType, + submitrairesponsewithdraw: formalRAIResponseType, + }, + eventActionMap: { + submitwaiverappk: submitAction, + submitwaiverappkrai: submitAction, + submitwaiverappkwithdraw: withdrawalRequestedAction, + submitrairesponsewithdraw: withdrawalRequestedAction, + }, eventMap: { ...defaultRnAWaiverEventMapping, submit: { diff --git a/services/one-stream/package/buildWaiverRenewal.js b/services/one-stream/package/buildWaiverRenewal.js index d8d5245dc..1d2159527 100644 --- a/services/one-stream/package/buildWaiverRenewal.js +++ b/services/one-stream/package/buildWaiverRenewal.js @@ -1,9 +1,30 @@ import { waiverRenewal } from "cmscommonlib"; +import { + initialSubmissionType, + formalRAIResponseType, + packageType, + submitAction, + withdrawalRequestedAction, + subsequentSubmissionType, +} from "../lib/default-lib"; import { defaultRnAWaiverEventMapping } from "../lib/default-lib"; import { buildAnyPackage } from "./buildAnyPackage"; const waiverRenewalBuildConfig = { ...waiverRenewal, + eventTypeMap: { + submitwaiverrenewal: initialSubmissionType, + submitwaiverrenewalsubsequent: subsequentSubmissionType, + submitwaiverrai: formalRAIResponseType, + submitwaiverrenewalwithdraw: packageType, + submitrairesponsewithdraw: formalRAIResponseType, + }, + eventActionMap: { + submitwaiverrenewal: submitAction, + submitwaiverrai: submitAction, + submitwaiverrenewalwithdraw: withdrawalRequestedAction, + submitrairesponsewithdraw: withdrawalRequestedAction, + }, eventMap: defaultRnAWaiverEventMapping, }; diff --git a/services/ui-src/.env b/services/ui-src/.env index f7e53468c..ce3cdb92f 100644 --- a/services/ui-src/.env +++ b/services/ui-src/.env @@ -1,6 +1,6 @@ SASS_PATH=node_modules API_REGION=us-east-1 -API_URL=placeholder +API_URL= http://localhost:3001/dev COGNITO_REGION=placeholder COGNITO_IDENTITY_POOL_ID=placeholder COGNITO_USER_POOL_ID=placeholder diff --git a/services/ui-src/src/Routes.tsx b/services/ui-src/src/Routes.tsx index 1ad2d9108..dc286fb97 100644 --- a/services/ui-src/src/Routes.tsx +++ b/services/ui-src/src/Routes.tsx @@ -62,6 +62,12 @@ import WaiverAmendmentBForm from "./page/waiver-amendment/WaiverAmendmentBForm"; import WithdrawRAIForm from "./page/withdraw-rai/WithdrawRAIForm"; import { clearTableStateStorageKeys } from "./utils/StorageKeys"; import EnableRaiWithdrawForm from "./page/enable-rai-withdraw/EnableRaiWithdrawForm"; +import MedicaidSPASubsequentSubmissionForm from "./page/medicaid-spa/MedicaidSPASubsequentSubmissionForm"; +import ChipSPASubsequentSubmissionForm from "./page/chip-spa/ChipSPASubsequentSubmissionForm"; +import InitialWaiverSubsequentSubmissionForm from "./page/initial-waiver/InitialWaiverSubsequentSubmissionForm"; +import WaiverRenewalSubsequentSubmissionForm from "./page/waiver-renewal/WaiverRenewalSubsequentSubmissionForm"; +import WaiverAmendmentSubsequentSubmissionForm from "./page/waiver-amendment/WaiverAmendmentSubsequentSubmissionForm"; +import WaiverAppKSubsequentSubmissionForm from "./page/waiver-appendix-k/WaiverAppKSubsequentSubmissionForm"; import DisableRaiWithdrawForm from "./page/disable-rai-withdraw/DisableRaiWithdrawForm"; type RouteSpec = { @@ -207,12 +213,37 @@ const ROUTE_LIST: RouteSpec[] = [ { path: ONEMAC_ROUTES.MEDICAID_SPA, component: MedicaidSpaForm }, { path: ONEMAC_ROUTES.CHIP_SPA, component: ChipSpaForm }, { path: ONEMAC_ROUTES.MEDICAID_SPA_RAI, component: MedicaidSPARAIForm }, - { path: ONEMAC_ROUTES.CHIP_SPA_RAI, component: CHIPSPARAIForm }, - { path: ONEMAC_ROUTES.CHIP_SPA_WITHDRAW, component: ChipSpaWithdraw }, + { + path: ONEMAC_ROUTES.MEDICAID_SPA_SUBSEQUENT_SUBMSISSION, + component: MedicaidSPASubsequentSubmissionForm, + }, + { + path: ONEMAC_ROUTES.INITIAL_WAIVER_SUBSEQUENT_SUBMSISSION, + component: InitialWaiverSubsequentSubmissionForm, + }, + { + path: ONEMAC_ROUTES.WAIVER_RENEWAL_SUBSEQUENT_SUBMSISSION, + component: WaiverRenewalSubsequentSubmissionForm, + }, + { + path: ONEMAC_ROUTES.WAIVER_AMENDMENT_SUBSEQUENT_SUBMSISSION, + component: WaiverAmendmentSubsequentSubmissionForm, + }, + { + path: ONEMAC_ROUTES.WAIVER_APP_K_SUBSEQUENT_SUBMSISSION, + component: WaiverAppKSubsequentSubmissionForm, + }, { path: ONEMAC_ROUTES.MEDICAID_SPA_WITHDRAW, component: MedicaidSpaWithdraw, }, + { path: ONEMAC_ROUTES.CHIP_SPA_RAI, component: CHIPSPARAIForm }, + { path: ONEMAC_ROUTES.CHIP_SPA_WITHDRAW, component: ChipSpaWithdraw }, + { + path: ONEMAC_ROUTES.CHIP_SPA_SUBSEQUENT_SUBMSISSION, + component: ChipSPASubsequentSubmissionForm, + }, + { path: ONEMAC_ROUTES.WAIVER_RAI, component: WaiverRAIForm }, { path: ONEMAC_ROUTES.INITIAL_WAIVER_B_4, component: InitialWaiverB4Form }, { diff --git a/services/ui-src/src/containers/PackageList.js b/services/ui-src/src/containers/PackageList.js index e9fe83c58..fc23ff21d 100644 --- a/services/ui-src/src/containers/PackageList.js +++ b/services/ui-src/src/containers/PackageList.js @@ -48,6 +48,7 @@ export const COLUMN_ID = { TYPE: "componentType", STATUS: "packageStatus", SUBMISSION_TIMESTAMP: "submissionTimestamp", + ACTIVITY_TIMESTAMP: "lastActivityTimestamp", FINAL_DISPOSITION_DATE: "finalDispositionDate", LATEST_RAI_TIMESTAMP: "latestRaiResponseTimestamp", CPOC_NAME: "cpocName", @@ -241,6 +242,7 @@ const PackageList = () => { const exportTransformMap = { submissionTimestamp: renderDate, latestRaiResponseTimestamp: renderDate, + lastActivityTimestamp: renderDate, }; const columns = useMemo( @@ -288,6 +290,14 @@ const PackageList = () => { filter: CustomFilterTypes.DateRange, Filter: CustomFilterUi.DateRangeInPast, }, + { + Header: "Latest Package Activity", + accessor: COLUMN_ID.ACTIVITY_TIMESTAMP, + Cell: renderDate, + disableFilters: false, + filter: CustomFilterTypes.DateRange, + Filter: CustomFilterUi.DateRangeInPast, + }, { Header: "Final Disposition", accessor: COLUMN_ID.FINAL_DISPOSITION_DATE, diff --git a/services/ui-src/src/domain-types.ts b/services/ui-src/src/domain-types.ts index d29e58b99..99e406352 100644 --- a/services/ui-src/src/domain-types.ts +++ b/services/ui-src/src/domain-types.ts @@ -71,5 +71,6 @@ export type FormLocationState = { parentType?: string; componentId?: string; formSource?: FORM_SOURCE; + waiverAuthority?: any; temporaryExtensionType?: string; }; diff --git a/services/ui-src/src/index.scss b/services/ui-src/src/index.scss index 2b99d50f9..bb7613fff 100644 --- a/services/ui-src/src/index.scss +++ b/services/ui-src/src/index.scss @@ -383,6 +383,7 @@ ul { color: red; } form label.addl-info-required span:first-of-type:after, +form h3.required:after, form label.required:after { color: red; content: "*"; diff --git a/services/ui-src/src/libs/actionLib.js b/services/ui-src/src/libs/actionLib.js index 3b7213654..7aba4bfef 100644 --- a/services/ui-src/src/libs/actionLib.js +++ b/services/ui-src/src/libs/actionLib.js @@ -6,6 +6,7 @@ import Withdraw from "../page/action/Withdraw"; import WithdrawRAI from "../page/action/WithdrawRAI"; import AddAmendment from "../page/action/AddAmendment"; import EnableWithdraw from "../page/action/EnableWithdraw"; +import SubsequentSubmission from "../page/action/SubsequentSubmission"; import DisableWithdraw from "../page/action/DisableWithdraw"; export const actionComponent = { @@ -27,6 +28,12 @@ export const actionComponent = { [Workflow.PACKAGE_ACTION.ENABLE_RAI_WITHDRAWAL]: (theComponent) => ( ), + [Workflow.PACKAGE_ACTION.SUBSEQUENT_SUBMISSION]: ( + theComponent, + formSource + ) => ( + + ), [Workflow.PACKAGE_ACTION.DISABLE_RAI_WITHDRAWAL]: (theComponent) => ( ), diff --git a/services/ui-src/src/libs/alertLib.ts b/services/ui-src/src/libs/alertLib.ts index e64d4d2f7..975409a6d 100644 --- a/services/ui-src/src/libs/alertLib.ts +++ b/services/ui-src/src/libs/alertLib.ts @@ -37,6 +37,12 @@ export const ALERTS_MSG: Record< heading: "Submission Completed", text: "Your submission has been received.", }, + // Success + SUBSEQUENT_SUBMISSION_SUCCESS: { + type: ALERT_TYPES.SUCCESS, + heading: "Documents submitted", + text: "CMS reviewers will follow up by email if additional information is needed.", + }, WITHDRAW_REQUESTED: { type: ALERT_TYPES.SUCCESS, @@ -222,6 +228,8 @@ export const alertCodeAlerts = { [RESPONSE_CODE.NONE]: ALERTS_MSG.NONE, [RESPONSE_CODE.LOGIN_ERROR]: ALERTS_MSG.LOGIN_ERROR, [RESPONSE_CODE.SUCCESSFULLY_SUBMITTED]: ALERTS_MSG.SUBMISSION_SUCCESS, + [RESPONSE_CODE.SUCCESSFULLY_SUBMITTED_SUBSEQUENT_SUBMISSION]: + ALERTS_MSG.SUBSEQUENT_SUBMISSION_SUCCESS, [RESPONSE_CODE.WITHDRAW_REQUESTED]: ALERTS_MSG.WITHDRAW_REQUESTED, [RESPONSE_CODE.WITHDRAW_RAI_REQUESTED]: ALERTS_MSG.WITHDRAW_RAI_RESPONSE_SUCCESS, diff --git a/services/ui-src/src/libs/detailLib.ts b/services/ui-src/src/libs/detailLib.ts index a70f69650..2b173dd63 100644 --- a/services/ui-src/src/libs/detailLib.ts +++ b/services/ui-src/src/libs/detailLib.ts @@ -29,6 +29,11 @@ export const submissionIdDefault: AttributeDetail = { fieldName: "componentId", default: null, }; +export const latestActivityDefault: AttributeDetail = { + heading: "Latest Package Activity", + fieldName: "lastActivityNice", + default: "-- --", +}; export const submissionDateDefault: AttributeDetail = { heading: "Initial Submission Date", fieldName: "submissionDateNice", @@ -131,7 +136,7 @@ export const defaultPackageOverviewLabel: string = "Package Overview"; export const defaultDetailSectionItems = [ submissionIdDefault, - blankBox, // empty space + latestActivityDefault, territoryDefault, typeDefault, submissionDateDefault, @@ -146,6 +151,8 @@ export const defaultDetailSectionItems = [ ]; export const defaultWaiverDetailSectionItems = [ + submissionIdDefault, + latestActivityDefault, waiverAuthorityDefault, blankBox, // empty space territoryDefault, diff --git a/services/ui-src/src/libs/formLib.tsx b/services/ui-src/src/libs/formLib.tsx index 6c48b0464..ad087b118 100644 --- a/services/ui-src/src/libs/formLib.tsx +++ b/services/ui-src/src/libs/formLib.tsx @@ -24,6 +24,7 @@ export type OneMACFormConfig = { parentTypeNice?: string; attachmentsTitle?: string; attachmentIntroJSX: JSX.Element; + atLeastOneAttachmentRequired?: boolean; addlInfoTitle?: string; addlInfoText?: string | React.ReactNode; addlInfoRequired?: boolean; @@ -84,6 +85,10 @@ export const RequiredAttachmentSpan = () => (

); +export const AtLeastOneAttachmentSpan = () => ( +

At least one attachment is required to submit.

+); + export const defaultAttachmentInstructionsJSX = ( anchoredFAQRoute: string = ROUTES.FAQ ) => ( @@ -94,6 +99,16 @@ export const defaultAttachmentInstructionsJSX = ( ); +export const defaultSubsequentAttachmentInstructionsJSX = ( + anchoredFAQRoute: string = ROUTES.FAQ +) => ( + <> + + + + +); + const defaultSubmitInstructionsJSX = (

@@ -117,6 +132,12 @@ export const defaultOneMACFormConfig = { submitInstructionsJSX: defaultSubmitInstructionsJSX, }; +export const defaultSubsequentSubmissionFormConfig = { + ...defaultOneMACFormConfig, + addlInfoTitle: "Reason for subsequent submission", + addlInfoText: "Explain why additional documents are being submitted.", +}; + export const defaultWaiverAuthority = [ { label: "-- select a waiver authority --", value: "" }, ]; @@ -135,6 +156,40 @@ export const defaultConfirmSubmitRAI = { confirmSubmitMessage: defaultConfirmSubmitMessageRAI, }; +export const defaultSubsequentSubmissionIntroJSX = ( + <> +

+ * + indicates required field. +

+

+ Provide revised or additional documentation for your submission. Once you + submit this form, a confirmation email is sent to you and to CMS. CMS will + use this content to review your package, and you will not be able to edit + this form. If CMS needs any additional information, they will follow up by + email. + If you leave this page, you will lose your progress on this form. +

+ +); + +export const defaultConfirmSubmitMessageSubsequentSubmission = ( +

+ By Clicking Yes, Submit, you are submitting your official formal RAI + Response to start the 90 day clock review process. +

+); + +export const defaultConfirmSubsequentSubmission: ConfirmSubmitType = { + confirmSubmitHeading: "OneMAC only for document submission", + confirmSubmitMessage: ( +

+ States and CMS reviewers will communicate about the submission through + email. +

+ ), +}; + export const defaultConfirmSubmitHeadingWithdraw = (packageType: string) => `Withdraw ${packageType} Package?`; export const defaultConfirmSubmitMessageWithdraw = ( diff --git a/services/ui-src/src/page/DetailView.tsx b/services/ui-src/src/page/DetailView.tsx index 2c1822d78..6944f3f3a 100644 --- a/services/ui-src/src/page/DetailView.tsx +++ b/services/ui-src/src/page/DetailView.tsx @@ -41,6 +41,8 @@ export type ComponentDetail = { currentStatus: string; attachments: any[]; submissionTimestamp: Date; + lastActivityTimestamp?: Date; + lastActivityNice?: string; clockEndTimestamp: Date; proposedEffectiveDate: string; effectiveDateTimestamp: Date; @@ -124,6 +126,11 @@ const DetailView: React.FC<{ pageConfig: OneMACDetail }> = ({ pageConfig }) => { fetchedDetail.latestRaiResponseTimestamp ); } + if (fetchedDetail.lastActivityTimestamp) { + fetchedDetail.lastActivityNice = formatDate( + fetchedDetail.lastActivityTimestamp + ); + } if (fetchedDetail.proposedEffectiveDate) { if ( fetchedDetail.proposedEffectiveDate === "-- --" || diff --git a/services/ui-src/src/page/OneMACForm.tsx b/services/ui-src/src/page/OneMACForm.tsx index 57f80ee7b..57af0d241 100644 --- a/services/ui-src/src/page/OneMACForm.tsx +++ b/services/ui-src/src/page/OneMACForm.tsx @@ -113,15 +113,18 @@ const OneMACForm: React.FC<{ formConfig: OneMACFormConfig }> = ({ location: Location, formConfig: OneMACFormConfig ) { + console.log("state", location.state); if ( location.state?.parentId && location.state?.parentType && location.state?.formSource === FORM_SOURCE.DETAIL ) { + console.log("detail landing page"); return `${TYPE_TO_DETAIL_ROUTE[location.state?.parentType]}/${ location.state?.parentId }`; } + console.log("form landing page"); return formConfig.landingPage; } @@ -546,14 +549,24 @@ const OneMACForm: React.FC<{ formConfig: OneMACFormConfig }> = ({ {(formConfig?.requiredAttachments.length > 0 || formConfig.optionalAttachments.length > 0) && ( <> -

{formConfig?.attachmentsTitle ?? "Attachments"}

+

+ {formConfig?.attachmentsTitle ?? "Attachments"} +

+ {formConfig.attachmentIntroJSX} diff --git a/services/ui-src/src/page/action/SubsequentSubmission.js b/services/ui-src/src/page/action/SubsequentSubmission.js new file mode 100644 index 000000000..85162a035 --- /dev/null +++ b/services/ui-src/src/page/action/SubsequentSubmission.js @@ -0,0 +1,41 @@ +import React from "react"; +import { Link } from "react-router-dom"; +import { Workflow } from "cmscommonlib"; + +import { ONEMAC_ROUTES } from "cmscommonlib"; + +const submissionLink = { + [Workflow.ONEMAC_TYPE.MEDICAID_SPA]: + ONEMAC_ROUTES.MEDICAID_SPA_SUBSEQUENT_SUBMSISSION, + [Workflow.ONEMAC_TYPE.CHIP_SPA]: + ONEMAC_ROUTES.CHIP_SPA_SUBSEQUENT_SUBMSISSION, + [Workflow.ONEMAC_TYPE.WAIVER_INITIAL]: + ONEMAC_ROUTES.INITIAL_WAIVER_SUBSEQUENT_SUBMSISSION, + [Workflow.ONEMAC_TYPE.WAIVER_RENEWAL]: + ONEMAC_ROUTES.WAIVER_RENEWAL_SUBSEQUENT_SUBMSISSION, + [Workflow.ONEMAC_TYPE.WAIVER_AMENDMENT]: + ONEMAC_ROUTES.WAIVER_AMENDMENT_SUBSEQUENT_SUBMSISSION, + [Workflow.ONEMAC_TYPE.WAIVER_APP_K]: + ONEMAC_ROUTES.WAIVER_APP_K_SUBSEQUENT_SUBMSISSION, +}; + +export default function SubsequentSubmission({ theComponent, formSource }) { + return ( + + {Workflow.PACKAGE_ACTION.SUBSEQUENT_SUBMISSION} + + ); +} diff --git a/services/ui-src/src/page/chip-spa/ChipSPASubsequentSubmissionForm.test.js b/services/ui-src/src/page/chip-spa/ChipSPASubsequentSubmissionForm.test.js new file mode 100644 index 000000000..5482608be --- /dev/null +++ b/services/ui-src/src/page/chip-spa/ChipSPASubsequentSubmissionForm.test.js @@ -0,0 +1,52 @@ +import React from "react"; +import { render, screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { createMemoryHistory } from "history"; +import { Router } from "react-router-dom"; +import { stateSubmitterInitialAuthState } from "../../libs/testDataAppContext"; + +import { ONEMAC_ROUTES } from "cmscommonlib"; +import { AppContext } from "../../libs/contextLib"; +import ChipSPASubsequentSubmissionForm from "./ChipSPASubsequentSubmissionForm"; + +jest.mock("../../utils/PackageApi"); + +window.HTMLElement.prototype.scrollIntoView = jest.fn(); +window.scrollTo = jest.fn(); + +describe("Chip SPA Subsequent Submission Form", () => { + let history; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it("has the submit button disabled on initial load", async () => { + history = createMemoryHistory(); + history.push(ONEMAC_ROUTES.CHIP_SPA_SUBSEQUENT_SUBMSISSION, { + parentId: "MD", + parentType: "chipspa", + componentId: "MD", + formSource: "detail", + }); + + const handleSubmit = jest.fn(); + + render( + + + + + + ); + + const submitButtonEl = screen.getByText("Submit"); + + userEvent.click(submitButtonEl); + expect(handleSubmit).not.toBeCalled(); + }); +}); diff --git a/services/ui-src/src/page/chip-spa/ChipSPASubsequentSubmissionForm.tsx b/services/ui-src/src/page/chip-spa/ChipSPASubsequentSubmissionForm.tsx new file mode 100644 index 000000000..dd10362ee --- /dev/null +++ b/services/ui-src/src/page/chip-spa/ChipSPASubsequentSubmissionForm.tsx @@ -0,0 +1,37 @@ +import React, { FC } from "react"; +import OneMACForm from "../OneMACForm"; +import { + defaultConfirmSubsequentSubmission, + defaultSubsequentAttachmentInstructionsJSX, + defaultSubsequentSubmissionFormConfig, + defaultSubsequentSubmissionIntroJSX, + OneMACFormConfig, +} from "../../libs/formLib"; +import { + ONEMAC_ROUTES, + ROUTES, + chipSPASubsequentSubmission, +} from "cmscommonlib"; + +export const chipSPASubsequentSubmissionFormInfo: OneMACFormConfig = { + ...defaultSubsequentSubmissionFormConfig, + ...chipSPASubsequentSubmission, + pageTitle: "Upload Subsequent CHIP SPA Documentation", + detailsHeader: "CHIP SPA Subsequent Submission", + landingPage: ONEMAC_ROUTES.PACKAGE_LIST_SPA, + confirmSubmit: defaultConfirmSubsequentSubmission, + validateParentAPI: "validateParentOfAny", + introJSX: defaultSubsequentSubmissionIntroJSX, + attachmentIntroJSX: defaultSubsequentAttachmentInstructionsJSX( + ROUTES.FAQ_ATTACHMENTS_CHIP_SPA + ), + attachmentsTitle: "Subsequent CHIP SPA Documents", + addlInfoRequired: true, + atLeastOneAttachmentRequired: true, +}; + +const ChipSPASubsequentSubmissionForm: FC = () => { + return ; +}; + +export default ChipSPASubsequentSubmissionForm; diff --git a/services/ui-src/src/page/initial-waiver/InitialWaiverSubsequentSubmissionForm.test.js b/services/ui-src/src/page/initial-waiver/InitialWaiverSubsequentSubmissionForm.test.js new file mode 100644 index 000000000..a9ea6b7fa --- /dev/null +++ b/services/ui-src/src/page/initial-waiver/InitialWaiverSubsequentSubmissionForm.test.js @@ -0,0 +1,86 @@ +import React from "react"; +import { render, screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { createMemoryHistory } from "history"; +import { Router } from "react-router-dom"; +import { stateSubmitterInitialAuthState } from "../../libs/testDataAppContext"; + +import { ONEMAC_ROUTES, waiverAuthorityB4 } from "cmscommonlib"; +import { AppContext } from "../../libs/contextLib"; +import InitialWaiverSubsequentSubmissionForm, { + initialWaiverB4SubsequentSubmissionFormInfo, +} from "./InitialWaiverSubsequentSubmissionForm"; +import { waiverAuthorityB } from "cmscommonlib"; +import OneMACForm from "../OneMACForm"; + +jest.mock("../../utils/PackageApi"); + +window.HTMLElement.prototype.scrollIntoView = jest.fn(); +window.scrollTo = jest.fn(); + +describe("1915(b) Initial Waiver Subsequent Submission Form", () => { + let history; + + beforeEach(() => { + jest.clearAllMocks(); + jest.mock("../../utils/PackageApi"); + }); + + it("has the submit button disabled on initial load", async () => { + history = createMemoryHistory(); + history.push(ONEMAC_ROUTES.INITIAL_WAIVER_SUBSEQUENT_SUBMSISSION, { + parentId: "MD", + parentType: "waivernew", + componentId: "MD", + formSource: "detail", + waiverAuthority: waiverAuthorityB.value, + }); + + const handleSubmit = jest.fn(); + + render( + + + + + + ); + + const submitButtonEl = screen.getByText("Submit"); + + userEvent.click(submitButtonEl); + expect(handleSubmit).not.toBeCalled(); + }); + + it("loads B4 config based on waiver authority", async () => { + history = createMemoryHistory(); + history.push(ONEMAC_ROUTES.INITIAL_WAIVER_SUBSEQUENT_SUBMSISSION, { + parentId: "MD", + parentType: "waivernew", + componentId: "MD", + formSource: "detail", + waiverAuthority: waiverAuthorityB4.value, + }); + + render( + + + + + + ); + + // expect(MockedOneMACForm).toHaveBeenCalledWith( + // { formConfig: initialWaiverB4SubsequentSubmissionFormInfo }, + // expect.anything() + // ); + }); +}); diff --git a/services/ui-src/src/page/initial-waiver/InitialWaiverSubsequentSubmissionForm.tsx b/services/ui-src/src/page/initial-waiver/InitialWaiverSubsequentSubmissionForm.tsx new file mode 100644 index 000000000..0d9e01090 --- /dev/null +++ b/services/ui-src/src/page/initial-waiver/InitialWaiverSubsequentSubmissionForm.tsx @@ -0,0 +1,61 @@ +import React, { FC } from "react"; +import OneMACForm from "../OneMACForm"; +import { + defaultConfirmSubsequentSubmission, + defaultSubsequentAttachmentInstructionsJSX, + defaultSubsequentSubmissionFormConfig, + defaultSubsequentSubmissionIntroJSX, + OneMACFormConfig, +} from "../../libs/formLib"; +import { + ONEMAC_ROUTES, + ROUTES, + initialWaiverSubsequentSubmission, + initialWaiverB4SubsequentSubmission, + initialWaiverBSubsequentSubmission, + waiverAuthorityB, + waiverAuthorityB4, +} from "cmscommonlib"; +import { FormLocationState } from "../../domain-types"; +import { useLocation } from "react-router-dom"; + +export const initialWaiverSubsequentSubmissionFormInfo: OneMACFormConfig = { + ...defaultSubsequentSubmissionFormConfig, + ...initialWaiverSubsequentSubmission, + pageTitle: "Upload Subsequent Waiver Documentation", + detailsHeader: "Initial Waiver Subsequent Submission", + landingPage: ONEMAC_ROUTES.PACKAGE_LIST_WAIVER, + confirmSubmit: defaultConfirmSubsequentSubmission, + validateParentAPI: "validateParentOfAny", + introJSX: defaultSubsequentSubmissionIntroJSX, + attachmentIntroJSX: defaultSubsequentAttachmentInstructionsJSX( + ROUTES.FAQ_ATTACHMENTS_WAIVER_B + ), + attachmentsTitle: "Subsequent Initial Waiver Documents", + addlInfoRequired: true, + atLeastOneAttachmentRequired: true, +}; + +export const initialWaiverB4SubsequentSubmissionFormInfo = { + ...initialWaiverSubsequentSubmissionFormInfo, + ...initialWaiverB4SubsequentSubmission, +}; + +export const initialWaiverBSubsequentSubmissionFormInfo = { + ...initialWaiverSubsequentSubmissionFormInfo, + ...initialWaiverBSubsequentSubmission, +}; + +const InitialWaiverSubsequentSubmissionForm: FC = () => { + let formConfig = initialWaiverSubsequentSubmissionFormInfo; + const location = useLocation(); + + if (location.state?.waiverAuthority === waiverAuthorityB.value) { + formConfig = initialWaiverBSubsequentSubmissionFormInfo; + } else if (location.state?.waiverAuthority === waiverAuthorityB4.value) { + formConfig = initialWaiverB4SubsequentSubmissionFormInfo; + } + return ; +}; + +export default InitialWaiverSubsequentSubmissionForm; diff --git a/services/ui-src/src/page/medicaid-spa/MedicaidSPADetail.test.js b/services/ui-src/src/page/medicaid-spa/MedicaidSPADetail.test.js index 506ce20ce..5cf7134b2 100644 --- a/services/ui-src/src/page/medicaid-spa/MedicaidSPADetail.test.js +++ b/services/ui-src/src/page/medicaid-spa/MedicaidSPADetail.test.js @@ -57,6 +57,7 @@ const testDetail = { GSI1sk: "MI-13-1122", additionalInformation: "This is just a test", submissionTimestamp: 1639696185888, + lastActivityTimestamp: 1639696185888, GSI1pk: "OneMAC#spa", packageId: "MI-13-1122", submitterEmail: "statesubmitter@nightwatch.test", diff --git a/services/ui-src/src/page/medicaid-spa/MedicaidSPASubsequentSubmissionForm.test.js b/services/ui-src/src/page/medicaid-spa/MedicaidSPASubsequentSubmissionForm.test.js new file mode 100644 index 000000000..5be5eb843 --- /dev/null +++ b/services/ui-src/src/page/medicaid-spa/MedicaidSPASubsequentSubmissionForm.test.js @@ -0,0 +1,52 @@ +import React from "react"; +import { render, screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { createMemoryHistory } from "history"; +import { Router } from "react-router-dom"; +import { stateSubmitterInitialAuthState } from "../../libs/testDataAppContext"; + +import { ONEMAC_ROUTES } from "cmscommonlib"; +import { AppContext } from "../../libs/contextLib"; +import MedicaidSPASubsequentSubmissionForm from "./MedicaidSPASubsequentSubmissionForm"; + +jest.mock("../../utils/PackageApi"); + +window.HTMLElement.prototype.scrollIntoView = jest.fn(); +window.scrollTo = jest.fn(); + +describe("Medicaid SPA Subsequent Submission Form", () => { + let history; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it("has the submit button disabled on initial load", async () => { + history = createMemoryHistory(); + history.push(ONEMAC_ROUTES.MEDICAID_SPA_SUBSEQUENT_SUBMSISSION, { + parentId: "MD", + parentType: "medicaidspa", + componentId: "MD", + formSource: "detail", + }); + + const handleSubmit = jest.fn(); + + render( + + + + + + ); + + const submitButtonEl = screen.getByText("Submit"); + + userEvent.click(submitButtonEl); + expect(handleSubmit).not.toBeCalled(); + }); +}); diff --git a/services/ui-src/src/page/medicaid-spa/MedicaidSPASubsequentSubmissionForm.tsx b/services/ui-src/src/page/medicaid-spa/MedicaidSPASubsequentSubmissionForm.tsx new file mode 100644 index 000000000..c9cca11f6 --- /dev/null +++ b/services/ui-src/src/page/medicaid-spa/MedicaidSPASubsequentSubmissionForm.tsx @@ -0,0 +1,37 @@ +import React, { FC } from "react"; +import OneMACForm from "../OneMACForm"; +import { + defaultSubsequentSubmissionFormConfig, + defaultConfirmSubsequentSubmission, + defaultSubsequentAttachmentInstructionsJSX, + defaultSubsequentSubmissionIntroJSX, + OneMACFormConfig, +} from "../../libs/formLib"; +import { + ONEMAC_ROUTES, + ROUTES, + medicaidSPASubsequentSubmission, +} from "cmscommonlib"; + +export const medicaidSPASubsequentSubmissionFormInfo: OneMACFormConfig = { + ...defaultSubsequentSubmissionFormConfig, + ...medicaidSPASubsequentSubmission, + pageTitle: "Upload Subsequent Medicaid SPA Documentation", + detailsHeader: "Medicaid SPA Subsequent Submission", + landingPage: ONEMAC_ROUTES.PACKAGE_LIST_SPA, + confirmSubmit: defaultConfirmSubsequentSubmission, + validateParentAPI: "validateParentOfAny", + introJSX: defaultSubsequentSubmissionIntroJSX, + attachmentIntroJSX: defaultSubsequentAttachmentInstructionsJSX( + ROUTES.FAQ_ATTACHMENTS_MED_SPA + ), + attachmentsTitle: "Subsequent Medicaid SPA Documents", + addlInfoRequired: true, + atLeastOneAttachmentRequired: true, +}; + +const MedicaidSPASubsequentSubmissionForm: FC = () => { + return ; +}; + +export default MedicaidSPASubsequentSubmissionForm; diff --git a/services/ui-src/src/page/section/AdditionalInfoSection.tsx b/services/ui-src/src/page/section/AdditionalInfoSection.tsx index cfadea028..75578a42f 100644 --- a/services/ui-src/src/page/section/AdditionalInfoSection.tsx +++ b/services/ui-src/src/page/section/AdditionalInfoSection.tsx @@ -3,18 +3,27 @@ import React, { FC } from "react"; export const AdditionalInfoSection: FC<{ additionalInfo: string; + isSubSub?: boolean; id?: string; -}> = ({ additionalInfo, id = "addl-info-base" }) => { +}> = ({ additionalInfo, isSubSub, id = "addl-info-base" }) => { return ( <>
-

Additional Information

+

+ {isSubSub + ? "Reason for subsequent submission" + : "Additional Information"} +

+ {/* for sub subs' reasons MUST be submitted but just in case I added this switch */} {additionalInfo || ( - No Additional Information has been submitted. + + No {isSubSub ? "Reason" : "Additional Information"} has been + submitted. + )}
diff --git a/services/ui-src/src/page/section/DetailSection.tsx b/services/ui-src/src/page/section/DetailSection.tsx index 379d3705c..bce3d2b03 100644 --- a/services/ui-src/src/page/section/DetailSection.tsx +++ b/services/ui-src/src/page/section/DetailSection.tsx @@ -157,6 +157,7 @@ export const DetailSection = ({ ); const actions = detail.actions; + const subSubType = "Subsequent Documentation Uploaded"; return ( <> @@ -266,6 +267,7 @@ export const DetailSection = ({ )} diff --git a/services/ui-src/src/page/temporary-extension/TemporaryExtensionDetail.tsx b/services/ui-src/src/page/temporary-extension/TemporaryExtensionDetail.tsx index 84276d292..57259a858 100644 --- a/services/ui-src/src/page/temporary-extension/TemporaryExtensionDetail.tsx +++ b/services/ui-src/src/page/temporary-extension/TemporaryExtensionDetail.tsx @@ -5,6 +5,7 @@ import { defaultDetail, submissionDateDefault, AttributeDetail, + latestActivityDefault, } from "../../libs/detailLib"; import { waiverTemporaryExtension } from "cmscommonlib"; @@ -37,6 +38,7 @@ export const waiverTemporaryExtensionDetail: OneMACDetail = { parentIdDetail, temporaryExtensionTypeDetail, submissionDateDefault, + latestActivityDefault, ], }; diff --git a/services/ui-src/src/page/waiver-amendment/WaiverAmendmentSubsequentSubmissionForm.test.js b/services/ui-src/src/page/waiver-amendment/WaiverAmendmentSubsequentSubmissionForm.test.js new file mode 100644 index 000000000..7288a46a3 --- /dev/null +++ b/services/ui-src/src/page/waiver-amendment/WaiverAmendmentSubsequentSubmissionForm.test.js @@ -0,0 +1,89 @@ +import React from "react"; +import { render, screen, waitFor } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { createMemoryHistory } from "history"; +import { Router } from "react-router-dom"; +import { stateSubmitterInitialAuthState } from "../../libs/testDataAppContext"; + +import { ONEMAC_ROUTES, waiverAuthorityB4 } from "cmscommonlib"; +import { AppContext } from "../../libs/contextLib"; +import WaiverAmendmentSubsequentSubmissionForm, { + waiverAmendmentB4SubsequentSubmissionFormInfo, +} from "./WaiverAmendmentSubsequentSubmissionForm"; +import { waiverAuthorityB } from "cmscommonlib"; +import OneMACForm from "../OneMACForm"; + +jest.mock("../../utils/PackageApi"); + +window.HTMLElement.prototype.scrollIntoView = jest.fn(); +window.scrollTo = jest.fn(); + +describe("1915(b) Waiver Amendment Subsequent Submission Form", () => { + let history; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it("has the submit button disabled on initial load", async () => { + history = createMemoryHistory(); + history.push(ONEMAC_ROUTES.WAIVER_AMENDMENT_SUBSEQUENT_SUBMSISSION, { + parentId: "MD", + parentType: "waiveramendment", + componentId: "MD", + formSource: "detail", + waiverAuthority: waiverAuthorityB.value, + }); + + const handleSubmit = jest.fn(); + + render( + + + + + + ); + + const submitButtonEl = screen.getByText("Submit"); + + userEvent.click(submitButtonEl); + expect(handleSubmit).not.toBeCalled(); + }); + + it("loads proper config based on waiver authority", async () => { + history = createMemoryHistory(); + history.push(ONEMAC_ROUTES.WAIVER_AMENDMENT_SUBSEQUENT_SUBMSISSION, { + parentId: "MD", + parentType: "waiveramendment", + componentId: "MD", + formSource: "detail", + waiverAuthority: waiverAuthorityB4.value, + }); + const handleSubmit = jest.fn(); + // jest.doMock("../OneMACForm", () => { + // return jest.fn(() => null); + // }); + + render( + + + + + + ); + + // expect(OneMACForm).toHaveBeenCalledWith( + // { formConfig: waiverAmendmentB4SubsequentSubmissionFormInfo }, // Check if OneMACForm was called with the expected formConfig prop + // expect.anything() // Ignore other props and React internals + // ); + }); +}); diff --git a/services/ui-src/src/page/waiver-amendment/WaiverAmendmentSubsequentSubmissionForm.tsx b/services/ui-src/src/page/waiver-amendment/WaiverAmendmentSubsequentSubmissionForm.tsx new file mode 100644 index 000000000..15c3a96fd --- /dev/null +++ b/services/ui-src/src/page/waiver-amendment/WaiverAmendmentSubsequentSubmissionForm.tsx @@ -0,0 +1,62 @@ +import React, { FC } from "react"; +import OneMACForm from "../OneMACForm"; +import { + defaultConfirmSubsequentSubmission, + defaultSubsequentAttachmentInstructionsJSX, + defaultSubsequentSubmissionFormConfig, + defaultSubsequentSubmissionIntroJSX, + OneMACFormConfig, +} from "../../libs/formLib"; +import { + ONEMAC_ROUTES, + ROUTES, + waiverAmendmentSubsequentSubmission, + waiverAmendmentB4SubsequentSubmission, + waiverAmendmentBSubsequentSubmission, + waiverAuthorityB, + waiverAuthorityB4, +} from "cmscommonlib"; +import { FormLocationState } from "../../domain-types"; +import { useLocation } from "react-router-dom"; + +export const waiverAmendmentSubsequentSubmissionFormInfo: OneMACFormConfig = { + ...defaultSubsequentSubmissionFormConfig, + ...waiverAmendmentSubsequentSubmission, + pageTitle: "Upload Subsequent Waiver Amendment Documentation", + detailsHeader: "Waiver Amendment Subsequent Submission", + landingPage: ONEMAC_ROUTES.PACKAGE_LIST_WAIVER, + confirmSubmit: defaultConfirmSubsequentSubmission, + validateParentAPI: "validateParentOfWaiverAmendment", + introJSX: defaultSubsequentSubmissionIntroJSX, + attachmentIntroJSX: defaultSubsequentAttachmentInstructionsJSX( + ROUTES.FAQ_ATTACHMENTS_WAIVER_B + ), + attachmentsTitle: "Subsequent Waiver Amendment Documents", + addlInfoRequired: true, + atLeastOneAttachmentRequired: true, +}; + +export const waiverAmendmentB4SubsequentSubmissionFormInfo = { + ...waiverAmendmentSubsequentSubmissionFormInfo, + ...waiverAmendmentB4SubsequentSubmission, +}; + +export const waiverAmendmentBSubsequentSubmissionFormInfo = { + ...waiverAmendmentSubsequentSubmissionFormInfo, + ...waiverAmendmentBSubsequentSubmission, +}; + +const WaiverAmendmentSubsequentSubmissionForm: FC = () => { + let formConfig = waiverAmendmentSubsequentSubmissionFormInfo; + const location = useLocation(); + + if (location.state?.waiverAuthority === waiverAuthorityB.value) { + formConfig = waiverAmendmentBSubsequentSubmissionFormInfo; + } else if (location.state?.waiverAuthority === waiverAuthorityB4.value) { + formConfig = waiverAmendmentB4SubsequentSubmissionFormInfo; + } + + return ; +}; + +export default WaiverAmendmentSubsequentSubmissionForm; diff --git a/services/ui-src/src/page/waiver-appendix-k/WaiverAppKSubsequentSubmissionForm.test.js b/services/ui-src/src/page/waiver-appendix-k/WaiverAppKSubsequentSubmissionForm.test.js new file mode 100644 index 000000000..6248a3a8a --- /dev/null +++ b/services/ui-src/src/page/waiver-appendix-k/WaiverAppKSubsequentSubmissionForm.test.js @@ -0,0 +1,53 @@ +import React from "react"; +import { render, screen, waitFor } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { createMemoryHistory } from "history"; +import { Router } from "react-router-dom"; +import { stateSubmitterInitialAuthState } from "../../libs/testDataAppContext"; + +import { ONEMAC_ROUTES, waiverAuthorityB4 } from "cmscommonlib"; +import { AppContext } from "../../libs/contextLib"; +import WaiverAppKSubsequentSubmissionForm from "./WaiverAppKSubsequentSubmissionForm"; +import { waiverAuthorityB } from "cmscommonlib"; + +jest.mock("../../utils/PackageApi"); + +window.HTMLElement.prototype.scrollIntoView = jest.fn(); +window.scrollTo = jest.fn(); + +describe("1915(c) Waiver Appendix K Subsequent Submission Form", () => { + let history; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it("has the submit button disabled on initial load", async () => { + history = createMemoryHistory(); + history.push(ONEMAC_ROUTES.WAIVER_APP_K_SUBSEQUENT_SUBMSISSION, { + parentId: "MD", + parentType: "waiverappk", + componentId: "MD", + formSource: "detail", + }); + + const handleSubmit = jest.fn(); + + render( + + + + + + ); + + const submitButtonEl = screen.getByText("Submit"); + + userEvent.click(submitButtonEl); + expect(handleSubmit).not.toBeCalled(); + }); +}); diff --git a/services/ui-src/src/page/waiver-appendix-k/WaiverAppKSubsequentSubmissionForm.tsx b/services/ui-src/src/page/waiver-appendix-k/WaiverAppKSubsequentSubmissionForm.tsx new file mode 100644 index 000000000..a835f957b --- /dev/null +++ b/services/ui-src/src/page/waiver-appendix-k/WaiverAppKSubsequentSubmissionForm.tsx @@ -0,0 +1,37 @@ +import React, { FC } from "react"; +import OneMACForm from "../OneMACForm"; +import { + defaultConfirmSubsequentSubmission, + defaultSubsequentAttachmentInstructionsJSX, + defaultSubsequentSubmissionFormConfig, + defaultSubsequentSubmissionIntroJSX, + OneMACFormConfig, +} from "../../libs/formLib"; +import { + ONEMAC_ROUTES, + ROUTES, + waiverAppKSubsequentSubmission, +} from "cmscommonlib"; + +export const waiverAppKSubsequentSubmissionFormInfo: OneMACFormConfig = { + ...defaultSubsequentSubmissionFormConfig, + ...waiverAppKSubsequentSubmission, + pageTitle: "Upload Subsequent 1915(c) Appendix K Documentation", + detailsHeader: "1915(c) Appendix K Subsequent Submission", + landingPage: ONEMAC_ROUTES.PACKAGE_LIST_WAIVER, + confirmSubmit: defaultConfirmSubsequentSubmission, + validateParentAPI: "validateParentOfAny", + introJSX: defaultSubsequentSubmissionIntroJSX, + attachmentIntroJSX: defaultSubsequentAttachmentInstructionsJSX( + ROUTES.FAQ_ATTACHMENTS_MED_SPA_RAI + ), + attachmentsTitle: "Subsequent 1915(c) Appendix K Documents", + addlInfoRequired: true, + atLeastOneAttachmentRequired: true, +}; + +const WaiverAppKSubsequentSubmissionForm: FC = () => { + return ; +}; + +export default WaiverAppKSubsequentSubmissionForm; diff --git a/services/ui-src/src/page/waiver-appendix-k/WaiverAppendixKDetail.tsx b/services/ui-src/src/page/waiver-appendix-k/WaiverAppendixKDetail.tsx index bfefdf3aa..120e2a4cd 100644 --- a/services/ui-src/src/page/waiver-appendix-k/WaiverAppendixKDetail.tsx +++ b/services/ui-src/src/page/waiver-appendix-k/WaiverAppendixKDetail.tsx @@ -13,6 +13,8 @@ import { waiverAuthorityDefault, cpocDefault, blankBox, + submissionIdDefault, + latestActivityDefault, } from "../../libs/detailLib"; import { waiverAppendixK } from "cmscommonlib"; @@ -27,6 +29,8 @@ export const waiverAppendixKDetail: OneMACDetail = { detailHeader: "Appendix K Amendment Package", attachmentsHeading: "Attachments", detailSection: [ + submissionIdDefault, + latestActivityDefault, appendixKWaiverAuthority, territoryDefault, { diff --git a/services/ui-src/src/page/waiver-renewal/WaiverRenewalSubsequentSubmissionForm.test.js b/services/ui-src/src/page/waiver-renewal/WaiverRenewalSubsequentSubmissionForm.test.js new file mode 100644 index 000000000..e92c9531b --- /dev/null +++ b/services/ui-src/src/page/waiver-renewal/WaiverRenewalSubsequentSubmissionForm.test.js @@ -0,0 +1,85 @@ +import React from "react"; +import { render, screen, waitFor } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { createMemoryHistory } from "history"; +import { Router } from "react-router-dom"; +import { stateSubmitterInitialAuthState } from "../../libs/testDataAppContext"; + +import { ONEMAC_ROUTES, waiverAuthorityB4 } from "cmscommonlib"; +import { AppContext } from "../../libs/contextLib"; +import WaiverRenewalSubsequentSubmissionForm, { + waiverRenewalB4SubsequentSubmissionFormInfo, +} from "./WaiverRenewalSubsequentSubmissionForm"; +import { waiverAuthorityB } from "cmscommonlib"; +import OneMACForm from "../OneMACForm"; + +jest.mock("../../utils/PackageApi"); + +window.HTMLElement.prototype.scrollIntoView = jest.fn(); +window.scrollTo = jest.fn(); + +describe("1915(b) Waiver Renewal Subsequent Submission Form", () => { + let history; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it("has the submit button disabled on initial load", async () => { + history = createMemoryHistory(); + history.push(ONEMAC_ROUTES.WAIVER_RENEWAL_SUBSEQUENT_SUBMSISSION, { + parentId: "MD", + parentType: "waiverrenewal", + componentId: "MD", + formSource: "detail", + waiverAuthority: waiverAuthorityB.value, + }); + + const handleSubmit = jest.fn(); + + render( + + + + + + ); + + const submitButtonEl = screen.getByText("Submit"); + + userEvent.click(submitButtonEl); + expect(handleSubmit).not.toBeCalled(); + }); + + it("loads proper config based on waiver authority", async () => { + history = createMemoryHistory(); + history.push(ONEMAC_ROUTES.WAIVER_RENEWAL_SUBSEQUENT_SUBMSISSION, { + parentId: "MD", + parentType: "waiverrenewal", + componentId: "MD", + formSource: "detail", + waiverAuthority: waiverAuthorityB4.value, + }); + + render( + + + + + + ); + + // expect(OneMACForm).toHaveBeenCalledWith( + // { formConfig: waiverRenewalB4SubsequentSubmissionFormInfo }, // Check if OneMACForm was called with the expected formConfig prop + // expect.anything() // Ignore other props and React internals + // ); + }); +}); diff --git a/services/ui-src/src/page/waiver-renewal/WaiverRenewalSubsequentSubmissionForm.tsx b/services/ui-src/src/page/waiver-renewal/WaiverRenewalSubsequentSubmissionForm.tsx new file mode 100644 index 000000000..ba36b0ed6 --- /dev/null +++ b/services/ui-src/src/page/waiver-renewal/WaiverRenewalSubsequentSubmissionForm.tsx @@ -0,0 +1,62 @@ +import React, { FC } from "react"; +import OneMACForm from "../OneMACForm"; +import { + defaultConfirmSubsequentSubmission, + defaultSubsequentAttachmentInstructionsJSX, + defaultSubsequentSubmissionFormConfig, + defaultSubsequentSubmissionIntroJSX, + OneMACFormConfig, +} from "../../libs/formLib"; +import { + ONEMAC_ROUTES, + ROUTES, + waiverRenewalSubsequentSubmission, + waiverRenewalB4SubsequentSubmission, + waiverRenewalBSubsequentSubmission, + waiverAuthorityB, + waiverAuthorityB4, +} from "cmscommonlib"; +import { FormLocationState } from "../../domain-types"; +import { useLocation } from "react-router-dom"; + +export const waiverRenewalSubsequentSubmissionFormInfo: OneMACFormConfig = { + ...defaultSubsequentSubmissionFormConfig, + ...waiverRenewalSubsequentSubmission, + pageTitle: "Upload Subsequent Waiver Renewal Documentation", + detailsHeader: "Waiver Renewal Subsequent Submission", + landingPage: ONEMAC_ROUTES.PACKAGE_LIST_WAIVER, + confirmSubmit: defaultConfirmSubsequentSubmission, + validateParentAPI: "validateParentOfWaiverRenewal", + introJSX: defaultSubsequentSubmissionIntroJSX, + attachmentIntroJSX: defaultSubsequentAttachmentInstructionsJSX( + ROUTES.FAQ_ATTACHMENTS_WAIVER_B + ), + attachmentsTitle: "Subsequent Waiver Renewal Documents", + addlInfoRequired: true, + atLeastOneAttachmentRequired: true, +}; + +export const waiverRenewalB4SubsequentSubmissionFormInfo = { + ...waiverRenewalSubsequentSubmissionFormInfo, + ...waiverRenewalB4SubsequentSubmission, +}; + +export const waiverRenewalBSubsequentSubmissionFormInfo = { + ...waiverRenewalSubsequentSubmissionFormInfo, + ...waiverRenewalBSubsequentSubmission, +}; + +const WaiverRenewalSubsequentSubmissionForm: FC = () => { + let formConfig = waiverRenewalSubsequentSubmissionFormInfo; + const location = useLocation(); + + if (location.state?.waiverAuthority === waiverAuthorityB.value) { + formConfig = waiverRenewalBSubsequentSubmissionFormInfo; + } else if (location.state?.waiverAuthority === waiverAuthorityB4.value) { + formConfig = waiverRenewalB4SubsequentSubmissionFormInfo; + } + + return ; +}; + +export default WaiverRenewalSubsequentSubmissionForm; diff --git a/services/ui-src/src/utils/PackageApi.js b/services/ui-src/src/utils/PackageApi.js index ac9c0c8bf..113ddaac7 100644 --- a/services/ui-src/src/utils/PackageApi.js +++ b/services/ui-src/src/utils/PackageApi.js @@ -6,9 +6,13 @@ const SUBMIT_API_CALL = { [Workflow.ONEMAC_TYPE.CHIP_SPA]: "submitCHIPSPA", [Workflow.ONEMAC_TYPE.CHIP_SPA_RAI]: "submitCHIPSPARAIResponse", [Workflow.ONEMAC_TYPE.CHIP_SPA_WITHDRAW]: "withdrawCHIPSPA", + [Workflow.ONEMAC_TYPE.CHIP_SPA_SUBSEQUENT_SUBMISSION]: + "submitChipSPASubsequent", [Workflow.ONEMAC_TYPE.MEDICAID_SPA]: "submitMedicaidSPA", [Workflow.ONEMAC_TYPE.MEDICAID_SPA_RAI]: "submitMedicaidSPARAIResponse", [Workflow.ONEMAC_TYPE.MEDICAID_SPA_WITHDRAW]: "withdrawMedicaidSPA", + [Workflow.ONEMAC_TYPE.MEDICAID_SPA_SUBSEQUENT_SUBMISSION]: + "submitMedicaidSPASubsequent", [Workflow.ONEMAC_TYPE.WAIVER_INITIAL]: "submitInitialWaiver", [Workflow.ONEMAC_TYPE.WAIVER_INITIAL_WITHDRAW]: "withdrawInitialWaiver", [Workflow.ONEMAC_TYPE.WAIVER_RENEWAL]: "submitWaiverRenewal", @@ -23,6 +27,14 @@ const SUBMIT_API_CALL = { [Workflow.ONEMAC_TYPE.ENABLE_RAI_WITHDRAW]: "enableRaiWithdraw", [Workflow.ONEMAC_TYPE.DISABLE_RAI_WITHDRAW]: "disableRaiWithdraw", [Workflow.ONEMAC_TYPE.RAI_RESPONSE_WITHDRAW]: "withdrawRAIResponse", + [Workflow.ONEMAC_TYPE.WAIVER_INITIAL_SUBSEQUENT_SUBMISSION]: + "submitInitialWaiverSubsequent", + [Workflow.ONEMAC_TYPE.WAIVER_RENEWAL_SUBSEQUENT_SUBMISSION]: + "submitWaiverRenewalSubsequent", + [Workflow.ONEMAC_TYPE.WAIVER_AMENDMENT_SUBSEQUENT_SUBMISSION]: + "submitWaiverAmendmentSubsequent", + [Workflow.ONEMAC_TYPE.WAIVER_APP_K_SUBSEQUENT_SUBMISSION]: + "submitWaiverAppKSubsequent", }; /** diff --git a/tests/cypress/cypress/e2e/Appendix_K_Form.spec.feature b/tests/cypress/cypress/e2e/Appendix_K_Form.spec.feature index 380b0f8b1..949c1cb36 100644 --- a/tests/cypress/cypress/e2e/Appendix_K_Form.spec.feature +++ b/tests/cypress/cypress/e2e/Appendix_K_Form.spec.feature @@ -50,6 +50,8 @@ Feature: Appendix K Waiver Type Selection Then verify package actions header is visible Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the waiver authority header exists Then verify there is a State header in the details section Then verify a state exists for the State diff --git a/tests/cypress/cypress/e2e/Dashboard_AppK_RAI_Response.spec.feature b/tests/cypress/cypress/e2e/Dashboard_AppK_RAI_Response.spec.feature index 566b7f3dd..4430d880b 100644 --- a/tests/cypress/cypress/e2e/Dashboard_AppK_RAI_Response.spec.feature +++ b/tests/cypress/cypress/e2e/Dashboard_AppK_RAI_Response.spec.feature @@ -22,7 +22,7 @@ Feature: RAI Response for Appendix K Amendment - Package View Then Click the Submit Button without waiting Then verify the modal pop-up is visible Then verify the title of the modal pop-up is Do you want to submit your official formal RAI response - Then verify the detailed text in the modal contains you are submitting your official formal RAI Response to start the 90 day clock review process + Then verify the detailed text in the modal contains "you are submitting your official formal RAI Response to start the 90 day clock review process" Then click modal cancel button Then verify the modal pop-up is not visible @@ -34,6 +34,6 @@ Feature: RAI Response for Appendix K Amendment - Package View Then Click the Submit Button without waiting Then verify the modal pop-up is visible Then verify the title of the modal pop-up is Do you want to submit your official formal RAI response - Then verify the detailed text in the modal contains you are submitting your official formal RAI Response to start the 90 day clock review process + Then verify the detailed text in the modal contains "you are submitting your official formal RAI Response to start the 90 day clock review process" Then click modal cancel button Then verify the modal pop-up is not visible \ No newline at end of file diff --git a/tests/cypress/cypress/e2e/Dashboard_CHIP_SPA_RAI_Response.spec.feature b/tests/cypress/cypress/e2e/Dashboard_CHIP_SPA_RAI_Response.spec.feature index c00853a5a..4c91a3faf 100644 --- a/tests/cypress/cypress/e2e/Dashboard_CHIP_SPA_RAI_Response.spec.feature +++ b/tests/cypress/cypress/e2e/Dashboard_CHIP_SPA_RAI_Response.spec.feature @@ -26,7 +26,7 @@ Feature: RAI Response for CHIP SPA package view Then Click the Submit Button without waiting Then verify the modal pop-up is visible Then verify the title of the modal pop-up is Do you want to submit your official formal RAI response - Then verify the detailed text in the modal contains you are submitting your official formal RAI Response to restart the SPA review process and a new 90th day will be identified + Then verify the detailed text in the modal contains "you are submitting your official formal RAI Response to restart the SPA review process and a new 90th day will be identified." Then click modal cancel button Then verify the modal pop-up is not visible @@ -42,6 +42,6 @@ Feature: RAI Response for CHIP SPA package view Then Click the Submit Button without waiting Then verify the modal pop-up is visible Then verify the title of the modal pop-up is Do you want to submit your official formal RAI response - Then verify the detailed text in the modal contains you are submitting your official formal RAI Response to restart the SPA review process and a new 90th day will be identified + Then verify the detailed text in the modal contains "you are submitting your official formal RAI Response to restart the SPA review process and a new 90th day will be identified." Then click modal cancel button Then verify the modal pop-up is not visible diff --git a/tests/cypress/cypress/e2e/Dashboard_Column_Picker_SPA_CMS.spec.feature b/tests/cypress/cypress/e2e/Dashboard_Column_Picker_SPA_CMS.spec.feature index 28b362790..cbfe8e804 100644 --- a/tests/cypress/cypress/e2e/Dashboard_Column_Picker_SPA_CMS.spec.feature +++ b/tests/cypress/cypress/e2e/Dashboard_Column_Picker_SPA_CMS.spec.feature @@ -11,6 +11,7 @@ Feature: Package Dashboard - SPA Tab Column Picker for CMS User Then Verify State Column Exists Then verify status column exists Then verify Initial Submission Date column exists + Then verify Latest Package Activity column exists Then verify Formal RAI Received column exists Then verify submitted by column does not exist Then verify CPOC Name column does not exist @@ -30,6 +31,7 @@ Feature: Package Dashboard - SPA Tab Column Picker for CMS User Then click show hide columns button Then click Formal RAI Received checkbox Then click Initial Submission Date checkbox + Then click Latest Package Activity checkbox Then click state checkbox Then click status checkbox Then click type checkbox @@ -41,6 +43,7 @@ Feature: Package Dashboard - SPA Tab Column Picker for CMS User Then verify state column does not exist Then verify status column does not exist Then verify Initial Submission Date column does not exist + Then verify Latest Package Activity column does not exist Then verify submitted by column does not exist Then verify CPOC Name column exists Then verify Final Disposition column exists diff --git a/tests/cypress/cypress/e2e/Dashboard_Filter_options_that_include_Dates_CMS.spec.feature b/tests/cypress/cypress/e2e/Dashboard_Filter_options_that_include_Dates_CMS.spec.feature index eb5315cc3..0483d49f6 100644 --- a/tests/cypress/cypress/e2e/Dashboard_Filter_options_that_include_Dates_CMS.spec.feature +++ b/tests/cypress/cypress/e2e/Dashboard_Filter_options_that_include_Dates_CMS.spec.feature @@ -32,6 +32,16 @@ Feature: Package Dashboard - Filter by Formal RAI Received Then Click on My Account Then click the logout button + Scenario: Filter by Latest Package Activity - Date picker + Then Click on Filter Button + Then click on Latest Package Activity dropdown filter + Then click on Latest Package Activity date picker filter + Then click on quarter to date date picker button + Then Click on Filter Button + Then verify Latest Package Activity column one date is this quarter + Then Click on My Account + Then click the logout button + Scenario: Change Initial Submission Date filter. Verify no results. Then reset filter Then click on the Waivers tab Then Click on Filter Button @@ -56,4 +66,17 @@ Feature: Package Dashboard - Filter by Formal RAI Received Then Click on Filter Button Then verify package row one exists Then Click on My Account + Then click the logout button + + Scenario: Change Latest Package Activity date filter. Verify results. Then reset filter + Then click on the Waivers tab + Then Click on Filter Button + Then click on Latest Package Activity dropdown filter + Then click on Latest Package Activity date picker filter + Then click on quarter to date date picker button + Then click on Latest Package Activity filter dropdown + Then click on reset button + Then Click on Filter Button + Then verify package row one exists + Then Click on My Account Then click the logout button \ No newline at end of file diff --git a/tests/cypress/cypress/e2e/Dashboard_Medicaid_SPA_RAI_Response.spec.feature b/tests/cypress/cypress/e2e/Dashboard_Medicaid_SPA_RAI_Response.spec.feature index c998f0fd7..5cda72053 100644 --- a/tests/cypress/cypress/e2e/Dashboard_Medicaid_SPA_RAI_Response.spec.feature +++ b/tests/cypress/cypress/e2e/Dashboard_Medicaid_SPA_RAI_Response.spec.feature @@ -25,7 +25,7 @@ Feature: RAI Response for Medicaid SPA package view Then Click the Submit Button without waiting Then verify the modal pop-up is visible Then verify the title of the modal pop-up is Do you want to submit your official formal RAI response - Then verify the detailed text in the modal contains you are submitting your official formal RAI Response to start the 90 day clock review process + Then verify the detailed text in the modal contains "you are submitting your official formal RAI Response to start the 90 day clock review process" Scenario: validate response to RAI from package dashboard Then copy the ID from the link in the first row @@ -38,4 +38,4 @@ Feature: RAI Response for Medicaid SPA package view Then Click the Submit Button without waiting Then verify the modal pop-up is visible Then verify the title of the modal pop-up is Do you want to submit your official formal RAI response - Then verify the detailed text in the modal contains you are submitting your official formal RAI Response to start the 90 day clock review process + Then verify the detailed text in the modal contains "you are submitting your official formal RAI Response to start the 90 day clock review process" diff --git a/tests/cypress/cypress/e2e/Dashboard_Waiver_Amendment_RAI_Response.spec.feature b/tests/cypress/cypress/e2e/Dashboard_Waiver_Amendment_RAI_Response.spec.feature index fe951be89..fd2ec61ec 100644 --- a/tests/cypress/cypress/e2e/Dashboard_Waiver_Amendment_RAI_Response.spec.feature +++ b/tests/cypress/cypress/e2e/Dashboard_Waiver_Amendment_RAI_Response.spec.feature @@ -24,7 +24,7 @@ Feature: RAI Response for 1915B Waiver Amendment - Package View Then Click the Submit Button without waiting Then verify the modal pop-up is visible Then verify the title of the modal pop-up is Do you want to submit your official formal RAI response - Then verify the detailed text in the modal contains you are submitting your official formal RAI Response to start the 90 day clock review process + Then verify the detailed text in the modal contains "you are submitting your official formal RAI Response to start the 90 day clock review process" Then click modal cancel button Then verify the modal pop-up is not visible @@ -36,6 +36,6 @@ Feature: RAI Response for 1915B Waiver Amendment - Package View Then Click the Submit Button without waiting Then verify the modal pop-up is visible Then verify the title of the modal pop-up is Do you want to submit your official formal RAI response - Then verify the detailed text in the modal contains you are submitting your official formal RAI Response to start the 90 day clock review process + Then verify the detailed text in the modal contains "you are submitting your official formal RAI Response to start the 90 day clock review process" Then click modal cancel button Then verify the modal pop-up is not visible diff --git a/tests/cypress/cypress/e2e/Dashboard_Waiver_Renewal_RAI_Response.spec.feature b/tests/cypress/cypress/e2e/Dashboard_Waiver_Renewal_RAI_Response.spec.feature index 86ef241dd..e69fbe23b 100644 --- a/tests/cypress/cypress/e2e/Dashboard_Waiver_Renewal_RAI_Response.spec.feature +++ b/tests/cypress/cypress/e2e/Dashboard_Waiver_Renewal_RAI_Response.spec.feature @@ -26,7 +26,7 @@ Feature: RAI Response for Renewal Waiver - Package View Then Click the Submit Button without waiting Then verify the modal pop-up is visible Then verify the title of the modal pop-up is Do you want to submit your official formal RAI response - Then verify the detailed text in the modal contains you are submitting your official formal RAI Response to start the 90 day clock review process + Then verify the detailed text in the modal contains "you are submitting your official formal RAI Response to start the 90 day clock review process" Then click modal cancel button Then verify the modal pop-up is not visible @@ -38,6 +38,6 @@ Feature: RAI Response for Renewal Waiver - Package View Then Click the Submit Button without waiting Then verify the modal pop-up is visible Then verify the title of the modal pop-up is Do you want to submit your official formal RAI response - Then verify the detailed text in the modal contains you are submitting your official formal RAI Response to start the 90 day clock review process + Then verify the detailed text in the modal contains "you are submitting your official formal RAI Response to start the 90 day clock review process" Then click modal cancel button Then verify the modal pop-up is not visible \ No newline at end of file diff --git a/tests/cypress/cypress/e2e/Package_Details_Appendix_K_CMS_User.spec.feature b/tests/cypress/cypress/e2e/Package_Details_Appendix_K_CMS_User.spec.feature index 8c9d9e4ac..7e696e2da 100644 --- a/tests/cypress/cypress/e2e/Package_Details_Appendix_K_CMS_User.spec.feature +++ b/tests/cypress/cypress/e2e/Package_Details_Appendix_K_CMS_User.spec.feature @@ -20,6 +20,8 @@ Feature: Waiver Package Details View: Appendix K Amendment for a CMS User Then verify the status on the card is "Submitted - Intake Needed" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Appendix K Amendment Package" Then verify the waiver authority header exists Then verify the waiver authority is 1915c HCBS @@ -50,6 +52,8 @@ Feature: Waiver Package Details View: Appendix K Amendment for a CMS User Then verify 2 action cards exist Then verify the status on the card is "Pending" Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Appendix K Amendment Package" Then verify the waiver authority header exists Then verify the waiver authority is 1915c HCBS @@ -85,6 +89,8 @@ Feature: Waiver Package Details View: Appendix K Amendment for a CMS User Then verify the status on the card is "Pending - RAI" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Appendix K Amendment Package" Then verify the waiver authority header exists Then verify the waiver authority is 1915c HCBS @@ -119,6 +125,8 @@ Feature: Waiver Package Details View: Appendix K Amendment for a CMS User Then verify the status on the card is "Approved" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Appendix K Amendment Package" Then verify the waiver authority header exists Then verify the waiver authority is 1915c HCBS @@ -153,6 +161,8 @@ Feature: Waiver Package Details View: Appendix K Amendment for a CMS User Then verify the status on the card is "Disapproved" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Appendix K Amendment Package" Then verify the waiver authority header exists Then verify the waiver authority is 1915c HCBS @@ -186,6 +196,8 @@ Feature: Waiver Package Details View: Appendix K Amendment for a CMS User Then verify the status on the card is "Package Withdrawn" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Appendix K Amendment Package" Then verify the waiver authority header exists Then verify the waiver authority is 1915c HCBS @@ -217,8 +229,9 @@ Feature: Waiver Package Details View: Appendix K Amendment for a CMS User Then verify the package details page is visible Then verify 2 action cards exist Then verify the status on the card is "Pending - Concurrence" - Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Appendix K Amendment Package" Then verify the waiver authority header exists Then verify the waiver authority is 1915c HCBS @@ -250,8 +263,9 @@ Feature: Waiver Package Details View: Appendix K Amendment for a CMS User Then verify the package details page is visible Then verify 2 action cards exist Then verify the status on the card is "Pending - Approval" - Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Appendix K Amendment Package" Then verify the waiver authority header exists Then verify the waiver authority is 1915c HCBS diff --git a/tests/cypress/cypress/e2e/Package_Details_Appendix_K_State_User.spec.feature b/tests/cypress/cypress/e2e/Package_Details_Appendix_K_State_User.spec.feature index 58768fed6..5dd605a15 100644 --- a/tests/cypress/cypress/e2e/Package_Details_Appendix_K_State_User.spec.feature +++ b/tests/cypress/cypress/e2e/Package_Details_Appendix_K_State_User.spec.feature @@ -21,6 +21,8 @@ Feature: Waiver Package Details View: Appendix K Amendment for a State User Then verify package actions header is visible Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Appendix K Amendment Package" Then verify the waiver authority header exists Then verify the waiver authority is 1915c HCBS @@ -52,6 +54,8 @@ Feature: Waiver Package Details View: Appendix K Amendment for a State User Then verify package actions header is visible Then verify withdraw package action exists Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Appendix K Amendment Package" Then verify the waiver authority header exists Then verify the waiver authority is 1915c HCBS @@ -84,6 +88,8 @@ Feature: Waiver Package Details View: Appendix K Amendment for a State User Then verify withdraw package action exists Then verify Respond to RAI action exists Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Appendix K Amendment Package" Then verify the waiver authority header exists Then verify the waiver authority is 1915c HCBS @@ -115,6 +121,8 @@ Feature: Waiver Package Details View: Appendix K Amendment for a State User Then verify package actions header is visible Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Appendix K Amendment Package" Then verify the waiver authority header exists Then verify the waiver authority is 1915c HCBS @@ -147,6 +155,8 @@ Feature: Waiver Package Details View: Appendix K Amendment for a State User Then verify package actions header is visible Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Appendix K Amendment Package" Then verify the waiver authority header exists Then verify the waiver authority is 1915c HCBS @@ -179,6 +189,8 @@ Feature: Waiver Package Details View: Appendix K Amendment for a State User Then verify package actions header is visible Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Appendix K Amendment Package" Then verify the waiver authority header exists Then verify the waiver authority is 1915c HCBS @@ -207,6 +219,8 @@ Feature: Waiver Package Details View: Appendix K Amendment for a State User Then verify package actions header is visible Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Appendix K Amendment Package" Then verify the waiver authority header exists Then verify the waiver authority is 1915c HCBS @@ -241,6 +255,8 @@ Feature: Waiver Package Details View: Appendix K Amendment for a State User Then verify withdraw package action exists Then verify Withdraw Formal RAI Response package action exists Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Appendix K Amendment Package" Then verify the waiver authority header exists Then verify the waiver authority is 1915c HCBS diff --git a/tests/cypress/cypress/e2e/Package_Details_CHIP_SPA_CMS_User.spec.feature b/tests/cypress/cypress/e2e/Package_Details_CHIP_SPA_CMS_User.spec.feature index 86864753c..904c5a770 100644 --- a/tests/cypress/cypress/e2e/Package_Details_CHIP_SPA_CMS_User.spec.feature +++ b/tests/cypress/cypress/e2e/Package_Details_CHIP_SPA_CMS_User.spec.feature @@ -20,6 +20,8 @@ Feature: CHIP SPA CMS Details View - Card View with Actions Then verify the status on the card is "Submitted - Intake Needed" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify a type containing SPA exists for the Type Then verify there is a State header in the details section @@ -49,6 +51,8 @@ Feature: CHIP SPA CMS Details View - Card View with Actions Then verify the status on the card is "Pending" #Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify a type containing SPA exists for the Type Then verify there is a State header in the details section @@ -80,6 +84,8 @@ Feature: CHIP SPA CMS Details View - Card View with Actions Then verify the status on the card is "Withdrawn" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify a type containing SPA exists for the Type Then verify there is a State header in the details section @@ -111,6 +117,8 @@ Feature: CHIP SPA CMS Details View - Card View with Actions Then verify the status on the card is "Disapproved" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "CHIP SPA Package" Then verify there is a Type header in the details section Then verify a type containing SPA exists for the Type @@ -144,6 +152,8 @@ Feature: CHIP SPA CMS Details View - Card View with Actions Then verify there are no package actions available Then verify the package details page is visible Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify a type containing SPA exists for the Type Then verify there is a State header in the details section @@ -174,6 +184,8 @@ Feature: CHIP SPA CMS Details View - Card View with Actions Then verify there is not a 90th day date on the card Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify a type containing SPA exists for the Type Then verify there is a State header in the details section @@ -204,9 +216,10 @@ Feature: CHIP SPA CMS Details View - Card View with Actions Then verify the package details page is visible Then verify 2 action cards exist Then verify the status on the card is "Pending - Concurrence" - Then verify there are no package actions available Then verify the package details page is visible Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify a type containing SPA exists for the Type Then verify there is a State header in the details section @@ -236,9 +249,10 @@ Feature: CHIP SPA CMS Details View - Card View with Actions Then verify the package details page is visible Then verify 2 action cards exist Then verify the status on the card is "Pending - Approval" - Then verify there are no package actions available Then verify the package details page is visible Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify a type containing SPA exists for the Type Then verify there is a State header in the details section diff --git a/tests/cypress/cypress/e2e/Package_Details_Initial_Waiver_CMS_User.spec.feature b/tests/cypress/cypress/e2e/Package_Details_Initial_Waiver_CMS_User.spec.feature index 4933aa9be..63be8678e 100644 --- a/tests/cypress/cypress/e2e/Package_Details_Initial_Waiver_CMS_User.spec.feature +++ b/tests/cypress/cypress/e2e/Package_Details_Initial_Waiver_CMS_User.spec.feature @@ -20,6 +20,8 @@ Feature: Waiver Package Details View: Initial Waivers Then verify the status on the card is "Submitted - Intake Needed" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Initial Waiver Package" Then verify there is a Type header in the details section Then verify the type is Initial Waiver @@ -48,6 +50,8 @@ Feature: Waiver Package Details View: Initial Waivers Then verify 2 action cards exist Then verify the status on the card is "Pending" Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Initial Waiver Package" Then verify there is a Type header in the details section Then verify the type is Initial Waiver @@ -80,6 +84,8 @@ Feature: Waiver Package Details View: Initial Waivers Then verify the status on the card is "Terminated" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Initial Waiver Package" Then verify there is a Type header in the details section Then verify the type is Initial Waiver @@ -111,6 +117,8 @@ Feature: Waiver Package Details View: Initial Waivers Then verify the status on the card is "Pending - RAI" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Initial Waiver Package" Then verify there is a Type header in the details section Then verify the type is Initial Waiver @@ -142,6 +150,8 @@ Feature: Waiver Package Details View: Initial Waivers Then verify the status on the card is "Approved" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Initial Waiver Package" Then verify there is a Type header in the details section Then verify the type is Initial Waiver @@ -173,6 +183,8 @@ Feature: Waiver Package Details View: Initial Waivers Then verify the status on the card is "Disapproved" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Initial Waiver Package" Then verify there is a Type header in the details section Then verify the type is Initial Waiver @@ -204,6 +216,8 @@ Feature: Waiver Package Details View: Initial Waivers Then verify the status on the card is "Package Withdrawn" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Initial Waiver Package" Then verify there is a Type header in the details section Then verify the type is Initial Waiver @@ -234,8 +248,9 @@ Feature: Waiver Package Details View: Initial Waivers Then verify the package details page is visible Then verify 2 action cards exist Then verify the status on the card is "Pending - Concurrence" - Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Initial Waiver Package" Then verify there is a Type header in the details section Then verify the type is Initial Waiver @@ -265,8 +280,9 @@ Feature: Waiver Package Details View: Initial Waivers Then verify the package details page is visible Then verify 2 action cards exist Then verify the status on the card is "Pending - Approval" - Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Initial Waiver Package" Then verify there is a Type header in the details section Then verify the type is Initial Waiver diff --git a/tests/cypress/cypress/e2e/Package_Details_Initial_Waiver_State_User.spec.feature b/tests/cypress/cypress/e2e/Package_Details_Initial_Waiver_State_User.spec.feature index 012998761..3f69fce5e 100644 --- a/tests/cypress/cypress/e2e/Package_Details_Initial_Waiver_State_User.spec.feature +++ b/tests/cypress/cypress/e2e/Package_Details_Initial_Waiver_State_User.spec.feature @@ -21,6 +21,8 @@ Feature: Waiver Package Details View: Initial Waivers Then verify package actions header is visible Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Initial Waiver Package" Then verify there is a Type header in the details section Then verify the type is Initial Waiver @@ -50,6 +52,8 @@ Feature: Waiver Package Details View: Initial Waivers Then verify package actions header is visible Then verify withdraw package action exists Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Initial Waiver Package" Then verify there is a Type header in the details section Then verify the type is Initial Waiver @@ -79,6 +83,8 @@ Feature: Waiver Package Details View: Initial Waivers Then verify the status on the card is "Waiver Terminated" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Initial Waiver Package" Then verify there is a Type header in the details section Then verify the type is Initial Waiver @@ -109,6 +115,8 @@ Feature: Waiver Package Details View: Initial Waivers Then verify withdraw package action exists Then verify Respond to RAI action exists Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Initial Waiver Package" Then verify there is a Type header in the details section Then verify the type is Initial Waiver @@ -139,6 +147,8 @@ Feature: Waiver Package Details View: Initial Waivers Then verify Add Amendment package action exists Then verify Request a Temporary Extension package action exists Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Initial Waiver Package" Then verify there is a Type header in the details section Then verify the type is Initial Waiver @@ -168,6 +178,8 @@ Feature: Waiver Package Details View: Initial Waivers Then verify package actions header is visible Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Initial Waiver Package" Then verify there is a Type header in the details section Then verify the type is Initial Waiver @@ -198,6 +210,8 @@ Feature: Waiver Package Details View: Initial Waivers Then verify package actions header is visible Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Initial Waiver Package" Then verify there is a Type header in the details section Then verify the type is Initial Waiver @@ -229,6 +243,8 @@ Feature: Waiver Package Details View: Initial Waivers Then verify package actions header is visible Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Initial Waiver Package" Then verify there is a Type header in the details section Then verify the type is Initial Waiver @@ -260,6 +276,8 @@ Feature: Waiver Package Details View: Initial Waivers Then verify withdraw package action exists Then verify Withdraw Formal RAI Response package action exists Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify the package details title contains "Initial Waiver Package" Then verify there is a Type header in the details section Then verify the type is Initial Waiver diff --git a/tests/cypress/cypress/e2e/Package_Details_Medicaid_SPA_CMS_User.spec.feature b/tests/cypress/cypress/e2e/Package_Details_Medicaid_SPA_CMS_User.spec.feature index 49274d5e9..2e6b3a7d1 100644 --- a/tests/cypress/cypress/e2e/Package_Details_Medicaid_SPA_CMS_User.spec.feature +++ b/tests/cypress/cypress/e2e/Package_Details_Medicaid_SPA_CMS_User.spec.feature @@ -20,6 +20,8 @@ Feature: Medicaid SPA CMS Details View - Card View with Actions Then verify the status on the card is "Submitted - Intake Needed" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Medicaid SPA Then verify there is a State header in the details section @@ -49,6 +51,8 @@ Feature: Medicaid SPA CMS Details View - Card View with Actions Then verify the status on the card is "Pending" #Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Medicaid SPA Then verify there is a State header in the details section @@ -78,6 +82,8 @@ Feature: Medicaid SPA CMS Details View - Card View with Actions Then verify the status on the card is "Withdrawn" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Medicaid SPA Then verify there is a State header in the details section @@ -109,6 +115,8 @@ Feature: Medicaid SPA CMS Details View - Card View with Actions Then verify the status on the card is "Disapproved" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Medicaid SPA Then verify there is a State header in the details section @@ -131,7 +139,6 @@ Feature: Medicaid SPA CMS Details View - Card View with Actions Then verify the Initial Submission download all button exists Then verify the additional information section exists - # Need seed data / reset data update Scenario: Screen Enhance - Pending - RAI Medicaid SPA Then click Pending - RAI checkbox Then Click on Filter Button @@ -142,6 +149,8 @@ Feature: Medicaid SPA CMS Details View - Card View with Actions Then verify there are no package actions available Then verify the package details page is visible Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Medicaid SPA Then verify there is a State header in the details section @@ -172,6 +181,8 @@ Feature: Medicaid SPA CMS Details View - Card View with Actions Then verify there is not a 90th day date on the card Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Medicaid SPA Then verify there is a State header in the details section @@ -202,9 +213,10 @@ Feature: Medicaid SPA CMS Details View - Card View with Actions Then verify the package details page is visible Then verify 2 action cards exist Then verify the status on the card is "Pending - Concurrence" - Then verify there are no package actions available Then verify the package details page is visible Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify a type containing SPA exists for the Type Then verify there is a State header in the details section @@ -234,9 +246,10 @@ Feature: Medicaid SPA CMS Details View - Card View with Actions Then verify the package details page is visible Then verify 2 action cards exist Then verify the status on the card is "Pending - Approval" - Then verify there are no package actions available Then verify the package details page is visible Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify a type containing SPA exists for the Type Then verify there is a State header in the details section diff --git a/tests/cypress/cypress/e2e/Package_Details_Medicaid_SPA_State_User.spec.feature b/tests/cypress/cypress/e2e/Package_Details_Medicaid_SPA_State_User.spec.feature index c8079587f..99ebe4497 100644 --- a/tests/cypress/cypress/e2e/Package_Details_Medicaid_SPA_State_User.spec.feature +++ b/tests/cypress/cypress/e2e/Package_Details_Medicaid_SPA_State_User.spec.feature @@ -22,6 +22,8 @@ Feature: Medicaid SPA State Details View - Card View with Actions Then verify package actions header is visible Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Medicaid SPA Then verify there is a State header in the details section @@ -52,6 +54,8 @@ Feature: Medicaid SPA State Details View - Card View with Actions Then verify package actions header is visible Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Medicaid SPA Then verify there is a State header in the details section @@ -81,6 +85,8 @@ Feature: Medicaid SPA State Details View - Card View with Actions Then verify package actions header is visible Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Medicaid SPA Then verify there is a State header in the details section @@ -111,6 +117,8 @@ Feature: Medicaid SPA State Details View - Card View with Actions Then verify package actions header is visible Then verify withdraw package action exists Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Medicaid SPA Then verify there is a State header in the details section @@ -138,6 +146,8 @@ Feature: Medicaid SPA State Details View - Card View with Actions Then verify package actions header is visible Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Medicaid SPA Then verify there is a State header in the details section @@ -168,6 +178,8 @@ Feature: Medicaid SPA State Details View - Card View with Actions Then verify withdraw package action exists Then verify Respond to RAI action exists Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Medicaid SPA Then verify there is a State header in the details section @@ -195,6 +207,8 @@ Feature: Medicaid SPA State Details View - Card View with Actions Then verify package actions header is visible Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Medicaid SPA Then verify there is a State header in the details section @@ -225,6 +239,8 @@ Feature: Medicaid SPA State Details View - Card View with Actions Then verify withdraw package action exists Then verify Withdraw Formal RAI Response package action exists Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify a type containing SPA exists for the Type Then verify there is a State header in the details section diff --git a/tests/cypress/cypress/e2e/Package_Details_Renewal_Waiver_CMS_User.spec.feature b/tests/cypress/cypress/e2e/Package_Details_Renewal_Waiver_CMS_User.spec.feature index f36556bd3..95f0c9d17 100644 --- a/tests/cypress/cypress/e2e/Package_Details_Renewal_Waiver_CMS_User.spec.feature +++ b/tests/cypress/cypress/e2e/Package_Details_Renewal_Waiver_CMS_User.spec.feature @@ -20,6 +20,8 @@ Feature: Waiver Package Details View: Waiver Renewal for a CMS User Then verify the status on the card is "Submitted - Intake Needed" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Waiver Renewal Then verify there is a State header in the details section @@ -48,6 +50,8 @@ Feature: Waiver Package Details View: Waiver Renewal for a CMS User Then verify the status on the card is "Pending" #Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Waiver Renewal Then verify there is a State header in the details section @@ -78,6 +82,8 @@ Feature: Waiver Package Details View: Waiver Renewal for a CMS User Then verify the status on the card is "Terminated" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Waiver Renewal Then verify there is a State header in the details section @@ -108,6 +114,8 @@ Feature: Waiver Package Details View: Waiver Renewal for a CMS User Then verify the status on the card is "Pending - RAI" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Waiver Renewal Then verify there is a State header in the details section @@ -138,6 +146,8 @@ Feature: Waiver Package Details View: Waiver Renewal for a CMS User Then verify the status on the card is "Approved" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Waiver Renewal Then verify there is a State header in the details section @@ -169,6 +179,8 @@ Feature: Waiver Package Details View: Waiver Renewal for a CMS User Then verify the status on the card is "Disapproved" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Waiver Renewal Then verify there is a State header in the details section @@ -199,6 +211,8 @@ Feature: Waiver Package Details View: Waiver Renewal for a CMS User Then verify the status on the card is "Package Withdrawn" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Waiver Renewal Then verify there is a State header in the details section @@ -227,8 +241,9 @@ Feature: Waiver Package Details View: Waiver Renewal for a CMS User Then verify the package details page is visible Then verify 2 action cards exist Then verify the status on the card is "Pending - Concurrence" - Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Waiver Renewal Then verify there is a State header in the details section @@ -257,8 +272,9 @@ Feature: Waiver Package Details View: Waiver Renewal for a CMS User Then verify the package details page is visible Then verify 2 action cards exist Then verify the status on the card is "Pending - Approval" - Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Waiver Renewal Then verify there is a State header in the details section diff --git a/tests/cypress/cypress/e2e/Package_Details_Renewal_Waiver_State_User.spec.feature b/tests/cypress/cypress/e2e/Package_Details_Renewal_Waiver_State_User.spec.feature index 6cdf011c9..b57c4f0b1 100644 --- a/tests/cypress/cypress/e2e/Package_Details_Renewal_Waiver_State_User.spec.feature +++ b/tests/cypress/cypress/e2e/Package_Details_Renewal_Waiver_State_User.spec.feature @@ -21,6 +21,8 @@ Feature: Waiver Package Details View: Waiver Renewals for a State User Then verify package actions header is visible Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Waiver Renewal Then verify there is a State header in the details section @@ -49,6 +51,8 @@ Feature: Waiver Package Details View: Waiver Renewals for a State User Then verify package actions header is visible Then verify withdraw package action exists Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Waiver Renewal Then verify there is a State header in the details section @@ -76,6 +80,8 @@ Feature: Waiver Package Details View: Waiver Renewals for a State User Then verify the status on the card is "Waiver Terminated" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Waiver Renewal Then verify there is a State header in the details section @@ -105,6 +111,8 @@ Feature: Waiver Package Details View: Waiver Renewals for a State User Then verify withdraw package action exists Then verify Respond to RAI action exists Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Waiver Renewal Then verify there is a State header in the details section @@ -134,6 +142,8 @@ Feature: Waiver Package Details View: Waiver Renewals for a State User Then verify Add Amendment package action exists Then verify Request a Temporary Extension package action exists Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Waiver Renewal Then verify there is a State header in the details section @@ -163,6 +173,8 @@ Feature: Waiver Package Details View: Waiver Renewals for a State User Then verify package actions header is visible Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Waiver Renewal Then verify there is a State header in the details section @@ -191,6 +203,8 @@ Feature: Waiver Package Details View: Waiver Renewals for a State User Then verify package actions header is visible Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Waiver Renewal Then verify there is a State header in the details section @@ -219,6 +233,8 @@ Feature: Waiver Package Details View: Waiver Renewals for a State User Then verify package actions header is visible Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Waiver Renewal Then verify there is a State header in the details section @@ -249,6 +265,8 @@ Feature: Waiver Package Details View: Waiver Renewals for a State User Then verify withdraw package action exists Then verify Withdraw Formal RAI Response package action exists Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is Waiver Renewal Then verify there is a State header in the details section diff --git a/tests/cypress/cypress/e2e/Package_Details_Temporary_Extension_CMS_User.spec.feature b/tests/cypress/cypress/e2e/Package_Details_Temporary_Extension_CMS_User.spec.feature index 7da215105..6e7bd7860 100644 --- a/tests/cypress/cypress/e2e/Package_Details_Temporary_Extension_CMS_User.spec.feature +++ b/tests/cypress/cypress/e2e/Package_Details_Temporary_Extension_CMS_User.spec.feature @@ -17,6 +17,10 @@ Feature: Waiver Package Details View: Temporary Extension for a CMS User Then verify the status on the card is "Requested" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is 1915b Temporary Extension Then verify there is an Initial Submission Date header in the details section @@ -37,6 +41,10 @@ Feature: Waiver Package Details View: Temporary Extension for a CMS User Then verify the status on the card is "Requested" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is 1915c Temporary Extension Then verify there is an Initial Submission Date header in the details section diff --git a/tests/cypress/cypress/e2e/Package_Details_Temporary_Extension_State_User.spec.feature b/tests/cypress/cypress/e2e/Package_Details_Temporary_Extension_State_User.spec.feature index f51069828..9022f0ea2 100644 --- a/tests/cypress/cypress/e2e/Package_Details_Temporary_Extension_State_User.spec.feature +++ b/tests/cypress/cypress/e2e/Package_Details_Temporary_Extension_State_User.spec.feature @@ -21,6 +21,8 @@ Feature: Waiver Package Details View: Temporary Extension for a State User Then verify package actions header is visible Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is 1915b Temporary Extension Then verify there is an Initial Submission Date header in the details section @@ -45,6 +47,8 @@ Feature: Waiver Package Details View: Temporary Extension for a State User Then verify package actions header is visible Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is 1915c Temporary Extension Then verify there is an Initial Submission Date header in the details section diff --git a/tests/cypress/cypress/e2e/Package_Details_Waiver_Amendment_CMS_User.spec.feature b/tests/cypress/cypress/e2e/Package_Details_Waiver_Amendment_CMS_User.spec.feature index ab7f5e78a..260cd3703 100644 --- a/tests/cypress/cypress/e2e/Package_Details_Waiver_Amendment_CMS_User.spec.feature +++ b/tests/cypress/cypress/e2e/Package_Details_Waiver_Amendment_CMS_User.spec.feature @@ -20,6 +20,8 @@ Feature: Waiver Package Details View: 1915 b Waiver Amendment for a CMS User Then verify the status on the card is "Submitted - Intake Needed" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is 1915b Waiver Amendment Then verify there is a State header in the details section @@ -48,6 +50,8 @@ Feature: Waiver Package Details View: 1915 b Waiver Amendment for a CMS User Then verify 2 action cards exist Then verify the status on the card is "Pending" Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is 1915b Waiver Amendment Then verify there is a State header in the details section @@ -74,6 +78,8 @@ Feature: Waiver Package Details View: 1915 b Waiver Amendment for a CMS User Then verify the status on the card is "Pending - RAI" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is 1915b Waiver Amendment Then verify there is a State header in the details section @@ -104,6 +110,8 @@ Feature: Waiver Package Details View: 1915 b Waiver Amendment for a CMS User Then verify the status on the card is "Approved" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is 1915b Waiver Amendment Then verify there is a State header in the details section @@ -134,6 +142,8 @@ Feature: Waiver Package Details View: 1915 b Waiver Amendment for a CMS User Then verify the status on the card is "Disapproved" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is 1915b Waiver Amendment Then verify there is a State header in the details section @@ -165,6 +175,8 @@ Feature: Waiver Package Details View: 1915 b Waiver Amendment for a CMS User Then verify the status on the card is "Package Withdrawn" Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is 1915b Waiver Amendment Then verify there is a State header in the details section @@ -193,8 +205,9 @@ Feature: Waiver Package Details View: 1915 b Waiver Amendment for a CMS User Then verify the package details page is visible Then verify 2 action cards exist Then verify the status on the card is "Pending - Concurrence" - Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is 1915b Waiver Amendment Then verify there is a State header in the details section @@ -217,15 +230,15 @@ Feature: Waiver Package Details View: 1915 b Waiver Amendment for a CMS User Then verify the Initial Submission download all button exists Then verify the additional information section exists - # Need seed data / reset data update Scenario: Screen Enhance: 1915 b Waiver Amendment Details View - Pending - Approval Then click the Pending - Approval checkbox Then click the Waiver Number link in the first row Then verify the package details page is visible Then verify 2 action cards exist Then verify the status on the card is "Pending - Approval" - Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is 1915b Waiver Amendment Then verify there is a State header in the details section diff --git a/tests/cypress/cypress/e2e/Package_Details_Waiver_Amendment_State_User.spec.feature b/tests/cypress/cypress/e2e/Package_Details_Waiver_Amendment_State_User.spec.feature index d310de589..f6c20bca2 100644 --- a/tests/cypress/cypress/e2e/Package_Details_Waiver_Amendment_State_User.spec.feature +++ b/tests/cypress/cypress/e2e/Package_Details_Waiver_Amendment_State_User.spec.feature @@ -21,6 +21,8 @@ Feature: Waiver Package Details View: 1915 b Waiver Amendment for a State User Then verify package actions header is visible Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is 1915b Waiver Amendment Then verify there is a State header in the details section @@ -49,6 +51,8 @@ Feature: Waiver Package Details View: 1915 b Waiver Amendment for a State User Then verify package actions header is visible Then verify withdraw package action exists Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is 1915b Waiver Amendment Then verify there is a State header in the details section @@ -78,6 +82,8 @@ Feature: Waiver Package Details View: 1915 b Waiver Amendment for a State User Then verify withdraw package action exists Then verify Respond to RAI action exists Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is 1915b Waiver Amendment Then verify there is a State header in the details section @@ -106,6 +112,8 @@ Feature: Waiver Package Details View: 1915 b Waiver Amendment for a State User Then verify package actions header is visible Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is 1915b Waiver Amendment Then verify there is a State header in the details section @@ -135,6 +143,8 @@ Feature: Waiver Package Details View: 1915 b Waiver Amendment for a State User Then verify package actions header is visible Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is 1915b Waiver Amendment Then verify there is a State header in the details section @@ -163,6 +173,8 @@ Feature: Waiver Package Details View: 1915 b Waiver Amendment for a State User Then verify package actions header is visible Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is 1915b Waiver Amendment Then verify there is a State header in the details section @@ -187,6 +199,8 @@ Feature: Waiver Package Details View: 1915 b Waiver Amendment for a State User Then verify package actions header is visible Then verify there are no package actions available Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is 1915b Waiver Amendment Then verify there is a State header in the details section @@ -217,6 +231,8 @@ Feature: Waiver Package Details View: 1915 b Waiver Amendment for a State User Then verify withdraw package action exists Then verify Withdraw Formal RAI Response package action exists Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is 1915b Waiver Amendment Then verify there is a State header in the details section diff --git a/tests/cypress/cypress/e2e/Profile_View_CMS_Approver.spec.feature b/tests/cypress/cypress/e2e/Profile_View_CMS_Approver.spec.feature index c879260b1..9112e51d1 100644 --- a/tests/cypress/cypress/e2e/Profile_View_CMS_Approver.spec.feature +++ b/tests/cypress/cypress/e2e/Profile_View_CMS_Approver.spec.feature @@ -3,7 +3,7 @@ Feature: OY2_8618_CMS_Approver Given I am on Login Page When Clicking on Development Login When Login with "an Active" "CMS Role Approver" user - Then i am on User Management Page + Then I am on the User Management Page Then Click on My Account Then Click on Manage Profile When I am on My Profile Page diff --git a/tests/cypress/cypress/e2e/Profile_View_CMS_System_Admin.spec.feature b/tests/cypress/cypress/e2e/Profile_View_CMS_System_Admin.spec.feature index d242bf5c3..cabd256c7 100644 --- a/tests/cypress/cypress/e2e/Profile_View_CMS_System_Admin.spec.feature +++ b/tests/cypress/cypress/e2e/Profile_View_CMS_System_Admin.spec.feature @@ -4,7 +4,7 @@ Feature: OY2_8618_CMS_System_Admin When Clicking on Development Login When Login with "an Active" "CMS System Admin" user Then Click on User Management Tab - Then i am on User Management Page + Then I am on the User Management Page Then Click on My Account Then Click on Manage Profile When I am on My Profile Page diff --git a/tests/cypress/cypress/e2e/Profile_View_Helpdesk_User.spec.feature b/tests/cypress/cypress/e2e/Profile_View_Helpdesk_User.spec.feature index d600b97e3..75593ebee 100644 --- a/tests/cypress/cypress/e2e/Profile_View_Helpdesk_User.spec.feature +++ b/tests/cypress/cypress/e2e/Profile_View_Helpdesk_User.spec.feature @@ -12,7 +12,7 @@ Feature: Helpdesk User Then verify state column does not exist Then verify submitted by column exists Then Click on User Management Tab - Then i am on User Management Page + Then I am on the User Management Page Then verify User Management is Displayed Then verify Export to Excel CSV is Displayed Then verify Name is Displayed diff --git a/tests/cypress/cypress/e2e/Profile_View_State_System_Admin.spec.feature b/tests/cypress/cypress/e2e/Profile_View_State_System_Admin.spec.feature index e9b79de59..b1d898ea2 100644 --- a/tests/cypress/cypress/e2e/Profile_View_State_System_Admin.spec.feature +++ b/tests/cypress/cypress/e2e/Profile_View_State_System_Admin.spec.feature @@ -4,7 +4,7 @@ Feature: OY2_9990_State_System_Admin_Profile_Screen_Enhancements When Clicking on Development Login When Login with "an Active" "CMS System Admin" user Then Click on User Management Tab - Then i am on User Management Page + Then I am on the User Management Page Then verify User Management is Displayed Then verify Export to Excel CSV is Displayed Then verify Name is Displayed diff --git a/tests/cypress/cypress/e2e/Request_A_Role_Change.spec.feature b/tests/cypress/cypress/e2e/Request_A_Role_Change.spec.feature index d94bc0c3a..00459df72 100644 --- a/tests/cypress/cypress/e2e/Request_A_Role_Change.spec.feature +++ b/tests/cypress/cypress/e2e/Request_A_Role_Change.spec.feature @@ -46,7 +46,7 @@ Feature: OY2-12679 Users can request a role change in OneMAC Given I am on Login Page When Clicking on Development Login When Login with "an Active" "CMS Role Approver" user - Then i am on User Management Page + Then I am on the User Management Page Then Click on My Account Then verify that Request a Role Change button exists Then click on Request a Role Change button diff --git a/tests/cypress/cypress/e2e/Subsequent_Submission_1915b_Amendment_Waiver.spec.feature b/tests/cypress/cypress/e2e/Subsequent_Submission_1915b_Amendment_Waiver.spec.feature new file mode 100644 index 000000000..e4d8c5e9c --- /dev/null +++ b/tests/cypress/cypress/e2e/Subsequent_Submission_1915b_Amendment_Waiver.spec.feature @@ -0,0 +1,93 @@ +Feature: Subsequent Submission 1915b Waiver Amendment + Background: Reoccuring Steps + Given I am on Login Page + When Clicking on Development Login + When Login with "an Active" "State Submitter" user + Then click on the Waivers tab + Then Click on Filter Button + Then click on Type + Then uncheck all of the type checkboxes + Then click 1915b Waiver Amendment check box + Then click on Type + Then click on Status + Then uncheck all of the status checkboxes + Then click Under Review checkbox + Then Click on Filter Button + + Scenario: Screen Enhance - Subsequent Document from the details page + Then click the Waiver Number link in the first row + Then verify the package details page is visible + Then verify Upload Subsequent Documents action exists + Then click the Upload Subsequent Documents action button + Then verify the page header is "Upload Subsequent Waiver Amendment Documentation" + Then verify the form title is "Waiver Amendment Subsequent Submission Details" + Then verify "1915(b) Waiver Amendment Number" is prefilled + Then verify Type is "1915(b) Waiver Amendment" + #Then verify the Subsequent "Waiver Amendment" Documents section exists + Then verify the additional information section exists + Then verify the submit button is disabled + Then verify form cancel button exists + Then attach "adobe.pdf" file to attachment 1 + Then into "Additional Information" type "This is an automated subsequent submission test." + Then Click the Submit Button without waiting + Then verify the modal pop-up is visible + Then verify the detailed text in the modal contains "OneMAC is solely for file submission purposes." + Then verify the yes, submit modal button is visible and clickable + Then click modal cancel button + Then click form cancel button + Then click Leave Anyway form button + Then verify the package details page is visible + + Scenario: Screen Enhance - Subsequent Documents from the package dashboard + Then click the actions button in row one + Then verify Upload Subsequent Documents action exists + Then click the Upload Subsequent Documents action button + Then verify the page header is "Upload Subsequent Waiver Amendment Documentation" + Then verify the form title is "Waiver Amendment Subsequent Submission Details" + Then verify "1915(b) Waiver Amendment Number" is prefilled + Then verify Type is "1915(b) Waiver Amendment" + #Then verify the Subsequent "Waiver Amendment" Documents section exists + Then verify the additional information section exists + Then verify the submit button is disabled + Then verify form cancel button exists + Then attach "adobe.pdf" file to attachment 1 + Then into "Additional Information" type "This is an automated subsequent submission test." + Then Click the Submit Button without waiting + Then verify the modal pop-up is visible + Then verify the detailed text in the modal contains "OneMAC is solely for file submission purposes." + Then verify the yes, submit modal button is visible and clickable + Then click modal cancel button + Then click form cancel button + Then click Leave Anyway form button + Then i am on Dashboard Page + + Scenario: Upload Subsequent Documents from the package dashboard + Then click the actions button in row one + Then click the Upload Subsequent Documents action button + Then verify the page header is "Upload Subsequent Waiver Amendment Documentation" + Then attach "adobe.pdf" file to attachment 1 + Then into "Additional Information" type "This is an automated subsequent submission test." + Then Click the Submit Button without waiting + Then verify the modal pop-up is visible + Then verify the detailed text in the modal contains "OneMAC is solely for file submission purposes." + Then verify the yes, submit modal button is visible and clickable + Then click the yes, submit modal button + Then i am on Dashboard Page + Then verify the success message is "Attachments have been successfully submitted." + + Scenario: Upload Subsequent Documents from the details page + Then click the Waiver Number link in the first row + Then verify the package details page is visible + Then click the Upload Subsequent Documents action button + Then verify the page header is "Upload Subsequent Waiver Amendment Documentation" + Then attach "adobe.pdf" file to attachment 1 + Then into "Additional Information" type "This is an automated subsequent submission test." + Then Click the Submit Button without waiting + Then verify the modal pop-up is visible + Then verify the detailed text in the modal contains "OneMAC is solely for file submission purposes." + Then verify the yes, submit modal button is visible and clickable + Then click the yes, submit modal button + Then verify the package details page is visible + Then verify the success message is "Attachments have been successfully submitted" + Then verify the Subsequent Documentation Uploaded caret button exists + Then verify the Subsequent Documentation download all button exists \ No newline at end of file diff --git a/tests/cypress/cypress/e2e/Subsequent_Submission_1915c_Appendix_K.spec.feature b/tests/cypress/cypress/e2e/Subsequent_Submission_1915c_Appendix_K.spec.feature new file mode 100644 index 000000000..c9bb692c7 --- /dev/null +++ b/tests/cypress/cypress/e2e/Subsequent_Submission_1915c_Appendix_K.spec.feature @@ -0,0 +1,94 @@ +Feature: Subsequent Submission 1915c App K Waiver + Background: Reoccuring Steps + Given I am on Login Page + When Clicking on Development Login + When Login with "an Active" "State Submitter" user + Then click on the Waivers tab + Then Click on Filter Button + Then click on Type + Then uncheck all of the type checkboxes + Then click 1915c Appendix K Amendment check box + Then click on Type + Then click on Status + Then uncheck all of the status checkboxes + Then click Under Review checkbox + Then Click on Filter Button + + Scenario: Screen Enhance - Subsequent Document from the details page + Then click the Waiver Number link in the first row + Then verify the package details page is visible + Then verify Upload Subsequent Documents action exists + Then click the Upload Subsequent Documents action button + Then verify the page header is "Upload Subsequent 1915(c) Appendix K Documentation" + Then verify the form title is "1915(c) Appendix K Subsequent Submission Details" + Then verify "Waiver Amendment Number" is prefilled + Then verify Type is "1915(c) Appendix K Amendment" + Then verify the Subsequent "1915(c) Appendix K" Documents section exists + Then verify the additional information section exists + Then verify the submit button is disabled + Then verify form cancel button exists + Then attach "adobe.pdf" file to attachment 1 + Then into "Additional Information" type "This is an automated subsequent submission test." + Then Click the Submit Button without waiting + Then verify the modal pop-up is visible + Then verify the detailed text in the modal contains "OneMAC is solely for file submission purposes." + Then verify the yes, submit modal button is visible and clickable + Then click modal cancel button + Then click form cancel button + Then click Leave Anyway form button + Then verify the package details page is visible + + Scenario: Screen Enhance - Subsequent Documents from the package dashboard + Then click the actions button in row one + Then verify Upload Subsequent Documents action exists + Then click the Upload Subsequent Documents action button + Then verify the page header is "Upload Subsequent 1915(c) Appendix K Documentation" + Then verify the form title is "1915(c) Appendix K Subsequent Submission Details" + Then verify "Waiver Amendment Number" is prefilled + Then verify Type is "1915(c) Appendix K Amendment" + Then verify the Subsequent "1915(c) Appendix K" Documents section exists + Then verify the additional information section exists + Then verify the submit button is disabled + Then verify form cancel button exists + Then attach "adobe.pdf" file to attachment 1 + Then into "Additional Information" type "This is an automated subsequent submission test." + Then Click the Submit Button without waiting + Then verify the modal pop-up is visible + Then verify the detailed text in the modal contains "OneMAC is solely for file submission purposes." + Then verify the yes, submit modal button is visible and clickable + Then click modal cancel button + Then click form cancel button + Then click Leave Anyway form button + Then i am on Dashboard Page + + Scenario: Upload Subsequent Documents from the package dashboard + Then click the actions button in row one + Then click the Upload Subsequent Documents action button + Then verify the page header is "Upload Subsequent 1915(c) Appendix K Documentation" + Then verify "Waiver Amendment Number" is prefilled + Then attach "adobe.pdf" file to attachment 1 + Then into "Additional Information" type "This is an automated subsequent submission test." + Then Click the Submit Button without waiting + Then verify the modal pop-up is visible + Then verify the detailed text in the modal contains "OneMAC is solely for file submission purposes." + Then click the yes, submit modal button + Then i am on Dashboard Page + Then verify the success message is "Attachments have been successfully submitted." + + Scenario: Upload Subsequent Documents from the details page + Then click the Waiver Number link in the first row + Then verify the package details page is visible + Then click the Upload Subsequent Documents action button + Then verify the page header is "Upload Subsequent 1915(c) Appendix K Documentation" + Then verify "Waiver Amendment Number" is prefilled + Then attach "adobe.pdf" file to attachment 1 + Then into "Additional Information" type "This is an automated subsequent submission test." + Then Click the Submit Button without waiting + Then verify the modal pop-up is visible + Then verify the detailed text in the modal contains "OneMAC is solely for file submission purposes." + Then verify the yes, submit modal button is visible and clickable + Then click the yes, submit modal button + Then verify the package details page is visible + Then verify the success message is "Attachments have been successfully submitted" + Then verify the Subsequent Documentation Uploaded caret button exists + Then verify the Subsequent Documentation download all button exists \ No newline at end of file diff --git a/tests/cypress/cypress/e2e/Subsequent_Submission_CHIP_Spa.spec.feature b/tests/cypress/cypress/e2e/Subsequent_Submission_CHIP_Spa.spec.feature new file mode 100644 index 000000000..0ed55931e --- /dev/null +++ b/tests/cypress/cypress/e2e/Subsequent_Submission_CHIP_Spa.spec.feature @@ -0,0 +1,94 @@ +Feature: CHIP SPA State Details View - Card View with Actions + Background: Reoccuring Steps + Given I am on Login Page + When Clicking on Development Login + When Login with "an Active" "State Submitter" user + Then Click on Filter Button + Then click on Type + Then uncheck all of the type checkboxes + Then click CHIP SPA check box + Then click on Type + Then click on Status + Then uncheck all of the status checkboxes + Then click Under Review checkbox + Then Click on Filter Button + + Scenario: Screen Enhance - Subsequent Document from the details page + Then click the SPA ID link in the first row + Then verify the package details page is visible + Then verify Upload Subsequent Documents action exists + Then click the Upload Subsequent Documents action button + Then verify the page header is "Upload Subsequent CHIP SPA Documentation" + Then verify the form title is "CHIP SPA Subsequent Submission Details" + Then verify "SPA ID" is prefilled + Then verify Type is "CHIP SPA" + Then verify the Subsequent "CHIP SPA" Documents section exists + Then verify the additional information section exists + Then verify the submit button is disabled + Then verify form cancel button exists + Then attach "adobe.pdf" file to attachment 1 + Then into "Additional Information" type "This is an automated subsequent submission test." + Then Click the Submit Button without waiting + Then verify the modal pop-up is visible + Then verify the detailed text in the modal contains "OneMAC is solely for file submission purposes." + Then verify the yes, submit modal button is visible and clickable + Then click modal cancel button + Then click form cancel button + Then click Leave Anyway form button + Then verify the package details page is visible + + Scenario: Screen Enhance - Subsequent Documents from the package dashboard + Then click the actions button in row one + Then verify Upload Subsequent Documents action exists + Then click the Upload Subsequent Documents action button + Then verify the page header is "Upload Subsequent CHIP SPA Documentation" + Then verify the form title is "CHIP SPA Subsequent Submission Details" + Then verify "SPA ID" is prefilled + Then verify Type is "CHIP SPA" + Then verify the Subsequent "CHIP SPA" Documents section exists + Then verify the additional information section exists + Then verify the submit button is disabled + Then verify form cancel button exists + Then attach "adobe.pdf" file to attachment 1 + Then into "Additional Information" type "This is an automated subsequent submission test." + Then Click the Submit Button without waiting + Then verify the modal pop-up is visible + Then verify the detailed text in the modal contains "OneMAC is solely for file submission purposes." + Then verify the yes, submit modal button is visible and clickable + Then click modal cancel button + Then click form cancel button + Then click Leave Anyway form button + Then i am on Dashboard Page + + Scenario: Upload Subsequent Documents from the package dashboard + Then click the actions button in row one + Then click the Upload Subsequent Documents action button + Then verify the page header is "Upload Subsequent CHIP SPA Documentation" + Then verify "SPA ID" is prefilled + Then attach "adobe.pdf" file to attachment 1 + Then into "Additional Information" type "This is an automated subsequent submission test." + Then Click the Submit Button without waiting + Then verify the modal pop-up is visible + Then verify the detailed text in the modal contains "OneMAC is solely for file submission purposes." + Then verify the yes, submit modal button is visible and clickable + Then click the yes, submit modal button + Then i am on Dashboard Page + Then verify the success message is "Attachments have been successfully submitted." + + Scenario: Upload Subsequent Documents from the details page + Then click the SPA ID link in the first row + Then verify the package details page is visible + Then click the Upload Subsequent Documents action button + Then verify the page header is "Upload Subsequent CHIP SPA Documentation" + Then verify "SPA ID" is prefilled + Then attach "adobe.pdf" file to attachment 1 + Then into "Additional Information" type "This is an automated subsequent submission test." + Then Click the Submit Button without waiting + Then verify the modal pop-up is visible + Then verify the detailed text in the modal contains "OneMAC is solely for file submission purposes." + Then verify the yes, submit modal button is visible and clickable + Then click the yes, submit modal button + Then verify the package details page is visible + Then verify the success message is "Attachments have been successfully submitted" + Then verify the Subsequent Documentation Uploaded caret button exists + Then verify the Subsequent Documentation download all button exists \ No newline at end of file diff --git a/tests/cypress/cypress/e2e/Subsequent_Submission_Initial_Waiver.spec.feature b/tests/cypress/cypress/e2e/Subsequent_Submission_Initial_Waiver.spec.feature new file mode 100644 index 000000000..241ee6afc --- /dev/null +++ b/tests/cypress/cypress/e2e/Subsequent_Submission_Initial_Waiver.spec.feature @@ -0,0 +1,96 @@ +Feature: Subsequent Submission 1915b Initial Waiver + Background: Reoccuring Steps + Given I am on Login Page + When Clicking on Development Login + When Login with "an Active" "State Submitter" user + Then click on the Waivers tab + Then Click on Filter Button + Then click on Type + Then uncheck all of the type checkboxes + Then click 1915b Initial Waiver check box + Then click on Type + Then click on Status + Then uncheck all of the status checkboxes + Then click Under Review checkbox + Then Click on Filter Button + + Scenario: Screen Enhance - Subsequent Document from the details page + Then click the Waiver Number link in the first row + Then verify the package details page is visible + Then verify Upload Subsequent Documents action exists + Then click the Upload Subsequent Documents action button + Then verify the page header is "Upload Subsequent Waiver Documentation" + Then verify the form title is "Initial Waiver Subsequent Submission Details" + Then verify "Initial Waiver Number" is prefilled + Then verify Type is "1915(b) Initial Waiver" + Then verify the Subsequent "Initial Waiver" Documents section exists + Then verify the additional information section exists + Then verify the submit button is disabled + Then verify form cancel button exists + Then attach "adobe.pdf" file to attachment 1 + Then into "Additional Information" type "This is an automated subsequent submission test." + Then Click the Submit Button without waiting + Then verify the modal pop-up is visible + Then verify the detailed text in the modal contains "OneMAC is solely for file submission purposes." + Then verify the yes, submit modal button is visible and clickable + Then click modal cancel button + Then click form cancel button + Then click Leave Anyway form button + Then verify the package details page is visible + + Scenario: Screen Enhance - Subsequent Documents from the package dashboard + Then click the actions button in row one + Then click the Upload Subsequent Documents action button + Then verify the page header is "Upload Subsequent Waiver Documentation" + Then verify the form title is "Initial Waiver Subsequent Submission Details" + Then verify "Initial Waiver Number" is prefilled + Then verify Type is "1915(b) Initial Waiver" + Then verify the Subsequent "Initial Waiver" Documents section exists + Then verify the additional information section exists + Then verify the submit button is disabled + Then verify form cancel button exists + Then attach "adobe.pdf" file to attachment 1 + Then into "Additional Information" type "This is an automated subsequent submission test." + Then Click the Submit Button without waiting + Then verify the modal pop-up is visible + Then verify the detailed text in the modal contains "OneMAC is solely for file submission purposes." + Then verify the yes, submit modal button is visible and clickable + Then click modal cancel button + Then click form cancel button + Then click Leave Anyway form button + Then i am on Dashboard Page + + Scenario: Upload Subsequent Documents from the package dashboard + Then click the actions button in row one + Then click the Upload Subsequent Documents action button + Then verify the page header is "Upload Subsequent Waiver Documentation" + Then verify "Initial Waiver Number" is prefilled + Then attach "adobe.pdf" file to attachment 1 + Then into "Additional Information" type "This is an automated subsequent submission test." + Then Click the Submit Button without waiting + Then verify the modal pop-up is visible + Then verify the detailed text in the modal contains "OneMAC is solely for file submission purposes." + Then verify the yes, submit modal button is visible and clickable + Then click the yes, submit modal button + Then i am on Dashboard Page + Then verify the success message is "Attachments have been successfully submitted." + + + Scenario: Upload Subsequent Documents from the details page + Then click the Waiver Number link in the first row + Then verify the package details page is visible + Then click the Upload Subsequent Documents action button + Then verify the page header is "Upload Subsequent Waiver Documentation" + Then verify "Initial Waiver Number" is prefilled + Then attach "adobe.pdf" file to attachment 1 + Then into "Additional Information" type "This is an automated subsequent submission test." + Then Click the Submit Button without waiting + Then verify the modal pop-up is visible + Then verify the detailed text in the modal contains "OneMAC is solely for file submission purposes." + Then verify the yes, submit modal button is visible and clickable + Then click the yes, submit modal button + Then verify the package details page is visible + Then verify the success message is "Attachments have been successfully submitted" + Then verify the Subsequent Documentation Uploaded caret button exists + Then verify the Subsequent Documentation download all button exists + \ No newline at end of file diff --git a/tests/cypress/cypress/e2e/Subsequent_Submission_Medicaid_Spa.spec.feature b/tests/cypress/cypress/e2e/Subsequent_Submission_Medicaid_Spa.spec.feature new file mode 100644 index 000000000..0645f1736 --- /dev/null +++ b/tests/cypress/cypress/e2e/Subsequent_Submission_Medicaid_Spa.spec.feature @@ -0,0 +1,97 @@ +Feature: Medicaid SPA State Details View - Card View with Actions + Background: Reoccuring Steps + Given I am on Login Page + When Clicking on Development Login + When Login with "an Active" "State Submitter" user + Then Click on Filter Button + Then click on Type + Then uncheck all of the type checkboxes + Then click Medicaid SPA check box + Then click on Type + Then click on Status + Then uncheck all of the status checkboxes + Then click Under Review checkbox + Then Click on Filter Button + + Scenario: Screen Enhance - Subsequent Document from the details page + Then click the SPA ID link in the first row + Then verify the package details page is visible + Then verify Upload Subsequent Documents action exists + Then click the Upload Subsequent Documents action button + Then verify the page header is "Upload Subsequent Medicaid SPA Documentation" + Then verify the form title is "Medicaid SPA Subsequent Submission Details" + Then verify "SPA ID" is prefilled + Then verify Type is "Medicaid SPA" + Then verify the Subsequent "Medicaid SPA" Documents section exists + Then verify the Cover Letter attachment is not listed + Then verify the additional information section exists + Then verify the submit button is disabled + Then verify form cancel button exists + Then attach "adobe.pdf" file to attachment 1 + Then into "Additional Information" type "This is an automated subsequent submission test." + Then Click the Submit Button without waiting + Then verify the modal pop-up is visible + Then verify the detailed text in the modal contains "OneMAC is solely for file submission purposes." + Then verify the yes, submit modal button is visible and clickable + Then click modal cancel button + Then click form cancel button + Then click Leave Anyway form button + Then verify the package details page is visible + + Scenario: Screen Enhance - Subsequent Documents from the package dashboard + Then click the actions button in row one + Then verify Upload Subsequent Documents action exists + Then click the Upload Subsequent Documents action button + Then verify the page header is "Upload Subsequent Medicaid SPA Documentation" + Then verify the form title is "Medicaid SPA Subsequent Submission Details" + Then verify "SPA ID" is prefilled + Then verify Type is "Medicaid SPA" + Then verify the Subsequent "Medicaid SPA" Documents section exists + Then verify the Cover Letter attachment is not listed + Then verify the additional information section exists + Then verify the submit button is disabled + Then verify form cancel button exists + Then attach "adobe.pdf" file to attachment 1 + Then into "Additional Information" type "This is an automated subsequent submission test." + Then Click the Submit Button without waiting + Then verify the modal pop-up is visible + Then verify the detailed text in the modal contains "OneMAC is solely for file submission purposes." + Then verify the yes, submit modal button is visible and clickable + Then click modal cancel button + Then click form cancel button + Then click Leave Anyway form button + Then i am on Dashboard Page + + Scenario: Upload Subsequent Documents from the package dashboard + Then click the actions button in row one + Then click the Upload Subsequent Documents action button + Then verify the page header is "Upload Subsequent Medicaid SPA Documentation" + Then verify "SPA ID" is prefilled + Then attach "adobe.pdf" file to attachment 1 + Then into "Additional Information" type "This is an automated subsequent submission test." + Then Click the Submit Button without waiting + Then verify the modal pop-up is visible + Then verify the detailed text in the modal contains "OneMAC is solely for file submission purposes." + Then verify the yes, submit modal button is visible and clickable + Then click the yes, submit modal button + Then i am on Dashboard Page + Then verify the success message is "Attachments have been successfully submitted" + + + Scenario: Upload Subsequent Documents from the details page + Then click the SPA ID link in the first row + Then verify the package details page is visible + Then click the Upload Subsequent Documents action button + Then verify the page header is "Upload Subsequent Medicaid SPA Documentation" + Then verify "SPA ID" is prefilled + Then attach "adobe.pdf" file to attachment 1 + Then into "Additional Information" type "This is an automated subsequent submission test." + Then Click the Submit Button without waiting + Then verify the modal pop-up is visible + Then verify the detailed text in the modal contains "OneMAC is solely for file submission purposes." + Then verify the yes, submit modal button is visible and clickable + Then click the yes, submit modal button + Then verify the package details page is visible + Then verify the success message is "Attachments have been successfully submitted" + Then verify the Subsequent Documentation Uploaded caret button exists + Then verify the Subsequent Documentation download all button exists \ No newline at end of file diff --git a/tests/cypress/cypress/e2e/Subsequent_Submission_Renewal_Waiver.spec.feature b/tests/cypress/cypress/e2e/Subsequent_Submission_Renewal_Waiver.spec.feature new file mode 100644 index 000000000..ba145a41e --- /dev/null +++ b/tests/cypress/cypress/e2e/Subsequent_Submission_Renewal_Waiver.spec.feature @@ -0,0 +1,95 @@ +Feature: Subsequent Submission 1915b Renewal Waiver + Background: Reoccuring Steps + Given I am on Login Page + When Clicking on Development Login + When Login with "an Active" "State Submitter" user + Then click on the Waivers tab + Then Click on Filter Button + Then click on Type + Then uncheck all of the type checkboxes + Then click 1915b Waiver Renewal check box + Then click on Type + Then click on Status + Then uncheck all of the status checkboxes + Then click Under Review checkbox + Then Click on Filter Button + + Scenario: Screen Enhance - Subsequent Document from the details page + Then click the Waiver Number link in the first row + Then verify the package details page is visible + Then verify Upload Subsequent Documents action exists + Then click the Upload Subsequent Documents action button + Then verify the page header is "Upload Subsequent Waiver Renewal Documentation" + Then verify the form title is "Waiver Renewal Subsequent Submission Details" + Then verify "1915(b) Waiver Renewal Number" is prefilled + Then verify Type is "1915(b) Waiver Renewal" + Then verify the Subsequent "Waiver Renewal" Documents section exists + Then verify the additional information section exists + Then verify the submit button is disabled + Then verify form cancel button exists + Then attach "adobe.pdf" file to attachment 1 + Then into "Additional Information" type "This is an automated subsequent submission test." + Then Click the Submit Button without waiting + Then verify the modal pop-up is visible + Then verify the detailed text in the modal contains "OneMAC is solely for file submission purposes." + Then verify the yes, submit modal button is visible and clickable + Then click modal cancel button + Then click form cancel button + Then click Leave Anyway form button + Then verify the package details page is visible + + Scenario: Screen Enhance - Subsequent Documents from the package dashboard + Then click the actions button in row one + Then verify Upload Subsequent Documents action exists + Then click the Upload Subsequent Documents action button + Then verify the page header is "Upload Subsequent Waiver Renewal Documentation" + Then verify the form title is "Waiver Renewal Subsequent Submission Details" + Then verify "1915(b) Waiver Renewal Number" is prefilled + Then verify Type is "1915(b) Waiver Renewal" + Then verify the Subsequent "Waiver Renewal" Documents section exists + Then verify the additional information section exists + Then verify the submit button is disabled + Then verify form cancel button exists + Then attach "adobe.pdf" file to attachment 1 + Then into "Additional Information" type "This is an automated subsequent submission test." + Then Click the Submit Button without waiting + Then verify the modal pop-up is visible + Then verify the detailed text in the modal contains "OneMAC is solely for file submission purposes." + Then verify the yes, submit modal button is visible and clickable + Then click modal cancel button + Then click form cancel button + Then click Leave Anyway form button + Then i am on Dashboard Page + + Scenario: Upload Subsequent Documents from the package dashboard + Then click the actions button in row one + Then click the Upload Subsequent Documents action button + Then verify the page header is "Upload Subsequent Waiver Renewal Documentation" + Then verify "1915(b) Waiver Renewal Number" is prefilled + Then attach "adobe.pdf" file to attachment 1 + Then into "Additional Information" type "This is an automated subsequent submission test." + Then Click the Submit Button without waiting + Then verify the modal pop-up is visible + Then verify the detailed text in the modal contains "OneMAC is solely for file submission purposes." + Then verify the yes, submit modal button is visible and clickable + Then click the yes, submit modal button + Then i am on Dashboard Page + Then verify the success message is "Attachments have been successfully submitted" + + Scenario: Upload Subsequent Documents from the details page + Then click the Waiver Number link in the first row + Then verify the package details page is visible + Then click the Upload Subsequent Documents action button + Then verify the page header is "Upload Subsequent Waiver Renewal Documentation" + Then verify "1915(b) Waiver Renewal Number" is prefilled + Then attach "adobe.pdf" file to attachment 1 + Then into "Additional Information" type "This is an automated subsequent submission test." + Then Click the Submit Button without waiting + Then verify the modal pop-up is visible + Then verify the detailed text in the modal contains "OneMAC is solely for file submission purposes." + Then verify the yes, submit modal button is visible and clickable + Then click the yes, submit modal button + Then verify the package details page is visible + Then verify the success message is "Attachments have been successfully submitted" + Then verify the Subsequent Documentation Uploaded caret button exists + Then verify the Subsequent Documentation download all button exists \ No newline at end of file diff --git a/tests/cypress/cypress/e2e/Temporary_Extension_1915b_Form.spec.feature b/tests/cypress/cypress/e2e/Temporary_Extension_1915b_Form.spec.feature index 87c4fc9aa..58e00268b 100644 --- a/tests/cypress/cypress/e2e/Temporary_Extension_1915b_Form.spec.feature +++ b/tests/cypress/cypress/e2e/Temporary_Extension_1915b_Form.spec.feature @@ -18,6 +18,8 @@ Feature: Package Dashboard Temporary Extension Then search for "MD-5533.R00.TE00" Then click the Waiver Number link in the first row Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is 1915b Temporary Extension Then verify there is a Approved Initial or Renewal Number header in the details section diff --git a/tests/cypress/cypress/e2e/Temporary_Extension_1915c_Form.spec.feature b/tests/cypress/cypress/e2e/Temporary_Extension_1915c_Form.spec.feature index 2b3560142..a9c626707 100644 --- a/tests/cypress/cypress/e2e/Temporary_Extension_1915c_Form.spec.feature +++ b/tests/cypress/cypress/e2e/Temporary_Extension_1915c_Form.spec.feature @@ -19,6 +19,8 @@ Feature: Package Dashboard Temporary Extension Then search for "MD-5533.R00.TE01" Then click the Waiver Number link in the first row Then verify the details section exists + Then verify there is a Latest Package Activity header in the details section + Then verify a full date and time entry exists for the Latest Package Activity Then verify there is a Type header in the details section Then verify the type is 1915c Temporary Extension Then verify there is a Approved Initial or Renewal Number header in the details section diff --git a/tests/cypress/cypress/e2e/common/steps.js b/tests/cypress/cypress/e2e/common/steps.js index 4e7399ca7..85ab106a5 100644 --- a/tests/cypress/cypress/e2e/common/steps.js +++ b/tests/cypress/cypress/e2e/common/steps.js @@ -79,22 +79,6 @@ Then( ); } ); -Then( - "verify the detailed text in the modal contains you are submitting your official formal RAI Response to restart the SPA review process and a new 90th day will be identified", - () => { - OneMacFormPage.verifyModalTextIs( - "you are submitting your official formal RAI Response to restart the SPA review process and a new 90th day will be identified." - ); - } -); -Then( - "verify the detailed text in the modal contains you are submitting your official formal RAI Response to start the 90 day clock review process", - () => { - OneMacFormPage.verifyModalTextIs( - "you are submitting your official formal RAI Response to start the 90 day clock review process" - ); - } -); Then("verify form cancel button exists", () => { OneMacFormPage.verifyCancelBtnExists(); @@ -118,7 +102,7 @@ Then("verify submission successful message in the alert bar", () => { OneMacDashboardPage.verifySuccessMessage1IsDisplayed(); }); -Then("i am on User Management Page", () => { +Then("I am on the User Management Page", () => { OneMacUserManagmentPage.verifyWeAreOnUserManagmentPage(); }); Then("Click on My Account", () => { @@ -1500,6 +1484,12 @@ Then("click Yes, withdraw response button", () => { Then("verify Yes, withdraw response button exists", () => { OneMacDashboardPage.verifyConfirmWithdrawResponseBtnExists(); }); +Then("click the yes, submit modal button", () => { + OneMacFormPage.clickYesSubmitBTN(); +}); +Then("verify the yes, submit modal button is visible and clickable", () => { + OneMacFormPage.verifyModalSubmitExistsAndClickable(); +}); Then("verify the package details page is visible", () => { OneMacPackageDetailsPage.verifyPackageDetailsPageIsVisible(); }); @@ -2073,3 +2063,73 @@ Then("verify all sections are expanded", () => { Then("verify page url contains {string}", (checkUrl) => { OneMacDashboardPage.verifyPageByURL(checkUrl); }); +Then("verify the Subsequent Documentation Uploaded caret button exists", () => { + OneMacPackageDetailsPage.verifySubsequentSubmissionCaretBtnExists(); +}); +Then("click the Subsequent Documentation Uploaded caret button", () => { + OneMacPackageDetailsPage.clickSubsequentSubmissionCaretBtn(); +}); +Then("verify the Subsequent Documentation download all button exists", () => { + OneMacPackageDetailsPage.verifySubsequentSubmissionDownloadAllBtnExists(); +}); +Then("click the Subsequent Documentation download all button", () => { + OneMacPackageDetailsPage.clickSubsequentSubmissionDownloadAllBtn(); +}); +Then("verify Upload Subsequent Documents action exists", () => { + OneMacPackageDetailsPage.verifyUploadSubsequentDocumentsActionBtnExists(); +}); +Then("click the Upload Subsequent Documents action button", () => { + OneMacPackageDetailsPage.clickUploadSubsequentDocumentsActionBtn(); +}); +Then("verify the Subsequent {string} Documents section exists", (type) => { + OneMacFormPage.verifySubsequentDocumentsSectionExistsWith(type); +}); +Then("verify the detailed text in the modal contains {string}", (s) => { + OneMacFormPage.verifyModalTextIs(s); +}); +Then("verify the Cover Letter attachment is not listed", () => { + OneMacFormPage.verifyCoverLetterDoesNotExist(); +}); +Then("verify Latest Package Activity checkbox exists", () => { + OneMacDashboardPage.verifyLatestPackageActivityCheckboxExists(); +}); +Then("click Latest Package Activity checkbox", () => { + OneMacDashboardPage.clickCheckBoxLatestPackageActivity(); +}); +Then("verify Latest Package Activity column exists", () => { + OneMacDashboardPage.verifyLatestPackageActivityColumnExists(); +}); +Then("verify Latest Package Activity column does not exist", () => { + OneMacDashboardPage.verifyLatestPackageActivityDoesNotExist(); +}); +Then("click on Latest Package Activity filter dropdown", () => { + OneMacDashboardPage.clickOnLatestPackageActivityFilterDropdown(); +}); +Then("verify Latest Package Activity date picker filter exists", () => { + OneMacDashboardPage.verifyLatestPackageActivityDatePickerFilterExists(); +}); +Then("click on Latest Package Activity date picker filter", () => { + OneMacDashboardPage.clickOnLatestPackageActivityDatePickerFilter(); +}); +Then("verify Latest Package Activity dropdown filter exists", () => { + OneMacDashboardPage.verifyLatestPackageActivityDateFilterDropdownExists(); +}); +Then("click on Latest Package Activity dropdown filter", () => { + OneMacDashboardPage.clickOnLatestPackageActivityFilterDropdown(); +}); + +Then("click on Latest Package Activity dropdown filter", () => { + OneMacDashboardPage.clickOnLatestPackageActivityFilterDropdown(); +}); +Then( + "verify there is a Latest Package Activity header in the details section", + () => { + OneMacPackageDetailsPage.verifyLatestPackageActivityHeaderExists(); + } +); +Then( + "verify a full date and time entry exists for the Latest Package Activity", + () => { + OneMacPackageDetailsPage.verifyLatestPackageActivityDateExists(); + } +); diff --git a/tests/cypress/support/pages/oneMacDashboardPage.js b/tests/cypress/support/pages/oneMacDashboardPage.js index f81af72ee..be61f7419 100644 --- a/tests/cypress/support/pages/oneMacDashboardPage.js +++ b/tests/cypress/support/pages/oneMacDashboardPage.js @@ -1,10 +1,6 @@ const newSubmissionBTN = "#new-submission-button"; const successMessage = "#alert-bar h2"; const successMessage1 = "#alert-bar"; -//Element is Xpath use cy.xpath instead of cy.get -const successMessageAfterRAIResponse = - '//*[contains(text(),"Your submission has been received.")]'; - //Element is Xpath use cy.xpath instead of cy.get const IDNUMBER = (id) => `//a[text()="${id}"]`; //Element is Xpath use cy.xpath instead of cy.get @@ -227,20 +223,9 @@ const unsubmittedCheckbox = "//label[contains(@for,'checkbox_packageStatus-Unsubmitted')]"; const packageRowOneID = "#componentId-0"; const packageRowTwoID = "#componentId-1"; -const packageRowTwoInitialSubmissionDate = "#submissionTimestamp-1"; -const packageRowTwo90thDay = "#ninetiethDay-1"; -const packageRowTwoType = "#componentType-1"; -const packageRowTwoState = "#territory-1"; const packageRowTwoStatus = "#packageStatus-1"; //Element is Xpath use cy.xpath instead of cy.get -const parentRowExpander = "//tr[1]//button[@aria-label='Expand row']"; -const rowTwo = "tbody > tr:nth-child(2)"; -const packageRowTwoSubmittedBy = "#submitter-1"; -const packageRowTwoActions = "#packageActions-1"; -//Element is Xpath use cy.xpath instead of cy.get -const packageRowTwoExpirationDate = "#expirationTimestamp-1"; -//Element is Xpath use cy.xpath instead of cy.get -const childRows = "//tr[@class = 'child-row-expanded']"; + const withdrawPackageBtn = "//a[text()='Withdraw Package']"; const withdrawPackageConfirmBtn = "//button[contains(text(),'Yes, withdraw package')]"; @@ -256,6 +241,13 @@ const respondToRAIBtn = const RequestTempExtensionBtn = "//a[text()='Request Temporary Extension']"; const addAmendmentBtn = "//a[text()='Add Amendment']"; const waiverNumLink = (n) => `//a[text()="${n}"]`; +const latestPackageActivityCheckbox = + "//label[contains(@for,'checkbox_columnPicker-Latest Package Activity')]"; +const latestPackageActivityDateFilterDropdown = "#lastActivityTimestamp-button"; +const latestPackageActivityDatePickerFilter = + "#lastActivityTimestamp-date-filter"; +const packageRowOneLatestPackageActivity = "#lastActivityTimestamp-0"; +const latestPackageActivityColumn = "#lastActivityTimestampColHeader"; export class oneMacDashboardPage { verifyPageByURL(expectedUrl) { @@ -997,5 +989,31 @@ export class oneMacDashboardPage { verifyFinalDispositionColumnDoesNotExist() { cy.get(finalDispositionColumn).should("not.exist"); } + verifyLatestPackageActivityCheckboxExists() { + cy.xpath(latestPackageActivityCheckbox).should("exist"); + } + clickCheckBoxLatestPackageActivity() { + cy.xpath(latestPackageActivityCheckbox).click(); + } + verifyLatestPackageActivityColumnExists() { + cy.get(latestPackageActivityColumn).should("be.visible"); + } + verifyLatestPackageActivityDoesNotExist() { + cy.get(latestPackageActivityColumn).should("not.exist"); + } + clickOnLatestPackageActivityFilterDropdown() { + cy.get(latestPackageActivityDateFilterDropdown).wait(1000); + cy.get(latestPackageActivityDateFilterDropdown).click(); + } + verifyLatestPackageActivityDatePickerFilterExists() { + cy.get(latestPackageActivityDatePickerFilter).last().should("exist"); + } + clickOnLatestPackageActivityDatePickerFilter() { + cy.get(latestPackageActivityDatePickerFilter).wait(1000); + cy.get(latestPackageActivityDatePickerFilter).last().click(); + } + verifyLatestPackageActivityDateFilterDropdownExists() { + cy.get(latestPackageActivityDateFilterDropdown).should("be.visible"); + } } export default oneMacDashboardPage; diff --git a/tests/cypress/support/pages/oneMacFormPage.js b/tests/cypress/support/pages/oneMacFormPage.js index 204999b19..85305b62d 100644 --- a/tests/cypress/support/pages/oneMacFormPage.js +++ b/tests/cypress/support/pages/oneMacFormPage.js @@ -14,7 +14,6 @@ const attachmentInfoDescription = "//h3[text()='Attachments']/following-sibling::p[1]"; const enterMmdlBtn = "//button[contains(text(),'Enter the MMDL system')]"; const enterMacProBtn = "//button[contains(text(),'Enter the MACPro system')]"; - const IDInputBox = idElement; const errorMessageID = "#componentIdStatusMsg0"; const errorMessageLine2ID = "#componentIdStatusMsg1"; @@ -26,7 +25,8 @@ const tempExtensionTypeHeader = "//h3[contains(text(),'Temporary Extension Type')]"; const tempExtensionTypeBtn = "#temp-ext-type"; const formIntroElement = "#form-intro"; - +const subsequentDocumentsHeader = (type) => + `//h3[contains(text(),'Subsequent ${type} Documents')]`; const labelElementFromLabel = { "Additional Information": "#additional-information-label", }; @@ -78,6 +78,8 @@ const dateElementsFromLabel = { "Proposed Effective Date of 1915(c) Appendix K Amendment": "#proposed-effective-date", }; +const yesSubmitBtn = "//button[text()='Yes, Submit']"; +const coverLetterAttachment = "//div[contains(text(),'Cover Letter')]"; //internal function for proposed effective date function caculateMonthsInFuture(numMonths) { @@ -319,5 +321,18 @@ export class oneMacFormPage { verifyAttachmentType(attachmentType) { cy.xpath(`//h3[text()='${attachmentType}']`).should("be.visible"); } + verifySubsequentDocumentsSectionExistsWith(type) { + cy.xpath(subsequentDocumentsHeader(type)).should("be.visible"); + } + clickYesSubmitBTN() { + cy.xpath(yesSubmitBtn).click(); + cy.wait(8000); + } + verifyModalSubmitExistsAndClickable() { + cy.xpath(yesSubmitBtn).should("be.visible").and("be.enabled"); + } + verifyCoverLetterDoesNotExist() { + cy.xpath(coverLetterAttachment).should("not.exist"); + } } export default oneMacFormPage; diff --git a/tests/cypress/support/pages/oneMacPackageDetailsPage.js b/tests/cypress/support/pages/oneMacPackageDetailsPage.js index 70999cf6c..09962b0d1 100644 --- a/tests/cypress/support/pages/oneMacPackageDetailsPage.js +++ b/tests/cypress/support/pages/oneMacPackageDetailsPage.js @@ -27,7 +27,6 @@ const detailSection = "//section[@class='detail-section']//h2[contains(.,'Details')]"; const disableRAIResponseWithdrawAction = "//a[text()='Disable Formal RAI Response Withdraw']"; -const CHIPSPAIDHeader = "//h3[contains(text(),'SPA ID')]"; const typeHeader = "//h3[contains(text(),'Type')]"; const parentWaiverNumberHeader = "//h3[contains(text(),'Approved Initial or Renewal Number')]"; @@ -43,8 +42,7 @@ const approvedEffectiveDateHeader = const formalRAIReceivedDateHeader = "//h3[contains(text(),'Formal RAI Received')]"; const adminPkgChangeSection = "//h2[text()='Administrative Package Changes']"; -const additionalInfoSection = - "//section[contains(@id, 'addl-info-chrono')]//h2[text()='Additional Information']"; +const additionalInfoSection = "#additional-information-label"; const waiverAuthorityHeader = "//h3[text()='Waiver Authority']"; const attachmentsSection = "//h2[text()='Supporting Documentation']"; const amendmentTitleHeader = "//h3[text()='Amendment Title']"; @@ -62,6 +60,13 @@ const withdrawalRequestedCaretBtn = '//h2//button[contains(@id,"Package0_caret-button")]'; const subStatus = "#substatus"; const secondClock = "#secondclock"; +const uploadSubsequentDocumentsActionBtn = + "//a[contains(@id,'subsequent-submission-action')]"; +const subsequentSubmissionCaretBtn = + '//h2//button[contains(@id,"Subsequent Documentation Uploaded")]'; +const subsequentSubmissionDownloadAllBtn = + '//button[contains(@id,"dl_Subsequent Documentation Uploaded")]'; +const latestActivityHeader = "//h3[text()='Latest Package Activity']"; export class oneMacPackageDetailsPage { verifyPackageDetailsPageIsVisible() { @@ -268,7 +273,7 @@ export class oneMacPackageDetailsPage { cy.xpath(attachmentsSection).should("be.visible"); } verifyAdditionalInfoSectionExists() { - cy.xpath(additionalInfoSection).should("be.visible"); + cy.get(additionalInfoSection).should("be.visible"); } verifyAdministrativePackageChangesSectionExists() { cy.xpath(adminPkgChangeSection).should("be.visible"); @@ -358,5 +363,34 @@ export class oneMacPackageDetailsPage { verifyTheSubStatus() { cy.get(subStatus).contains("Withdraw Formal RAI Response Enabled"); } + verifyUploadSubsequentDocumentsActionBtnExists() { + cy.xpath(uploadSubsequentDocumentsActionBtn) + .should("be.visible") + .and("contain", "Upload Subsequent Documents"); + } + clickUploadSubsequentDocumentsActionBtn() { + cy.xpath(uploadSubsequentDocumentsActionBtn).click(); + } + verifySubsequentSubmissionCaretBtnExists() { + cy.xpath(subsequentSubmissionCaretBtn).should("be.visible"); + } + clickSubsequentSubmissionCaretBtn() { + cy.xpath(subsequentSubmissionCaretBtn).click(); + } + + verifySubsequentSubmissionDownloadAllBtnExists() { + cy.xpath(subsequentSubmissionDownloadAllBtn).should("be.visible"); + } + clickSubsequentSubmissionDownloadAllBtn() { + cy.xpath(subsequentSubmissionDownloadAllBtn).click(); + } + verifyLatestPackageActivityDateExists() { + cy.xpath(latestActivityHeader) + .next() + .contains(/^[a-zA-Z]{3}.\d{2}.\d{4}||^[a-zA-Z]{3}.\d{1}.\d{4}/); + } + verifyLatestPackageActivityHeaderExists() { + cy.xpath(latestActivityHeader).should("be.visible"); + } } export default oneMacPackageDetailsPage; diff --git a/tests/cypress/support/pages/oneMacUserManagmentPage.js b/tests/cypress/support/pages/oneMacUserManagmentPage.js index a7cf36280..d852de255 100644 --- a/tests/cypress/support/pages/oneMacUserManagmentPage.js +++ b/tests/cypress/support/pages/oneMacUserManagmentPage.js @@ -1,4 +1,4 @@ -const myAccountDropDown = "#myAccountLink"; +const myAccountDropdown = "#myAccountLink"; const manageProfileBTN = "#manageAccountLink"; //Element is Xpath use cy.xpath instead of cy.get const userManagmentHeader = '//h1[contains(text(),"User Management")]'; @@ -21,8 +21,8 @@ const userNameValenciaM = "//td[text()='Valencia McMurray']"; const denyAccessBtn = "//div[@autofocus]//li[text()='Deny Access']"; export class oneMacUserManagmentPage { - clickMyAccountDropDown() { - cy.get(myAccountDropDown).click(); + clickMyAccountDropdown() { + cy.get(myAccountDropdown).click(); } clickmanageProfileBTN() { cy.get(manageProfileBTN).click();