Backend: Clean e2e test code
This commit is contained in:
parent
1c4418ab58
commit
2e1b7f9982
@ -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');
|
||||
|
13
backend/test/e2e/util/clear-db.ts
Normal file
13
backend/test/e2e/util/clear-db.ts
Normal 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(),
|
||||
]);
|
6
backend/test/e2e/util/emit-async.ts
Normal file
6
backend/test/e2e/util/emit-async.ts
Normal 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);
|
||||
});
|
6
backend/test/e2e/util/emit-ready.ts
Normal file
6
backend/test/e2e/util/emit-ready.ts
Normal 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 });
|
||||
}
|
11
backend/test/e2e/util/setup-socket.ts
Normal file
11
backend/test/e2e/util/setup-socket.ts
Normal 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;
|
||||
}
|
@ -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
9
types/testing.ts
Normal 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 {}
|
Loading…
x
Reference in New Issue
Block a user