UNPKG

dbl-coins-invest

Version:

Sharade DBL package over other coins invest services

241 lines (199 loc) 8.14 kB
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(); }); }) }) });