Skip to content

Commit

Permalink
Write initial rate test
Browse files Browse the repository at this point in the history
  • Loading branch information
haworku committed Oct 30, 2023
1 parent 59be128 commit 7d20826
Show file tree
Hide file tree
Showing 7 changed files with 172 additions and 105 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -411,7 +411,7 @@ export const RateReviewsTable = ({
</div>
</div>
<Table fullWidth>
<thead>
<thead data-testid="rate-reviews-table">
{reactTable.getHeaderGroups().map((headerGroup) => (
<tr key={headerGroup.id}>
{headerGroup.headers.map((header) => (
Expand Down
158 changes: 71 additions & 87 deletions services/cypress/integration/cmsWorkflow/rateReview.spec.ts
Original file line number Diff line number Diff line change
@@ -1,107 +1,91 @@
import { HealthPlanFormDataType, packageName } from "../../../app-web/src/common-code/healthPlanFormDataType"
import { base64ToDomain } from "../../../app-web/src/common-code/proto/healthPlanFormDataProto"
import { HealthPlanPackage } from "../../gen/gqlClient"
import { cmsUser, minnesotaStatePrograms, stateUser } from "../../utils/apollo-test-utils"

describe('CMS user can view rate reviews', () => {
beforeEach(() => {
cy.stubFeatureFlags()
cy.interceptGraphQL()
})
it('and navigate to a specific rate from the rates dashboard', () => {
// Assign Division to CMS user zuko
cy.apiAssignDivisionToCMSUser(cmsUser(), 'DMCO').then(() => {
// Create a new submission
cy.apiCreateAndSubmitContractOnlySubmission(stateUser()).then(
(pkg) => {
})
})
// state user adds a new package
cy.logInAsStateUser()
cy.startNewContractAndRatesSubmission()
cy.fillOutBaseContractDetails()
cy.navigateFormByButtonClick('CONTINUE')
// By default return lastest revision
const getFormData = (pkg: HealthPlanPackage, indx = 0): HealthPlanFormDataType => {
const latestRevision = pkg.revisions[indx].node
if (!latestRevision) {
throw new Error('no revisions found for package' + pkg.id)
}

cy.findByRole('heading', {
level: 2,
name: /Rate details/,
}).should('exist')
cy.fillOutNewRateCertification()
cy.navigateFormByButtonClick('CONTINUE')
const unwrapResult = base64ToDomain(latestRevision.formDataProto)
if (unwrapResult instanceof Error) {
throw unwrapResult
}

cy.findByRole('heading', {
level: 2,
name: /Contacts/,
}).should('exist')
cy.fillOutStateContact()
cy.fillOutAdditionalActuaryContact()
cy.navigateFormByButtonClick('CONTINUE')
return unwrapResult
}

cy.findByRole('heading', {
level: 2,
name: /Supporting documents/,
}).should('exist')
cy.fillOutSupportingDocuments()
cy.navigateFormByButtonClick('CONTINUE')

// store submission id for reference later
let submissionId = ''
cy.location().then((fullUrl) => {
const { pathname } = fullUrl
const pathnameArray = pathname.split('/')
submissionId = pathnameArray[2]
it('and navigate to a specific rate from the rates dashboard', () => {
cy.interceptFeatureFlags({
'rates-db-refactor':true,
'rate-reviews-dashboard': true
})

// submit package
cy.findByRole('heading', { level: 2, name: /Review and submit/ })
cy.submitStateSubmissionForm()

// store submission name for later
cy.location().then((loc) => {
expect(loc.search).to.match(/.*justSubmitted=*/)
const submissionName = loc.search.split('=').pop()
if (submissionName === undefined) {
throw new Error('No submission name found' + loc.search)
}

// sign out state user
cy.logOut()
// sign in CMS user
cy.logInAsCMSUser()
cy.findByTestId('cms-dashboard-page').should('exist')
cy.findByRole('table').should('exist')
cy.findByText(submissionName).should('exist')
// check the table of submissions

// only one matching entry
cy.get('table')
.findAllByText(submissionName)
.should('have.length', 1)
cy.apiAssignDivisionToCMSUser(cmsUser(), 'DMCO').then(() => {

// has proper row data
cy.get('table')
// Create a new contract and rates submission with two attached rates
cy.apiCreateAndSubmitContractWithRates(stateUser()).then(
(pkg) => {
const submission = getFormData(pkg)
const submissionName = packageName(
pkg.stateCode,
submission.stateNumber,
submission.programIDs,
minnesotaStatePrograms
)
// Then check both rates in rate reviews table
cy.logInAsCMSUser({
initialURL: `/dashboard/rate-reviews`,
})
const rate1 = submission.rateInfos[0]
const rate2 = submission.rateInfos[1]
cy.get('table')
.findByRole('link', { name: rate1.rateCertificationName })
.should('exist')
.findByText(submissionName)
.parent()
.findByTestId('submission-date')
.should('not.be.empty')

cy.get('table')
cy.get('table')
.findByRole('link', { name: rate2.rateCertificationName })
.should('exist')
.findByText(submissionName)
.parent()
.siblings('[data-testid="submission-status"]')
.should('have.text', 'Submitted')

cy.get('table')
.contains('a', submissionName)
.parents('tr')
.findByTestId('submission-type')
.should('have.text', 'Contract action and rate certification')
// click the first rate to navigate to rate summary page
cy.get('table')
.findByRole('link', { name: rate1.rateCertificationName })
.should('exist').click()
cy.url({ timeout: 10_000 }).should('contain',rate1.id)
cy.findByRole('heading', {
name: `${rate1.rateCertificationName}`,
}).should('exist')
cy.findByText('Rate certification type').should('exist').siblings('dd').should('have.text', 'New rate certification')
cy.findByText('Rating period').should('exist').siblings('dd').should('have.text', '06/01/2025 to 05/30/2026')
cy.findByText('Date certified').should('exist').siblings('dd').should('have.text', '04/15/2025')
cy.findByText('Submission this rate was submitted with').should('exist').siblings('dd').should('have.text', submissionName)
cy.findByText('Certifying actuary').should('exist').siblings('dd').should('have.text', 'actuary1test titleemail@example.comMercer')
// cy.findByText('Download all rate documents').should('exist')
cy.findByRole('table', {
name: 'Rate certification',
}).should('exist')
cy.findByText('rate1Document1.pdf').should('exist')
cy.findByRole('table', {
name: 'Rate supporting documents',
}).should('exist')
})
cy.findByText('rate1SupportingDocument1.pdf').should('exist')

cy.get('table')
.contains('a', submissionName)
.should('have.attr', 'href')
// Go back to dashboard and check both rates in the table
// check the dashboard has the columns we expect
cy.findByText('Back to dashboard').should('exist').click()
cy.url({ timeout: 10_000 }).should('contain', 'rate-reviews')
cy.findByText('Rate reviews').should('exist')
cy.get('thead').should('have.attr', 'data-testid', 'rate-reviews-table').should('be.visible') // can't put id on table itself because data attributes not passing through in react-uswds component

// can navigate to submission summary by clicking link
cy.findByText(submissionName).should('exist').click()
cy.url({ timeout: 10_000 }).should('contain', submissionId)
cy.findByTestId('submission-summary').should('exist')
})
})
})
16 changes: 14 additions & 2 deletions services/cypress/support/apiCommands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ const createAndSubmitContractOnlyPackage = async (
const createAndSubmitContractWithRates = async (
apolloClient: ApolloClient<NormalizedCacheObject>
): Promise<HealthPlanPackage> => {
console.log('in here')
const newSubmission1 = await apolloClient.mutate({
mutation: CreateHealthPlanPackageDocument,
variables: {
Expand Down Expand Up @@ -115,8 +116,6 @@ const createAndSubmitContractWithRates = async (
},
},
})


return submission1.data.submitHealthPlanPackage.pkg
}

Expand Down Expand Up @@ -177,6 +176,19 @@ Cypress.Commands.add(
)
)


Cypress.Commands.add(
'apiCreateAndSubmitContractWithRates',
(stateUser): Cypress.Chainable<HealthPlanPackage> =>
cy.task<DocumentNode>('readGraphQLSchema').then((schema) =>
apolloClientWrapper(
schema,
stateUser,
createAndSubmitContractWithRates
)
)
)

Cypress.Commands.add(
'apiAssignDivisionToCMSUser',
(cmsUser, division): Cypress.Chainable<void> =>
Expand Down
1 change: 1 addition & 0 deletions services/cypress/support/commands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ Cypress.Commands.add('interceptGraphQL', () => {
aliasQuery(req, 'fetchHealthPlanPackage')
aliasQuery(req, 'fetchHealthPlanPackageWithQuestions')
aliasQuery(req, 'indexHealthPlanPackages')
aliasQuery(req, 'indexRates')
aliasMutation(req, 'createHealthPlanPackage')
aliasMutation(req, 'updateHealthPlanFormData')
aliasMutation(req, 'submitHealthPlanPackage')
Expand Down
1 change: 1 addition & 0 deletions services/cypress/support/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ declare global {
}): void

apiCreateAndSubmitContractOnlySubmission(stateUser: StateUserType): Cypress.Chainable<HealthPlanPackage>
apiCreateAndSubmitContractWithRates(stateUser: StateUserType): Cypress.Chainable<HealthPlanPackage>
apiAssignDivisionToCMSUser(cmsUser: CMSUserType, division: DivisionType): Cypress.Chainable<void>

interceptGraphQL(): void
Expand Down
8 changes: 6 additions & 2 deletions services/cypress/support/loginCommands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,15 @@ Cypress.Commands.add(
cy.wait('@fetchCurrentUserQuery', { timeout: 20_000 })
if (initialURL?.includes('submissions')) {
cy.wait('@fetchHealthPlanPackageWithQuestionsQuery', { timeout: 20_000 }) // for cases where CMs user goes to specific submission on login, likely from email link
} else if (initialURL?.includes('rate-reviews')) {
cy.wait('@indexRatesQuery', { timeout: 80_000 })
cy.findByTestId('cms-dashboard-page',{timeout: 10_000 }).should('exist')
cy.findByRole('heading', {name: /rate reviews/}).should('exist')
} else {
// Default behavior on login is to go to CMS dashboard
// Default behavior on login is to go to CMS dashboard submissions
cy.wait('@indexHealthPlanPackagesQuery', { timeout: 80_000 })
cy.findByTestId('cms-dashboard-page',{timeout: 10_000 }).should('exist')
cy.findByRole('heading', {name: 'Submissions'}).should('exist')
cy.findByRole('heading', {name: /Submissions/}).should('exist')
}
}
)
Expand Down
Loading

0 comments on commit 7d20826

Please sign in to comment.