@@ -56,7 +56,7 @@ describe('process connection', () => {
56
56
57
57
it ( 'should return HAS_MANY for Post.comments field connection info' , ( ) => {
58
58
const commentsField = modelMap . Post . fields [ 0 ] ;
59
- const connectionInfo = ( processConnections ( commentsField , modelMap . Post , modelMap ) as any ) as CodeGenFieldConnectionHasMany ;
59
+ const connectionInfo = ( processConnections ( commentsField , modelMap . Post , modelMap , true ) as any ) as CodeGenFieldConnectionHasMany ;
60
60
expect ( connectionInfo ) . toBeDefined ( ) ;
61
61
62
62
expect ( connectionInfo . kind ) . toEqual ( CodeGenConnectionType . HAS_MANY ) ;
@@ -66,7 +66,7 @@ describe('process connection', () => {
66
66
67
67
it ( 'should return BELONGS_TO for Comment.post field connection info' , ( ) => {
68
68
const postField = modelMap . Comment . fields [ 0 ] ;
69
- const connectionInfo = ( processConnections ( postField , modelMap . Comment , modelMap ) as any ) as CodeGenFieldConnectionBelongsTo ;
69
+ const connectionInfo = ( processConnections ( postField , modelMap . Comment , modelMap , true ) as any ) as CodeGenFieldConnectionBelongsTo ;
70
70
expect ( connectionInfo ) . toBeDefined ( ) ;
71
71
72
72
expect ( connectionInfo . kind ) . toEqual ( CodeGenConnectionType . BELONGS_TO ) ;
@@ -120,7 +120,7 @@ describe('process connection', () => {
120
120
121
121
it ( 'should return HAS_ONE Person.license field' , ( ) => {
122
122
const licenseField = modelMap . Person . fields [ 0 ] ;
123
- const connectionInfo = ( processConnections ( licenseField , modelMap . Person , modelMap ) as any ) as CodeGenFieldConnectionHasOne ;
123
+ const connectionInfo = ( processConnections ( licenseField , modelMap . Person , modelMap , true ) as any ) as CodeGenFieldConnectionHasOne ;
124
124
expect ( connectionInfo ) . toBeDefined ( ) ;
125
125
expect ( connectionInfo . kind ) . toEqual ( CodeGenConnectionType . HAS_ONE ) ;
126
126
expect ( connectionInfo . associatedWith ) . toEqual ( modelMap . License . fields [ 0 ] ) ;
@@ -130,7 +130,7 @@ describe('process connection', () => {
130
130
131
131
it ( 'should return BELONGS_TO License.person field' , ( ) => {
132
132
const personField = modelMap . License . fields [ 0 ] ;
133
- const connectionInfo = ( processConnections ( personField , modelMap . License , modelMap ) as any ) as CodeGenFieldConnectionBelongsTo ;
133
+ const connectionInfo = ( processConnections ( personField , modelMap . License , modelMap , true ) as any ) as CodeGenFieldConnectionBelongsTo ;
134
134
expect ( connectionInfo ) . toBeDefined ( ) ;
135
135
expect ( connectionInfo . kind ) . toEqual ( CodeGenConnectionType . BELONGS_TO ) ;
136
136
expect ( connectionInfo . isConnectingFieldAutoCreated ) . toEqual ( true ) ;
@@ -141,9 +141,74 @@ describe('process connection', () => {
141
141
// Make person field optional
142
142
personField . isNullable = true ;
143
143
expect ( ( ) => {
144
- processConnections ( personField , modelMap . License , modelMap ) ;
144
+ processConnections ( personField , modelMap . License , modelMap , true ) ;
145
145
} ) . toThrowError ( 'DataStore does not support 1 to 1 connection with both sides of connection as optional field' ) ;
146
146
} ) ;
147
+
148
+ it ( 'uni-directional One:One connection with required field and datastore is not enabled' , ( ) => {
149
+ const schema = /* GraphQL */ `
150
+ type User @model {
151
+ id: ID!
152
+ }
153
+ type Session @model {
154
+ id: ID!
155
+ sessionUserId: ID!
156
+ user: User! @connection(fields: ["sessionUserId"])
157
+ }
158
+ ` ;
159
+
160
+ const modelMap : CodeGenModelMap = {
161
+ User : {
162
+ name : 'User' ,
163
+ type : 'model' ,
164
+ directives : [ ] ,
165
+ fields : [
166
+ {
167
+ type : 'ID' ,
168
+ isNullable : false ,
169
+ isList : false ,
170
+ name : 'id' ,
171
+ directives : [ ] ,
172
+ } ,
173
+ ] ,
174
+ } ,
175
+ Session : {
176
+ name : 'Session' ,
177
+ type : 'model' ,
178
+ directives : [ ] ,
179
+ fields : [
180
+ {
181
+ type : 'ID' ,
182
+ isNullable : false ,
183
+ isList : false ,
184
+ name : 'id' ,
185
+ directives : [ ] ,
186
+ } ,
187
+ {
188
+ type : 'ID' ,
189
+ isNullable : false ,
190
+ isList : false ,
191
+ name : 'sessionUserId' ,
192
+ directives : [ ] ,
193
+ } ,
194
+ {
195
+ type : 'User' ,
196
+ isNullable : false ,
197
+ isList : false ,
198
+ name : 'user' ,
199
+ directives : [ { name : 'connection' , arguments : { fields : [ 'sessionUserId' ] } } ] ,
200
+ } ,
201
+ ] ,
202
+ } ,
203
+ } ;
204
+
205
+ modelMap . Session . fields [ 2 ]
206
+
207
+ const connectionInfo = ( processConnections ( modelMap . Session . fields [ 2 ] , modelMap . User , modelMap , false ) as any ) as CodeGenFieldConnectionBelongsTo ;
208
+ expect ( connectionInfo ) . toBeDefined ( ) ;
209
+ expect ( connectionInfo . kind ) . toEqual ( CodeGenConnectionType . HAS_ONE ) ;
210
+ expect ( connectionInfo . isConnectingFieldAutoCreated ) . toEqual ( false ) ;
211
+ } ) ;
147
212
} ) ;
148
213
} ) ;
149
214
describe ( 'Uni-directional connection (unnamed connection)' , ( ) => {
@@ -192,7 +257,7 @@ describe('process connection', () => {
192
257
193
258
it ( 'should return HAS_MANY for Post.comments' , ( ) => {
194
259
const commentsField = modelMap . Post . fields [ 0 ] ;
195
- const connectionInfo = ( processConnections ( commentsField , modelMap . Post , modelMap ) as any ) as CodeGenFieldConnectionHasMany ;
260
+ const connectionInfo = ( processConnections ( commentsField , modelMap . Post , modelMap , true ) as any ) as CodeGenFieldConnectionHasMany ;
196
261
expect ( connectionInfo ) . toBeDefined ( ) ;
197
262
198
263
expect ( connectionInfo . kind ) . toEqual ( CodeGenConnectionType . HAS_MANY ) ;
@@ -208,7 +273,7 @@ describe('process connection', () => {
208
273
209
274
it ( 'should return BELONGS_TO for Comment.post' , ( ) => {
210
275
const commentsField = modelMap . Comment . fields [ 0 ] ;
211
- const connectionInfo = ( processConnections ( commentsField , modelMap . Comment , modelMap ) as any ) as CodeGenFieldConnectionBelongsTo ;
276
+ const connectionInfo = ( processConnections ( commentsField , modelMap . Comment , modelMap , true ) as any ) as CodeGenFieldConnectionBelongsTo ;
212
277
expect ( connectionInfo ) . toBeDefined ( ) ;
213
278
214
279
expect ( connectionInfo . kind ) . toEqual ( CodeGenConnectionType . BELONGS_TO ) ;
@@ -280,12 +345,12 @@ describe('process connection', () => {
280
345
281
346
it ( 'should not throw error if connection directive has keyName' , ( ) => {
282
347
const commentsField = modelMap . Post . fields [ 0 ] ;
283
- expect ( ( ) => processConnections ( commentsField , modelMap . Post , modelMap ) ) . not . toThrowError ( ) ;
348
+ expect ( ( ) => processConnections ( commentsField , modelMap . Post , modelMap , true ) ) . not . toThrowError ( ) ;
284
349
} ) ;
285
350
286
351
it ( 'should support connection with @key on BELONGS_TO side' , ( ) => {
287
352
const postField = modelMap . Comment . fields [ 2 ] ;
288
- const connectionInfo = ( processConnections ( postField , modelMap . Post , modelMap ) as any ) as CodeGenFieldConnectionBelongsTo ;
353
+ const connectionInfo = ( processConnections ( postField , modelMap . Post , modelMap , true ) as any ) as CodeGenFieldConnectionBelongsTo ;
289
354
expect ( connectionInfo ) . toBeDefined ( ) ;
290
355
expect ( connectionInfo . kind ) . toEqual ( CodeGenConnectionType . BELONGS_TO ) ;
291
356
expect ( connectionInfo . targetName ) . toEqual ( modelMap . Comment . fields [ 0 ] . name ) ;
@@ -462,4 +527,4 @@ describe('process connection', () => {
462
527
expect ( getConnectedField ( subordinateField , employeeModel , employeeModel ) ) . toEqual ( supervisorField ) ;
463
528
} ) ;
464
529
} ) ;
465
- } ) ;
530
+ } ) ;
0 commit comments