dbl-coins-invest
Version:
Sharade DBL package over other coins invest services
241 lines (199 loc) • 8.14 kB
JavaScript
import { AccountService, PortfolioService, InvestmentService } from '../src/mysqldb';
import accountFx from './fixtures/accounts.json';
import portfolioFx from './fixtures/portfolios.json';
import investmentsFx from './fixtures/investments.json';
import { sequelize } from "../src/mysqldb/sequelize-init";
const expect = require('chai').expect;
const USER_SUB = 'ff05be11-2673-409d-80a5-6c50c21acce1';
let portfolioModel, accountModel;
let investModel_1, investModel_2, investModel_3;
const asyncTimeout = 10000;
function makeid() {
let text = "";
const possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for (let i = 0; i < 5; i++)
text += possible.charAt(Math.floor(Math.random() * possible.length));
return text;
}
describe('DB Connection', function () {
it('Check if Permissions loaded', (done) => {
sequelize
.authenticate()
.then(() => {
console.log('Connection has been established successfully.');
done()
})
.catch(err => {
console.error('Unable to connect to the database:', err);
throw new Error('Unable to connect to the database:');
});
}).timeout(asyncTimeout)
});
let dbError = (err) => {
console.error(err);
throw new Error(err)
};
describe('Create And Load with Data', () => {
let accountService = new AccountService(USER_SUB);
let accountModel;
let userModel;
it('Create Account with User', (done) => {
accountService.create(accountFx)
.subscribe((responseModel) => {
accountModel = responseModel;
expect(responseModel.get('firstName')).to.be.eql(accountFx.firstName);
expect(responseModel.get('userSub')).to.be.eql(accountFx.userSub);
done();
});
}).timeout(asyncTimeout);
it('Get User\'s account', (done) => {
accountService.getUserAccount()
.subscribe((responseModel) => {
expect(responseModel.get('userSub')).to.be.eql(USER_SUB);
done();
});
}).timeout(asyncTimeout);
it('Load User bySub', (done) => {
accountService.getBySub(USER_SUB)
.subscribe((userModel) => {
expect(userModel.get('userSub')).to.be.eql(USER_SUB);
done();
})
})
});
describe('Create & Add Portfolio', () => {
let portfolioService = new PortfolioService(USER_SUB);
let investmentService = new InvestmentService();
let accountService = new AccountService(USER_SUB);
it('Load Portfolio Fixture', (done) => {
portfolioService.create(portfolioFx)
.subscribe((responseModel) => {
portfolioModel = responseModel;
expect(responseModel.get('name')).to.be.eql(portfolioFx.name);
expect(responseModel.get('baseCurrency')).to.be.eql(portfolioFx.baseCurrency);
done();
});
}).timeout(asyncTimeout);
it('Get Account by ID from DB', (done) => {
let ID = 1;
accountService.getById(ID)
.subscribe((responseModel) => {
accountModel = responseModel;
expect(responseModel.get('id')).to.be.eql(ID);
done();
});
}).timeout(asyncTimeout);
it('Update Account data', (done) => {
let ID = 1;
const newUserName = makeid();
const lastName = makeid();
accountFx.firstName = newUserName;
accountFx.lastName = lastName;
accountService.updateAccount(accountFx)
.subscribe((responseModel) => {
accountModel = responseModel;
expect(responseModel.get('id')).to.be.eql(ID);
expect(responseModel.get('lastName')).to.be.eql(lastName);
expect(responseModel.get('firstName')).to.be.eql(newUserName);
done();
});
}).timeout(asyncTimeout);
it('Add Portfolio to Account', (done) => {
accountService.assignPortfolio(accountModel, portfolioModel)
.subscribe((responseModel) => {
accountModel = responseModel;
accountModel.getPortfolios()
.then((portfolios) => {
expect(portfolios[0].get('accountId')).to.be.eql(accountModel.get('id'));
done();
});
});
}).timeout(asyncTimeout);
it('Create Portfolio in one call', (done) => {
let portfolio = {
name: 'p_name',
comment: 'p_comment'
};
portfolioService.createPortfolio(portfolio)
.subscribe((_portfolio) => {
console.log(_portfolio)
expect(_portfolio.get('name')).to.be.eql(portfolio.name);
done()
})
}).timeout(asyncTimeout);
let portfolioId;
let portfoliosLength;
it('Get All Portfolios', (done) => {
portfolioService.getAll()
.subscribe((response) => {
expect(response.length).to.be.eql(1);
portfolioId = response[0].get('id');
portfoliosLength = response.length;
done();
});
}).timeout(asyncTimeout);
it('Get One Portfolio', (done) => {
portfolioService.getById(portfolioId)
.subscribe((response) => {
expect(response.get('id')).to.be.eql(1);
done();
});
}).timeout(asyncTimeout);
it('Delete Portfolio', (done) => {
portfolioService.delete(portfolioId)
.subscribe((response) => {
expect(response.length).to.be.eql(portfoliosLength - 1);
done();
});
}).timeout(asyncTimeout);
});
describe('Fixtures', () => {
let portfolioService = new PortfolioService(USER_SUB);
let investmentService = new InvestmentService(USER_SUB);
let accountService = new AccountService(USER_SUB);
let portfolioModel;
let numberOfInvestments;
let invetmentsModels;
it('Load Investment Fixture', (done) => {
investmentService.create(investmentsFx[0])
.subscribe((responseModel) => {
investModel_1 = responseModel;
done()
})
}).timeout(asyncTimeout);
it('Add investment to Portfolio', (done) => {
portfolioService.addInvestment(1, investmentsFx[0])
.subscribe((responseModel) => {
portfolioModel = responseModel;
portfolioModel.getInvestments()
.then((invetments) => {
expect(invetments[0].get('portfolioId')).to.be.eql(portfolioModel.get('id'));
let _m = invetments[0].get('metaData');
expect(_m.logo).to.be.eql(investmentsFx[0].metaData.logo);
done();
});
});
});
it('Get investment From Portfolio', (done) => {
portfolioService.getInvestments(portfolioModel.get('id'))
.subscribe((responseModel) => {
numberOfInvestments = responseModel.length;
invetmentsModels = responseModel;
expect(responseModel[0].get('portfolioId')).to.be.eql(portfolioModel.get('id'));
let _m = responseModel[0].get('metaData');
expect(_m.logo).to.be.eql(investmentsFx[0].metaData.logo);
done();
});
});
it('Remove Investment', (done) => {
portfolioService.removeInvestment(portfolioModel.get('id'), invetmentsModels[0].get('id'))
.subscribe((portfolios) => {
portfolioModel.getInvestments()
.then((_invetments) => {
console.log('Remove Investment', _invetments.length, numberOfInvestments);
expect(_invetments.length).to.be.eql(numberOfInvestments - 1);
done();
});
})
})
});