mirror of
https://github.com/freeCodeCamp/freeCodeCamp.git
synced 2026-03-17 04:01:49 -04:00
refactor(api): simplify user tests (#51111)
This commit is contained in:
committed by
GitHub
parent
12abcf94b2
commit
c2fff83d41
@@ -1,6 +1,7 @@
|
||||
import request from 'supertest';
|
||||
|
||||
import { build } from './src/app';
|
||||
import { defaultUser } from './src/utils/default-user';
|
||||
|
||||
type FastifyTestInstance = Awaited<ReturnType<typeof build>>;
|
||||
|
||||
@@ -73,3 +74,23 @@ export function setupServer(): void {
|
||||
await fastifyTestInstance.close();
|
||||
});
|
||||
}
|
||||
|
||||
export const defaultUserId = '64c7810107dd4782d32baee7';
|
||||
export const defaultUserEmail = 'foo@bar.com';
|
||||
|
||||
export async function devLogin(): Promise<string[]> {
|
||||
await fastifyTestInstance.prisma.user.deleteMany({
|
||||
where: { email: 'foo@bar.com' }
|
||||
});
|
||||
|
||||
await fastifyTestInstance.prisma.user.create({
|
||||
data: {
|
||||
...defaultUser,
|
||||
id: defaultUserId,
|
||||
email: defaultUserEmail
|
||||
}
|
||||
});
|
||||
const res = await superRequest('/auth/dev-callback', { method: 'GET' });
|
||||
expect(res.status).toBe(200);
|
||||
return res.get('Set-Cookie');
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
||||
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
||||
import { challengeTypes } from '../../../config/challenge-types';
|
||||
import { setupServer, superRequest } from '../../jest.utils';
|
||||
import { devLogin, setupServer, superRequest } from '../../jest.utils';
|
||||
|
||||
const isValidChallengeCompletionErrorMsg = {
|
||||
type: 'error',
|
||||
@@ -43,9 +43,7 @@ describe('challengeRoutes', () => {
|
||||
|
||||
// Authenticate user
|
||||
beforeAll(async () => {
|
||||
const res = await superRequest('/auth/dev-callback', { method: 'GET' });
|
||||
expect(res.status).toBe(200);
|
||||
setCookies = res.get('Set-Cookie');
|
||||
setCookies = await devLogin();
|
||||
});
|
||||
|
||||
describe('/project-completed', () => {
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
import request from 'supertest';
|
||||
|
||||
import { setupServer, superRequest } from '../../jest.utils';
|
||||
import { devLogin, setupServer, superRequest } from '../../jest.utils';
|
||||
|
||||
describe('Donate', () => {
|
||||
setupServer();
|
||||
@@ -9,14 +7,7 @@ describe('Donate', () => {
|
||||
let setCookies: string[];
|
||||
|
||||
beforeEach(async () => {
|
||||
await fastifyTestInstance.prisma.user.updateMany({
|
||||
where: { email: 'foo@bar.com' },
|
||||
data: { isDonating: false }
|
||||
});
|
||||
const res = await request(fastifyTestInstance.server).get(
|
||||
'/auth/dev-callback'
|
||||
);
|
||||
setCookies = res.get('Set-Cookie');
|
||||
setCookies = await devLogin();
|
||||
});
|
||||
|
||||
describe('POST /donate/add-donation', () => {
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
import request from 'supertest';
|
||||
|
||||
import { setupServer, superRequest } from '../../jest.utils';
|
||||
import { devLogin, setupServer, superRequest } from '../../jest.utils';
|
||||
|
||||
const baseProfileUI = {
|
||||
isLocked: false,
|
||||
@@ -83,15 +81,14 @@ describe('settingRoutes', () => {
|
||||
|
||||
// Authenticate user
|
||||
beforeAll(async () => {
|
||||
setCookies = await devLogin();
|
||||
// This is not strictly necessary, since the defaultUser has this
|
||||
// profileUI, but we're interested in how the profileUI is updated. As
|
||||
// such, setting this explicitly isolates these tests.
|
||||
await fastifyTestInstance.prisma.user.updateMany({
|
||||
where: { email: 'foo@bar.com' },
|
||||
data: { profileUI: baseProfileUI }
|
||||
});
|
||||
const res = await request(fastifyTestInstance.server).get(
|
||||
'/auth/dev-callback'
|
||||
);
|
||||
expect(res.status).toBe(200);
|
||||
setCookies = res.get('Set-Cookie');
|
||||
});
|
||||
|
||||
describe('/update-my-profileui', () => {
|
||||
|
||||
@@ -7,14 +7,20 @@ import { ObjectId } from 'mongodb';
|
||||
import _ from 'lodash';
|
||||
|
||||
import { defaultUser } from '../utils/default-user';
|
||||
import { setupServer, superRequest } from '../../jest.utils';
|
||||
import {
|
||||
defaultUserId,
|
||||
defaultUserEmail,
|
||||
devLogin,
|
||||
setupServer,
|
||||
superRequest
|
||||
} from '../../jest.utils';
|
||||
import { JWT_SECRET } from '../utils/env';
|
||||
import { encodeUserToken } from '../utils/user-token';
|
||||
|
||||
// This is used to build a test user.
|
||||
const testUserData: Prisma.userCreateInput = {
|
||||
...defaultUser,
|
||||
email: 'foo@bar.com',
|
||||
email: defaultUserEmail,
|
||||
username: 'foobar',
|
||||
usernameDisplay: 'Foo Bar',
|
||||
progressTimestamps: [1520002973119, 1520440323273],
|
||||
@@ -251,6 +257,8 @@ const modifiedProgressData = {
|
||||
needsModeration: true
|
||||
};
|
||||
|
||||
const userTokenId = 'dummy-id';
|
||||
|
||||
describe('userRoutes', () => {
|
||||
setupServer();
|
||||
|
||||
@@ -258,9 +266,7 @@ describe('userRoutes', () => {
|
||||
let setCookies: string[];
|
||||
|
||||
beforeEach(async () => {
|
||||
const res = await superRequest('/auth/dev-callback', { method: 'GET' });
|
||||
expect(res.status).toBe(200);
|
||||
setCookies = res.get('Set-Cookie');
|
||||
setCookies = await devLogin();
|
||||
});
|
||||
|
||||
describe('/account/delete', () => {
|
||||
@@ -271,7 +277,7 @@ describe('userRoutes', () => {
|
||||
});
|
||||
|
||||
const userCount = await fastifyTestInstance.prisma.user.count({
|
||||
where: { email: 'foo@bar.com' }
|
||||
where: { email: testUserData.email }
|
||||
});
|
||||
|
||||
expect(response.body).toStrictEqual({});
|
||||
@@ -281,14 +287,9 @@ describe('userRoutes', () => {
|
||||
});
|
||||
|
||||
describe('/account/reset-progress', () => {
|
||||
afterAll(async () => {
|
||||
await fastifyTestInstance.prisma.user.deleteMany({
|
||||
where: { email: 'foo@bar.com' }
|
||||
});
|
||||
});
|
||||
test('POST returns 200 status code with empty object', async () => {
|
||||
await fastifyTestInstance.prisma.user.updateMany({
|
||||
where: { email: 'foo@bar.com' },
|
||||
where: { email: testUserData.email },
|
||||
data: modifiedProgressData
|
||||
});
|
||||
|
||||
@@ -298,7 +299,7 @@ describe('userRoutes', () => {
|
||||
});
|
||||
|
||||
const user = await fastifyTestInstance.prisma.user.findFirst({
|
||||
where: { email: 'foo@bar.com' }
|
||||
where: { email: testUserData.email }
|
||||
});
|
||||
|
||||
expect(response.body).toStrictEqual({});
|
||||
@@ -309,19 +310,13 @@ describe('userRoutes', () => {
|
||||
});
|
||||
});
|
||||
describe('/user/user-token', () => {
|
||||
let userId: string | undefined;
|
||||
beforeEach(async () => {
|
||||
const user = await fastifyTestInstance.prisma.user.findFirstOrThrow({
|
||||
where: { email: 'foo@bar.com' }
|
||||
});
|
||||
userId = user?.id;
|
||||
|
||||
await fastifyTestInstance.prisma.userToken.create({
|
||||
data: {
|
||||
created: new Date(),
|
||||
id: '123',
|
||||
ttl: 1000,
|
||||
userId
|
||||
userId: defaultUserId
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -329,7 +324,7 @@ describe('userRoutes', () => {
|
||||
afterEach(async () => {
|
||||
await fastifyTestInstance.prisma.userToken.deleteMany({
|
||||
where: {
|
||||
userId
|
||||
userId: defaultUserId
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -443,12 +438,12 @@ describe('userRoutes', () => {
|
||||
|
||||
afterEach(async () => {
|
||||
await fastifyTestInstance.prisma.userToken.deleteMany({
|
||||
where: { id: 'dummy-id' }
|
||||
where: { id: userTokenId }
|
||||
});
|
||||
});
|
||||
|
||||
test('GET rejects with 500 status code if the username is missing', async () => {
|
||||
await fastifyTestInstance?.prisma.user.updateMany({
|
||||
await fastifyTestInstance.prisma.user.updateMany({
|
||||
where: { email: testUserData.email },
|
||||
data: { username: '' }
|
||||
});
|
||||
@@ -502,16 +497,10 @@ describe('userRoutes', () => {
|
||||
});
|
||||
|
||||
test('GET returns the userToken if it exists', async () => {
|
||||
const testUser = await fastifyTestInstance.prisma.user.findFirstOrThrow(
|
||||
{
|
||||
where: { email: testUserData.email }
|
||||
}
|
||||
);
|
||||
|
||||
const tokenData = {
|
||||
userId: testUser.id,
|
||||
userId: defaultUserId,
|
||||
ttl: 123,
|
||||
id: 'dummy-id',
|
||||
id: userTokenId,
|
||||
created: new Date()
|
||||
};
|
||||
|
||||
@@ -548,6 +537,7 @@ describe('userRoutes', () => {
|
||||
data: minimalUserData
|
||||
});
|
||||
|
||||
// devLogin must not be used here since it overrides the user
|
||||
const res = await superRequest('/auth/dev-callback', { method: 'GET' });
|
||||
setCookies = res.get('Set-Cookie');
|
||||
|
||||
@@ -622,7 +612,7 @@ describe('userRoutes', () => {
|
||||
setCookies
|
||||
});
|
||||
|
||||
expect(response?.statusCode).toBe(401);
|
||||
expect(response.statusCode).toBe(401);
|
||||
});
|
||||
|
||||
test('POST returns 401 status code with error message', async () => {
|
||||
|
||||
Reference in New Issue
Block a user