67 lines
2.0 KiB
TypeScript
67 lines
2.0 KiB
TypeScript
import { defineFeature, loadFeature } from 'jest-cucumber';
|
|
import { getConnectionPool } from '../../setup/jestSetupAfterEnv';
|
|
import { UserResponseDto } from '@modules/user/dtos/user.response.dto';
|
|
import { DatabasePool, sql } from 'slonik';
|
|
import { TestContext } from '@tests/test-utils/TestContext';
|
|
import { IdResponse } from '@src/libs/api/id.response.dto';
|
|
import {
|
|
CreateUserTestContext,
|
|
givenUserProfileData,
|
|
iSendARequestToCreateAUser,
|
|
} from '../user-shared-steps';
|
|
import { ApiClient } from '@tests/test-utils/ApiClient';
|
|
import { iReceiveAnErrorWithStatusCode } from '@tests/shared/shared-steps';
|
|
|
|
const feature = loadFeature('tests/user/create-user/create-user.feature');
|
|
|
|
/**
|
|
* e2e test implementing a Gherkin feature file
|
|
* https://github.com/Sairyss/backend-best-practices#testing
|
|
*/
|
|
|
|
defineFeature(feature, (test) => {
|
|
let pool: DatabasePool;
|
|
const apiClient = new ApiClient();
|
|
|
|
beforeAll(() => {
|
|
pool = getConnectionPool();
|
|
});
|
|
|
|
afterEach(async () => {
|
|
await pool.query(sql`TRUNCATE "users"`);
|
|
await pool.query(sql`TRUNCATE "wallets"`);
|
|
});
|
|
|
|
test('I can create a user', ({ given, when, then, and }) => {
|
|
const ctx = new TestContext<CreateUserTestContext>();
|
|
|
|
givenUserProfileData(given, ctx);
|
|
|
|
iSendARequestToCreateAUser(when, ctx);
|
|
|
|
then('I receive my user ID', () => {
|
|
const response = ctx.latestResponse as IdResponse;
|
|
expect(typeof response.id).toBe('string');
|
|
});
|
|
|
|
and('I can see my user in a list of all users', async () => {
|
|
const res = await apiClient.findAllUsers();
|
|
const response = ctx.latestResponse as IdResponse;
|
|
|
|
expect(
|
|
res.data.some((item: UserResponseDto) => item.id === response.id),
|
|
).toBe(true);
|
|
});
|
|
});
|
|
|
|
test('I try to create a user with invalid data', ({ given, when, then }) => {
|
|
const ctx = new TestContext<CreateUserTestContext>();
|
|
|
|
givenUserProfileData(given, ctx);
|
|
|
|
iSendARequestToCreateAUser(when, ctx);
|
|
|
|
iReceiveAnErrorWithStatusCode(then, ctx);
|
|
});
|
|
});
|