From cbfb5dd8a6b669a6b7b301d1e7f24ff439bb7071 Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Mon, 23 Sep 2024 16:16:13 +0300 Subject: [PATCH] feat: Introduce toRequireProperty custom assertion --- .../test/assertions/to-require-property.js | 31 +++++++++++++++++++ packages/backend/test/setup/global-hooks.js | 1 + .../backend/test/setup/insert-assertions.js | 8 +++++ 3 files changed, 40 insertions(+) create mode 100644 packages/backend/test/assertions/to-require-property.js create mode 100644 packages/backend/test/setup/insert-assertions.js diff --git a/packages/backend/test/assertions/to-require-property.js b/packages/backend/test/assertions/to-require-property.js new file mode 100644 index 00000000..0a6256bd --- /dev/null +++ b/packages/backend/test/assertions/to-require-property.js @@ -0,0 +1,31 @@ +import { ValidationError } from 'objection'; + +export const toRequireProperty = async (model, requiredProperty) => { + try { + await model.query().insert({}); + } catch (error) { + if ( + error instanceof ValidationError && + error.message.includes( + `${requiredProperty}: must have required property '${requiredProperty}'` + ) + ) { + return { + pass: true, + message: () => + `Expected ${requiredProperty} to be required, and it was.`, + }; + } else { + return { + pass: false, + message: () => + `Expected ${requiredProperty} to be required, but it was not found in the error message.`, + }; + } + } + return { + pass: false, + message: () => + `Expected ${requiredProperty} to be required, but no ValidationError was thrown.`, + }; +}; diff --git a/packages/backend/test/setup/global-hooks.js b/packages/backend/test/setup/global-hooks.js index c953539f..ad2f97d7 100644 --- a/packages/backend/test/setup/global-hooks.js +++ b/packages/backend/test/setup/global-hooks.js @@ -2,6 +2,7 @@ import { Model } from 'objection'; import { client as knex } from '../../src/config/database.js'; import logger from '../../src/helpers/logger.js'; import { vi } from 'vitest'; +import './insert-assertions.js'; global.beforeAll(async () => { global.knex = null; diff --git a/packages/backend/test/setup/insert-assertions.js b/packages/backend/test/setup/insert-assertions.js new file mode 100644 index 00000000..64664bde --- /dev/null +++ b/packages/backend/test/setup/insert-assertions.js @@ -0,0 +1,8 @@ +import { expect } from 'vitest'; +import { toRequireProperty } from '../assertions/to-require-property'; + +expect.extend({ + async toRequireProperty(model, requiredProperty) { + return await toRequireProperty(model, requiredProperty); + }, +});