Skip to content

Commit a39b61d

Browse files
committed
fix(appsync-modelgen-plugin): associatedWith correctly points to model field rather than ID in bi-directional relations
1 parent d36323d commit a39b61d

File tree

9 files changed

+2880
-4478
lines changed

9 files changed

+2880
-4478
lines changed

packages/appsync-modelgen-plugin/src/__tests__/visitors/gqlv2-regression-tests/__snapshots__/appsync-dart-visitor.test.ts.snap

Lines changed: 916 additions & 943 deletions
Large diffs are not rendered by default.

packages/appsync-modelgen-plugin/src/__tests__/visitors/gqlv2-regression-tests/__snapshots__/appsync-java-visitor.test.ts.snap

Lines changed: 1053 additions & 2227 deletions
Large diffs are not rendered by default.

packages/appsync-modelgen-plugin/src/__tests__/visitors/gqlv2-regression-tests/__snapshots__/appsync-javascript-visitor.test.ts.snap

Lines changed: 296 additions & 713 deletions
Large diffs are not rendered by default.

packages/appsync-modelgen-plugin/src/__tests__/visitors/gqlv2-regression-tests/__snapshots__/appsync-swift-visitor.test.ts.snap

Lines changed: 451 additions & 465 deletions
Large diffs are not rendered by default.

packages/appsync-modelgen-plugin/src/__tests__/visitors/gqlv2-regression-tests/appsync-dart-visitor.test.ts

Lines changed: 39 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ describe('AppSyncDartVisitor - GQLv2 Regression Tests', () => {
4545
expect(getGQLv2Visitor(schema, 'Todo').generate()).toMatchSnapshot();
4646
});
4747

