openmrs-esm-patient-chart icon indicating copy to clipboard operation
openmrs-esm-patient-chart copied to clipboard

(test) O3-2943: Edit E2E test for the immunization recording workflow

Open Vijaykv5 opened this issue 10 months ago • 20 comments

Requirements

  • [x] This PR has a title that briefly describes the work done including the ticket number. If there is a ticket, make sure your PR title includes a conventional commit label. See existing PR titles for inspiration.
  • [ ] My work conforms to the OpenMRS 3.0 Styleguide and design documentation.
  • [x] My work includes tests or is validated by existing tests.

Summary

This PR introduces changes that edits E2E test for recording an immunization

Related Issue

O3-2943

Other

Vijaykv5 avatar Mar 31 '24 16:03 Vijaykv5

@kdaud This was passing in local instance,but in github cli, the test is failing Kindly can you review it Thanks

Vijaykv5 avatar Mar 31 '24 16:03 Vijaykv5

@Vijaykv5 did you take a look at the logs?

kdaud avatar Apr 01 '24 09:04 kdaud

Here's the playwright report:

playwright-report (2).zip

Looks like the test is failing because there are no immunizations to edit. Maybe you need to combine the two specs.

denniskigen avatar Apr 05 '24 18:04 denniskigen

@Vijaykv5 did you take a look at the logs?

Yes @kdaud I'm not able to figure out, the test is failing here: await page.click('[aria-label="Expand current row"]');

Vijaykv5 avatar Apr 05 '24 18:04 Vijaykv5

but @denniskigen we are separating each functions right? add, edit and cancel immunization. #comment

Vijaykv5 avatar Apr 05 '24 18:04 Vijaykv5

I defer to @jayasanka-sack for the ideal approach.

denniskigen avatar Apr 05 '24 18:04 denniskigen

@Vijaykv5

Check line 10. When the edit test runs, it fails because it's using a brand-new patient with no existing data. We could switch to using beforeAll to avoid this, but then the edit test would depend on the create test, and we want to keep them separate.

A good fix would be to create an immunization record at the start of the edit test using the REST API. That should provide the necessary data for the test to work properly.

Lemme know if you have any questions! :)

jayasanka-sack avatar Apr 22 '24 06:04 jayasanka-sack

@Vijaykv5

Check line 10. When the edit test runs, it fails because it's using a brand-new patient with no existing data. We could switch to using beforeAll to avoid this, but then the edit test would depend on the create test, and we want to keep them separate.

A good fix would be to create an immunization record at the start of the edit test using the REST API. That should provide the necessary data for the test to work properly.

Lemme know if you have any questions! :)

@jayasanka-sack So do I need to call this API inside commands or I may need to create a separate file for creating immunization record using the REST API?

Vijaykv5 avatar Apr 22 '24 12:04 Vijaykv5

@jayasanka-sack So do I need to call this API inside commands or I may need to create a separate file for creating immunization record using the REST API?

@Vijaykv5 Write a command and call it within the edit test. Yes, you may need to create a new file under the commands directory.

jayasanka-sack avatar Apr 24 '24 07:04 jayasanka-sack

@jayasanka-sack could you please help Vijay get this over the line?

denniskigen avatar May 24 '24 12:05 denniskigen

@jayasanka-sack The PR now works fine locally with the help of Immunization data but It fails in E2E Tests . Any possible reason for this?

Vijaykv5 avatar Jun 24 '24 13:06 Vijaykv5

Hi @Vijaykv5 , are you still available to work on this? You need to be able to debug test failures on your own. Especially if they are as straightforward as the one here.

brandones avatar Jul 23 '24 15:07 brandones

Sorry @brandones I was pinned with some other tickets.

Will soon fix this up!

Vijaykv5 avatar Jul 26 '24 07:07 Vijaykv5

I tested this locally with Docker and dev3 and it works fine. It only fails when running on GitHub Actions. I'm not sure why. This is the request and the response. @ibacher @mogoodrich @mseaton @mherman22 any idea what this error message means?

Request:

{
  "resourceType": "Immunization",
  "status": "completed",
  "vaccineCode": {
    "coding": [
      {
        "code": "783AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
        "display": "Hepatitis B vaccination"
      }
    ]
  },
  "patient": {
    "type": "Patient",
    "reference": "Patient/abd466a2-b4cc-4290-901c-5444c96662f0"
  },
  "encounter": {
    "type": "Encounter",
    "reference": "Encounter/a394aaa2-d9ef-42bd-9abc-813d91a68423"
  },
  "occurrenceDateTime": "2024-06-10T13:50:00.000Z",
  "expirationDate": "2052-06-29T18:30:00.000Z",
  "location": {
    "type": "Location",
    "reference": "Location/44c3efb0-2583-4c80-a79e-1f756a03c0a1"
  },
  "performer": [
    {
      "actor": {
        "type": "Practitioner",
        "reference": "Practitioner/f39e57d8-1185-4199-8567-6f1eeb160f05"
      }
    }
  ],
  "manufacturer": {
    "display": "Sanofi Pasteur SA"
  },
  "lotNumber": "POLIO-001",
  "protocolApplied": [
    {
      "doseNumberPositiveInt": 1,
      "series": null
    }
  ]
}

Response:

