Fix User Tests

This commit is contained in:
ADAMJR 2021-09-30 12:32:34 +01:00
parent b3bf3f15b7
commit d9d65cbd98
8 changed files with 30 additions and 35 deletions

View File

@ -14,7 +14,7 @@ connect(process.env.MONGO_URI, {
serverSelectionTimeoutMS: 0,
}, (error) => (error)
? Log.error(error.message, 'db')
: Log.info('Connected to database.')
: Log.info(`Connected to database.`)
);
Deps.get<REST>(REST);

View File

@ -7,7 +7,6 @@ import { Verification } from '../../email/verification';
import { EmailFunctions } from '../../email/email-functions';
import { APIError } from '../modules/api-error';
import patterns from '../../types/patterns';
import { updateUser, validateUser } from '../modules/middleware';
export const router = Router();
@ -77,13 +76,6 @@ router.get('/verify', async (req, res) => {
res.status(200).json({ message, token } as REST.From.Get['/auth/verify']);
});
router.get('/email/verify-email', updateUser, validateUser, async (req, res) => {
const user = res.locals.user as SelfUserDocument;
await sendEmail.verifyEmail(user.email, user);
res.json({ message: 'Email sent' } as REST.From.Get['/auth/email/verify-email']);
});
router.get('/email/forgot-password', async (req, res) => {
const email = req.query.email?.toString();
if (!email)

View File

@ -1,5 +1,7 @@
import { Socket } from 'socket.io';
import Users from '../../data/users';
import { EmailFunctions } from '../../email/email-functions';
import { WS } from '../../types/ws';
import Deps from '../../utils/deps';
import { WSGuard } from '../modules/ws-guard';
import { WebSocket } from '../websocket';
@ -11,24 +13,30 @@ export default class implements WSEvent<'USER_UPDATE'> {
constructor(
private users = Deps.get<Users>(Users),
private guard = Deps.get<WSGuard>(WSGuard),
private sendEmail = Deps.get<EmailFunctions>(EmailFunctions),
) {}
public async invoke(ws: WebSocket, client: Socket, { token, username, avatarURL, ignored, email }: WS.Params.UserUpdate) {
const { id: userId } = await this.guard.decodeKey(token);
const user = await this.users.getSelf(userId);
const partialUser = {};
if (email) partialUser['email'] = email;
if (avatarURL) partialUser['avatarURL'] = avatarURL;
if (ignored) partialUser['ignored'] = ignored;
if (username) partialUser['username'] = username;
const usernameChanged = username && username !== user.username;
if (usernameChanged)
partialUser['discriminator'] = await this.users.getDiscriminator(username);
const partial: Partial<Entity.User> = {};
const hasChanged = (key: string, value: any) => value && user[key] !== value;
Object.assign(user, partialUser);
if (hasChanged('avatarURL', avatarURL)) partial['avatarURL'] = avatarURL;
if (hasChanged('ignored', ignored)) partial['ignored'] = ignored;
if (hasChanged('email', email)) {
partial['email'] = email;
await this.sendEmail.verifyEmail(email!, user);
}
if (hasChanged('username', username)) {
partial['username'] = username;
partial['discriminator'] = await this.users.getDiscriminator(username!);
}
Object.assign(user, partial);
await user.save();
client.emit('USER_UPDATE', { userId, partialUser } as WS.Args.UserUpdate);
client.emit('USER_UPDATE', { userId, partialUser: partial } as WS.Args.UserUpdate);
}
}

View File

@ -1,5 +1,3 @@
import 'chai-as-promised';
import UserUpdate from '../../../src/ws/ws-events/user-update';
import { WebSocket } from '../../../src/ws/websocket';
import io from 'socket.io-client';

View File

@ -58,17 +58,17 @@ console.log(`${space(48 * 3)}TESTS${space(54 * 2)}`.bgWhite.black);
import('./integration/ws/user-update.tests');
// import('./integration/ws/ws-guard.tests');
// import('./unit/models/app.tests');
// import('./unit/models/channel.tests');
// import('./unit/models/guild.tests');
// import('./unit/models/guild-member.tests');
// import('./unit/models/invite.tests');
// import('./unit/models/message.tests');
// import('./unit/models/role.tests');
// import('./unit/models/user.tests');
import('./unit/models/app.tests');
import('./unit/models/channel.tests');
import('./unit/models/guild.tests');
import('./unit/models/guild-member.tests');
import('./unit/models/invite.tests');
import('./unit/models/message.tests');
import('./unit/models/role.tests');
import('./unit/models/user.tests');
// import('./unit/snowflake-entity.tests');
// import('./unit/ws/ws-cooldowns.tests');
import('./unit/snowflake-entity.tests');
import('./unit/ws/ws-cooldowns.tests');
})();
// needs to be here, or tests won't run

View File

@ -13,10 +13,6 @@ test(createUser, () => {
given({ discriminator: 0 }).expect(true);
given({ discriminator: 9999 }).expect(true);
given({ discriminator: 10_000 }).expect('Discriminator too high');
given({ friendIds: longArray(101) }).expect('Clout limit reached');
given({ friendIds: [] }).expect(true);
given({ friendRequestIds: longArray(101) }).expect('Max friend requests reached');
given({ friendRequestIds: [] }).expect(true);
given({ status: '' }).expect('Status is required');
given({ status: 'A' }).expect('Invalid status');
given({ status: 'ONLINE' }).expect(true);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 15 KiB

1
types/ws.d.ts vendored
View File

@ -205,6 +205,7 @@ declare namespace WS {
avatarURL?: string;
username?: string;
ignored?: UserTypes.Self['ignored'];
email?: string;
token: string;
}
}