Make filters object nullable and writing resolver tests

This commit is contained in:
Wolfgang Huß 2022-05-19 10:46:07 +02:00
parent cde9b171af
commit 3ba19359a3
5 changed files with 55 additions and 39 deletions

View File

@ -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
}

View File

@ -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

View File

@ -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: [],
},
},
}),
)
})
})
})
})

View File

@ -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<SearchUsersResult> {
// 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() })
}

View File

@ -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