Browse Source

Task/setup tests for valid and invalid import files (#8021)

Setup tests for valid and invalid import files
pull/8033/head
Thomas Kaul 5 days ago
committed by GitHub
parent
commit
5fac38c4d7
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 73
      apps/api/src/app/import/import-data.dto.spec.ts
  2. 1
      apps/api/tsconfig.spec.json

73
apps/api/src/app/import/import-data.dto.spec.ts

@ -0,0 +1,73 @@
import { BadRequestException, ValidationPipe } from '@nestjs/common';
import { DataSource, Type } from '@prisma/client';
import { readFileSync } from 'node:fs';
import { join } from 'node:path';
import { ImportDataDto } from './import-data.dto';
const validationPipe = new ValidationPipe({
forbidNonWhitelisted: true,
transform: true,
whitelist: true
});
function loadImportData(directory: string, fileName: string): ImportDataDto {
const { accounts, activities, assetProfiles, platforms, tags } = JSON.parse(
readFileSync(
join(__dirname, '../../../../../test/import', directory, fileName),
'utf8'
)
) as ImportDataDto;
return { accounts, activities, assetProfiles, platforms, tags };
}
describe('ImportDataDto', () => {
it('accepts sample.json', async () => {
await expect(
validationPipe.transform(loadImportData('ok', 'sample.json'), {
metatype: ImportDataDto,
type: 'body'
})
).resolves.toBeInstanceOf(ImportDataDto);
});
it.each([
{
fileName: 'invalid-data-source.json',
messages: [
`activities.0.dataSource must be one of the following values: ${Object.values(DataSource).join(', ')}`
]
},
{
fileName: 'invalid-date-before-min.json',
messages: ['activities.0.date must be after 1970']
},
{
fileName: 'invalid-date.json',
messages: [
'activities.0.date must be after 1970',
'activities.0.date must be a valid ISO 8601 date string'
]
},
{
fileName: 'invalid-type.json',
messages: [
`activities.0.type must be one of the following values: ${Object.values(Type).join(', ')}`
]
}
])('refuses $fileName', async ({ fileName, messages }) => {
const error: unknown = await validationPipe
.transform(loadImportData('not-ok', fileName), {
metatype: ImportDataDto,
type: 'body'
})
.catch((validationError: unknown) => validationError);
expect(error).toBeInstanceOf(BadRequestException);
expect((error as BadRequestException).getResponse()).toMatchObject({
message: messages
});
});
});

1
apps/api/tsconfig.spec.json

@ -2,6 +2,7 @@
"extends": "./tsconfig.json", "extends": "./tsconfig.json",
"compilerOptions": { "compilerOptions": {
"outDir": "../../dist/out-tsc", "outDir": "../../dist/out-tsc",
"target": "es2021",
"module": "preserve", "module": "preserve",
"types": ["jest", "node"] "types": ["jest", "node"]
}, },

Loading…
Cancel
Save