From 280edba3311271784cf9be3deca7d49c7e711a4d Mon Sep 17 00:00:00 2001 From: Matteo Canever Date: Thu, 10 Jan 2019 23:38:08 +0100 Subject: [PATCH] :sparkles: delegatesApi: allow sorting by cmb. --- src/apis/delegatesAPI.ts | 2 +- src/schema/delegates.ts | 1 + tests/integration/api/delegates.spec.ts | 2 +- tests/unit/apis/delegatesAPI.spec.ts | 68 +++++++++++++++++-------- 4 files changed, 49 insertions(+), 24 deletions(-) diff --git a/src/apis/delegatesAPI.ts b/src/apis/delegatesAPI.ts index 3225d6cb..2a549605 100644 --- a/src/apis/delegatesAPI.ts +++ b/src/apis/delegatesAPI.ts @@ -92,7 +92,7 @@ export class DelegatesAPI { // tslint:enable object-literal-sort-keys }); if (d.sortField) { - if (['approval', 'productivity', 'rank', 'vote', 'votesWeight'].indexOf(d.sortField) > -1) { + if (['approval', 'productivity', 'rank', 'vote', 'votesWeight', 'cmb'].indexOf(d.sortField) > -1) { delegates.sort((a, b) => { if (d.sortMethod === 'ASC') { return a[d.sortField] - b[d.sortField]; diff --git a/src/schema/delegates.ts b/src/schema/delegates.ts index 28ed1011..1a8928b8 100644 --- a/src/schema/delegates.ts +++ b/src/schema/delegates.ts @@ -103,6 +103,7 @@ export default { 'address:desc', 'address:asc', 'username:desc', 'username:asc', 'publicKey:desc', 'publicKey:asc', + 'cmb:desc', 'cmb:asc', ], }, includeBanned: { diff --git a/tests/integration/api/delegates.spec.ts b/tests/integration/api/delegates.spec.ts index ea326adf..05b48a62 100644 --- a/tests/integration/api/delegates.spec.ts +++ b/tests/integration/api/delegates.spec.ts @@ -68,7 +68,7 @@ describe('api/delegates', () => { }); }); - ['approval', 'productivity', 'rank', 'vote', 'username', 'address', 'publicKey'].forEach((sortKey: string) => { + ['approval', 'productivity', 'rank', 'vote', 'username', 'address', 'publicKey', 'cmb'].forEach((sortKey: string) => { it('should honor orderBy ' + sortKey + ' asc param', async () => { return supertest(initializer.appManager.expressApp) .get('/api/delegates/?orderBy=' + sortKey + ':asc') diff --git a/tests/unit/apis/delegatesAPI.spec.ts b/tests/unit/apis/delegatesAPI.spec.ts index dce3eae7..4ef8f469 100644 --- a/tests/unit/apis/delegatesAPI.spec.ts +++ b/tests/unit/apis/delegatesAPI.spec.ts @@ -83,7 +83,7 @@ describe('apis/delegatesAPI', () => { let data; let d; - // helper to set a returned object with delegates from elegatesModule.getDelegates method + // helper to set a returned object with delegates from delegatesModule.getDelegates method const setReturnedDelegates = (sortField, sortMethod, areNumberValues = true, limit = 3, offset = 0) => { let field; if (sortField) { @@ -96,21 +96,21 @@ describe('apis/delegatesAPI', () => { { delegate: new AccountsModel({ publicKey: Buffer.from('aa', 'hex'), - cmb: 0, + cmb: 1, [field] : areNumberValues ? 1 : 'a' }), info: { rank: 1, [field]: areNumberValues ? 1 : 'a' } }, { delegate: new AccountsModel({ publicKey: Buffer.from('bb', 'hex'), - cmb: 0, + cmb: 2, [field] : areNumberValues ? 3 : 'bb' }), info: { rank: 2, [field]: areNumberValues ? 3 : 'bb' } }, { delegate: new AccountsModel({ publicKey: Buffer.from('cc', 'hex'), - cmb: 0, + cmb: 3, [field] : areNumberValues ? 2 : 'ccc' }), info: { rank: 3, [field]: areNumberValues ? 2 : 'ccc' } }, @@ -154,9 +154,9 @@ describe('apis/delegatesAPI', () => { expect(ret.delegates).to.be.deep.equal( [ - { ...extraAccountData, approval: 1, cmb: 0, rank: 1, rate: 1, publicKey: 'aa' }, - { ...extraAccountData, approval: 2, cmb: 0, rank: 3, rate: 3, publicKey: 'cc' }, - { ...extraAccountData, approval: 3, cmb: 0, rank: 2, rate: 2, publicKey: 'bb' }, + { ...extraAccountData, approval: 1, cmb: 1, rank: 1, rate: 1, publicKey: 'aa' }, + { ...extraAccountData, approval: 2, cmb: 3, rank: 3, rate: 3, publicKey: 'cc' }, + { ...extraAccountData, approval: 3, cmb: 2, rank: 2, rate: 2, publicKey: 'bb' }, ]); }); @@ -166,9 +166,9 @@ describe('apis/delegatesAPI', () => { expect(ret.delegates).to.be.deep.equal( [ - { ...extraAccountData, approval: 3, cmb: 0, rank: 2, rate: 2, publicKey: 'bb' }, - { ...extraAccountData, approval: 2, cmb: 0, rank: 3, rate: 3, publicKey: 'cc' }, - { ...extraAccountData, approval: 1, cmb: 0, rank: 1, rate: 1, publicKey: 'aa' }, + { ...extraAccountData, approval: 3, cmb: 2, rank: 2, rate: 2, publicKey: 'bb' }, + { ...extraAccountData, approval: 2, cmb: 3, rank: 3, rate: 3, publicKey: 'cc' }, + { ...extraAccountData, approval: 1, cmb: 1, rank: 1, rate: 1, publicKey: 'aa' }, ]); }); @@ -178,9 +178,9 @@ describe('apis/delegatesAPI', () => { expect(ret.delegates).to.be.deep.equal( [ - { ...extraAccountData, cmb: 0, username: 'a', rank: 1, rate: 1, publicKey: 'aa' }, - { ...extraAccountData, cmb: 0, username: 'bb', rank: 2, rate: 2, publicKey: 'bb' }, - { ...extraAccountData, cmb: 0, username: 'ccc', rank: 3, rate: 3, publicKey: 'cc' }, + { ...extraAccountData, cmb: 1, username: 'a', rank: 1, rate: 1, publicKey: 'aa' }, + { ...extraAccountData, cmb: 2, username: 'bb', rank: 2, rate: 2, publicKey: 'bb' }, + { ...extraAccountData, cmb: 3, username: 'ccc', rank: 3, rate: 3, publicKey: 'cc' }, ]); }); @@ -190,9 +190,33 @@ describe('apis/delegatesAPI', () => { expect(ret.delegates).to.be.deep.equal( [ - { ...extraAccountData, cmb: 0, username: 'ccc', rank: 3, rate: 3, publicKey: 'cc' }, - { ...extraAccountData, cmb: 0, username: 'bb', rank: 2, rate: 2, publicKey: 'bb' }, - { ...extraAccountData, cmb: 0, username: 'a', rank: 1, rate: 1, publicKey: 'aa' }, + { ...extraAccountData, cmb: 3, username: 'ccc', rank: 3, rate: 3, publicKey: 'cc' }, + { ...extraAccountData, cmb: 2, username: 'bb', rank: 2, rate: 2, publicKey: 'bb' }, + { ...extraAccountData, cmb: 1, username: 'a', rank: 1, rate: 1, publicKey: 'aa' }, + ]); + }); + + it('sortField === cmb, sortMethod !== ASC', async () => { + setReturnedDelegates('cmb', 'DESC', true); + const ret = await instance.getDelegates( {...data, orderBy: 'cmb:desc'}); + + expect(ret.delegates).to.be.deep.equal( + [ + { ...extraAccountData, cmb: 3, rank: 2, rate: 2, publicKey: 'bb' }, + { ...extraAccountData, cmb: 2, rank: 3, rate: 3, publicKey: 'cc' }, + { ...extraAccountData, cmb: 1, rank: 1, rate: 1, publicKey: 'aa' }, + ]); + }); + + it('sortField === cmb, sortMethod == ASC', async () => { + setReturnedDelegates('cmb', 'ASC', true); + const ret = await instance.getDelegates( {...data, orderBy: 'cmb:asc'}); + + expect(ret.delegates).to.be.deep.equal( + [ + { ...extraAccountData, cmb: 1, rank: 1, rate: 1, publicKey: 'aa' }, + { ...extraAccountData, cmb: 2, rank: 3, rate: 3, publicKey: 'cc' }, + { ...extraAccountData, cmb: 3, rank: 2, rate: 2, publicKey: 'bb' }, ]); }); @@ -201,9 +225,9 @@ describe('apis/delegatesAPI', () => { const ret = await instance.getDelegates(data); expect(ret.delegates).to.be.deep.equal([ - { ...extraAccountData, cmb: 0, rank: 1, rate: 1, publicKey: 'aa' }, - { ...extraAccountData, cmb: 0, rank: 2, rate: 2, publicKey: 'bb' }, - { ...extraAccountData, cmb: 0, rank: 3, rate: 3, publicKey: 'cc' } + { ...extraAccountData, cmb: 1, rank: 1, rate: 1, publicKey: 'aa' }, + { ...extraAccountData, cmb: 2, rank: 2, rate: 2, publicKey: 'bb' }, + { ...extraAccountData, cmb: 3, rank: 3, rate: 3, publicKey: 'cc' } ]); }); @@ -212,9 +236,9 @@ describe('apis/delegatesAPI', () => { const ret = await instance.getDelegates(data); expect(ret.delegates).to.be.deep.equal([ - { ...extraAccountData, cmb: 0, rank: 1, rate: 1, publicKey: 'aa' }, - { ...extraAccountData, cmb: 0, rank: 2, rate: 2, publicKey: 'bb' }, - { ...extraAccountData, cmb: 0, rank: 3, rate: 3, publicKey: 'cc' } + { ...extraAccountData, cmb: 1, rank: 1, rate: 1, publicKey: 'aa' }, + { ...extraAccountData, cmb: 2, rank: 2, rate: 2, publicKey: 'bb' }, + { ...extraAccountData, cmb: 3, rank: 3, rate: 3, publicKey: 'cc' } ]); }); });