Skip to content

Commit

Permalink
✨ delegatesApi: allow sorting by cmb.
Browse files Browse the repository at this point in the history
  • Loading branch information
mcanever committed Jan 10, 2019
1 parent 420ba6f commit 280edba
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 24 deletions.
2 changes: 1 addition & 1 deletion src/apis/delegatesAPI.ts
Expand Up @@ -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];
Expand Down
1 change: 1 addition & 0 deletions src/schema/delegates.ts
Expand Up @@ -103,6 +103,7 @@ export default {
'address:desc', 'address:asc',
'username:desc', 'username:asc',
'publicKey:desc', 'publicKey:asc',
'cmb:desc', 'cmb:asc',
],
},
includeBanned: {
Expand Down
2 changes: 1 addition & 1 deletion tests/integration/api/delegates.spec.ts
Expand Up @@ -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')
Expand Down
68 changes: 46 additions & 22 deletions tests/unit/apis/delegatesAPI.spec.ts
Expand Up @@ -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) {
Expand All @@ -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' }
},
Expand Down Expand Up @@ -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' },
]);
});

Expand All @@ -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' },
]);
});

Expand All @@ -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' },
]);
});

Expand All @@ -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' },
]);
});

Expand All @@ -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' }
]);
});

Expand All @@ -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' }
]);
});
});
Expand Down

0 comments on commit 280edba

Please sign in to comment.