1+ const OBJECT_STORE_FILE_ID = 'd497bbe3-f88b-45f1-b3d4-9c563e4c0f5f'
2+ const DEFAULT_UPLOAD_FILENAME = 'upload.bin'
3+
4+ function stripTrailingSlash ( url ) {
5+ return url . replace ( / \/ + $ / , '' )
6+ }
7+
8+ function getObjectStoreLocation ( request ) {
9+ const explicitBaseUrl = request . headers [ 'x-ers-sandbox-baseurl' ]
10+ const baseUrl = typeof explicitBaseUrl === 'string' && explicitBaseUrl . trim ( )
11+ ? stripTrailingSlash ( explicitBaseUrl . trim ( ) )
12+ : stripTrailingSlash ( request . server . info . uri )
13+
14+ return `${ baseUrl } /ObjectStore/${ OBJECT_STORE_FILE_ID } `
15+ }
16+
17+ function createContentDisposition ( fileNameHeaderValue ) {
18+ const inputFileName = String ( fileNameHeaderValue || '' ) . replace ( / [ \r \n ] / g, '' ) . trim ( )
19+ const utf8Filename = inputFileName || DEFAULT_UPLOAD_FILENAME
20+ const asciiFallback = utf8Filename
21+ . replace ( / [ ^ \x20 - \x7E ] / g, '_' )
22+ . replace ( / [ " \\ ] / g, '_' )
23+ const safeFallback = asciiFallback || DEFAULT_UPLOAD_FILENAME
24+ const encodedFilename = encodeURIComponent ( utf8Filename )
25+
26+ return `attachment; filename="${ safeFallback } "; filename*=UTF-8''${ encodedFilename } `
27+ }
28+
129module . exports = {
230
331 getExampleResponseForRetrieveBusinessFunctions : function ( ) {
@@ -43,7 +71,7 @@ module.exports = {
4371 getExampleResponseForSearchServiceRequest : function ( request ) {
4472 let ubrn ;
4573 const identifier = request . query . identifier ;
46-
74+
4775 if ( identifier . includes ( '|' ) ) {
4876 ubrn = identifier . split ( '|' ) [ 1 ]
4977 }
@@ -64,6 +92,23 @@ module.exports = {
6492 return 'r4/searchServiceRequest/responses/ResponseExampleEmpty.json'
6593 }
6694
95+ return null
96+ } ,
97+
98+ getExampleResponseForUploadFileToDocumentStore : function ( request ) {
99+ const filename = request . headers [ 'nhsd-ers-file-name' ]
100+ const fileSize = request . headers [ 'nhsd-ers-file-size' ]
101+ const fileMimeType = request . headers [ 'nhsd-ers-file-mime-type' ]
102+
103+ if ( filename && fileSize && fileMimeType ) {
104+ return {
105+ responsePath : 'r4/uploadFileToDocumentStore/responses/BinaryResource.json' ,
106+ responseCode : 200 ,
107+ location : getObjectStoreLocation ( request ) ,
108+ contentDisposition : createContentDisposition ( filename )
109+ }
110+ }
111+
67112 return null
68113 }
69114}
0 commit comments