mirror of https://github.com/ghostfolio/ghostfolio
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.1 KiB
74 lines
2.1 KiB
import { DataSource, Type } from '@ghostfolio/prisma/enums';
|
|
|
|
import { BadRequestException, ValidationPipe } from '@nestjs/common';
|
|
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
|
|
});
|
|
});
|
|
});
|
|
|