From 5825ff26b8a599bee96583962917f33a3fdacdf1 Mon Sep 17 00:00:00 2001 From: Brendon Duncan Date: Wed, 26 Sep 2018 21:50:42 +1200 Subject: [PATCH] A few more test cases. --- .../services/wallet-history.service.spec.js | 215 +++++++++++++++++- 1 file changed, 214 insertions(+), 1 deletion(-) diff --git a/src/js/services/wallet-history.service.spec.js b/src/js/services/wallet-history.service.spec.js index 1a04833f8..1f55ca031 100644 --- a/src/js/services/wallet-history.service.spec.js +++ b/src/js/services/wallet-history.service.spec.js @@ -3,6 +3,7 @@ fdescribe('walletHistoryService', function(){ var historyStringFull; var storageServiceMock; var txFormatServiceMock; + var walletMock; var walletHistoryService; @@ -14,7 +15,8 @@ fdescribe('walletHistoryService', function(){ txFormatServiceMock = jasmine.createSpyObj(['processTx']); txFormatServiceMock.processTx.and.callFake(function(coin, tx){ return tx; - }) + }); + walletMock = jasmine.createSpyObj(['getTxHistory']); module(function($provide) { $provide.value('storageService', storageServiceMock); @@ -56,6 +58,27 @@ fdescribe('walletHistoryService', function(){ expect(returnedHistory.length).toBe(0); }); + it('getCachedHistory error from storage', function() { + var returnedErr; + var returnedHistory; + var walletIdForStorageGet = ''; + + storageServiceMock.getTxHistory.and.callFake(function(walletId, cb){ + walletIdForStorageGet = walletId; + + cb(new Error('Something went wrong.'), null); + }); + + walletHistoryService.getCachedTxHistory('wallet12345', function(err, txHistory){ + returnedErr = err; + returnedHistory = txHistory; + }); + + expect(walletIdForStorageGet).toBe('wallet12345'); + expect(returnedErr.message).toBe('Something went wrong.'); + expect(returnedHistory.length).toBe(0); + }); + it('getCachedHistory page full', function() { var returnedErr; var returnedHistory; @@ -77,5 +100,195 @@ fdescribe('walletHistoryService', function(){ expect(returnedHistory.length).toBe(50); }); + it('updateLocalTxHistoryByPage, getEarlier, keep cache, sufficient overlap so saved.', function(){ + var fetchLimit; + var fetchSkip; + var returnedHistory; + var savedTxs; + var walletIdForStorageGet; + var walletIdForStorageSet; + walletMock.id = 'wallet67890'; + + storageServiceMock.getTxHistory.and.callFake(function(walletId, cb){ + walletIdForStorageGet = walletId; + + cb(null, JSON.stringify(history.slice(0, 40))); + }); + + walletMock.getTxHistory.and.callFake(function(opts, cb){ + fetchSkip = opts.skip; + fetchLimit = opts.limit; + + cb(null, history.slice(fetchSkip, fetchSkip + fetchLimit)); + }); + + storageServiceMock.setTxHistory.and.callFake(function(txs, walletId, cb){ + savedTxs = txs; + walletIdForStorageSet = walletId; + cb(null); + }); + + walletHistoryService.updateLocalTxHistoryByPage(walletMock, false, false, function(err, txs){ + returnedErr = err; + returnedHistory = txs; + }); + + expect(walletIdForStorageGet).toBe('wallet67890'); + expect(walletIdForStorageSet).toBe('wallet67890'); + expect(fetchSkip).toBe(30); + expect(fetchLimit).toBe(50); + expect(savedTxs.length).toBe(80); + expect(returnedErr).toBeNull(); + expect(returnedHistory.length).toBe(80); + }); + + it('updateLocalTxHistoryByPage, cache empty, getLatest, do not flush cache, some new so saved.', function(){ + var fetchLimit; + var fetchSkip; + var returnedHistory; + var savedTxs; + var walletIdForStorageGet; + var walletIdForStorageSet; + walletMock.id = 'wallet789'; + + storageServiceMock.getTxHistory.and.callFake(function(walletId, cb){ + walletIdForStorageGet = walletId; + cb(null, "[]"); + }); + + walletMock.getTxHistory.and.callFake(function(opts, cb){ + fetchSkip = opts.skip; + fetchLimit = opts.limit; + + cb(null, history.slice(0, 10)); + }); + + storageServiceMock.setTxHistory.and.callFake(function(txs, walletId, cb){ + savedTxs = txs; + walletIdForStorageSet = walletId; + cb(null); + }); + + walletHistoryService.updateLocalTxHistoryByPage(walletMock, true, false, function(err, txs){ + returnedErr = err; + returnedHistory = txs; + }); + + expect(walletIdForStorageGet).toBe('wallet789'); + expect(fetchSkip).toBe(0); + expect(fetchLimit).toBe(50); + expect(savedTxs.length).toBe(10); + expect(returnedErr).toBeNull(); + expect(returnedHistory.length).toBe(10); + }); + + it('updateLocalTxHistoryByPage, some cachedTx, getLatest, do not flush cache, nothing new so nothing added.', function(){ + var fetchLimit; + var fetchSkip; + var returnedHistory; + var walletIdForStorageGet; + walletMock.id = 'wallet789'; + + storageServiceMock.getTxHistory.and.callFake(function(walletId, cb){ + walletIdForStorageGet = walletId; + cb(null, JSON.stringify(history.slice(0, 40))); + }); + + walletMock.getTxHistory.and.callFake(function(opts, cb){ + fetchSkip = opts.skip; + fetchLimit = opts.limit; + + cb(null, []); + }); + + walletHistoryService.updateLocalTxHistoryByPage(walletMock, true, false, function(err, txs){ + returnedErr = err; + returnedHistory = txs; + }); + + expect(walletIdForStorageGet).toBe('wallet789'); + expect(fetchSkip).toBe(0); + expect(fetchLimit).toBe(50); + expect(returnedErr).toBeNull(); + expect(returnedHistory.length).toBe(40); + expect(storageServiceMock.setTxHistory.calls.any()).toBe(false); + }); + + it('updateLocalTxHistoryByPage, some cachedTx, getLatest, do not flush cache, some new with sufficient overlap so all saved.', function(){ + var fetchLimit; + var fetchSkip; + var returnedHistory; + var savedTxs; + var walletIdForStorageGet; + var walletIdForStorageSet; + walletMock.id = 'wallet789'; + + storageServiceMock.getTxHistory.and.callFake(function(walletId, cb){ + walletIdForStorageGet = walletId; + cb(null, JSON.stringify(history.slice(42, 72))); + }); + + walletMock.getTxHistory.and.callFake(function(opts, cb){ + fetchSkip = opts.skip; + fetchLimit = opts.limit; + + cb(null, history.slice(fetchSkip, fetchSkip + fetchLimit)); + }); + + storageServiceMock.setTxHistory.and.callFake(function(txs, walletId, cb){ + savedTxs = txs; + walletIdForStorageSet = walletId; + cb(null); + }); + + walletHistoryService.updateLocalTxHistoryByPage(walletMock, true, false, function(err, txs){ + returnedErr = err; + returnedHistory = txs; + }); + + expect(walletIdForStorageGet).toBe('wallet789'); + expect(fetchSkip).toBe(0); + expect(fetchLimit).toBe(50); + expect(walletIdForStorageSet).toBe('wallet789'); + expect(savedTxs.length).toBe(72); + expect(returnedErr).toBeNull(); + expect(returnedHistory.length).toBe(72); + + }); + + it('updateLocalTxHistoryByPage, getLatest, flush cache, some new so saved.', function(){ + var fetchLimit; + var fetchSkip; + var returnedHistory; + var savedTxs; + var walletIdForStorageSet; + walletMock.id = 'wallet7890'; + + walletMock.getTxHistory.and.callFake(function(opts, cb){ + fetchSkip = opts.skip; + fetchLimit = opts.limit; + + cb(null, history.slice(0, fetchLimit)); + }); + + storageServiceMock.setTxHistory.and.callFake(function(txs, walletId, cb){ + savedTxs = txs; + walletIdForStorageSet = walletId; + cb(null); + }); + + walletHistoryService.updateLocalTxHistoryByPage(walletMock, true, true, function(err, txs){ + returnedErr = err; + returnedHistory = txs; + }); + + expect(walletIdForStorageSet).toBe('wallet7890'); + expect(fetchSkip).toBe(0); + expect(fetchLimit).toBe(50); + expect(savedTxs.length).toBe(50); + expect(returnedErr).toBeNull(); + expect(returnedHistory.length).toBe(50); + expect(storageServiceMock.getTxHistory.calls.any()).toBe(false); + }); }); \ No newline at end of file