/* global Given, When, Then */ import { Given, When, Then, And, Before } from "cypress-cucumber-preprocessor/steps"; describe("Send a document", () => { const apiUrl = "https://fhir-api.public.post-prod.lifen.fr"; let jsonWebToken, documentReferenceId, communicationRequestId, patientId = ""; Given("I use the API", () => { cy.request({ url: "https://lifen-post-prod.eu.auth0.com/oauth/token", method: "POST", body: { client_id: 'szVsMPaDPUdwqngGiLoHfXFT5XCYPFcy', client_secret: 'sMp2PB-QWBZupCB4IXJrWDJ-7tlpUl09vQ2tMKdy049He7-g93ofbXz7ESlAc82B', audience: 'post-prod-apis', grant_type: 'client_credentials', } }).its('body').then((body) => { jsonWebToken = body.access_token; //cy.log(json_web_token); expect(jsonWebToken).to.not.be.empty; }); }) And("I have the document #1615660", () => { cy.request({ url: `${apiUrl}/fhir/Binary/1615660`, method: 'GET', headers: { "authorization": `Bearer ${jsonWebToken}`, "Prefer": "return=representation" } }).then((response) => { expect(response.status).to.eq(200); expect(response.headers["content-type"]).to.eq("application/pdf"); }); }); And("I have a DocumentReference", () => { cy.request({ url: `${apiUrl}/fhir/DocumentReference`, method: 'POST', headers: { authorization: `Bearer ${jsonWebToken}`, 'content-type': 'application/json', "Prefer": "return=representation" }, json: true, body: { "status": "current", "docStatus": "final", "type": { "coding": [ { "system": "http://loinc.org", "code": "34109-9", "display": "Document médical" } ] }, "indexed": "2021-02-11T09:25:39Z", "description": "aelgain-copiepatient.pdf", "content": [ { "attachment": { "contentType": "application/pdf", "url": "Binary/1615660", "title": "aelgain-copiepatient.pdf" } } ], "resourceType": "DocumentReference" } }).then((response) => { expect(response.status).to.eq(201); expect(response.headers["content-type"]).to.eq("application/fhir+json;charset=UTF-8"); expect(response.body).to.have.property("resourceType", "DocumentReference"); expect(response.body).to.have.property('id'); documentReferenceId = response.body.id }); }); And("I have a CommunicationRequest", () => { cy.request({ url: `${apiUrl}/fhir/CommunicationRequest`, method: 'POST', headers: { authorization: `Bearer ${jsonWebToken}`, 'content-type': 'application/json', "Prefer": "return=representation" }, json: true, body: { "meta": { "tag": [ { "system": "http://lifen.fr/fhir/tag/verified/sender", "code": "SENDER_VERIFIED", "display": "Sender is verified and should not be changed." }, { "system": "http://lifen.fr/fhir/tag/processing/mode", "code": "IMMEDIATE_MODE", "display": "request should be treated in immediate mode" }, { "system": "http://lifen.fr/fhir/CodeSystem/Resource/Tag/PatientAutomaticResending", "code": "NONE", "display": "Patient communication should not be resent" } ] }, "status": "draft", "category": [ { "coding": [ { "system": "http://lifen.fr/fhir/CodeSystem/communication-category", "code": "MEDICAL_REPORT" } ] } ], "priority": "routine", "payload": [ { "contentReference": { "reference": `DocumentReference/${documentReferenceId}` } } ], "sender": { "extension": [ { "url": "http://lifen.fr/fhir/StructureDefinition/Resource/Extension/Source", "valueCode": "USER" } ], "reference": "Organization/2" }, "requester": { "agent": { "extension": [ { "url": "http://lifen.fr/fhir/StructureDefinition/communicationrequest-requester-user-uuid", "valueString": "ea07d7c6-ff4b-43fc-9765-e4235886d30c" } ], "reference": "Organization/2" } }, "resourceType": "CommunicationRequest" } }).then((response) => { expect(response.status).to.eq(201); expect(response.headers["content-type"]).to.eq("application/fhir+json;charset=UTF-8"); expect(response.body).to.have.property("resourceType", "CommunicationRequest"); expect(response.body).to.have.property('id'); expect(response.body).to.have.property('status', 'draft'); communicationRequestId = response.body.id }); }); And("Irène prepared the CommunicationRequest", () => { cy.wait(10000); // avec cypress-recurse, on surveille jusqu'a ce que l'IA ai finit son traitement ; plutot que d'attendre un temps arbitraire. // import { recurse } from 'cypress-recurse' // a placer en début de fichier. // recurse(() => cy.request(...), (response) => { expect(response.body).to.have.property('status', 'suspended') } ).then((response) => {...}) cy.request({ url: `${apiUrl}/fhir/CommunicationRequest/${communicationRequestId}`, method: 'GET', headers: { authorization: `Bearer ${jsonWebToken}` } }).then((response) => { expect(response.status).to.eq(200); expect(response.headers["content-type"]).to.eq("application/fhir+json;charset=UTF-8"); expect(response.body).to.have.property("resourceType", "CommunicationRequest"); expect(response.body).to.have.property('id'); expect(response.body).to.have.property('status', 'suspended'); expect(response.body).to.have.property('subject'); expect(response.body).to.have.property('recipient'); expect(response.body.subject).to.have.property('reference'); let patient = response.body.subject.reference; patientId = patient.split("/")[1]; }); }); And("I have a Patient", () => { cy.request({ url: `${apiUrl}/fhir/Patient/${patientId}`, method: 'GET', headers: { authorization: `Bearer ${jsonWebToken}` } }).then((response) => { expect(response.status).to.eq(200); expect(response.headers["content-type"]).to.eq("application/fhir+json;charset=UTF-8"); expect(response.body).to.have.property("resourceType", "Patient"); expect(response.body).to.have.property('id', patientId); }); }); And("I am connected to my mailbox", () => { cy.visit('/'); cy.get('#email').type("candidature-qa@example.org"); cy.get('#password').type("kHwWawhH5ADNuFb"); cy.get('#continueButton').click(); cy.wait(20000).then(() => { cy.get('#validateButton').click(); }); cy.visit("/request"); cy.get("#account-menu div[title]").should((elm) => { expect(elm).to.contain("candidature-qa@example.org") }); }); When("I send the mail", () => { // Il n'y a pas de moyen fiable de lier la communicationRequestId que l'on a préparer avec l'une des entrée listée. // Il y a bien un code LT-xxxxxxx, mais il faudrais un moyen d'atteindre de le modèle stoquée dans la vue cy.get("#dashboard-dropzone tr:first-child td").eq(1).click(); cy.get("#sending-button").click(); }); Then("the mail is sent", () => { //? // On peux essayer d'attendre une requete de repondre un status // On peux attendre la notification "Envoie du document réussit" }); });