Skip to content
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

New Cypress Test | Create Partial Investigation Log Update #9034

Merged
merged 5 commits into from
Nov 11, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions cypress/e2e/patient_spec/PatientInvestigation.cy.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import { PatientPage } from "pageobject/Patient/PatientCreation";
import PatientInvestigation from "pageobject/Patient/PatientInvestigation";

import LoginPage from "../../pageobject/Login/LoginPage";

describe("Patient Investigation Creation from Patient consultation page", () => {
const loginPage = new LoginPage();
const patientPage = new PatientPage();
const patientInvestigation = new PatientInvestigation();
const patientName = "Dummy Patient 12";

Comment on lines +6 to +11
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Improve test data management and suite description.

The hardcoded patient name ("Dummy Patient 12") should be moved to a test data fixture for better maintainability. Also, consider making the test suite description more specific to the functionality being tested.

+import testData from '../../fixtures/patient.json';
+
-describe("Patient Investigation Creation from Patient consultation page", () => {
+describe("Patient Investigation Workflow - Consultation Page", () => {
   const loginPage = new LoginPage();
   const patientPage = new PatientPage();
   const patientInvestigation = new PatientInvestigation();
-  const patientName = "Dummy Patient 12";
+  const { patientName } = testData;

Committable suggestion skipped: line range outside the PR's diff.

before(() => {
loginPage.loginAsDistrictAdmin();
cy.saveLocalStorage();
});

beforeEach(() => {
cy.restoreLocalStorage();
cy.clearLocalStorage(/filters--.+/);
cy.awaitUrl("/patients");
});

it("Create a investigation for a patient and verify its reflection", () => {
patientPage.visitPatient(patientName);
patientInvestigation.clickInvestigationTab();
patientInvestigation.clickLogLabResults();
cy.clickAndMultiSelectOption("#investigations", [
"Haematology",
"Urine Test",
]);
cy.submitButton("Save Investigation");
cy.verifyNotification("Please Enter at least one value");
});
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Enhance test coverage and add assertions.

The current test only covers the error path. Consider adding:

  1. Positive test scenarios (successful investigation creation)
  2. Assertions for UI state changes
  3. Verification of investigation data persistence

Example additional test:

it("should successfully create and save an investigation", () => {
  patientPage.visitPatient(patientName);
  patientInvestigation.clickInvestigationTab();
  patientInvestigation.clickLogLabResults();
  
  // Select investigations
  cy.clickAndMultiSelectOption("#investigations", ["Haematology"]);
  
  // Fill required values
  cy.get('[data-testid="haemoglobin-input"]').type("14.5");
  
  // Save and verify
  cy.submitButton("Save Investigation");
  cy.verifyNotification("Investigation saved successfully");
  
  // Verify investigation appears in the list
  cy.get('[data-testid="investigations-list"]')
    .should("contain", "Haematology")
    .and("contain", "14.5");
});


afterEach(() => {
cy.saveLocalStorage();
});
Comment on lines +37 to +39
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Add proper test data cleanup.

The afterEach hook only handles localStorage. Consider adding cleanup steps to ensure complete test isolation:

  1. Delete created investigations
  2. Reset any modified patient data
 afterEach(() => {
   cy.saveLocalStorage();
+  // Clean up created investigations
+  cy.task('dbCleanup', { 
+    collection: 'investigations',
+    filter: { patientName }
+  });
 });

Committable suggestion skipped: line range outside the PR's diff.

});
6 changes: 4 additions & 2 deletions cypress/pageobject/Patient/PatientInvestigation.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
class PatientInvestigation {
clickAddInvestigation() {
cy.get("#investigation").scrollIntoView();
cy.verifyAndClickElement("#investigation", "Add Investigation");
}

clickInvestigationTab() {
cy.get("#consultation_tab_nav").scrollIntoView();
cy.verifyAndClickElement("#consultation_tab_nav", "Investigations");
}

Expand All @@ -19,6 +17,10 @@ class PatientInvestigation {
cy.get("#investigation-checkbox").click();
}

clickLogLabResults() {
cy.verifyAndClickElement("#log-lab-results", "Log Lab Results");
}

selectInvestigationFrequency(frequency: string) {
cy.get("#investigation-frequency").click();
cy.contains("button", frequency).should("be.visible").click();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export const ConsultationInvestigationsTab = (props: ConsultationTabProps) => {
<PageTitle title="Investigations" hideBack={true} breadcrumbs={false} />
<div className="pt-6">
<ButtonV2
id="log-lab-results"
authorizeFor={NonReadOnlyUsers}
disabled={!props.patientData.is_active}
onClick={() =>
Expand Down
Loading