Backend: Clean e2e test code

This commit is contained in:
ADAMJR 2021-12-20 16:42:35 +00:00
parent 1c4418ab58
commit 2e1b7f9982
7 changed files with 58 additions and 26 deletions

View File

@ -1,12 +1,14 @@
import { config } from 'dotenv';
config({ path: 'test/.env' });
import '@accord/types/testing';
import { should, use } from 'chai';
import chaiAsPromised from 'chai-as-promised';
import chaiSpies from 'chai-spies';
import chaiThings from 'chai-things';
import mongoose from 'mongoose';
import { MongoMemoryServer } from 'mongodb-memory-server';
import setupSocket from './util/setup-socket';
use(chaiAsPromised);
use(chaiSpies);
@ -16,6 +18,8 @@ use(should);
import('@accord/backend/modules/deps');
import('@accord/backend/modules/logger');
global['socket'] = setupSocket();
(async() => {
const mongod = await MongoMemoryServer.create();
process.env.MONGO_URI = mongod.getUri('accord-test');

View File

@ -0,0 +1,13 @@
import { Channel } from '@accord/backend/data/models/channel';
import { Guild } from '@accord/backend/data/models/guild';
import { GuildMember } from '@accord/backend/data/models/guild-member';
import { Role } from '@accord/backend/data/models/role';
import { User } from '@accord/backend/data/models/user';
export default () => Promise.all([
Channel.deleteMany(),
Guild.deleteMany(),
GuildMember.deleteMany(),
Role.deleteMany(),
User.deleteMany(),
]);

View File

@ -0,0 +1,6 @@
export default async <K extends keyof WS.To>(event: K, args: WS.To[K]) =>
new Promise((resolve, reject) => {
socket.on(event as any, (res) => resolve(res));
socket.on('error', (error) => reject(error));
socket.emit(event, args);
});

View File

@ -0,0 +1,6 @@
import { SelfUserDocument } from '@accord/backend/data/models/user';
export default async (user: SelfUserDocument) => {
const token = await deps.users.createToken(user);
socket.emit('READY', { token });
}

View File

@ -0,0 +1,11 @@
import { io } from 'socket.io-client';
export default () => {
const socket = (io as any).connect(process.env.ROOT_ENDPOINT, {
secure: true,
path: `/ws`,
transports: ['websocket', 'polling', 'flashsocket'],
});
socket.io.on('open', () => console.log('Connected to WS Server'));
return socket;
}

View File

@ -1,17 +1,10 @@
import '@accord/types';
import { given, test } from '@accord/ion';
import { Channel } from '@accord/backend/data/models/channel';
import { Guild } from '@accord/backend/data/models/guild';
import { SelfUserDocument, User } from '@accord/backend/data/models/user';
import { SelfUserDocument } from '@accord/backend/data/models/user';
import { generateSnowflake } from '@accord/backend/data/snowflake-entity';
import io from 'socket.io-client';
const socket = (io as any).connect(process.env.ROOT_ENDPOINT, {
secure: true,
path: `/ws`,
transports: ['websocket', 'polling', 'flashsocket'],
});
socket.io.on('open', () => console.log('Connected to WS Server'));
import clearDB from '../util/clear-db';
import emitReady from '../util/emit-ready';
import emitAsync from '../util/emit-async';
test(channelDelete, () => {
const channelId = generateSnowflake();
@ -21,12 +14,8 @@ test(channelDelete, () => {
let guild: Entity.Guild;
let ownerUser: SelfUserDocument;
beforeEach(async function () {
await Promise.all([
Channel.deleteMany(),
Guild.deleteMany(),
User.deleteMany(),
]);
beforeEach(async () => {
await clearDB();
ownerUser = await deps.users.create({
email: 'user1@example.com',
@ -40,8 +29,7 @@ test(channelDelete, () => {
});
channel = await deps.channels.create({ id: channelId, guildId });
const token = await deps.users.createToken(ownerUser);
socket.emit('READY', { token });
await emitReady(ownerUser);
});
// @accord/ion: before tests must go above
@ -66,15 +54,10 @@ test(channelDelete, () => {
username: 'Test User 2',
password: 'doesnotmatter',
});
const token = await deps.users.createToken(randomUser);
socket.emit('READY', { token });
await emitReady(randomUser);
}
});
function channelDelete(args: WS.To['CHANNEL_DELETE']) {
return new Promise((resolve, reject) => {
socket.on('CHANNEL_DELETE', (res) => resolve(res));
socket.on('error', (error) => reject(error));
socket.emit('CHANNEL_DELETE', args);
});
return emitAsync('CHANNEL_DELETE', args);
}

9
types/testing.ts Normal file
View File

@ -0,0 +1,9 @@
declare global {
const socket: {
emit: <K extends keyof WS.To>(event: K, args: WS.To[K]) => any;
on: <K extends keyof WS.From>(event: K | 'error' | 'disconnect', callback: (args: WS.From[K]) => any) => any;
off: (event: string, callback?: any) => any;
disconnect: () => any;
};
}
export {}