From 3d413eb5122d48f03f33f128ab96d565f5fabc05 Mon Sep 17 00:00:00 2001 From: Daniel Fernandez Date: Tue, 17 Sep 2019 20:46:22 -0300 Subject: [PATCH] Implementation fixed and tests added --- notary-api/src/jobs/paymentsHelpers.js | 14 +++- notary-api/test/jobs/paymentsHelpers.cases.js | 47 ++++++++++++ notary-api/test/jobs/paymentsHelpers.test.js | 39 ++++++++++ .../jobs/snapshots/paymentsHelpers.test.js.md | 72 ++++++++++++++++++ .../snapshots/paymentsHelpers.test.js.snap | Bin 0 -> 591 bytes 5 files changed, 168 insertions(+), 4 deletions(-) create mode 100644 notary-api/test/jobs/paymentsHelpers.cases.js create mode 100644 notary-api/test/jobs/paymentsHelpers.test.js create mode 100644 notary-api/test/jobs/snapshots/paymentsHelpers.test.js.md create mode 100644 notary-api/test/jobs/snapshots/paymentsHelpers.test.js.snap diff --git a/notary-api/src/jobs/paymentsHelpers.js b/notary-api/src/jobs/paymentsHelpers.js index 90bbf6c..ac82569 100644 --- a/notary-api/src/jobs/paymentsHelpers.js +++ b/notary-api/src/jobs/paymentsHelpers.js @@ -24,13 +24,12 @@ const reformat = R.pipe( ); /** - * @function mergeByBatPayId Merges two groups of sellers, creating a ValidationResult. - * @param {BatPayID} id + * @function mergeGroups Merges two groups of sellers, creating a ValidationResult. * @param {Array} completed All sellers that completed the notarization successfully * @param {Array} rejected All sellers that failed the notarization done by the notary * @returns {ValidationResult} A group of validated sellers. * */ -const mergeByBatPayId = (id, completed, rejected) => ({ completed, rejected }); +const mergeGroups = (completed = [], rejected = []) => ({ completed, rejected }); /** * @function getResultsByBatPayId Reorganizes the results between all completed and @@ -44,6 +43,13 @@ const mergeByBatPayId = (id, completed, rejected) => ({ completed, rejected }); export const getResultsByBatPayId = (completedSellers, rejectedSellers) => { const completed = reformat(completedSellers || []); const rejected = reformat(rejectedSellers || []); + const uniqueIds = R.union(Object.keys(completed), Object.keys(rejected)); - return R.mergeWithKey(mergeByBatPayId, completed, rejected); + return uniqueIds.reduce( + (all, id) => ({ + ...all, + [id]: mergeGroups(completed[id], rejected[id]), + }), + {}, + ); }; diff --git a/notary-api/test/jobs/paymentsHelpers.cases.js b/notary-api/test/jobs/paymentsHelpers.cases.js new file mode 100644 index 0000000..cddce4b --- /dev/null +++ b/notary-api/test/jobs/paymentsHelpers.cases.js @@ -0,0 +1,47 @@ +export const paidSellers = [ + { + id: 0, + address: '0x07e7b798e2c3bb030b2affa436cbe30c034561b0', + decryptionKeyHash: 'c3d711a72490f8cddc8a3e54b43c7e698b49c1c8baa2c4af3d8d489e9a6ec8797fe4be6ce86e160b87fd97a3190941d9a9e49f5734c2e7155b0f6af9b3231f41', + result: 'verified', + decryptionKeyEncryptedWithMasterKey: 'U2FsdGVkX186z65xavwXdf/+ENFXp1OqVkvW27NNUO8x2K9L0MrAye8z5nM1nCiMAavOeYN2qy5ZN8x8rPTDuLgSGwqYOJmV9HU/QRwUeWlQFnFdRhhXR3AbmDhw3Sac', + }, + { + id: 1, + address: '0x07e7b798e2c3bb030b2affa436cbe30c034561b3', + decryptionKeyHash: 'c3d711a72490f8cddc8a3e54b43c7e698b49c1c8baa2c4af3d8d489e9a6ec8797fe4be6ce86e160b87fd97a3190941d9a9e49f5734c2e7155b0f6af9b3231f41', + result: 'verified', + decryptionKeyEncryptedWithMasterKey: 'U2FsdGVkX186z65xavwXdf/+ENFXp1OqVkvW27NNUO8x2K9L0MrAye8z5nM1nCiMAavOeYN2qy5ZN8x8rPTDuLgSGwqYOJmV9HU/QRwUeWlQFnFdRhhXR3AbmDhw3Sac', + }, + { + id: 0, + address: '0x07e7b798e2c3bb030b2affa436cbe30c034561b4', + decryptionKeyHash: 'c3d711a72490f8cddc8a3e54b43c7e698b49c1c8baa2c4af3d8d489e9a6ec8797fe4be6ce86e160b87fd97a3190941d9a9e49f5734c2e7155b0f6af9b3231f41', + result: 'verified', + decryptionKeyEncryptedWithMasterKey: 'U2FsdGVkX186z65xavwXdf/+ENFXp1OqVkvW27NNUO8x2K9L0MrAye8z5nM1nCiMAavOeYN2qy5ZN8x8rPTDuLgSGwqYOJmV9HU/QRwUeWlQFnFdRhhXR3AbmDhw3Sac', + }, +]; + +export const rejectedSellers = [ + { + id: 0, + address: '0x07e7b798e2c3bb030b2affa436cbe30c034561b1', + decryptionKeyHash: 'c3d711a72490f8cddc8a3e54b43c7e698b49c1c8baa2c4af3d8d489e9a6ec8797fe4be6ce86e160b87fd97a3190941d9a9e49f5734c2e7155b0f6af9b3231f41', + result: 'rejected', + decryptionKeyEncryptedWithMasterKey: 'U2FsdGVkX186z65xavwXdf/+ENFXp1OqVkvW27NNUO8x2K9L0MrAye8z5nM1nCiMAavOeYN2qy5ZN8x8rPTDuLgSGwqYOJmV9HU/QRwUeWlQFnFdRhhXR3AbmDhw3Sac', + }, + { + id: 0, + address: '0x07e7b798e2c3bb030b2affa436cbe30c034561b2', + decryptionKeyHash: 'c3d711a72490f8cddc8a3e54b43c7e698b49c1c8baa2c4af3d8d489e9a6ec8797fe4be6ce86e160b87fd97a3190941d9a9e49f5734c2e7155b0f6af9b3231f41', + result: 'rejected', + decryptionKeyEncryptedWithMasterKey: 'U2FsdGVkX186z65xavwXdf/+ENFXp1OqVkvW27NNUO8x2K9L0MrAye8z5nM1nCiMAavOeYN2qy5ZN8x8rPTDuLgSGwqYOJmV9HU/QRwUeWlQFnFdRhhXR3AbmDhw3Sac', + }, + { + id: 4, + address: '0x07e7b798e2c3bb030b2affa436cbe30c034561b5', + decryptionKeyHash: 'c3d711a72490f8cddc8a3e54b43c7e698b49c1c8baa2c4af3d8d489e9a6ec8797fe4be6ce86e160b87fd97a3190941d9a9e49f5734c2e7155b0f6af9b3231f41', + result: 'rejected', + decryptionKeyEncryptedWithMasterKey: 'U2FsdGVkX186z65xavwXdf/+ENFXp1OqVkvW27NNUO8x2K9L0MrAye8z5nM1nCiMAavOeYN2qy5ZN8x8rPTDuLgSGwqYOJmV9HU/QRwUeWlQFnFdRhhXR3AbmDhw3Sac', + }, +]; diff --git a/notary-api/test/jobs/paymentsHelpers.test.js b/notary-api/test/jobs/paymentsHelpers.test.js new file mode 100644 index 0000000..d59da11 --- /dev/null +++ b/notary-api/test/jobs/paymentsHelpers.test.js @@ -0,0 +1,39 @@ +import { serial as it } from 'ava'; +import { getResultsByBatPayId } from '../../src/jobs/paymentsHelpers'; +import { paidSellers, rejectedSellers } from './paymentsHelpers.cases'; + +it('getResultsByBatPayId > empty batch returns empty object', (assert) => { + const result = getResultsByBatPayId([], []); + assert.snapshot( + result, + { id: 'getResultsByBatPayId.emptyBatch' }, + 'empty batch should return empty object', + ); +}); + +it('getResultsByBatPayId > empty rejected returns full object', (assert) => { + const result = getResultsByBatPayId(paidSellers, []); + assert.snapshot( + result, + { id: 'getResultsByBatPayId.emptyRejected' }, + 'empty rejected sellers should return full object', + ); +}); + +it('getResultsByBatPayId > empty completed returns full object', (assert) => { + const result = getResultsByBatPayId([], rejectedSellers); + assert.snapshot( + result, + { id: 'getResultsByBatPayId.emptyCompleted' }, + 'empty completed sellers should return full object', + ); +}); + +it('getResultsByBatPayId > full batch returns full object', (assert) => { + const result = getResultsByBatPayId(paidSellers, rejectedSellers); + assert.snapshot( + result, + { id: 'getResultsByBatPayId.fullBatch' }, + 'empty completed sellers should return full object', + ); +}); diff --git a/notary-api/test/jobs/snapshots/paymentsHelpers.test.js.md b/notary-api/test/jobs/snapshots/paymentsHelpers.test.js.md new file mode 100644 index 0000000..924c72e --- /dev/null +++ b/notary-api/test/jobs/snapshots/paymentsHelpers.test.js.md @@ -0,0 +1,72 @@ +# Snapshot report for `test/jobs/paymentsHelpers.test.js` + +The actual snapshot is saved in `paymentsHelpers.test.js.snap`. + +Generated by [AVA](https://ava.li). + +## getResultsByBatPayId.emptyBatch + + {} + +## getResultsByBatPayId.emptyCompleted + + { + 0: { + completed: [], + rejected: [ + '0x07e7b798e2c3bb030b2affa436cbe30c034561b1', + '0x07e7b798e2c3bb030b2affa436cbe30c034561b2', + ], + }, + 4: { + completed: [], + rejected: [ + '0x07e7b798e2c3bb030b2affa436cbe30c034561b5', + ], + }, + } + +## getResultsByBatPayId.emptyRejected + + { + 0: { + completed: [ + '0x07e7b798e2c3bb030b2affa436cbe30c034561b0', + '0x07e7b798e2c3bb030b2affa436cbe30c034561b4', + ], + rejected: [], + }, + 1: { + completed: [ + '0x07e7b798e2c3bb030b2affa436cbe30c034561b3', + ], + rejected: [], + }, + } + +## getResultsByBatPayId.fullBatch + + { + 0: { + completed: [ + '0x07e7b798e2c3bb030b2affa436cbe30c034561b0', + '0x07e7b798e2c3bb030b2affa436cbe30c034561b4', + ], + rejected: [ + '0x07e7b798e2c3bb030b2affa436cbe30c034561b1', + '0x07e7b798e2c3bb030b2affa436cbe30c034561b2', + ], + }, + 1: { + completed: [ + '0x07e7b798e2c3bb030b2affa436cbe30c034561b3', + ], + rejected: [], + }, + 4: { + completed: [], + rejected: [ + '0x07e7b798e2c3bb030b2affa436cbe30c034561b5', + ], + }, + } diff --git a/notary-api/test/jobs/snapshots/paymentsHelpers.test.js.snap b/notary-api/test/jobs/snapshots/paymentsHelpers.test.js.snap new file mode 100644 index 0000000000000000000000000000000000000000..26df1eee10d7a09df95729f8983463f664c38632 GIT binary patch literal 591 zcmV-V0tJByWng4tVB}+Di~}kZ zVPpo{D9FfY02b;*7BU1Iy9Fq;3y80x8_R@hEKuotppvgZEWn7Slof{yv=|ZAaVF>I z7UZOsq^5wSf{~;+ic&#(K{9Zy`M9-C!LAkPzzsl|Z9x1H=0H}*qN2n~MrIg`pPwHd z;7~ahR5?Z_U0~E1Goc#5hQ|PQ6ge)i2Y7%gnBb1oGN>>xPc=_6x3ow#N;XbPGB7qs zGD=KKOEfVyOHN8PHb^!wHZe6bOfrCKWn?5>uL;<4M)EB;rfF(38OYS;Mt*AR#*y0a zB{1A6kp)jeVk0IcQZuy~Qjpq=C{1mqNU4p*3`pAmu|E(e5l(T;;Fu}JOmPd)$~U0U zY0O0U4Jh;nh{e%U7G@$e1S&BH;vfQv5U4Z