11import http from "k6/http" ;
2- import { ALL_POINTER_TYPES , ODS_CODE } from "../constants.js" ;
2+ import {
3+ POINTER_TYPES ,
4+ ODS_CODE ,
5+ NHS_NUMBERS ,
6+ POINTER_IDS ,
7+ POINTER_DOCUMENTS ,
8+ POINTERS_TO_DELETE ,
9+ } from "../constants.js" ;
310import { check } from "k6" ;
11+ import { randomItem } from "https://jslib.k6.io/k6-utils/1.2.0/index.js" ;
12+ import { crypto } from "k6/experimental/webcrypto" ;
13+ import { createRecord } from "../setup.js" ;
414
515function getBaseURL ( ) {
616 return `https://${ __ENV . HOST } /producer/DocumentReference` ;
717}
818
9- function getHeaders ( odsCode = ODS_CODE , pointerTypes = ALL_POINTER_TYPES ) {
19+ function getHeaders ( odsCode = ODS_CODE ) {
1020 return {
1121 "Content-Type" : "application/fhir+json" ,
1222 "NHSD-Connection-Metadata" : JSON . stringify ( {
1323 "nrl.ods-code" : odsCode ,
14- "nrl.pointer-types" : Object . keys ( pointerTypes ) . map (
15- ( pointerType ) => `http://snomed.info/sct|${ pointerType } `
24+ "nrl.pointer-types" : POINTER_TYPES . map (
25+ ( type ) => `http://snomed.info/sct|${ type } `
1626 ) ,
1727 } ) ,
1828 "NHSD-Client-RP-Details" : JSON . stringify ( {
@@ -22,11 +32,121 @@ function getHeaders(odsCode = ODS_CODE, pointerTypes = ALL_POINTER_TYPES) {
2232 } ;
2333}
2434
25- export function createDocumentReference ( document ) {
26- return http . post ( getBaseURL ( ) , document , { headers : getHeaders ( ) } ) ;
35+ export function createDocumentReference ( ) {
36+ const nhsNumber = randomItem ( NHS_NUMBERS ) ;
37+ const pointerType = randomItem ( POINTER_TYPES ) ;
38+ const record = createRecord ( nhsNumber , pointerType ) ;
39+
40+ const res = http . post ( getBaseURL ( ) , JSON . stringify ( record ) , {
41+ headers : getHeaders ( ) ,
42+ } ) ;
43+
44+ check ( res , { "create status is 201" : ( r ) => r . status === 201 } ) ;
45+
46+ if ( res . status !== 201 ) {
47+ console . warn (
48+ `Failed to create record: ${ res . status } : ${
49+ JSON . parse ( res . body ) . issue [ 0 ] . diagnostics
50+ } `
51+ ) ;
52+ }
2753}
2854
29- export function deleteDocumentReference ( document_id ) {
30- const url = `${ getBaseURL ( ) } /${ document_id } ` ;
31- return http . del ( url , { headers : getHeaders ( ) } ) ;
55+ export function readDocumentReference ( ) {
56+ const id = randomItem ( POINTER_IDS ) ;
57+
58+ const res = http . get ( `${ getBaseURL ( ) } /${ id } ` , { headers : getHeaders ( ) } ) ;
59+
60+ check ( res , { "status is 200" : ( r ) => r . status === 200 } ) ;
61+ }
62+
63+ export function updateDocumentReference ( ) {
64+ const id = randomItem ( POINTER_IDS ) ;
65+ const document = POINTER_DOCUMENTS [ id ] ;
66+
67+ document . content [ 0 ] . attachment . url = "https://example.com/k6-updated-url.pdf" ;
68+
69+ const res = http . put ( `${ getBaseURL ( ) } /${ id } ` , JSON . stringify ( document ) , {
70+ headers : getHeaders ( ) ,
71+ } ) ;
72+
73+ check ( res , { "status is 200" : ( r ) => r . status === 200 } ) ;
74+ }
75+
76+ export function deleteDocumentReference ( ) {
77+ const id = randomItem ( POINTERS_TO_DELETE ) ;
78+
79+ const res = http . del ( `${ getBaseURL ( ) } /${ id } ` , null , {
80+ headers : getHeaders ( ) ,
81+ } ) ;
82+
83+ check ( res , { "delete status is 200" : ( r ) => r . status === 200 } ) ;
84+ }
85+
86+ export function upsertDocumentReference ( ) {
87+ const nhsNumber = randomItem ( NHS_NUMBERS ) ;
88+ const pointerType = randomItem ( POINTER_TYPES ) ;
89+ const record = createRecord ( nhsNumber , pointerType ) ;
90+
91+ record . id = `k6perf-${ crypto . randomUUID ( ) } ` ;
92+
93+ const res = http . post ( getBaseURL ( ) , JSON . stringify ( record ) , {
94+ headers : getHeaders ( ) ,
95+ } ) ;
96+
97+ check ( res , { "create status is 201" : ( r ) => r . status === 201 } ) ;
98+
99+ if ( res . status !== 201 ) {
100+ console . warn (
101+ `Failed to create record: ${ res . status } : ${
102+ JSON . parse ( res . body ) . issue [ 0 ] . diagnostics
103+ } `
104+ ) ;
105+ }
106+ }
107+
108+ export function searchDocumentReference ( ) {
109+ const nhsNumber = randomItem ( NHS_NUMBERS ) ;
110+ const pointerType = randomItem ( POINTER_TYPES ) ;
111+
112+ const identifier = encodeURIComponent (
113+ `https://fhir.nhs.uk/Id/nhs-number|${ nhsNumber } `
114+ ) ;
115+ const type = encodeURIComponent ( `http://snomed.info/sct|${ pointerType } ` ) ;
116+
117+ const url = `${ getBaseURL ( ) } ?subject:identifier=${ identifier } &type=${ type } ` ;
118+
119+ const res = http . get ( url , {
120+ headers : getHeaders ( ) ,
121+ } ) ;
122+
123+ check ( res , { "status is 200" : ( r ) => r . status === 200 } ) ;
124+
125+ if ( res . status !== 200 ) {
126+ console . log (
127+ `Search failed with ${ res . status } : ${ JSON . stringify ( res . body ) } `
128+ ) ;
129+ }
130+ }
131+
132+ export function searchPostDocumentReference ( ) {
133+ const nhsNumber = randomItem ( NHS_NUMBERS ) ;
134+ const pointerType = randomItem ( POINTER_TYPES ) ;
135+
136+ const body = JSON . stringify ( {
137+ "subject:identifier" : `https://fhir.nhs.uk/Id/nhs-number|${ nhsNumber } ` ,
138+ type : `http://snomed.info/sct|${ pointerType } ` ,
139+ } ) ;
140+
141+ const res = http . post ( `${ getBaseURL ( ) } /_search` , body , {
142+ headers : getHeaders ( ) ,
143+ } ) ;
144+
145+ check ( res , { "status is 200" : ( r ) => r . status === 200 } ) ;
146+
147+ if ( res . status !== 200 ) {
148+ console . log (
149+ `Search failed with ${ res . status } : ${ JSON . stringify ( res . body ) } `
150+ ) ;
151+ }
32152}
0 commit comments