-
Notifications
You must be signed in to change notification settings - Fork 429
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Cypress Test Suite for Sample Test Request Workflow #8977
base: develop
Are you sure you want to change the base?
Changes from 8 commits
1511f69
8f5448d
36b1ceb
66bfe4a
c37f252
3b731aa
b9edb9b
a03ce0d
c6e12eb
e1ffd14
e89ec71
a882727
988fbb1
f7e9ef3
7f8a699
641137a
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,42 @@ | ||||||||||||||||||||||||||||||||||||||
import { SampleTestPage } from "pageobject/Sample/SampleTestCreate"; | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
describe("Sample Test", () => { | ||||||||||||||||||||||||||||||||||||||
const sampleTestPage = new SampleTestPage(); | ||||||||||||||||||||||||||||||||||||||
const sampleTestType = "BA/ETA", | ||||||||||||||||||||||||||||||||||||||
icmrCategory = "Cat 0", | ||||||||||||||||||||||||||||||||||||||
icmrLabel = "Test Icmr Label"; | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
before(() => { | ||||||||||||||||||||||||||||||||||||||
cy.loginByApi("devdistrictadmin", "Coronasafe@123"); | ||||||||||||||||||||||||||||||||||||||
cy.saveLocalStorage(); | ||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
beforeEach(() => { | ||||||||||||||||||||||||||||||||||||||
cy.restoreLocalStorage(); | ||||||||||||||||||||||||||||||||||||||
cy.clearLocalStorage(/filters--.+/); | ||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Move credentials to environment variables or test configuration. Hardcoded credentials in test files pose a security risk and make credential rotation difficult. before(() => {
- cy.loginByApi("devdistrictadmin", "Coronasafe@123");
+ cy.loginByApi(Cypress.env('ADMIN_USERNAME'), Cypress.env('ADMIN_PASSWORD'));
cy.saveLocalStorage();
}); 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
it("should request a new sample test", () => { | ||||||||||||||||||||||||||||||||||||||
sampleTestPage.visitPatientPage(); | ||||||||||||||||||||||||||||||||||||||
sampleTestPage.visitPatientDashboardPage(); | ||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||||||
sampleTestPage.visitSampleRequestPage(); | ||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Add API intercept to ensure the sample request page has fully loaded. To ensure that the sample request page is fully loaded before interacting with it, consider adding a Apply this diff to implement the intercept: // Ensure sample request API is loaded
+ sampleTestPage.interceptSampleRequestAPI();
sampleTestPage.visitSampleRequestPage();
+ sampleTestPage.waitForSampleRequestResponse(); If these methods are not available, you can use: // Ensure sample request API is loaded
+ cy.intercept('GET', '/api/v1/sample/*').as('getSampleRequest');
sampleTestPage.visitSampleRequestPage();
+ cy.wait('@getSampleRequest');
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. like the ai review suggested, there is API verification is missing |
||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||||||||||||||||||||||||||||||||||||||
// Fill form fields | ||||||||||||||||||||||||||||||||||||||
sampleTestPage.selectSampleType(sampleTestType); | ||||||||||||||||||||||||||||||||||||||
sampleTestPage.selectIcmrCategory(icmrCategory); | ||||||||||||||||||||||||||||||||||||||
sampleTestPage.typeIcmrLabel(icmrLabel); | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||||||
// Submit the form | ||||||||||||||||||||||||||||||||||||||
sampleTestPage.submitForm(); | ||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
// Check for sample request notification and history | ||||||||||||||||||||||||||||||||||||||
sampleTestPage.clickOnNotification(); | ||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||||||
sampleTestPage.checkRequestHistory(); | ||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Enhance test reliability with API intercepts and assertions. The test needs improvements in several areas:
it("should request a new sample test", () => {
+ cy.intercept('GET', '/api/v1/patient/*').as('getPatient');
sampleTestPage.visitPatientPage();
- sampleTestPage.visitPatientDashboardPage();
+ cy.wait('@getPatient');
+
+ const patientName = "John Doe"; // Move to test data
+ sampleTestPage.visitPatient(patientName);
+ cy.contains(patientName).should('be.visible');
+ cy.intercept('GET', '/api/v1/sample_test/*').as('getSampleTest');
sampleTestPage.visitSampleRequestPage();
+ cy.wait('@getSampleTest');
// Fill form fields
sampleTestPage.selectSampleType(sampleTestType);
+ cy.get('[data-testid="sample-type"]').should('have.value', sampleTestType);
sampleTestPage.selectIcmrCategory(icmrCategory);
+ cy.get('[data-testid="icmr-category"]').should('have.value', icmrCategory);
sampleTestPage.typeIcmrLabel(icmrLabel);
+ cy.get('[data-testid="icmr-label"]').should('have.value', icmrLabel);
// Submit the form
- sampleTestPage.submitForm();
+ cy.submitButton("Confirm your request to send sample for testing");
// Check for sample request notification and history
- sampleTestPage.clickOnNotification();
+ cy.verifyNotification("Sample test created successfully");
sampleTestPage.checkRequestHistory();
});
|
||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
it("should verify sample request on sample page", () => { | ||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||||||
sampleTestPage.visitSamplePage(); | ||||||||||||||||||||||||||||||||||||||
sampleTestPage.searchPatientSample(sampleTestPage.patientName); | ||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||||||
sampleTestPage.patientSampleMustExist(); | ||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Improve test independence and add explicit assertions. The test case appears to depend on the previous test's state and lacks proper assertions. it("should verify sample request on sample page", () => {
+ cy.intercept('GET', '/api/v1/sample/*').as('getSamples');
sampleTestPage.visitSamplePage();
+ cy.wait('@getSamples');
+ const expectedPatient = "John Doe"; // Move to test data
- sampleTestPage.searchPatientSample(sampleTestPage.patientName);
+ sampleTestPage.searchPatientSample(expectedPatient);
+ cy.get('[data-testid="search-results"]').should('be.visible');
- sampleTestPage.patientSampleMustExist();
+ cy.get('[data-testid="patient-sample"]')
+ .should('contain', expectedPatient)
+ .and('contain', sampleTestType);
}); Consider making this test independent by setting up its own test data, rather than relying on the previous test case.
|
||||||||||||||||||||||||||||||||||||||
}); |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,79 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
export class SampleTestPage { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sampleTestReportHistory = 0; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
patientName = ""; // to search for patient in sample page | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
visitPatientPage() { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cy.awaitUrl("/patients"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
visitPatientDashboardPage() { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cy.get(".patient-stable-ring").first().scrollIntoView(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cy.get(".patient-stable-ring").should("be.visible").first().click(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cy.get("#patient-name") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.invoke("text") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.then((patientName) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
this.patientName = patientName.trim(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cy.get("#patient-details").should("be.visible").click(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Improve selector reliability and error handling in patient dashboard navigation. The current implementation has potential reliability issues:
visitPatientDashboardPage() {
- cy.get(".patient-stable-ring").first().scrollIntoView();
- cy.get(".patient-stable-ring").should("be.visible").first().click();
+ cy.get('[data-testid="patient-card"]')
+ .first()
+ .should("exist")
+ .scrollIntoView()
+ .should("be.visible")
+ .click();
cy.get("#patient-name")
.invoke("text")
.then((patientName) => {
this.patientName = patientName.trim();
+ // Verify patient name was actually extracted
+ expect(this.patientName).to.not.be.empty;
});
cy.get("#patient-details").should("be.visible").click();
} 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
visitSampleRequestPage() { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cy.get("body").then(($body) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if ($body.find("#sample-test-history").length > 0) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cy.get("#sample-test-history") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.its("length") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.then((count) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
this.sampleTestReportHistory = count; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Set to 0 if the element does not exist | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
this.sampleTestReportHistory = 0; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cy.get("#sample-request-btn").scrollIntoView(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cy.get("#sample-request-btn").should("be.visible").click(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Simplify sample history count logic and add error handling. The current implementation of sample history counting is overly complex and could be simplified. visitSampleRequestPage() {
- cy.get("body").then(($body) => {
- if ($body.find("#sample-test-history").length > 0) {
- cy.get("#sample-test-history")
- .its("length")
- .then((count) => {
- this.sampleTestReportHistory = count;
- });
- } else {
- // Set to 0 if the element does not exist
- this.sampleTestReportHistory = 0;
- }
- });
+ // Get sample history count, defaulting to 0 if not found
+ cy.get("#sample-test-history")
+ .then($elements => {
+ this.sampleTestReportHistory = $elements.length;
+ })
+ .catch(() => {
+ this.sampleTestReportHistory = 0;
+ });
+
+ // Verify sample request button exists before clicking
cy.get("#sample-request-btn").scrollIntoView();
- cy.get("#sample-request-btn").should("be.visible").click();
+ cy.get("#sample-request-btn")
+ .should("be.visible")
+ .should("be.enabled")
+ .click();
} 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
selectSampleType(option: string) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cy.get("#sample-type").should("be.visible").click(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cy.get("[role='option']").contains(option).click(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
selectIcmrCategory(option: string) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cy.get("#icmr-category").should("be.visible").click(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cy.get("[role='option']").contains(option).click(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
typeIcmrLabel(label: string) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cy.get("#icmr-label").should("be.visible").type(label); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
submitForm() { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cy.get("#sample-test-submit-btn").scrollIntoView(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cy.get("#sample-test-submit-btn").should("be.visible").click(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Add input validation and error handling to form interactions. The form interaction methods need improved validation and error handling:
- selectSampleType(option: string) {
+ selectSampleType(option: string): void {
+ if (!option) {
+ throw new Error('Sample type option is required');
+ }
cy.get("#sample-type").should("be.visible").click();
- cy.get("[role='option']").contains(option).click();
+ cy.get("[role='option']")
+ .contains(option)
+ .should("exist")
+ .should("be.visible")
+ .click();
}
submitForm() {
+ // Verify form validity before submission
+ cy.get('form')
+ .invoke('get', 0)
+ .then($form => {
+ expect($form.checkValidity()).to.be.true;
+ });
cy.get("#sample-test-submit-btn").scrollIntoView();
cy.get("#sample-test-submit-btn")
.should("be.visible")
+ .should("be.enabled")
.click();
}
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
clickOnNotification() { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cy.get(".pnotify-container").should("be.visible").click(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
checkRequestHistory() { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cy.get("#sample-test-history").scrollIntoView(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cy.get("#sample-test-history").should( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"have.length", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
this.sampleTestReportHistory + 1, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
visitSamplePage() { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cy.awaitUrl("/sample"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
searchPatientSample() { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cy.get("#search_patient_name").should("be.visible").type(this.patientName); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
patientSampleMustExist() { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cy.get("#sample-card").should("be.visible"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Enhance verification methods with better error handling and timeouts. The verification methods need improvements in reliability and error handling:
clickOnNotification() {
- cy.get(".pnotify-container").should("be.visible").click();
+ cy.get(".pnotify-container", { timeout: 10000 })
+ .should("be.visible")
+ .should("not.be.disabled")
+ .click();
}
checkRequestHistory() {
cy.get("#sample-test-history").scrollIntoView();
- cy.get("#sample-test-history").should(
- "have.length",
- this.sampleTestReportHistory + 1,
- );
+ cy.get("#sample-test-history", { timeout: 10000 })
+ .should("exist")
+ .then($elements => {
+ const currentCount = $elements.length;
+ expect(currentCount).to.equal(
+ this.sampleTestReportHistory + 1,
+ `Expected sample history count to increase by 1 from ${this.sampleTestReportHistory} to ${this.sampleTestReportHistory + 1}, but found ${currentCount}`
+ );
+ });
}
patientSampleMustExist() {
- cy.get("#sample-card").should("be.visible");
+ cy.get("#sample-card", { timeout: 10000 })
+ .should("exist")
+ .should("be.visible")
+ .then($card => {
+ expect($card).to.contain(this.patientName);
+ });
} 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -1370,6 +1370,7 @@ export const PatientHome = (props: any) => { | |
) | ||
} | ||
authorizeFor={NonReadOnlyUsers} | ||
id="sample-request-btn" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 💡 Codebase verification Both instances of "Request Sample Test" should have test identifiers for consistency The codebase has two instances of "Request Sample Test":
For consistent test automation, consider adding a test identifier to the 🔗 Analysis chainLGTM! Test identifier added for Cypress automation. The addition of the Let's verify if similar buttons in the desktop view also need test identifiers: 🏁 Scripts executedThe following scripts were executed for the analysis: Script: #!/bin/bash
# Search for other sample test related buttons in the file
rg --type tsx "Request Sample Test" -B 2 -A 2
Length of output: 75 Script: #!/bin/bash
# Search for other sample test related buttons in the file, using ripgrep without file type filter
rg "Request Sample Test" -B 2 -A 2
Length of output: 856 Script: #!/bin/bash
# Let's check if these other instances have test identifiers
rg -B 5 -A 5 "Request Sample Test" src/components/Patient/PatientHome.tsx
Length of output: 909 |
||
> | ||
<span className="flex w-full items-center justify-start gap-2"> | ||
<CareIcon icon="l-medkit" className="text-xl" /> | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.