{
  "resourceType": "OperationOutcome",
  "text": {
    "status": "generated",
    "div": "<div xmlns=\"http://www.w3.org/1999/xhtml\"><h1>Operation Outcome</h1><table border=\"0\"><tr><td style=\"font-weight: bold;\">ERROR</td><td>[]</td><td><pre>The Immunization resource is required to be attached to an OpenMRS encounter involving a single encounter provider with the role 'Clinician'. This is not the case for immunization '5f109c97-9f6f-4330-bb9f-a29d1d18fad9' attached to encounter 'f647ef65-07e6-42ff-9e1c-cb6e45f8ed3d'.</pre></td>\n\t\t\t</tr>\n\t\t</table>\n\t</div>"
  },
  "issue": [
    {
      "severity": "error",
      "code": "business-rule",
      "diagnostics": "The Immunization resource is required to be attached to an OpenMRS encounter involving a single encounter provider with the role 'Clinician'. This is not the case for immunization '5f109c97-9f6f-4330-bb9f-a29d1d18fad9' attached to encounter 'f647ef65-07e6-42ff-9e1c-cb6e45f8ed3d'."
    }
  ]
}

jayasanka-sack avatar Jul 26 '24 13:07 jayasanka-sack

I tested this locally with Docker and dev3 and it works fine. It only fails when running on GitHub Actions. I'm not sure why. This is the request and the response. @ibacher @mogoodrich @mseaton @mherman22 any idea what this error message means?

Request:

{
  "resourceType": "Immunization",
  "status": "completed",
  "vaccineCode": {
    "coding": [
      {
        "code": "783AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
        "display": "Hepatitis B vaccination"
      }
    ]
  },
  "patient": {
    "type": "Patient",
    "reference": "Patient/abd466a2-b4cc-4290-901c-5444c96662f0"
  },
  "encounter": {
    "type": "Encounter",
    "reference": "Encounter/a394aaa2-d9ef-42bd-9abc-813d91a68423"
  },
  "occurrenceDateTime": "2024-06-10T13:50:00.000Z",
  "expirationDate": "2052-06-29T18:30:00.000Z",
  "location": {
    "type": "Location",
    "reference": "Location/44c3efb0-2583-4c80-a79e-1f756a03c0a1"
  },
  "performer": [
    {
      "actor": {
        "type": "Practitioner",
        "reference": "Practitioner/f39e57d8-1185-4199-8567-6f1eeb160f05"
      }
    }
  ],
  "manufacturer": {
    "display": "Sanofi Pasteur SA"
  },
  "lotNumber": "POLIO-001",
  "protocolApplied": [
    {
      "doseNumberPositiveInt": 1,
      "series": null
    }
  ]
}

Response:

{
  "resourceType": "OperationOutcome",
  "text": {
    "status": "generated",
    "div": "<div xmlns=\"http://www.w3.org/1999/xhtml\"><h1>Operation Outcome</h1><table border=\"0\"><tr><td style=\"font-weight: bold;\">ERROR</td><td>[]</td><td><pre>The Immunization resource is required to be attached to an OpenMRS encounter involving a single encounter provider with the role 'Clinician'. This is not the case for immunization '5f109c97-9f6f-4330-bb9f-a29d1d18fad9' attached to encounter 'f647ef65-07e6-42ff-9e1c-cb6e45f8ed3d'.</pre></td>\n\t\t\t</tr>\n\t\t</table>\n\t</div>"
  },
  "issue": [
    {
      "severity": "error",
      "code": "business-rule",
      "diagnostics": "The Immunization resource is required to be attached to an OpenMRS encounter involving a single encounter provider with the role 'Clinician'. This is not the case for immunization '5f109c97-9f6f-4330-bb9f-a29d1d18fad9' attached to encounter 'f647ef65-07e6-42ff-9e1c-cb6e45f8ed3d'."
    }
  ]
}

Not sure if this answers you but all it is saying here is that the immunization resource you are creating which is attached to the encounter above doesn't involve an encounter provider with the role 'Clinician' so i think you might need to create a visit then an encounter then encounter provider in that order -> see this https://github.com/openmrs/openmrs-module-fhir2/blob/de31a6838324ba2546b6eb71a69cdd77f36aa168/test-data/src/main/resources/org/openmrs/module/fhir2/api/dao/impl/FhirImmunizationDaoImplTest_initial_data.xml#L28-L36

mherman22 avatar Jul 26 '24 20:07 mherman22

@jayasanka-sack Well, the error is being produced by OpenMRS business logic, so it's not anything weird about how GitHub Actions works. There's probably just some difference between that server's setup and dev3 and the Docker setup. Maybe the user doesn't have the Clinician role, or maybe some UUIDs are different, or maybe the encounter isn't getting created the same way.

brandones avatar Aug 19 '24 16:08 brandones

The encounter should be an encounter and not a visit. I think it can be left blank. Granted that's probably less than ideal.

ibacher avatar Aug 20 '24 18:08 ibacher

The encounter should be an encounter and not a visit. I think it can be left blank. Granted that's probably less than ideal.

Ohhh that's the issue! @Vijaykv5 could you please fix this?

jayasanka-sack avatar Aug 23 '24 16:08 jayasanka-sack

We should probably ticket this for the FHIR2 module, though. It should be possible to specify a visit and just create the encounter if required.

ibacher avatar Aug 23 '24 16:08 ibacher

Ping @Vijaykv5

brandones avatar Sep 15 '24 10:09 brandones