Skip to content

Commit 356e816

Browse files
committed
enhanced function to reduce input parameter using types
1 parent 3dbb525 commit 356e816

File tree

7 files changed

+55
-48
lines changed

7 files changed

+55
-48
lines changed

readme.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,8 @@ Sample Report
9797

9898
### GraphQL Topics to Explore
9999
- [x] basics of GraphQL (query, mutation)
100-
- [ ] advance topics (fragments, directive, unions, aliases)
101-
- [ ] parameterize query with arguments and variables
100+
- [ ] advance topics (fragments, unions, aliases)
101+
- [ ] filters using arguments, variables, directive
102102
- [ ] setting default variable
103103
- [ ] variables inside fragments
104104
- [ ] use of directive to build dynamic/reusable query

tests/data/faker.ts

+12-9
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
import { faker } from '@faker-js/faker';
2-
import { genderType, statusType } from '../types/faker';
2+
import { IUser, IUserOmittedID } from '../types/users';
33

4-
export const createUserData = {
4+
export const createUserData: IUserOmittedID = {
55
name: faker.person.fullName(),
6-
gender: 'male' as genderType,
6+
gender: faker.person.sexType(),
77
email: faker.internet.email(),
8-
status: 'active' as statusType
8+
status: 'active'
99
};
1010

11-
export const updateUserData = {
12-
name: faker.person.fullName(),
13-
gender: 'female' as genderType,
14-
email: faker.internet.email(),
15-
status: 'active' as statusType
11+
export const updateUserData = (userId: number): IUser => {
12+
return {
13+
id: userId,
14+
name: faker.person.fullName(),
15+
gender: faker.person.sexType(),
16+
email: faker.internet.email(),
17+
status: 'active'
18+
}
1619
};

tests/payload/mutation.ts

+14-12
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
export const createUserPayload = (name: string, gender: 'male' | 'female', email: string, status: 'active' | 'inactive') => {
1+
import { IUser, IUserOmittedID } from "../types/users";
2+
3+
export const createUserPayload = (data: IUserOmittedID) => {
24
return `mutation {
35
createUser(
46
input: {
5-
name: "${name}"
6-
gender: "${gender}"
7-
email: "${email}"
8-
status: "${status}"
7+
name: "${data.name}"
8+
gender: "${data.gender}"
9+
email: "${data.email}"
10+
status: "${data.status}"
911
}
1012
) {
1113
user {
@@ -20,15 +22,15 @@ export const createUserPayload = (name: string, gender: 'male' | 'female', email
2022
};
2123

2224

23-
export const updateUserPayload = (id: number, name: string, gender: 'male' | 'female', email: string, status: 'active' | 'inactive') => {
25+
export const updateUserPayload = (data: IUser) => {
2426
return `mutation {
2527
updateUser(
2628
input: {
27-
id: ${id}
28-
name: "${name}"
29-
gender: "${gender}"
30-
email: "${email}"
31-
status: "${status}"
29+
id: ${data.id}
30+
name: "${data.name}"
31+
gender: "${data.gender}"
32+
email: "${data.email}"
33+
status: "${data.status}"
3234
}
3335
) {
3436
user {
@@ -42,7 +44,7 @@ export const updateUserPayload = (id: number, name: string, gender: 'male' | 'fe
4244
}`;
4345
};
4446

45-
export const deleteUserPayload = (id: string | number) => {
47+
export const deleteUserPayload = (id: number) => {
4648
return `mutation {
4749
deleteUser(
4850
input: {

tests/payload/queries.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export const queryAllUserPayload = `{
1111
}
1212
}`;
1313

14-
export const queryUserByIdPayload = (id: string | number) => {
14+
export const queryUserByIdPayload = (id: number) => {
1515
return `query User {
1616
user(id: "${id}") {
1717
email

tests/specs/goRestTests.ts

+18-19
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ config();
1010

1111
const TOKEN = process.env.GO_RES_USER_TOKEN;
1212

13+
const createRandomUser = createUserData;
14+
1315
describe('go rest graphql tests', () => {
1416

1517
let userId: number;
@@ -36,7 +38,7 @@ describe('go rest graphql tests', () => {
3638

3739
it('should create user', async () => {
3840

39-
const response = await mutateGraphQl(TOKEN, createUserPayload(createUserData.name, createUserData.gender, createUserData.email, createUserData.status));
41+
const response = await mutateGraphQl(TOKEN, createUserPayload(createRandomUser));
4042
expect(response.statusCode).equal(200);
4143

4244
const responseData: IUserCreate = response.body.data;
@@ -48,10 +50,10 @@ describe('go rest graphql tests', () => {
4850

4951
expect(responseData.createUser).not.to.be.null;
5052
expect(responseData.createUser.user.id).a('number').to.be.not.null;
51-
expect(responseData.createUser.user.name).equal(createUserData.name);
52-
expect(responseData.createUser.user.gender).equal(createUserData.gender);
53-
expect(responseData.createUser.user.email).equal(createUserData.email);
54-
expect(responseData.createUser.user.status).equal(createUserData.status);
53+
expect(responseData.createUser.user.name).equal(createRandomUser.name);
54+
expect(responseData.createUser.user.gender).equal(createRandomUser.gender);
55+
expect(responseData.createUser.user.email).equal(createRandomUser.email);
56+
expect(responseData.createUser.user.status).equal(createRandomUser.status);
5557
});
5658

5759
it('should query user by id', async () => {
@@ -67,16 +69,17 @@ describe('go rest graphql tests', () => {
6769
console.log('----------------------------');
6870

6971
expect(user.id).a('number');
70-
expect(user.name).equal(createUserData.name);
71-
expect(user.email).equal(createUserData.email);
72-
expect(user.gender).equal(createUserData.gender);
73-
expect(user.status).equal(createUserData.status);
74-
72+
expect(user.name).equal(createRandomUser.name);
73+
expect(user.email).equal(createRandomUser.email);
74+
expect(user.gender).equal(createRandomUser.gender);
75+
expect(user.status).equal(createRandomUser.status);
7576
});
7677

7778
it('should update user by id', async () => {
7879

79-
const response = await queryGraphQl(TOKEN, updateUserPayload(userId, updateUserData.name, updateUserData.gender, updateUserData.email, updateUserData.status));
80+
const payload = updateUserData(userId);
81+
82+
const response = await queryGraphQl(TOKEN, updateUserPayload(payload));
8083
expect(response.statusCode).equal(200);
8184

8285
expect(response.body.data).not.undefined;
@@ -89,10 +92,10 @@ describe('go rest graphql tests', () => {
8992

9093
expect(responseData.updateUser).not.to.be.null;
9194
expect(responseData.updateUser.user.id).equal(userId);
92-
expect(responseData.updateUser.user.name).equal(updateUserData.name);
93-
expect(responseData.updateUser.user.gender).equal(updateUserData.gender);
94-
expect(responseData.updateUser.user.email).equal(updateUserData.email);
95-
expect(responseData.updateUser.user.status).equal(updateUserData.status);
95+
expect(responseData.updateUser.user.name).equal(payload.name);
96+
expect(responseData.updateUser.user.gender).equal(payload.gender);
97+
expect(responseData.updateUser.user.email).equal(payload.email);
98+
expect(responseData.updateUser.user.status).equal(payload.status);
9699

97100
});
98101

@@ -110,10 +113,6 @@ describe('go rest graphql tests', () => {
110113

111114
expect(responseData.deleteUser).not.to.be.null;
112115
expect(responseData.deleteUser.user.id).equal(userId);
113-
expect(responseData.deleteUser.user.name).equal(updateUserData.name);
114-
expect(responseData.deleteUser.user.gender).equal(updateUserData.gender);
115-
expect(responseData.deleteUser.user.email).equal(updateUserData.email);
116-
expect(responseData.deleteUser.user.status).equal(updateUserData.status);
117116
});
118117

119118
it('should query non existing user by id', async () => {

tests/types/faker.ts

-3
This file was deleted.

tests/types/users.ts

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
1+
export type genderType = 'male' | 'female';
2+
3+
export type statusType = 'active' | 'inactive';
4+
5+
export interface IUserOmittedID extends Omit<IUser, 'id'> { }
6+
17
export interface IUser {
28
id: number;
39
name: string;
410
email: string;
5-
gender: string;
6-
status: string;
11+
gender: genderType;
12+
status: statusType;
713
}
814

915
export interface IUsers {

0 commit comments

Comments
 (0)