@@ -4,7 +4,7 @@ import { NoSuchKey, S3, S3ServiceException } from '@aws-sdk/client-s3';
4
4
5
5
import { getAmplifyDataClientConfig } from './get_amplify_clients_configuration.js' ;
6
6
7
- const validEnv = {
7
+ const validDefaultEnv = {
8
8
AMPLIFY_DATA_MODEL_INTROSPECTION_SCHEMA_BUCKET_NAME :
9
9
'TEST_VALUE for AMPLIFY_DATA_MODEL_INTROSPECTION_SCHEMA_BUCKET_NAME' ,
10
10
AMPLIFY_DATA_MODEL_INTROSPECTION_SCHEMA_KEY :
@@ -14,6 +14,21 @@ const validEnv = {
14
14
AWS_SESSION_TOKEN : 'TEST_VALUE for AWS_SESSION_TOKEN' ,
15
15
AWS_REGION : 'TEST_VALUE for AWS_REGION' ,
16
16
AMPLIFY_DATA_GRAPHQL_ENDPOINT : 'TEST_VALUE for AMPLIFY_DATA_GRAPHQL_ENDPOINT' ,
17
+ AMPLIFY_DATA_DEFAULT_NAME : 'AmplifyData' ,
18
+ } ;
19
+
20
+ const validNamedEnv = {
21
+ AMPLIFY_DATA_TEST_NAME_MODEL_INTROSPECTION_SCHEMA_BUCKET_NAME :
22
+ 'TEST_VALUE for AMPLIFY_DATA_MODEL_INTROSPECTION_SCHEMA_BUCKET_NAME' ,
23
+ AMPLIFY_DATA_TEST_NAME_MODEL_INTROSPECTION_SCHEMA_KEY :
24
+ 'TEST_VALUE for AMPLIFY_DATA_MODEL_INTROSPECTION_SCHEMA_KEY' ,
25
+ AWS_ACCESS_KEY_ID : 'TEST_VALUE for AWS_ACCESS_KEY_ID' ,
26
+ AWS_SECRET_ACCESS_KEY : 'TEST_VALUE for AWS_SECRET_ACCESS_KEY' ,
27
+ AWS_SESSION_TOKEN : 'TEST_VALUE for AWS_SESSION_TOKEN' ,
28
+ AWS_REGION : 'TEST_VALUE for AWS_REGION' ,
29
+ AMPLIFY_DATA_TEST_NAME_GRAPHQL_ENDPOINT :
30
+ 'TEST_VALUE for AMPLIFY_DATA_GRAPHQL_ENDPOINT' ,
31
+ AMPLIFY_DATA_DEFAULT_NAME : 'AmplifyDataTestName' ,
17
32
} ;
18
33
19
34
let mockS3Client : S3 ;
@@ -23,110 +38,146 @@ void describe('getAmplifyDataClientConfig', () => {
23
38
mockS3Client = new S3 ( ) ;
24
39
} ) ;
25
40
26
- Object . keys ( validEnv ) . forEach ( ( envFieldToExclude ) => {
27
- void it ( `returns empty config objects when ${ envFieldToExclude } is not included` , async ( ) => {
28
- const env = { ...validEnv } as Record < string , string > ;
29
- delete env [ envFieldToExclude ] ;
30
- assert . deepEqual ( await getAmplifyDataClientConfig ( env ) , {
31
- resourceConfig : { } ,
32
- libraryOptions : { } ,
41
+ [
42
+ {
43
+ name : 'no set name' ,
44
+ dataBackendName : 'AMPLIFY_DATA' ,
45
+ validEnv : validDefaultEnv ,
46
+ } ,
47
+ {
48
+ name : 'an explicit name' ,
49
+ dataBackendName : 'AMPLIFY_DATA_TEST_NAME' ,
50
+ validEnv : validNamedEnv ,
51
+ } ,
52
+ ] . forEach ( ( { name, dataBackendName, validEnv } ) => {
53
+ void describe ( `env variable with ${ name } for the data backend` , ( ) => {
54
+ Object . keys ( validEnv )
55
+ . filter ( ( k ) => k !== 'AMPLIFY_DATA_DEFAULT_NAME' )
56
+ . forEach ( ( envFieldToExclude ) => {
57
+ if ( envFieldToExclude . includes ( dataBackendName ) ) {
58
+ void it ( `throws error when ${ envFieldToExclude } is not included` , async ( ) => {
59
+ const env = { ...validEnv } as Record < string , string > ;
60
+ delete env [ envFieldToExclude ] ;
61
+ await assert . rejects (
62
+ async ( ) => await getAmplifyDataClientConfig ( env ) ,
63
+ / T h e d a t a e n v i r o n m e n t v a r i a b l e s a r e m a l f o r m e d /
64
+ ) ;
65
+ } ) ;
66
+
67
+ void it ( `throws error when ${ envFieldToExclude } is not a string` , async ( ) => {
68
+ const env = { ...validEnv } as Record < string , unknown > ;
69
+ env [ envFieldToExclude ] = 123 ;
70
+ await assert . rejects (
71
+ async ( ) => await getAmplifyDataClientConfig ( env ) ,
72
+ / T h e d a t a e n v i r o n m e n t v a r i a b l e s a r e m a l f o r m e d /
73
+ ) ;
74
+ } ) ;
75
+ } else {
76
+ void it ( `returns empty config objects when ${ envFieldToExclude } is not included` , async ( ) => {
77
+ const env = { ...validEnv } as Record < string , string > ;
78
+ delete env [ envFieldToExclude ] ;
79
+ assert . deepEqual ( await getAmplifyDataClientConfig ( env ) , {
80
+ resourceConfig : { } ,
81
+ libraryOptions : { } ,
82
+ } ) ;
83
+ } ) ;
84
+
85
+ void it ( `returns empty config objects when ${ envFieldToExclude } is not a string` , async ( ) => {
86
+ const env = { ...validEnv } as Record < string , unknown > ;
87
+ env [ envFieldToExclude ] = 123 ;
88
+ assert . deepEqual ( await getAmplifyDataClientConfig ( env ) , {
89
+ resourceConfig : { } ,
90
+ libraryOptions : { } ,
91
+ } ) ;
92
+ } ) ;
93
+ }
94
+ } ) ;
95
+
96
+ void it ( 'raises a custom error message when the model introspection schema is missing from the s3 bucket' , async ( ) => {
97
+ const s3ClientSendMock = mock . method ( mockS3Client , 'send' , async ( ) => {
98
+ throw new NoSuchKey ( { message : 'TEST_ERROR' , $metadata : { } } ) ;
99
+ } ) ;
100
+ mock . method ( mockS3Client , 'send' , s3ClientSendMock ) ;
101
+
102
+ await assert . rejects (
103
+ async ( ) => await getAmplifyDataClientConfig ( validEnv , mockS3Client ) ,
104
+ new Error (
105
+ 'Error retrieving the schema from S3. Please confirm that your project has a `defineData` included in the `defineBackend` definition.'
106
+ )
107
+ ) ;
33
108
} ) ;
34
- } ) ;
35
109
36
- void it ( `returns empty config objects when ${ envFieldToExclude } is not a string` , async ( ) => {
37
- const env = { ...validEnv } as Record < string , unknown > ;
38
- env [ envFieldToExclude ] = 123 ;
39
- assert . deepEqual ( await getAmplifyDataClientConfig ( env ) , {
40
- resourceConfig : { } ,
41
- libraryOptions : { } ,
110
+ void it ( 'raises a custom error message when there is a S3ServiceException error retrieving the model introspection schema from the s3 bucket' , async ( ) => {
111
+ const s3ClientSendMock = mock . method ( mockS3Client , 'send' , async ( ) => {
112
+ throw new S3ServiceException ( {
113
+ name : 'TEST_ERROR' ,
114
+ message : 'TEST_MESSAGE' ,
115
+ $fault : 'server' ,
116
+ $metadata : { } ,
117
+ } ) ;
118
+ } ) ;
119
+ mock . method ( mockS3Client , 'send' , s3ClientSendMock ) ;
120
+
121
+ await assert . rejects (
122
+ async ( ) => await getAmplifyDataClientConfig ( validEnv , mockS3Client ) ,
123
+ new Error (
124
+ 'Error retrieving the schema from S3. You may need to grant this function authorization on the schema. TEST_ERROR: TEST_MESSAGE.'
125
+ )
126
+ ) ;
42
127
} ) ;
43
- } ) ;
44
- } ) ;
45
128
46
- void it ( 'raises a custom error message when the model introspection schema is missing from the s3 bucket' , async ( ) => {
47
- const s3ClientSendMock = mock . method ( mockS3Client , 'send' , async ( ) => {
48
- throw new NoSuchKey ( { message : 'TEST_ERROR' , $metadata : { } } ) ;
49
- } ) ;
50
- mock . method ( mockS3Client , 'send' , s3ClientSendMock ) ;
51
-
52
- await assert . rejects (
53
- async ( ) => await getAmplifyDataClientConfig ( validEnv , mockS3Client ) ,
54
- new Error (
55
- 'Error retrieving the schema from S3. Please confirm that your project has a `defineData` included in the `defineBackend` definition.'
56
- )
57
- ) ;
58
- } ) ;
129
+ void it ( 're-raises a non-S3 error received when retrieving the model introspection schema from the s3 bucket' , async ( ) => {
130
+ const s3ClientSendMock = mock . method ( mockS3Client , 'send' , async ( ) => {
131
+ throw new Error ( 'Test Error' ) ;
132
+ } ) ;
133
+ mock . method ( mockS3Client , 'send' , s3ClientSendMock ) ;
59
134
60
- void it ( 'raises a custom error message when there is a S3ServiceException error retrieving the model introspection schema from the s3 bucket' , async ( ) => {
61
- const s3ClientSendMock = mock . method ( mockS3Client , 'send' , async ( ) => {
62
- throw new S3ServiceException ( {
63
- name : 'TEST_ERROR' ,
64
- message : 'TEST_MESSAGE' ,
65
- $fault : 'server' ,
66
- $metadata : { } ,
135
+ await assert . rejects (
136
+ async ( ) => await getAmplifyDataClientConfig ( validEnv , mockS3Client ) ,
137
+ new Error ( 'Test Error' )
138
+ ) ;
67
139
} ) ;
68
- } ) ;
69
- mock . method ( mockS3Client , 'send' , s3ClientSendMock ) ;
70
-
71
- await assert . rejects (
72
- async ( ) => await getAmplifyDataClientConfig ( validEnv , mockS3Client ) ,
73
- new Error (
74
- 'Error retrieving the schema from S3. You may need to grant this function authorization on the schema. TEST_ERROR: TEST_MESSAGE.'
75
- )
76
- ) ;
77
- } ) ;
78
140
79
- void it ( 're-raises a non-S3 error received when retrieving the model introspection schema from the s3 bucket' , async ( ) => {
80
- const s3ClientSendMock = mock . method ( mockS3Client , 'send' , async ( ) => {
81
- throw new Error ( 'Test Error' ) ;
82
- } ) ;
83
- mock . method ( mockS3Client , 'send' , s3ClientSendMock ) ;
84
-
85
- await assert . rejects (
86
- async ( ) => await getAmplifyDataClientConfig ( validEnv , mockS3Client ) ,
87
- new Error ( 'Test Error' )
88
- ) ;
89
- } ) ;
90
-
91
- void it ( 'returns the expected libraryOptions and resourceConfig values in the happy case' , async ( ) => {
92
- const s3ClientSendMock = mock . method ( mockS3Client , 'send' , ( ) => {
93
- return Promise . resolve ( {
94
- Body : {
95
- transformToString : ( ) => JSON . stringify ( { testSchema : 'TESTING' } ) ,
96
- } ,
141
+ void it ( 'returns the expected libraryOptions and resourceConfig values in the happy case' , async ( ) => {
142
+ const s3ClientSendMock = mock . method ( mockS3Client , 'send' , ( ) => {
143
+ return Promise . resolve ( {
144
+ Body : {
145
+ transformToString : ( ) =>
146
+ JSON . stringify ( { testSchema : 'TESTING' } ) ,
147
+ } ,
148
+ } ) ;
149
+ } ) ;
150
+ mock . method ( mockS3Client , 'send' , s3ClientSendMock ) ;
151
+
152
+ const { resourceConfig, libraryOptions } =
153
+ await getAmplifyDataClientConfig ( validEnv , mockS3Client ) ;
154
+
155
+ assert . deepEqual (
156
+ await libraryOptions . Auth . credentialsProvider . getCredentialsAndIdentityId ?.( ) ,
157
+ {
158
+ credentials : {
159
+ accessKeyId : 'TEST_VALUE for AWS_ACCESS_KEY_ID' ,
160
+ secretAccessKey : 'TEST_VALUE for AWS_SECRET_ACCESS_KEY' ,
161
+ sessionToken : 'TEST_VALUE for AWS_SESSION_TOKEN' ,
162
+ } ,
163
+ }
164
+ ) ;
165
+ assert . deepEqual (
166
+ await libraryOptions . Auth . credentialsProvider . clearCredentialsAndIdentityId ?.( ) ,
167
+ undefined
168
+ ) ;
169
+
170
+ assert . deepEqual ( resourceConfig , {
171
+ API : {
172
+ GraphQL : {
173
+ endpoint : 'TEST_VALUE for AMPLIFY_DATA_GRAPHQL_ENDPOINT' ,
174
+ region : 'TEST_VALUE for AWS_REGION' ,
175
+ defaultAuthMode : 'iam' ,
176
+ modelIntrospection : { testSchema : 'TESTING' } ,
177
+ } ,
178
+ } ,
179
+ } ) ;
97
180
} ) ;
98
181
} ) ;
99
- mock . method ( mockS3Client , 'send' , s3ClientSendMock ) ;
100
-
101
- const { resourceConfig, libraryOptions } = await getAmplifyDataClientConfig (
102
- validEnv ,
103
- mockS3Client
104
- ) ;
105
-
106
- assert . deepEqual (
107
- await libraryOptions . Auth . credentialsProvider . getCredentialsAndIdentityId ?.( ) ,
108
- {
109
- credentials : {
110
- accessKeyId : 'TEST_VALUE for AWS_ACCESS_KEY_ID' ,
111
- secretAccessKey : 'TEST_VALUE for AWS_SECRET_ACCESS_KEY' ,
112
- sessionToken : 'TEST_VALUE for AWS_SESSION_TOKEN' ,
113
- } ,
114
- }
115
- ) ;
116
- assert . deepEqual (
117
- await libraryOptions . Auth . credentialsProvider . clearCredentialsAndIdentityId ?.( ) ,
118
- undefined
119
- ) ;
120
-
121
- assert . deepEqual ( resourceConfig , {
122
- API : {
123
- GraphQL : {
124
- endpoint : 'TEST_VALUE for AMPLIFY_DATA_GRAPHQL_ENDPOINT' ,
125
- region : 'TEST_VALUE for AWS_REGION' ,
126
- defaultAuthMode : 'iam' ,
127
- modelIntrospection : { testSchema : 'TESTING' } ,
128
- } ,
129
- } ,
130
- } ) ;
131
182
} ) ;
132
183
} ) ;
0 commit comments