test(core): Move unit tests closer to testable components (no-changelog) (#10287)
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
import { NoXss } from '@db/utils/customValidators';
|
||||
import { validate } from 'class-validator';
|
||||
|
||||
describe('customValidators', () => {
|
||||
describe('NoXss', () => {
|
||||
class Person {
|
||||
@NoXss()
|
||||
name: string;
|
||||
}
|
||||
const person = new Person();
|
||||
|
||||
const invalidNames = ['http://google.com', '<script src/>', 'www.domain.tld'];
|
||||
|
||||
const validNames = [
|
||||
'Johann Strauß',
|
||||
'Вагиф Сәмәдоғлу',
|
||||
'René Magritte',
|
||||
'সুকুমার রায়',
|
||||
'མགོན་པོ་རྡོ་རྗེ།',
|
||||
'عبدالحليم حافظ',
|
||||
];
|
||||
|
||||
describe('Block XSS', () => {
|
||||
for (const name of invalidNames) {
|
||||
test(name, async () => {
|
||||
person.name = name;
|
||||
const validationErrors = await validate(person);
|
||||
expect(validationErrors[0].property).toEqual('name');
|
||||
expect(validationErrors[0].constraints).toEqual({ NoXss: 'Malicious name' });
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
describe('Allow Valid names', () => {
|
||||
for (const name of validNames) {
|
||||
test(name, async () => {
|
||||
person.name = name;
|
||||
expect(await validate(person)).toBeEmptyArray();
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,66 @@
|
||||
import type { IrreversibleMigration, ReversibleMigration } from '@/databases/types';
|
||||
import { wrapMigration } from '@/databases/utils/migrationHelpers';
|
||||
|
||||
describe('migrationHelpers.wrapMigration', () => {
|
||||
test('throws if passed a migration without up method', async () => {
|
||||
//
|
||||
// ARRANGE
|
||||
//
|
||||
class TestMigration {}
|
||||
|
||||
//
|
||||
// ACT & ASSERT
|
||||
//
|
||||
expect(() => wrapMigration(TestMigration as never)).toThrow(
|
||||
'Migration "TestMigration" is missing the method `up`.',
|
||||
);
|
||||
});
|
||||
|
||||
test('wraps up method', async () => {
|
||||
//
|
||||
// ARRANGE
|
||||
//
|
||||
class TestMigration implements IrreversibleMigration {
|
||||
async up() {}
|
||||
}
|
||||
const originalUp = jest.fn();
|
||||
TestMigration.prototype.up = originalUp;
|
||||
|
||||
//
|
||||
// ACT
|
||||
//
|
||||
wrapMigration(TestMigration);
|
||||
await new TestMigration().up();
|
||||
|
||||
//
|
||||
// ASSERT
|
||||
//
|
||||
expect(TestMigration.prototype.up).not.toBe(originalUp);
|
||||
expect(originalUp).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
test('wraps down method', async () => {
|
||||
//
|
||||
// ARRANGE
|
||||
//
|
||||
class TestMigration implements ReversibleMigration {
|
||||
async up() {}
|
||||
|
||||
async down() {}
|
||||
}
|
||||
const originalDown = jest.fn();
|
||||
TestMigration.prototype.down = originalDown;
|
||||
|
||||
//
|
||||
// ACT
|
||||
//
|
||||
wrapMigration(TestMigration);
|
||||
await new TestMigration().down();
|
||||
|
||||
//
|
||||
// ASSERT
|
||||
//
|
||||
expect(TestMigration.prototype.down).not.toBe(originalDown);
|
||||
expect(originalDown).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user