mirror of
https://github.com/IT4Change/gradido.git
synced 2026-02-06 09:56:05 +00:00
add custom validator for ContributionStatus Array
This commit is contained in:
parent
f0405ed210
commit
6fc2203ce5
@ -1,18 +1,24 @@
|
||||
import { IsBoolean, IsPositive, IsString } from 'class-validator'
|
||||
import { Field, ArgsType, Int } from 'type-graphql'
|
||||
|
||||
import { ContributionStatus } from '@enum/ContributionStatus'
|
||||
import { isContributionStatusArray } from '@/graphql/validator/ContributionStatusArray'
|
||||
|
||||
@ArgsType()
|
||||
export class SearchContributionsFilterArgs {
|
||||
@Field(() => [ContributionStatus], { nullable: true, defaultValue: null })
|
||||
@isContributionStatusArray()
|
||||
statusFilter?: ContributionStatus[] | null
|
||||
|
||||
@Field(() => Int, { nullable: true })
|
||||
@IsPositive()
|
||||
userId?: number | null
|
||||
|
||||
@Field(() => String, { nullable: true, defaultValue: '' })
|
||||
@IsString()
|
||||
query?: string | null
|
||||
|
||||
@Field(() => Boolean, { nullable: true })
|
||||
@IsBoolean()
|
||||
noHashtag?: boolean | null
|
||||
}
|
||||
|
||||
@ -2792,11 +2792,28 @@ describe('ContributionResolver', () => {
|
||||
resetToken()
|
||||
})
|
||||
|
||||
it('throw error for invalid ContributionStatus in statusFilter array', async() => {
|
||||
const { errors: errorObjects } = await query({
|
||||
query: adminListContributions,
|
||||
variables: {
|
||||
statusFilter:["INVALID_STATUS"]
|
||||
}
|
||||
})
|
||||
expect(errorObjects).toMatchObject([
|
||||
{
|
||||
message: "Variable \"$statusFilter\" got invalid value \"INVALID_STATUS\" at \"statusFilter[0]\"; Value \"INVALID_STATUS\" does not exist in \"ContributionStatus\" enum.",
|
||||
extensions: {
|
||||
code: "BAD_USER_INPUT"
|
||||
},
|
||||
},
|
||||
])
|
||||
})
|
||||
|
||||
it('returns 17 creations in total', async () => {
|
||||
const {
|
||||
data: { adminListContributions: contributionListObject },
|
||||
} = await query({
|
||||
query: adminListContributions,
|
||||
query: adminListContributions
|
||||
})
|
||||
expect(contributionListObject.contributionList).toHaveLength(17)
|
||||
expect(contributionListObject).toMatchObject({
|
||||
|
||||
@ -12,8 +12,9 @@ export const schema = async (): Promise<GraphQLSchema> => {
|
||||
resolvers: [path.join(__dirname, 'resolver', `!(*.test).{js,ts}`)],
|
||||
authChecker: isAuthorized,
|
||||
scalarsMap: [{ type: Decimal, scalar: DecimalScalar }],
|
||||
emitSchemaFile: true,
|
||||
validate: {
|
||||
validationError: { target: false },
|
||||
validationError: { target: true },
|
||||
skipMissingProperties: true,
|
||||
skipNullProperties: true,
|
||||
skipUndefinedProperties: false,
|
||||
|
||||
21
backend/src/graphql/validator/ContributionStatusArray.ts
Normal file
21
backend/src/graphql/validator/ContributionStatusArray.ts
Normal file
@ -0,0 +1,21 @@
|
||||
import { registerDecorator, ValidationOptions } from 'class-validator'
|
||||
|
||||
import { ContributionStatus } from '@enum/ContributionStatus'
|
||||
|
||||
export function isContributionStatusArray(validationOptions?: ValidationOptions) {
|
||||
// eslint-disable-next-line @typescript-eslint/ban-types
|
||||
return function (object: Object, propertyName: string) {
|
||||
registerDecorator({
|
||||
name: 'isContributionStatusArray',
|
||||
target: object.constructor,
|
||||
propertyName,
|
||||
options: validationOptions,
|
||||
validator: {
|
||||
validate(value: ContributionStatus[]): boolean {
|
||||
const validValues = Object.values(ContributionStatus)
|
||||
return value.every((item) => validValues.includes(item))
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -251,6 +251,7 @@ export const adminListContributions = gql`
|
||||
$statusFilter: [ContributionStatus!]
|
||||
$userId: Int
|
||||
$query: String
|
||||
$noHashtag: Boolean
|
||||
) {
|
||||
adminListContributions(
|
||||
currentPage: $currentPage
|
||||
@ -259,6 +260,7 @@ export const adminListContributions = gql`
|
||||
statusFilter: $statusFilter
|
||||
userId: $userId
|
||||
query: $query
|
||||
noHashtag: $noHashtag
|
||||
) {
|
||||
contributionCount
|
||||
contributionList {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user