Skip to content

Commit 17aaa34

Browse files
committed
utilized fragments to reuse request object
1 parent cafead6 commit 17aaa34

File tree

5 files changed

+38
-33
lines changed

5 files changed

+38
-33
lines changed

readme.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ Sample Report
9898
### GraphQL Topics to Explore
9999
- [x] basics of GraphQL (query, mutation)
100100
- [ ] advance topics (fragments, unions, aliases)
101-
- [ ] filters using arguments, variables, directive
101+
- [x] filters using arguments, variables, directive
102102
- [ ] setting default variable
103103
- [ ] variables inside fragments
104104
- [ ] use of directive to build dynamic/reusable query

tests/payload/directives.ts

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
1+
import { userResponseFields } from './fragments';
2+
13
export const queryUsersWithNodeDirectivePayload = (includeNodes = true) => {
24
return `{
35
users {
46
totalCount
57
nodes @include (if: ${includeNodes}) {
6-
email
7-
gender
8-
id
9-
name
10-
status
8+
${userResponseFields}
119
}
1210
}
1311
}`;

tests/payload/fragments.ts

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
export const userFragments = `fragment userFragments on user {
2+
id
3+
name
4+
gender
5+
email
6+
status
7+
}`;
8+
9+
export const userResponseFields = `id
10+
name
11+
gender
12+
email
13+
status`;
14+
15+
//TODO: enhance this
16+
export const fragmentBuilder = (fragmentName: string, fragmentObject: string, fieldType: string) => {
17+
return `fragment ${fragmentName} on ${fieldType} {
18+
${fragmentObject}
19+
}`;
20+
};

tests/payload/mutation.ts

+10-17
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import { IUser, IUserOmittedID } from '../types/users';
2+
import { userFragments, userResponseFields } from './fragments';
23

34
export const createUserPayload = (data: IUserOmittedID) => {
4-
return `mutation {
5+
return `
6+
${userFragments}
7+
mutation {
58
createUser(
69
input: {
710
name: "${data.name}"
@@ -11,19 +14,17 @@ export const createUserPayload = (data: IUserOmittedID) => {
1114
}
1215
) {
1316
user {
14-
id
15-
name
16-
gender
17-
email
18-
status
17+
...userFragments
1918
}
2019
}
2120
}`;
2221
};
2322

2423

2524
export const updateUserPayload = (data: IUser) => {
26-
return `mutation {
25+
return `
26+
${userFragments}
27+
mutation {
2728
updateUser(
2829
input: {
2930
id: ${data.id}
@@ -34,11 +35,7 @@ export const updateUserPayload = (data: IUser) => {
3435
}
3536
) {
3637
user {
37-
id
38-
name
39-
gender
40-
email
41-
status
38+
...userFragments
4239
}
4340
}
4441
}`;
@@ -52,11 +49,7 @@ export const deleteUserPayload = (id: number) => {
5249
}
5350
) {
5451
user {
55-
id
56-
name
57-
gender
58-
email
59-
status
52+
${userResponseFields}
6053
}
6154
}
6255
}`;

tests/payload/queries.ts

+4-10
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,18 @@
1+
import { userResponseFields } from './fragments';
2+
13
export const queryAllUserPayload = `{
24
users {
35
totalCount
46
nodes {
5-
email
6-
gender
7-
id
8-
name
9-
status
7+
${userResponseFields}
108
}
119
}
1210
}`;
1311

1412
export const queryUserByIdPayload = (id: number) => {
1513
return `query User {
1614
user(id: "${id}") {
17-
email
18-
gender
19-
id
20-
name
21-
status
15+
${userResponseFields}
2216
}
2317
}`;
2418
};

0 commit comments

Comments
 (0)