19
19
20
20
import { faker } from "@faker-js/faker" ;
21
21
import { graphql } from "graphql" ;
22
- import { gql } from "graphql-tag" ;
23
22
import type { Driver } from "neo4j-driver" ;
24
23
import { generate } from "randomstring" ;
25
24
import { Neo4jGraphQL } from "../../../../src/classes" ;
25
+ import { cleanNodesUsingSession } from "../../../utils/clean-nodes" ;
26
+ import { UniqueType } from "../../../utils/graphql-types" ;
26
27
import Neo4jHelper from "../../neo4j" ;
27
28
28
29
describe ( "interface relationships" , ( ) => {
29
30
let driver : Driver ;
30
31
let neo4j : Neo4jHelper ;
31
32
let neoSchema : Neo4jGraphQL ;
33
+ let Episode : UniqueType ;
34
+ let Actor : UniqueType ;
35
+ let Movie : UniqueType ;
36
+ let Series : UniqueType ;
32
37
33
38
beforeAll ( async ( ) => {
34
39
neo4j = new Neo4jHelper ( ) ;
35
40
driver = await neo4j . getDriver ( ) ;
36
41
37
- const typeDefs = gql `
38
- type Episode {
42
+ Episode = new UniqueType ( "Episode" ) ;
43
+ Actor = new UniqueType ( "Actor" ) ;
44
+ Movie = new UniqueType ( "Movie" ) ;
45
+ Series = new UniqueType ( "Series" ) ;
46
+
47
+ const typeDefs = /* GraphQL */ `
48
+ type ${ Episode } {
39
49
runtime: Int!
40
- series: Series! @relationship(type: "HAS_EPISODE", direction: IN)
50
+ series: ${ Series } ! @relationship(type: "HAS_EPISODE", direction: IN)
41
51
}
42
52
43
53
interface Production {
44
54
title: String!
45
- actors: [Actor!]! @declareRelationship
55
+ actors: [${ Actor } !]! @declareRelationship
46
56
}
47
57
48
- type Movie implements Production {
58
+ type ${ Movie } implements Production {
49
59
title: String!
50
60
runtime: Int!
51
- actors: [Actor!]! @relationship(type: "ACTED_IN", direction: IN, properties: "ActedIn")
61
+ actors: [${ Actor } !]! @relationship(type: "ACTED_IN", direction: IN, properties: "ActedIn")
52
62
}
53
63
54
- type Series implements Production {
64
+ type ${ Series } implements Production {
55
65
title: String!
56
- episodes: [Episode!]! @relationship(type: "HAS_EPISODE", direction: OUT)
57
- actors: [Actor!]! @relationship(type: "ACTED_IN", direction: IN, properties: "ActedIn")
66
+ episodes: [${ Episode } !]! @relationship(type: "HAS_EPISODE", direction: OUT)
67
+ actors: [${ Actor } !]! @relationship(type: "ACTED_IN", direction: IN, properties: "ActedIn")
58
68
}
59
69
60
70
type ActedIn @relationshipProperties {
61
71
screenTime: Int!
62
72
}
63
73
64
- type Actor {
74
+ type ${ Actor } {
65
75
name: String!
66
76
actedIn: [Production!]! @relationship(type: "ACTED_IN", direction: OUT, properties: "ActedIn")
67
77
}
@@ -73,6 +83,8 @@ describe("interface relationships", () => {
73
83
} ) ;
74
84
75
85
afterAll ( async ( ) => {
86
+ const session = await neo4j . getSession ( ) ;
87
+ await cleanNodesUsingSession ( session , [ Actor , Movie , Series , Episode ] ) ;
76
88
await driver . close ( ) ;
77
89
} ) ;
78
90
@@ -93,24 +105,24 @@ describe("interface relationships", () => {
93
105
94
106
const query = `
95
107
mutation CreateActorConnectMovie($name: String!, $title: String!, $runtime: Int!, $screenTime: Int!) {
96
- createActors (
108
+ ${ Actor . operations . create } (
97
109
input: [
98
110
{
99
111
name: $name
100
112
actedIn: {
101
113
create: {
102
114
edge: { screenTime: $screenTime }
103
- node: { Movie: { title: $title, runtime: $runtime } }
115
+ node: { ${ Movie } : { title: $title, runtime: $runtime } }
104
116
}
105
117
}
106
118
}
107
119
]
108
120
) {
109
- actors {
121
+ ${ Actor . plural } {
110
122
name
111
123
actedIn {
112
124
title
113
- ... on Movie {
125
+ ... on ${ Movie } {
114
126
runtime
115
127
}
116
128
}
@@ -135,8 +147,8 @@ describe("interface relationships", () => {
135
147
expect ( gqlResult . errors ) . toBeFalsy ( ) ;
136
148
137
149
expect ( gqlResult . data ) . toEqual ( {
138
- createActors : {
139
- actors : [
150
+ [ Actor . operations . create ] : {
151
+ [ Actor . plural ] : [
140
152
{
141
153
actedIn : [
142
154
{
@@ -190,7 +202,7 @@ describe("interface relationships", () => {
190
202
$seriesTitle: String!
191
203
$episodeRuntime: Int!
192
204
) {
193
- createActors (
205
+ ${ Actor . operations . create } (
194
206
input: [
195
207
{
196
208
name: $name1
@@ -199,7 +211,7 @@ describe("interface relationships", () => {
199
211
{
200
212
edge: { screenTime: $screenTime }
201
213
node: {
202
- Movie: {
214
+ ${ Movie } : {
203
215
title: $movieTitle
204
216
runtime: $movieRuntime
205
217
actors: {
@@ -214,7 +226,7 @@ describe("interface relationships", () => {
214
226
{
215
227
edge: { screenTime: $screenTime }
216
228
node: {
217
- Series: {
229
+ ${ Series } : {
218
230
title: $seriesTitle
219
231
episodes: { create: { node: { runtime: $episodeRuntime } } }
220
232
}
@@ -225,17 +237,17 @@ describe("interface relationships", () => {
225
237
}
226
238
]
227
239
) {
228
- actors {
240
+ ${ Actor . plural } {
229
241
name
230
242
actedIn {
231
243
title
232
244
actors {
233
245
name
234
246
}
235
- ... on Movie {
247
+ ... on ${ Movie } {
236
248
runtime
237
249
}
238
- ... on Series {
250
+ ... on ${ Series } {
239
251
episodes {
240
252
runtime
241
253
}
@@ -265,8 +277,8 @@ describe("interface relationships", () => {
265
277
expect ( gqlResult . errors ) . toBeFalsy ( ) ;
266
278
267
279
expect ( gqlResult . data ) . toEqual ( {
268
- createActors : {
269
- actors : [
280
+ [ Actor . operations . create ] : {
281
+ [ Actor . plural ] : [
270
282
{
271
283
actedIn : expect . toIncludeSameMembers ( [
272
284
{
0 commit comments