From 3ba19359a3eca652af9a76254b4b556ff16f24a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Thu, 19 May 2022 10:46:07 +0200 Subject: [PATCH] Make filters object nullable and writing resolver tests --- backend/src/graphql/arg/SearchUsersArgs.ts | 9 +-- backend/src/graphql/arg/SearchUsersFilters.ts | 2 - .../graphql/resolver/AdminResolver.test.ts | 57 ++++++++++++++++--- backend/src/graphql/resolver/AdminResolver.ts | 20 +------ backend/src/seeds/graphql/mutations.ts | 6 +- 5 files changed, 55 insertions(+), 39 deletions(-) diff --git a/backend/src/graphql/arg/SearchUsersArgs.ts b/backend/src/graphql/arg/SearchUsersArgs.ts index da5b6c312..8db6bfc06 100644 --- a/backend/src/graphql/arg/SearchUsersArgs.ts +++ b/backend/src/graphql/arg/SearchUsersArgs.ts @@ -12,13 +12,6 @@ export default class SearchUsersArgs { @Field(() => Int, { nullable: true }) pageSize?: number - // Wolle: @Field(() => Boolean, { nullable: true }) - // filterByActivated?: boolean | null - - // Wolle: @Field(() => Boolean, { nullable: true }) - // filterByDeleted?: boolean | null - - // Wolle: shall this be nullable? - @Field() + @Field(() => SearchUsersFilters, { nullable: true }) filters: SearchUsersFilters } diff --git a/backend/src/graphql/arg/SearchUsersFilters.ts b/backend/src/graphql/arg/SearchUsersFilters.ts index 55a09304c..de7c7c20a 100644 --- a/backend/src/graphql/arg/SearchUsersFilters.ts +++ b/backend/src/graphql/arg/SearchUsersFilters.ts @@ -1,9 +1,7 @@ -// Wolle: import { ArgsType, Field, InputType } from 'type-graphql' import { Field, InputType, ObjectType } from 'type-graphql' @ObjectType() @InputType('SearchUsersFiltersInput') -// Wolle: @ArgsType() export default class SearchUsersFilters { @Field(() => Boolean, { nullable: true, defaultValue: null }) filterByActivated?: boolean | null diff --git a/backend/src/graphql/resolver/AdminResolver.test.ts b/backend/src/graphql/resolver/AdminResolver.test.ts index 77c50d734..1df80aa1a 100644 --- a/backend/src/graphql/resolver/AdminResolver.test.ts +++ b/backend/src/graphql/resolver/AdminResolver.test.ts @@ -268,10 +268,7 @@ describe('AdminResolver', () => { searchText: '', currentPage: 1, pageSize: 25, - filters: { - filterByActivated: null, - filterByDeleted: null, - }, + filters: null, } describe('unauthenticated', () => { @@ -333,8 +330,6 @@ describe('AdminResolver', () => { await userFactory(testEnv, bibiBloxberg) await userFactory(testEnv, stephenHawking) await userFactory(testEnv, garrickOllivander) - // Wolle await userFactory(testEnv, XXX) - // await userFactory(testEnv, XXX) }) afterAll(async () => { @@ -358,7 +353,7 @@ describe('AdminResolver', () => { }), } - it('all users', async () => { + it('all users by "filters === null"', async () => { await expect( query({ query: searchUsers, @@ -378,6 +373,30 @@ describe('AdminResolver', () => { ) }) + it('all users by "filterByActivated === null && filterByDeleted === null"', async () => { + await expect( + query({ + query: searchUsers, + variables: { + ...variablesWithoutTextAndFilters, + filters: { + filterByActivated: null, + filterByDeleted: null, + }, + }, + }), + ).resolves.toEqual( + expect.objectContaining({ + data: { + searchUsers: { + userCount: 4, + userList: expect.arrayContaining(convertObjValuesToArray(allUsers)), + }, + }, + }), + ) + }) + it('users with unchecked email', async () => { await expect( query({ @@ -425,6 +444,30 @@ describe('AdminResolver', () => { }), ) }) + + it('no users with deleted account and unchecked email', async () => { + await expect( + query({ + query: searchUsers, + variables: { + ...variablesWithoutTextAndFilters, + filters: { + filterByActivated: false, + filterByDeleted: true, + }, + }, + }), + ).resolves.toEqual( + expect.objectContaining({ + data: { + searchUsers: { + userCount: 0, + userList: [], + }, + }, + }), + ) + }) }) }) }) diff --git a/backend/src/graphql/resolver/AdminResolver.ts b/backend/src/graphql/resolver/AdminResolver.ts index 0f46729c4..fe4075cd1 100644 --- a/backend/src/graphql/resolver/AdminResolver.ts +++ b/backend/src/graphql/resolver/AdminResolver.ts @@ -52,30 +52,16 @@ export class AdminResolver { @Query(() => SearchUsersResult) async searchUsers( @Args() - { - searchText, - currentPage = 1, - pageSize = 25, - // Wolle: filters = { - // filterByActivated: null, - // filterByDeleted: null, - // }, - filters = { - filterByActivated: null, - filterByDeleted: null, - }, - }: SearchUsersArgs, + { searchText, currentPage = 1, pageSize = 25, filters }: SearchUsersArgs, ): Promise { - // Wolle - console.log('filters: ', filters) const userRepository = getCustomRepository(UserRepository) const filterCriteria: ObjectLiteral[] = [] - if (filters.filterByActivated !== null) { + if (filters && filters.filterByActivated !== null) { filterCriteria.push({ emailChecked: filters.filterByActivated }) } - if (filters.filterByDeleted !== null) { + if (filters && filters.filterByDeleted !== null) { filterCriteria.push({ deletedAt: filters.filterByDeleted ? Not(IsNull()) : IsNull() }) } diff --git a/backend/src/seeds/graphql/mutations.ts b/backend/src/seeds/graphql/mutations.ts index f6c6b1fae..4598cbbe2 100644 --- a/backend/src/seeds/graphql/mutations.ts +++ b/backend/src/seeds/graphql/mutations.ts @@ -112,16 +112,12 @@ export const searchUsers = gql` $searchText: String! $currentPage: Int $pageSize: Int - # Wolle $filterByActivated: Boolean - # $filterByDeleted: Boolean - $filters: SearchUsersFiltersInput! + $filters: SearchUsersFiltersInput ) { searchUsers( searchText: $searchText currentPage: $currentPage pageSize: $pageSize - # Wolle filterByActivated: $filterByActivated # Wolle: put in 'filters' object? - # filterByDeleted: $filterByDeleted filters: $filters ) { userCount