Yield generated for 91350a52-c654-4180-a736-96411784fe41
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.
 
 

63 lines
1.6 KiB

import { it, describe, expect, test } from 'vitest';
import axios from 'axios';
import { string, z } from 'zod';
import util from 'node:util';
const schema = z.object({
foxPicture: z.string().url(),
catFacts: z.string().array().length(3),
holidays: z
.object({
date: z.string(),
localName: string(),
name: z.string(),
countryCode: z.string(),
fixed: z.boolean(),
global: z.boolean(),
contries: z.any(),
launchYear: z.number().nullable(),
types: z.string().array(),
})
.array(),
});
const fullShow = (obj) =>
util.inspect(obj, { showHidden: false, depth: null, colors: true });
test('Api result should be the correct shape', async () => {
const { data } = await axios.post('http://localhost:5000', {
countryCode: 'FR',
});
console.log(fullShow(data));
const parsed = schema.safeParse(data);
if (parsed.success !== true) {
console.error(fullShow(parsed.error.format()));
}
expect(parsed.success).toBeTruthy();
});
describe('Holidays', () => {
it('should be of this year', async () => {
const { data } = await axios.post('http://localhost:5000', {
countryCode: 'FR',
});
const parsed = schema.parse(data);
parsed.holidays.forEach((item) => expect(item.date).toContain('2022'));
});
it.each(['FR', 'BE', 'GB'])(
'use the country code in the api response',
async (contryCode) => {
const { data } = await axios.post('http://localhost:5000', {
countryCode: 'FR',
});
const parsed = schema.parse(data);
parsed.holidays.forEach((item) =>
expect(item.countryCode === contryCode),
);
},
);
});