From 463f0a060111430a9408dda632cb068941232117 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 12 Oct 2022 19:30:06 +0200 Subject: [PATCH 1/3] feat: Global Jest Extension for Decimal Equal --- backend/jest.config.js | 1 + .../graphql/resolver/AdminResolver.test.ts | 2 +- backend/test/extensions.ts | 31 +++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 backend/test/extensions.ts diff --git a/backend/jest.config.js b/backend/jest.config.js index 6ab44002c..a472df316 100644 --- a/backend/jest.config.js +++ b/backend/jest.config.js @@ -5,6 +5,7 @@ module.exports = { collectCoverage: true, collectCoverageFrom: ['src/**/*.ts', '!**/node_modules/**', '!src/seeds/**', '!build/**'], setupFiles: ['/test/testSetup.ts'], + setupFilesAfterEnv: ['/test/extensions.ts'], modulePathIgnorePatterns: ['/build/'], moduleNameMapper: { '@/(.*)': '/src/$1', diff --git a/backend/src/graphql/resolver/AdminResolver.test.ts b/backend/src/graphql/resolver/AdminResolver.test.ts index b1b4e469e..34888b2df 100644 --- a/backend/src/graphql/resolver/AdminResolver.test.ts +++ b/backend/src/graphql/resolver/AdminResolver.test.ts @@ -1990,7 +1990,7 @@ describe('AdminResolver', () => { deletedAt: null, code: expect.stringMatching(/^[0-9a-f]{24,24}$/), linkEnabled: true, - // amount: '200', + amount: expect.decimalEqual(200), // maxAmountPerMonth: '200', }), ) diff --git a/backend/test/extensions.ts b/backend/test/extensions.ts new file mode 100644 index 000000000..49a92f521 --- /dev/null +++ b/backend/test/extensions.ts @@ -0,0 +1,31 @@ +import Decimal from 'decimal.js-light' + +expect.extend({ + decimalEqual(received, value) { + const pass = new Decimal(value).equals(received.toString()) + if (pass) { + return { + message: () => `expected ${received} to not equal ${value}`, + pass: true, + } + } else { + return { + message: () => `expected ${received} to equal ${value}`, + pass: false, + } + } + }, +}) + +interface CustomMatchers { + decimalEqual(value: number): R +} + +declare global { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace jest { + type Expect = CustomMatchers + type Matchers = CustomMatchers + type InverseAsymmetricMatchers = CustomMatchers + } +} From 39982759f2d2c307fe55907bb5afde755673d3cc Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 12 Oct 2022 19:40:26 +0200 Subject: [PATCH 2/3] test more decimal values coming from DB --- backend/src/graphql/resolver/AdminResolver.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/graphql/resolver/AdminResolver.test.ts b/backend/src/graphql/resolver/AdminResolver.test.ts index 34888b2df..a2eacc990 100644 --- a/backend/src/graphql/resolver/AdminResolver.test.ts +++ b/backend/src/graphql/resolver/AdminResolver.test.ts @@ -1991,7 +1991,7 @@ describe('AdminResolver', () => { code: expect.stringMatching(/^[0-9a-f]{24,24}$/), linkEnabled: true, amount: expect.decimalEqual(200), - // maxAmountPerMonth: '200', + maxAmountPerMonth: expect.decimalEqual(200), }), ) }) @@ -2280,7 +2280,7 @@ describe('AdminResolver', () => { id: linkId, name: 'Dokumenta 2023', memo: 'Danke für deine Teilnahme an der Dokumenta 2023', - // amount: '400', + amount: expect.decimalEqual(400), }), ) }) From 25e461188cf35311719116f93472c59137675e21 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Thu, 13 Oct 2022 09:04:29 +0200 Subject: [PATCH 3/3] ignore eslint rule no-empty-interface --- backend/test/extensions.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/backend/test/extensions.ts b/backend/test/extensions.ts index 49a92f521..69c2ff7a6 100644 --- a/backend/test/extensions.ts +++ b/backend/test/extensions.ts @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/no-empty-interface */ + import Decimal from 'decimal.js-light' expect.extend({ @@ -24,8 +26,8 @@ interface CustomMatchers { declare global { // eslint-disable-next-line @typescript-eslint/no-namespace namespace jest { - type Expect = CustomMatchers - type Matchers = CustomMatchers - type InverseAsymmetricMatchers = CustomMatchers + interface Expect extends CustomMatchers {} + interface Matchers extends CustomMatchers {} + interface InverseAsymmetricMatchers extends CustomMatchers {} } }