48-
it('Works on has one relationship @hasOne', () => {
48+
it('Works on uni-directional implicit has one relationship @hasOne', () => {
4949
const schema = /* GraphQL */ `
5050
# Implicit field
5151
type Project @model {
@@ -74,11 +74,28 @@ describe('AppSyncDartVisitor - GQLv2 Regression Tests', () => {
7474
`;
7575
expect(getGQLv2Visitor(schema, 'Project').generate()).toMatchSnapshot();
7676
expect(getGQLv2Visitor(schema, 'Team').generate()).toMatchSnapshot();
77+
});
78+
79+
it('Works on uni-directional explicit has one relationship @hasOne', () => {
80+
const schema = /* GraphQL */ `
81+
# Explicit field
82+
type Project2 @model {
83+
id: ID!
84+
name: String
85+
teamID: ID
86+
team: Team2 @hasOne(fields: ["teamID"])
87+
}
88+
89+
type Team2 @model {
90+
id: ID!
91+
name: String!
92+
}
93+
`;
7794
expect(getGQLv2Visitor(schema, 'Project2').generate()).toMatchSnapshot();
7895
expect(getGQLv2Visitor(schema, 'Team2').generate()).toMatchSnapshot();
7996
});
8097

81-
it('Works on has many relationship @hasMany', () => {
98+
it('Works on uni-directional implicit has many relationship @hasMany', () => {
8299
const schema = /* GraphQL */ `
83100
# Implicit
84101
type Post @model {
@@ -91,7 +108,13 @@ describe('AppSyncDartVisitor - GQLv2 Regression Tests', () => {
91108
id: ID!
92109
content: String!
93110
}
111+
`;
112+
expect(getGQLv2Visitor(schema, 'Post').generate()).toMatchSnapshot();
113+
expect(getGQLv2Visitor(schema, 'Comment').generate()).toMatchSnapshot();
114+
});
94115

116+
it('Works on uni-directional explicit has many relationship @hasMany', () => {
117+
const schema = /* GraphQL */ `
95118
# Explicit
96119
type Post2 @model {
97120
id: ID!
@@ -105,8 +128,6 @@ describe('AppSyncDartVisitor - GQLv2 Regression Tests', () => {
105128
content: String!
106129
}
107130
`;
108-
expect(getGQLv2Visitor(schema, 'Post').generate()).toMatchSnapshot();
109-
expect(getGQLv2Visitor(schema, 'Comment').generate()).toMatchSnapshot();
110131
expect(getGQLv2Visitor(schema, 'Post2').generate()).toMatchSnapshot();
111132
expect(getGQLv2Visitor(schema, 'Comment2').generate()).toMatchSnapshot();
112133
});
@@ -130,7 +151,7 @@ describe('AppSyncDartVisitor - GQLv2 Regression Tests', () => {
130151
expect(getGQLv2Visitor(schema, 'Tag').generate()).toMatchSnapshot();
131152
});
132153

133-
it('Works on belongs to relationship @belongsTo', () => {
154+
it('Works on implicit hasOne belongs to relationship @belongsTo', () => {
134155
const schema = /* GraphQL */ `
135156
# Implicit
136157
type Project @model {
@@ -144,7 +165,13 @@ describe('AppSyncDartVisitor - GQLv2 Regression Tests', () => {
144165
name: String!
145166
project: Project @belongsTo
146167
}
168+
`;
169+
expect(getGQLv2Visitor(schema, 'Project').generate()).toMatchSnapshot();
170+
expect(getGQLv2Visitor(schema, 'Team').generate()).toMatchSnapshot();
171+
});
147172

173+
it('Works on explicit hasOne belongs to relationship @belongsTo', () => {
174+
const schema = /* GraphQL */ `
148175
# Explicit
149176
type Project2 @model {
150177
id: ID!
@@ -158,7 +185,13 @@ describe('AppSyncDartVisitor - GQLv2 Regression Tests', () => {
158185
projectID: ID
159186
project: Project2 @belongsTo(fields: ["projectID"])
160187
}
188+
`;
189+
expect(getGQLv2Visitor(schema, 'Project2').generate()).toMatchSnapshot();
190+
expect(getGQLv2Visitor(schema, 'Team2').generate()).toMatchSnapshot();
191+
});
161192

193+
it('Works on explicit hasMany belongs to relationship @belongsTo', () => {
194+
const schema = /* GraphQL */ `
162195
# Explicit - Bi-directional Has Many
163196
type Post @model {
164197
id: ID!
@@ -173,15 +206,11 @@ describe('AppSyncDartVisitor - GQLv2 Regression Tests', () => {
173206
post: Post @belongsTo(fields: ["postID"])
174207
}
175208
`;
176-
expect(getGQLv2Visitor(schema, 'Project').generate()).toMatchSnapshot();
177-
expect(getGQLv2Visitor(schema, 'Team').generate()).toMatchSnapshot();
178-
expect(getGQLv2Visitor(schema, 'Project2').generate()).toMatchSnapshot();
179-
expect(getGQLv2Visitor(schema, 'Team2').generate()).toMatchSnapshot();
180209
expect(getGQLv2Visitor(schema, 'Post').generate()).toMatchSnapshot();
181210
expect(getGQLv2Visitor(schema, 'Comment').generate()).toMatchSnapshot();
182211
});
183212

184-
it('Works on belongs to relationship @belongsTo (extended)', () => {
213+
it('Works on implicit hasMany belongs to relationship @belongsTo (extended)', () => {
185214
const schema = /* GraphQL */ `
186215
# 7 - Blog Post Comment
187216
type Blog7V2 @model {
@@ -203,7 +232,6 @@ describe('AppSyncDartVisitor - GQLv2 Regression Tests', () => {
203232
`;
204233
expect(getGQLv2Visitor(schema, 'Blog7V2').generate()).toMatchSnapshot();
205234
expect(getGQLv2Visitor(schema, 'Post7V2').generate()).toMatchSnapshot();
206-
expect(getGQLv2Visitor(schema, 'Project2').generate()).toMatchSnapshot();
207235
expect(getGQLv2Visitor(schema, 'Comment7V2').generate()).toMatchSnapshot();
208236
});
209237
});

packages/appsync-modelgen-plugin/src/__tests__/visitors/gqlv2-regression-tests/appsync-java-visitor.test.ts

Lines changed: 30 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ const getGQLv2Visitor = (
3232
return visitor;
3333
};
3434

35-
describe('AppSyncSwiftVisitor - GQLv2 Regression Tests', () => {
35+
describe('AppSyncJavaVisitor - GQLv2 Regression Tests', () => {
3636
it('Works when configuring a secondary index', () => {
3737
const schema = /* GraphQL */ `
3838
type Customer @model {
@@ -52,7 +52,7 @@ describe('AppSyncSwiftVisitor - GQLv2 Regression Tests', () => {
5252
expect(getGQLv2Visitor(schema, 'Todo').generate()).toMatchSnapshot();
5353
});
5454

55-
it('Works on has one relationship @hasOne', () => {
55+
it('Works on uni-directional implicit has one relationship @hasOne', () => {
5656
const schema = /* GraphQL */ `
5757
# Implicit field
5858
type Project @model {
@@ -65,7 +65,13 @@ describe('AppSyncSwiftVisitor - GQLv2 Regression Tests', () => {
6565
id: ID!
6666
name: String!
6767
}
68+
`;
69+
expect(getGQLv2Visitor(schema, 'Project').generate()).toMatchSnapshot();
70+
expect(getGQLv2Visitor(schema, 'Team').generate()).toMatchSnapshot();
71+
});
6872

73+
it('Works on uni-directional explicit has one relationship @hasOne', () => {
74+
const schema = /* GraphQL */ `
6975
# Explicit field
7076
type Project2 @model {
7177
id: ID!
@@ -79,13 +85,11 @@ describe('AppSyncSwiftVisitor - GQLv2 Regression Tests', () => {
7985
name: String!
8086
}
8187
`;
82-
expect(getGQLv2Visitor(schema, 'Project').generate()).toMatchSnapshot();
83-
expect(getGQLv2Visitor(schema, 'Team').generate()).toMatchSnapshot();
8488
expect(getGQLv2Visitor(schema, 'Project2').generate()).toMatchSnapshot();
8589
expect(getGQLv2Visitor(schema, 'Team2').generate()).toMatchSnapshot();
8690
});
8791

88-
it('Works on has many relationship @hasMany', () => {
92+
it('Works on uni-directional implicit has many relationship @hasMany', () => {
8993
const schema = /* GraphQL */ `
9094
# Implicit
9195
type Post @model {
@@ -98,7 +102,13 @@ describe('AppSyncSwiftVisitor - GQLv2 Regression Tests', () => {
98102
id: ID!
99103
content: String!
100104
}
105+
`;
106+
expect(getGQLv2Visitor(schema, 'Post').generate()).toMatchSnapshot();
107+
expect(getGQLv2Visitor(schema, 'Comment').generate()).toMatchSnapshot();
108+
});
101109

110+
it('Works on uni-directional explicit has many relationship @hasMany', () => {
111+
const schema = /* GraphQL */ `
102112
# Explicit
103113
type Post2 @model {
104114
id: ID!
@@ -112,8 +122,6 @@ describe('AppSyncSwiftVisitor - GQLv2 Regression Tests', () => {
112122
content: String!
113123
}
114124
`;
115-
expect(getGQLv2Visitor(schema, 'Post').generate()).toMatchSnapshot();
116-
expect(getGQLv2Visitor(schema, 'Comment').generate()).toMatchSnapshot();
117125
expect(getGQLv2Visitor(schema, 'Post2').generate()).toMatchSnapshot();
118126
expect(getGQLv2Visitor(schema, 'Comment2').generate()).toMatchSnapshot();
119127
});
@@ -137,7 +145,7 @@ describe('AppSyncSwiftVisitor - GQLv2 Regression Tests', () => {
137145
expect(getGQLv2Visitor(schema, 'Tag').generate()).toMatchSnapshot();
138146
});
139147

140-
it('Works on belongs to relationship @belongsTo', () => {
148+
it('Works on implicit hasOne belongs to relationship @belongsTo', () => {
141149
const schema = /* GraphQL */ `
142150
# Implicit
143151
type Project @model {
@@ -151,7 +159,13 @@ describe('AppSyncSwiftVisitor - GQLv2 Regression Tests', () => {
151159
name: String!
152160
project: Project @belongsTo
153161
}
162+
`;
163+
expect(getGQLv2Visitor(schema, 'Project').generate()).toMatchSnapshot();
164+
expect(getGQLv2Visitor(schema, 'Team').generate()).toMatchSnapshot();
165+
});
154166

167+
it('Works on explicit hasOne belongs to relationship @belongsTo', () => {
168+
const schema = /* GraphQL */ `
155169
# Explicit
156170
type Project2 @model {
157171
id: ID!
@@ -165,7 +179,13 @@ describe('AppSyncSwiftVisitor - GQLv2 Regression Tests', () => {
165179
projectID: ID
166180
project: Project2 @belongsTo(fields: ["projectID"])
167181
}
182+
`;
183+
expect(getGQLv2Visitor(schema, 'Project2').generate()).toMatchSnapshot();
184+
expect(getGQLv2Visitor(schema, 'Team2').generate()).toMatchSnapshot();
185+
});
168186

187+
it('Works on explicit hasMany belongs to relationship @belongsTo', () => {
188+
const schema = /* GraphQL */ `
169189
# Explicit - Bi-directional Has Many
170190
type Post @model {
171191
id: ID!
@@ -180,15 +200,12 @@ describe('AppSyncSwiftVisitor - GQLv2 Regression Tests', () => {
180200
post: Post @belongsTo(fields: ["postID"])
181201
}
182202
`;
183-
expect(getGQLv2Visitor(schema, 'Project').generate()).toMatchSnapshot();
184-
expect(getGQLv2Visitor(schema, 'Team').generate()).toMatchSnapshot();
185-
expect(getGQLv2Visitor(schema, 'Project2').generate()).toMatchSnapshot();
186-
expect(getGQLv2Visitor(schema, 'Team2').generate()).toMatchSnapshot();
187203
expect(getGQLv2Visitor(schema, 'Post').generate()).toMatchSnapshot();
188204
expect(getGQLv2Visitor(schema, 'Comment').generate()).toMatchSnapshot();
189205
});
190206

191-
it('Works on belongs to relationship @belongsTo (extended)', () => {
207+
208+
it('Works on implicit hasMany belongs to relationship @belongsTo (extended)', () => {
192209
const schema = /* GraphQL */ `
193210
# 7 - Blog Post Comment
194211
type Blog7V2 @model {
@@ -210,62 +227,6 @@ describe('AppSyncSwiftVisitor - GQLv2 Regression Tests', () => {
210227
`;
211228
expect(getGQLv2Visitor(schema, 'Blog7V2').generate()).toMatchSnapshot();
212229
expect(getGQLv2Visitor(schema, 'Post7V2').generate()).toMatchSnapshot();
213-
expect(getGQLv2Visitor(schema, 'Project2').generate()).toMatchSnapshot();
214230
expect(getGQLv2Visitor(schema, 'Comment7V2').generate()).toMatchSnapshot();
215231
});
216-
217-
it('scenario 9 - Implicit Belongs to Relationship', () => {
218-
const schema = /* GraphQL */ `
219-
type Project @model {
220-
id: ID!
221-
name: String
222-
team: Team @hasOne
223-
}
224-
225-
type Team @model {
226-
id: ID!
227-
name: String!
228-
project: Project @belongsTo
229-
}
230-
`;
231-
expect(getGQLv2Visitor(schema, 'Project').generate()).toMatchSnapshot();
232-
expect(getGQLv2Visitor(schema, 'Team').generate()).toMatchSnapshot();
233-
});
234-
235-
it('scenario 10 - Explicit Belongs to Relationship', () => {
236-
const schema = /* GraphQL */ `
237-
type Project @model {
238-
id: ID!
239-
name: String
240-
team: Team @hasOne
241-
}
242-
243-
type Team @model {
244-
id: ID!
245-
name: String!
246-
projectID: ID
247-
project: Project @belongsTo(fields: ["projectID"])
248-
}
249-
`;
250-
expect(getGQLv2Visitor(schema, 'Project').generate()).toMatchSnapshot();
251-
expect(getGQLv2Visitor(schema, 'Team').generate()).toMatchSnapshot();
252-
});
253-
254-
it('scenario 12 - Belongs to Relationship field and type names don’t align', () => {
255-
const schema = /* GraphQL */ `
256-
type CookingBlog @model {
257-
id: ID!
258-
name: String!
259-
posts: [RecipePost] @hasMany
260-
}
261-
262-
type RecipePost @model {
263-
id: ID!
264-
title: String!
265-
blog: CookingBlog @belongsTo
266-
}
267-
`;
268-
expect(getGQLv2Visitor(schema, 'CookingBlog').generate()).toMatchSnapshot();
269-
expect(getGQLv2Visitor(schema, 'RecipePost').generate()).toMatchSnapshot();
270-
});
271232
});

0 commit comments

Comments
 (0)