Files
talk/test/server/migrations/1510174676_user_status.js
T
2017-11-08 16:35:38 -07:00

204 lines
5.9 KiB
JavaScript

const migration = require('../../../migrations/1510174676_user_status');
const UserModel = require('../../../models/user');
const chai = require('chai');
chai.use(require('chai-datetime'));
const {expect} = chai;
describe('migration.1510174676_user_status', () => {
describe('active user', () => {
beforeEach(async () => {
await UserModel.collection.insert({
id: '123',
username: 'Kirk',
lowercaseUsername: 'kirk',
status: 'ACTIVE',
canEditName: false
});
});
it('completes the migration', async () => {
let user = await UserModel.collection.findOne({id: '123'});
expect(user).to.have.property('status', 'ACTIVE');
expect(user).to.have.property('canEditName', false);
// Perform the migration.
await migration.up();
user = await UserModel.collection.findOne({id: '123'});
// Check that it was correct.
expect(user).to.have.property('status');
expect(user.status).to.have.property('username');
expect(user.status.username).to.have.property('status', 'SET');
expect(user.status.username.history).to.have.length(1);
});
});
describe('social user', () => {
beforeEach(async () => {
await UserModel.collection.insert({
id: '123',
username: 'Kirk',
lowercaseUsername: 'kirk',
status: 'ACTIVE',
canEditName: true
});
});
it('completes the migration', async () => {
let user = await UserModel.collection.findOne({id: '123'});
expect(user).to.have.property('status', 'ACTIVE');
expect(user).to.have.property('canEditName', true);
// Perform the migration.
await migration.up();
user = await UserModel.collection.findOne({id: '123'});
// Check that it was correct.
expect(user).to.have.property('status');
expect(user.status).to.have.property('username');
expect(user.status.username).to.have.property('status', 'UNSET');
expect(user.status.username.history).to.have.length(1);
});
});
describe('rejected username', () => {
beforeEach(async () => {
await UserModel.collection.insert({
id: '123',
username: 'Kirk',
lowercaseUsername: 'kirk',
status: 'BANNED',
canEditName: true
});
});
it('completes the migration', async () => {
let user = await UserModel.collection.findOne({id: '123'});
expect(user).to.have.property('status');
expect(user.status).to.equal('BANNED');
expect(user.canEditName).to.equal(true);
// Perform the migration.
await migration.up();
user = await UserModel.collection.findOne({id: '123'});
// Check that it was correct.
expect(user).to.have.property('status');
expect(user.status).to.have.property('banned');
expect(user.status.banned).to.have.property('status', false);
expect(user.status.username).to.have.property('status', 'REJECTED');
expect(user.status.username.history).to.have.length(1);
});
});
describe('approved username', () => {
beforeEach(async () => {
await UserModel.collection.insert({
id: '123',
username: 'Kirk',
lowercaseUsername: 'kirk',
status: 'APPROVED',
canEditName: false
});
});
it('completes the migration', async () => {
let user = await UserModel.collection.findOne({id: '123'});
expect(user).to.have.property('status');
expect(user.status).to.equal('APPROVED');
expect(user.canEditName).to.equal(false);
// Perform the migration.
await migration.up();
user = await UserModel.collection.findOne({id: '123'});
// Check that it was correct.
expect(user).to.have.property('status');
expect(user.status).to.have.property('banned');
expect(user.status.banned).to.have.property('status', false);
expect(user.status.username).to.have.property('status', 'APPROVED');
expect(user.status.username.history).to.have.length(1);
});
});
describe('suspended user', () => {
beforeEach(async () => {
await UserModel.collection.insert({
id: '123',
username: 'Kirk',
lowercaseUsername: 'kirk',
status: 'ACTIVE',
suspension: {
until: new Date()
}
});
});
it('completes the migration', async () => {
let user = await UserModel.collection.findOne({id: '123'});
expect(user).to.have.property('suspension');
expect(user.suspension).to.have.property('until');
expect(user.suspension.until).to.not.be.null;
const until = user.suspension.until;
// Perform the migration.
await migration.up();
user = await UserModel.collection.findOne({id: '123'});
// Check that it was correct.
expect(user).to.have.property('status');
expect(user.status).to.have.property('suspension');
expect(user.status.suspension).to.have.property('until');
expect(user.status.suspension.until).to.not.be.null;
expect(user.status.suspension.until).to.be.withinTime(new Date(until.getTime() - 1000), new Date(until.getTime() + 1000));
});
});
describe('banned user', () => {
beforeEach(async () => {
await UserModel.collection.insert({
id: '123',
username: 'Kirk',
lowercaseUsername: 'kirk',
status: 'BANNED',
canEditName: false
});
});
it('completes the migration', async () => {
let user = await UserModel.collection.findOne({id: '123'});
expect(user).to.have.property('status');
expect(user.status).to.equal('BANNED');
// Perform the migration.
await migration.up();
user = await UserModel.collection.findOne({id: '123'});
// Check that it was correct.
expect(user).to.have.property('status');
expect(user.status).to.have.property('banned');
expect(user.status.banned).to.have.property('status', true);
});
});
});