Files
bigcapital/packages/server/tests/testInit.js
2023-02-03 11:57:50 +02:00

89 lines
2.1 KiB
JavaScript

import chai from 'chai';
import chaiHttp from 'chai-http';
import chaiThings from 'chai-things';
import systemDb from '@/database/knex';
import app from 'app';
import createTenantFactory from '@/database/factories';
import TenantsManager from '@/system/TenantsManager';
import faker from 'faker';
import { hashPassword } from 'utils';
import TenantModel from 'models/TenantModel';
import createSystemFactory from '@/database/factories/system';
const { expect } = chai;
const request = () => chai.request(app);
beforeEach(async () => {
// Rollback/migrate the system database.
await systemDb.migrate.rollback();
await systemDb.migrate.latest();
});
afterEach(async () => {
});
chai.use(chaiHttp);
chai.use(chaiThings);
// Create tenant database.
const createTenant = () => {
return TenantsManager.createTenant();
};
// Drops tenant database.
const dropTenant = async (tenantWebsite) => {
return TenantsManager.dropTenant(tenantWebsite);
};
// Create a new user that associate to the given tenant Db.
const createUser = async (tenantWebsite, givenUser) => {
const userPassword = (givenUser && givenUser.password) ? givenUser.password : 'admin'
const hashedPassword = await hashPassword(userPassword);
const userInfo = {
first_name: faker.lorem.word(),
last_name: faker.lorem.word(),
email: faker.internet.email(),
active: 1,
phone_number: faker.phone.phoneNumberFormat().replace('-', ''),
password: hashedPassword,
...givenUser,
};
const user = await TenantsManager.createTenantUser(tenantWebsite, userInfo);
return user;
};
const login = async (tenantWebsite, givenUser) => {
let user = givenUser;
if (!givenUser && tenantWebsite) {
const createdUser = await createUser(tenantWebsite, givenUser);
user = createdUser;
}
return request()
.post('/api/auth/login')
.send({
crediential: user.email,
password: 'admin',
});
};
const bindTenantModel = (tenantDb) => {
TenantModel.knexBinded = tenantDb;
};
const systemFactory = createSystemFactory();
export {
login,
systemFactory,
createTenantFactory,
createTenant,
createUser,
dropTenant,
expect,
request,
bindTenantModel,
};