diff --git a/fhir-api public post-prod.postman_environment.json b/fhir-api public post-prod.postman_environment.json new file mode 100644 index 0000000..366cdcb --- /dev/null +++ b/fhir-api public post-prod.postman_environment.json @@ -0,0 +1,34 @@ +{ + "id": "5af101ea-e9c8-4791-a37e-b829fedbe0ed", + "name": "fhir-api public post-prod", + "values": [ + { + "key": "baseURL", + "value": "fhir-api.public.post-prod.lifen.fr", + "enabled": true + }, + { + "key": "documentReferenceId", + "value": "", + "enabled": true + }, + { + "key": "binaryId", + "value": "1615660", + "enabled": true + }, + { + "key": "commuicationRequestId", + "value": "", + "enabled": true + }, + { + "key": "patientId", + "value": "", + "enabled": true + } + ], + "_postman_variable_scope": "environment", + "_postman_exported_at": "2021-09-08T10:43:18.947Z", + "_postman_exported_using": "Postman/8.12.1" +} \ No newline at end of file diff --git a/lifen-api.postman_collection.json b/lifen-api.postman_collection.json new file mode 100644 index 0000000..54a1c43 --- /dev/null +++ b/lifen-api.postman_collection.json @@ -0,0 +1,781 @@ +{ + "info": { + "_postman_id": "5764bcaa-18fb-4cdd-a909-cf604ea5ab47", + "name": "lifen-api", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" + }, + "item": [ + { + "name": "a Json Web Token", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Auth succed\", function () {\r", + " if(pm.response.headers.get(\"Content-Type\") === \"application/json\") {\r", + " const responseJson = pm.response.json();\r", + " pm.globals.set(\"json_web_token\", responseJson.access_token);\r", + " now = new Date();\r", + " now.setTime(now.getTime() + (responseJson.expires_in * 1000));\r", + " pm.globals.set(\"token_expiration\", now);\r", + " // We save the expiration date to be challenged in each request. Renew it on pre-request script if necessary.\r", + " }\r", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n\t\"client_id\": \"szVsMPaDPUdwqngGiLoHfXFT5XCYPFcy\",\r\n \"client_secret\": \"sMp2PB-QWBZupCB4IXJrWDJ-7tlpUl09vQ2tMKdy049He7-g93ofbXz7ESlAc82B\",\r\n \"audience\": \"post-prod-apis\",\r\n \"grant_type\": \"client_credentials\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://lifen-post-prod.eu.auth0.com/oauth/token", + "protocol": "https", + "host": [ + "lifen-post-prod", + "eu", + "auth0", + "com" + ], + "path": [ + "oauth", + "token" + ] + } + }, + "response": [] + }, + { + "name": "Binary n°1615660", + "event": [ + { + "listen": "prerequest", + "script": { + "exec": [ + "" + ], + "type": "text/javascript" + } + }, + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Check that the binary exists\", function () {", + " // Chaiexcept syntax", + " pm.response.to.have.status(200);", + "});", + "", + "pm.test(\"Check that the binary is a PDF type\", function () {", + " pm.expect(pm.response.headers.get(\"Content-Type\"), \"The response is not a PDF\").to.include(\"application/pdf\");", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://{{baseURL}}/fhir/Binary/1615660", + "protocol": "https", + "host": [ + "{{baseURL}}" + ], + "path": [ + "fhir", + "Binary", + "1615660" + ] + } + }, + "response": [] + }, + { + "name": "DocumentReference", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.environment.set(\"documentReferenceId\", \"\");", + "", + "pm.test(\"The binary is correclty proccessed as a Document Reference in the server\", function () {", + " // chaisinon syntax", + " pm.response.to.have.status(201);", + " pm.expect(pm.response.headers.get(\"Content-Type\")).to.equal(\"application/fhir+json;charset=UTF-8\");", + "});", + "", + "const responseJson = pm.response.json();", + "", + "pm.test(\"The response is a DocumentReference\", function () {", + " pm.expect(responseJson.resourceType, \"The server did not returned a documentReferenceId\").to.eq(\"DocumentReference\");", + "});", + "", + "pm.test(\"The response have a documentReferenceId (and store it)\", function () {", + " pm.expect(responseJson.id, \"The server did not returned a documentReferenceId\").to.not.be.empty;", + " console.log(`Fetched documentReferenceId: ${responseJson.id}`);", + "", + " // Best practice : separate setup / teardown logic from the testscript itself (ie: action to store data outside of this function)", + " pm.environment.set(\"documentReferenceId\", responseJson.id);", + " pm.expect(pm.environment.get(\"documentReferenceId\")).to.not.be.empty;", + "});", + "", + "pm.test(\"The document Reference status is 'Current'\", function () {", + " pm.expect(responseJson.status).to.be.equals(\"current\");", + "});", + "", + "pm.test(\"The document Reference status is 'Draft'\", function () {", + " // This test SHOULD fail!!!", + " pm.expect(responseJson.status, \"This test MUST fail\").to.be.equals(\"draft\");", + "});", + "", + "pm.test(\"The document status is 'final'\", function () {", + " const responseJson = pm.response.json();", + " pm.expect(responseJson.docStatus).to.be.equals(\"final\");", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "type": "text" + }, + { + "key": "Prefer", + "value": "return=representation", + "type": "text" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"status\": \"current\",\r\n \"docStatus\": \"final\",\r\n \"type\": {\r\n \"coding\": [\r\n {\r\n \"system\": \"http://loinc.org\",\r\n \"code\": \"34109-9\",\r\n \"display\": \"Document médical\"\r\n }\r\n ]\r\n },\r\n \"indexed\": \"2021-02-11T09:25:39Z\",\r\n \"description\": \"aelgain-copiepatient.pdf\",\r\n \"content\": [\r\n {\r\n \"attachment\": {\r\n \"contentType\": \"application/pdf\",\r\n \"url\": \"Binary/1615660\",\r\n \"title\": \"aelgain-copiepatient.pdf\"\r\n }\r\n }\r\n ],\r\n \"resourceType\": \"DocumentReference\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "https://{{baseURL}}/fhir/DocumentReference", + "protocol": "https", + "host": [ + "{{baseURL}}" + ], + "path": [ + "fhir", + "DocumentReference" + ] + } + }, + "response": [ + { + "name": "DocumentReference", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "type": "text" + }, + { + "key": "Prefer", + "value": "return=representation", + "type": "text" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"status\": \"current\",\r\n \"docStatus\": \"final\",\r\n \"type\": {\r\n \"coding\": [\r\n {\r\n \"system\": \"http://loinc.org\",\r\n \"code\": \"34109-9\",\r\n \"display\": \"Document médical\"\r\n }\r\n ]\r\n },\r\n \"indexed\": \"2021-02-11T09:25:39Z\",\r\n \"description\": \"aelgain-copiepatient.pdf\",\r\n \"content\": [\r\n {\r\n \"attachment\": {\r\n \"contentType\": \"application/pdf\",\r\n \"url\": \"Binary/1615660\",\r\n \"title\": \"aelgain-copiepatient.pdf\"\r\n }\r\n }\r\n ],\r\n \"resourceType\": \"DocumentReference\"\r\n}" + }, + "url": { + "raw": "https://{{baseURL}}/fhir/DocumentReference", + "protocol": "https", + "host": [ + "{{baseURL}}" + ], + "path": [ + "fhir", + "DocumentReference" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Date", + "value": "Thu, 02 Sep 2021 10:46:54 GMT" + }, + { + "key": "Content-Type", + "value": "application/fhir+json;charset=UTF-8" + }, + { + "key": "Transfer-Encoding", + "value": "chunked" + }, + { + "key": "Connection", + "value": "keep-alive" + }, + { + "key": "X-B3-TraceId", + "value": "436009ec5e759266" + }, + { + "key": "X-B3-SpanId", + "value": "436009ec5e759266" + }, + { + "key": "X-B3-Sampled", + "value": "1" + }, + { + "key": "X-Powered-By", + "value": "HAPI FHIR 4.2.0 REST Server (FHIR Server; FHIR 3.0.2/DSTU3)" + }, + { + "key": "X-FHIR-Request-Validation", + "value": "No issues detected" + }, + { + "key": "ETag", + "value": "W/\"1\"" + }, + { + "key": "X-Request-ID", + "value": "5192ef4952692aa423763c0e8ca8d950" + }, + { + "key": "Content-Location", + "value": "https://fhir-api.public.post-prod.lifen.fr/fhir/dstu3/DocumentReference/1721103/_history/1" + }, + { + "key": "Last-Modified", + "value": "Thu, 02 Sep 2021 10:46:51 GMT" + }, + { + "key": "Location", + "value": "https://fhir-api.public.post-prod.lifen.fr/fhir/dstu3/DocumentReference/1721103/_history/1" + }, + { + "key": "Content-Encoding", + "value": "gzip" + }, + { + "key": "Strict-Transport-Security", + "value": "max-age=15724800; includeSubDomains" + }, + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Access-Control-Allow-Credentials", + "value": "true" + } + ], + "cookie": [], + "body": "{\n \"resourceType\": \"DocumentReference\",\n \"id\": \"1721103\",\n \"meta\": {\n \"versionId\": \"1\",\n \"lastUpdated\": \"2021-09-02T10:46:51.615+00:00\",\n \"profile\": [\n \"http://lifen.fr/fhir/StructureDefinition/LifenDocumentReferenceCoreProfile\"\n ],\n \"tag\": [\n {\n \"system\": \"https://www.lifen.fr/default\",\n \"code\": \"DEFAULT\",\n \"display\": \"Default tag\"\n }\n ]\n },\n \"status\": \"current\",\n \"docStatus\": \"final\",\n \"type\": {\n \"coding\": [\n {\n \"system\": \"http://loinc.org\",\n \"code\": \"34109-9\",\n \"display\": \"Document médical\"\n }\n ]\n },\n \"indexed\": \"2021-02-11T09:25:39Z\",\n \"description\": \"aelgain-copiepatient.pdf\",\n \"content\": [\n {\n \"attachment\": {\n \"contentType\": \"application/pdf\",\n \"url\": \"Binary/1615660\",\n \"title\": \"aelgain-copiepatient.pdf\"\n }\n }\n ]\n}" + } + ] + }, + { + "name": "CommunicationRequest", + "event": [ + { + "listen": "prerequest", + "script": { + "exec": [ + "" + ], + "type": "text/javascript" + } + }, + { + "listen": "test", + "script": { + "exec": [ + "pm.environment.set(\"commuicationRequestId\", \"\");", + "", + "pm.test(\"The CommunicationRequest is created\", function () {", + " // chaisinon syntax", + " pm.response.to.have.status(201);", + " pm.expect(pm.response.headers.get(\"Content-Type\")).to.equal(\"application/fhir+json;charset=UTF-8\");", + "});", + "", + "const responseJson = pm.response.json();", + "", + "pm.test(\"The response have a communicationRequestId (and store it)\", function () {", + " pm.expect(responseJson.id, \"The server did not returned a CommunicationRequestId\").to.not.be.empty;", + " console.log(`Fetched commuicationRequestId: ${responseJson.id}`);", + "", + " // Best practice : separate setup / teardown logic from the testscript itself (ie: action to store data outside of this function)", + " pm.environment.set(\"commuicationRequestId\", responseJson.id);", + " pm.expect(pm.environment.get(\"commuicationRequestId\")).to.not.be.empty;", + "});", + "", + "pm.test(\"The CommunicationRequest status is 'Draft'\", function () {", + " pm.expect(responseJson.status).to.be.equals(\"draft\");", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "type": "text" + }, + { + "key": "Prefer", + "value": "return=representation", + "type": "text" + } + ], + "body": { + "mode": "raw", + "raw": "{\n\t\"meta\": {\n \"tag\": [\n {\n \"system\": \"http://lifen.fr/fhir/tag/verified/sender\",\n \"code\": \"SENDER_VERIFIED\",\n \"display\": \"Sender is verified and should not be changed.\"\n },\n {\n \"system\": \"http://lifen.fr/fhir/tag/processing/mode\",\n \"code\": \"IMMEDIATE_MODE\",\n \"display\": \"request should be treated in immediate mode\"\n },\n {\n \"system\": \"http://lifen.fr/fhir/CodeSystem/Resource/Tag/PatientAutomaticResending\",\n \"code\": \"NONE\",\n \"display\": \"Patient communication should not be resent\"\n }\n ]\n\t},\n \"status\": \"draft\",\n \"category\": [\n {\n \"coding\": [\n {\n \"system\": \"http://lifen.fr/fhir/CodeSystem/communication-category\",\n \"code\": \"MEDICAL_REPORT\"\n }\n ]\n }\n ],\n \"priority\": \"routine\",\n \"payload\": [\n {\n \"contentReference\": {\n \"reference\": \"DocumentReference/{{documentReferenceId}}\"\n }\n }\n ],\n \"sender\": {\n \"extension\": [\n {\n \"url\": \"http://lifen.fr/fhir/StructureDefinition/Resource/Extension/Source\",\n \"valueCode\": \"USER\"\n }\n ],\n \"reference\": \"Organization/2\"\n },\n \"requester\": {\n \"agent\": {\n \"extension\": [\n {\n \"url\": \"http://lifen.fr/fhir/StructureDefinition/communicationrequest-requester-user-uuid\",\n \"valueString\": \"ea07d7c6-ff4b-43fc-9765-e4235886d30c\"\n }\n ],\n \"reference\": \"Organization/2\"\n }\n },\n \"resourceType\": \"CommunicationRequest\"\n}" + }, + "url": { + "raw": "https://{{baseURL}}/fhir/CommunicationRequest", + "protocol": "https", + "host": [ + "{{baseURL}}" + ], + "path": [ + "fhir", + "CommunicationRequest" + ] + } + }, + "response": [ + { + "name": "CommunicationRequest", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "type": "text" + }, + { + "key": "Prefer", + "value": "return=representation", + "type": "text" + } + ], + "body": { + "mode": "raw", + "raw": "{\n\t\"meta\": {\n \"tag\": [\n {\n \"system\": \"http://lifen.fr/fhir/tag/verified/sender\",\n \"code\": \"SENDER_VERIFIED\",\n \"display\": \"Sender is verified and should not be changed.\"\n },\n {\n \"system\": \"http://lifen.fr/fhir/tag/processing/mode\",\n \"code\": \"IMMEDIATE_MODE\",\n \"display\": \"request should be treated in immediate mode\"\n },\n {\n \"system\": \"http://lifen.fr/fhir/CodeSystem/Resource/Tag/PatientAutomaticResending\",\n \"code\": \"NONE\",\n \"display\": \"Patient communication should not be resent\"\n }\n ]\n\t},\n \"status\": \"draft\",\n \"category\": [\n {\n \"coding\": [\n {\n \"system\": \"http://lifen.fr/fhir/CodeSystem/communication-category\",\n \"code\": \"MEDICAL_REPORT\"\n }\n ]\n }\n ],\n \"priority\": \"routine\",\n \"payload\": [\n {\n \"contentReference\": {\n \"reference\": \"DocumentReference/{{documentReferenceId}}\"\n }\n }\n ],\n \"sender\": {\n \"extension\": [\n {\n \"url\": \"http://lifen.fr/fhir/StructureDefinition/Resource/Extension/Source\",\n \"valueCode\": \"USER\"\n }\n ],\n \"reference\": \"Organization/2\"\n },\n \"requester\": {\n \"agent\": {\n \"extension\": [\n {\n \"url\": \"http://lifen.fr/fhir/StructureDefinition/communicationrequest-requester-user-uuid\",\n \"valueString\": \"ea07d7c6-ff4b-43fc-9765-e4235886d30c\"\n }\n ],\n \"reference\": \"Organization/2\"\n }\n },\n \"resourceType\": \"CommunicationRequest\"\n}" + }, + "url": { + "raw": "https://{{baseURL}}/fhir/CommunicationRequest", + "protocol": "https", + "host": [ + "{{baseURL}}" + ], + "path": [ + "fhir", + "CommunicationRequest" + ] + } + }, + "status": "Created", + "code": 201, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Date", + "value": "Thu, 02 Sep 2021 11:00:17 GMT" + }, + { + "key": "Content-Type", + "value": "application/fhir+json;charset=UTF-8" + }, + { + "key": "Transfer-Encoding", + "value": "chunked" + }, + { + "key": "Connection", + "value": "keep-alive" + }, + { + "key": "X-B3-TraceId", + "value": "0226a8841b438fd4" + }, + { + "key": "X-B3-SpanId", + "value": "0226a8841b438fd4" + }, + { + "key": "X-B3-Sampled", + "value": "1" + }, + { + "key": "X-Powered-By", + "value": "HAPI FHIR 4.2.0 REST Server (FHIR Server; FHIR 3.0.2/DSTU3)" + }, + { + "key": "X-FHIR-Request-Validation", + "value": "No issues detected" + }, + { + "key": "ETag", + "value": "W/\"1\"" + }, + { + "key": "X-Request-ID", + "value": "bb302f7a6e1c80901826d099d449c572" + }, + { + "key": "Content-Location", + "value": "https://fhir-api.public.post-prod.lifen.fr/fhir/dstu3/CommunicationRequest/1721115/_history/1" + }, + { + "key": "Last-Modified", + "value": "Thu, 02 Sep 2021 11:00:16 GMT" + }, + { + "key": "Location", + "value": "https://fhir-api.public.post-prod.lifen.fr/fhir/dstu3/CommunicationRequest/1721115/_history/1" + }, + { + "key": "Content-Encoding", + "value": "gzip" + }, + { + "key": "Strict-Transport-Security", + "value": "max-age=15724800; includeSubDomains" + }, + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Access-Control-Allow-Credentials", + "value": "true" + } + ], + "cookie": [], + "body": "{\n \"resourceType\": \"CommunicationRequest\",\n \"id\": \"1721115\",\n \"meta\": {\n \"versionId\": \"1\",\n \"lastUpdated\": \"2021-09-02T11:00:16.495+00:00\",\n \"profile\": [\n \"http://lifen.fr/fhir/StructureDefinition/LifenCommunicationRequestCoreProfile\"\n ],\n \"tag\": [\n {\n \"system\": \"http://lifen.fr/fhir/tag/verified/sender\",\n \"code\": \"SENDER_VERIFIED\",\n \"display\": \"Sender is verified and should not be changed.\"\n },\n {\n \"system\": \"http://lifen.fr/fhir/tag/processing/mode\",\n \"code\": \"IMMEDIATE_MODE\",\n \"display\": \"request should be treated in immediate mode\"\n },\n {\n \"system\": \"http://lifen.fr/fhir/CodeSystem/Resource/Tag/PatientAutomaticResending\",\n \"code\": \"NONE\",\n \"display\": \"Patient communication should not be resent\"\n }\n ]\n },\n \"status\": \"draft\",\n \"category\": [\n {\n \"coding\": [\n {\n \"system\": \"http://lifen.fr/fhir/CodeSystem/communication-category\",\n \"code\": \"MEDICAL_REPORT\"\n }\n ]\n }\n ],\n \"priority\": \"routine\",\n \"payload\": [\n {\n \"contentReference\": {\n \"reference\": \"DocumentReference/1721113\"\n }\n }\n ],\n \"authoredOn\": \"2021-09-02T11:00:16+00:00\",\n \"sender\": {\n \"extension\": [\n {\n \"url\": \"http://lifen.fr/fhir/StructureDefinition/Resource/Extension/Source\",\n \"valueCode\": \"USER\"\n }\n ],\n \"reference\": \"Organization/2\"\n },\n \"requester\": {\n \"agent\": {\n \"extension\": [\n {\n \"url\": \"http://lifen.fr/fhir/StructureDefinition/communicationrequest-requester-user-uuid\",\n \"valueString\": \"ea07d7c6-ff4b-43fc-9765-e4235886d30c\"\n }\n ],\n \"reference\": \"Organization/2\"\n }\n }\n}" + } + ] + }, + { + "name": "CommunicationRequest", + "event": [ + { + "listen": "prerequest", + "script": { + "exec": [ + "setTimeout(function(){}, 10000);" + ], + "type": "text/javascript" + } + }, + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Created Communication Request exists\", function () {", + " pm.expect(pm.environment.get(\"commuicationRequestId\"), \"A commuicationRequestId is required for this test to pass :( \").to.not.be.empty;", + " // chai expect syntaxes", + " pm.response.to.have.status(200);", + " pm.expect(pm.response.headers.get(\"Content-Type\")).to.equal(\"application/fhir+json;charset=UTF-8\");", + "});", + "", + "const responseJson = pm.response.json();", + "", + "pm.test(\"It have a 'subject' section\", function() {", + " pm.expect(responseJson, \"The Communication Request must have a suject section\").to.have.property('subject').to.be.an('object');", + "});", + "", + "pm.test(\"It have a 'recipient' section\", function() {", + " pm.expect(responseJson, \"The Communication Request must have a recipient list\").to.have.property('recipient').to.be.an('array', \"Recipients must not be empty\").that.is.not.empty;", + "});", + "", + "pm.test(\"It have a Patient ID (and store it)\", function () {", + " pm.environment.set(\"patientId\", responseJson.subject.reference);", + " // note : we rely on the subject part to get the patientId, but it could not be reliable. Need more docs to select which one to choose.", + "", + " pm.expect(pm.environment.get(\"patientId\"), \"Saving the patientId failed.\").to.not.equal(\"\");", + " console.log(`Fetched patientId: ${responseJson.subject.reference}`);", + " // Best practice : separate setup / teardown logic from the testscript itself (ie: action to store outside of this function)", + "", + "});", + "", + "pm.test(\"That the CommunicationRequest status is 'Suspended'\", function () {", + " pm.expect(responseJson.status, \"The CommunicationRequest is not 'Suspended'\").to.be.equals(\"suspended\");", + " // could appreciate more intel on the workflow and possible statuses. It could be interesting to test that certains status transitions can't be performed (ie: suspended -> created) ", + "});", + "", + "pm.test(\"That recipients are referenced\", function() {", + " pm.expect(responseJson.recipient, \"Recipients must have a reference property\").to.satisfy(function(recipients) {", + " recipients.forEach((aRecipient) => {", + " if(!aRecipient.hasOwnProperty(\"reference\")) return false;", + " });", + " return true;", + " });", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://{{baseURL}}/fhir/CommunicationRequest/{{commuicationRequestId}}", + "protocol": "https", + "host": [ + "{{baseURL}}" + ], + "path": [ + "fhir", + "CommunicationRequest", + "{{commuicationRequestId}}" + ] + } + }, + "response": [ + { + "name": "CommunicationRequest", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "https://{{baseURL}}/fhir/CommunicationRequest/{{commuicationRequestId}}", + "protocol": "https", + "host": [ + "{{baseURL}}" + ], + "path": [ + "fhir", + "CommunicationRequest", + "{{commuicationRequestId}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Date", + "value": "Thu, 02 Sep 2021 11:01:25 GMT" + }, + { + "key": "Content-Type", + "value": "application/fhir+json;charset=UTF-8" + }, + { + "key": "Transfer-Encoding", + "value": "chunked" + }, + { + "key": "Connection", + "value": "keep-alive" + }, + { + "key": "X-B3-TraceId", + "value": "197d894e89bb1bf5" + }, + { + "key": "X-B3-SpanId", + "value": "197d894e89bb1bf5" + }, + { + "key": "X-B3-Sampled", + "value": "1" + }, + { + "key": "X-Powered-By", + "value": "HAPI FHIR 4.2.0 REST Server (FHIR Server; FHIR 3.0.2/DSTU3)" + }, + { + "key": "ETag", + "value": "W/\"2\"" + }, + { + "key": "X-Request-ID", + "value": "44ff89f0b02d19e5cd4b286df64f02fe" + }, + { + "key": "Content-Location", + "value": "https://fhir-api.public.post-prod.lifen.fr/fhir/dstu3/CommunicationRequest/1721115/_history/2" + }, + { + "key": "Last-Modified", + "value": "Thu, 02 Sep 2021 11:00:33 GMT" + }, + { + "key": "Content-Encoding", + "value": "gzip" + }, + { + "key": "Strict-Transport-Security", + "value": "max-age=15724800; includeSubDomains" + }, + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Access-Control-Allow-Credentials", + "value": "true" + } + ], + "cookie": [], + "body": "{\n \"resourceType\": \"CommunicationRequest\",\n \"id\": \"1721115\",\n \"meta\": {\n \"versionId\": \"2\",\n \"lastUpdated\": \"2021-09-02T11:00:33.000+00:00\",\n \"profile\": [\n \"http://lifen.fr/fhir/StructureDefinition/LifenCommunicationRequestCoreProfile\"\n ],\n \"tag\": [\n {\n \"system\": \"http://lifen.fr/fhir/tag/verified/sender\",\n \"code\": \"SENDER_VERIFIED\",\n \"display\": \"Sender is verified and should not be changed.\"\n },\n {\n \"system\": \"http://lifen.fr/fhir/CodeSystem/Resource/Tag/PatientAutomaticResending\",\n \"code\": \"NONE\",\n \"display\": \"Patient communication should not be resent\"\n },\n {\n \"system\": \"http://lifen.fr/fhir/tag/processing/mode\",\n \"code\": \"IMMEDIATE_MODE\",\n \"display\": \"request should be treated in immediate mode\"\n },\n {\n \"system\": \"http://lifen.fr/fhir/tag/processing/ia\",\n \"code\": \"PROCESSED\",\n \"display\": \"ressource processed by Irene\"\n }\n ]\n },\n \"extension\": [\n {\n \"url\": \"http://lifen.fr/fhir/StructureDefinition/LifenExtensionCommunicationRequestSendingStatus\",\n \"valueCode\": \"READY_TO_SEND\"\n }\n ],\n \"status\": \"suspended\",\n \"category\": [\n {\n \"coding\": [\n {\n \"system\": \"http://lifen.fr/fhir/CodeSystem/communication-category\",\n \"code\": \"MEDICAL_REPORT\"\n }\n ]\n }\n ],\n \"priority\": \"routine\",\n \"medium\": [\n {\n \"coding\": [\n {\n \"id\": \"469965\",\n \"system\": \"http://lifen.fr/fhir/CodeSystem/communication-medium\",\n \"code\": \"MSSANTE\",\n \"display\": \"william.eclancher@medecin.mssante.fr\"\n }\n ]\n },\n {\n \"coding\": [\n {\n \"id\": \"1309813159882648557\",\n \"system\": \"http://lifen.fr/fhir/CodeSystem/communication-medium\",\n \"code\": \"MAIL\",\n \"display\": \"ael.gain@lifen.fr\"\n }\n ]\n }\n ],\n \"subject\": {\n \"extension\": [\n {\n \"url\": \"http://lifen.fr/fhir/StructureDefinition/match-grade\",\n \"valueCode\": \"certain\"\n }\n ],\n \"reference\": \"Patient/1615460\"\n },\n \"recipient\": [\n {\n \"extension\": [\n {\n \"url\": \"http://lifen.fr/fhir/StructureDefinition/communicationrequest-recipient-details\",\n \"valueContactPoint\": {\n \"id\": \"469965\",\n \"extension\": [\n {\n \"url\": \"http://interopsante.org/fhir/structuredefinition/fr-email-domain\",\n \"valueCoding\": {\n \"system\": \"http://interopsante.org/fhir/valueset/fr-email-domain\",\n \"code\": \"mssante\",\n \"display\": \"MSSanté\"\n }\n }\n ],\n \"system\": \"email\",\n \"value\": \"william.eclancher@medecin.mssante.fr\",\n \"use\": \"work\",\n \"rank\": 1\n }\n }\n ],\n \"reference\": \"Practitioner/120849\"\n },\n {\n \"extension\": [\n {\n \"url\": \"http://lifen.fr/fhir/StructureDefinition/communicationrequest-recipient-details\",\n \"valueContactPoint\": {\n \"id\": \"1309813159882648557\",\n \"extension\": [\n {\n \"url\": \"http://lifen.fr/fhir/StructureDefinition/Resource/Extension/EmailAddressVerification-1.0\",\n \"valueCode\": \"VALID\"\n }\n ],\n \"system\": \"email\",\n \"value\": \"ael.gain@lifen.fr\",\n \"use\": \"work\"\n }\n }\n ],\n \"reference\": \"Patient/1615460\"\n }\n ],\n \"payload\": [\n {\n \"contentReference\": {\n \"reference\": \"DocumentReference/1721113\"\n }\n }\n ],\n \"authoredOn\": \"2021-09-02T11:00:16+00:00\",\n \"sender\": {\n \"extension\": [\n {\n \"url\": \"http://lifen.fr/fhir/StructureDefinition/Resource/Extension/Source\",\n \"valueCode\": \"USER\"\n }\n ],\n \"reference\": \"Organization/2\"\n },\n \"requester\": {\n \"agent\": {\n \"extension\": [\n {\n \"url\": \"http://lifen.fr/fhir/StructureDefinition/communicationrequest-requester-user-uuid\",\n \"valueString\": \"ea07d7c6-ff4b-43fc-9765-e4235886d30c\"\n }\n ],\n \"reference\": \"Organization/2\"\n }\n }\n}" + } + ] + }, + { + "name": "Patient", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"The Patient exists\", function () {", + " pm.expect(pm.environment.get(\"patientId\"), \"A patientId is required for this test to pass :( \").to.not.be.empty;", + " // chai expect syntaxes", + " pm.response.to.have.status(200);", + " pm.expect(pm.response.headers.get(\"Content-Type\")).to.equal(\"application/fhir+json;charset=UTF-8\");", + "});", + "", + "const responseJson = pm.response.json();", + "", + "pm.test(\"It fetch the right Patient\", function () {", + " pm.expect(responseJson.id, \"The server did not returned the expected Patient\").to.equals(pm.environment.get(\"patientId\").split(\"/\")[1]);", + "});", + "", + "pm.test(\"That the patient have a at least one given name, and a last name\", function() {", + " pm.expect(responseJson.name, \"The Patient doesn't have a name\").to.be.an(\"array\").that.is.not.empty;", + " // Magic number, We can improve to check each item in the list.", + " pm.expect(responseJson.name[0], \"The Patient doesn't have a last name\").to.have.property('family');", + " pm.expect(responseJson.name[0], \"The Patient doesn't have a given name\").to.have.property('given').that.is.an(\"array\").that.is.not.empty; ", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://{{baseURL}}/fhir/{{patientId}}", + "protocol": "https", + "host": [ + "{{baseURL}}" + ], + "path": [ + "fhir", + "{{patientId}}" + ] + } + }, + "response": [] + } + ], + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{json_web_token}}", + "type": "string" + } + ] + }, + "event": [ + { + "listen": "prerequest", + "script": { + "type": "text/javascript", + "exec": [ + "now = new Date();", + "token_date = new Date(pm.globals.get(\"token_expiration\"));", + "// if current token is expired…", + "if(token_date < now){", + " // …request new one", + " const postRequest = {", + " url: 'https://lifen-post-prod.eu.auth0.com/oauth/token',", + " method: 'POST',", + " header: {", + " 'Content-Type': 'application/json',", + " },", + " body: {", + " mode: 'raw',", + " raw: JSON.stringify(", + " {", + " client_id: 'szVsMPaDPUdwqngGiLoHfXFT5XCYPFcy',", + " client_secret: 'sMp2PB-QWBZupCB4IXJrWDJ-7tlpUl09vQ2tMKdy049He7-g93ofbXz7ESlAc82B',", + " audience: 'post-prod-apis',", + " grant_type: 'client_credentials'", + " }", + " )", + " }", + " };", + " // save it in globals", + " pm.sendRequest(postRequest, function (err, response) {", + " if(err != undefined) throw err;", + " const responseJson = response.json();", + " pm.globals.set(\"json_web_token\", responseJson.access_token);", + " now.setTime(now.getTime() + (responseJson.expires_in * 1000));", + " pm.globals.set(\"token_expiration\", now);", + " });", + "}" + ] + } + }, + { + "listen": "test", + "script": { + "type": "text/javascript", + "exec": [ + "" + ] + } + } + ] +} \ No newline at end of file diff --git a/lifen-autotest.postman_globals.json b/lifen-autotest.postman_globals.json new file mode 100644 index 0000000..132503b --- /dev/null +++ b/lifen-autotest.postman_globals.json @@ -0,0 +1,19 @@ +{ + "id": "fa686d09-8bae-4ec0-8ea7-47209e748260", + "values": [ + { + "key": "token_expiration", + "value": "", + "enabled": true + }, + { + "key": "json_web_token", + "value": "", + "enabled": true + } + ], + "name": "lifen-autotest Globals", + "_postman_variable_scope": "globals", + "_postman_exported_at": "2021-09-08T10:43:34.326Z", + "_postman_exported_using": "Postman/8.12.1" +} \ No newline at end of file