@@ -12,12 +12,32 @@ import {
1212 vulcanCacheSchemaName ,
1313} from '@vulcan-sql/core' ;
1414import { MockDataSource , getQueryResults } from './mockDataSource' ;
15+ import { HttpLogger } from '../../src/lib/loggers/httpLogger' ;
1516
1617// This is a helper function that will flush all pending promises in the event loop when use the setInterval and the callback is promise (jest > 27 version).
1718// reference: https://gist.github.com/apieceofbart/e6dea8d884d29cf88cdb54ef14ddbcc4
1819const flushPromises = ( ) =>
1920 new Promise ( jest . requireActual ( 'timers' ) . setImmediate ) ;
2021
22+ jest . mock ( '../../src/lib/loggers/httpLogger' , ( ) => {
23+ const originalModule = jest . requireActual ( '../../src/lib/loggers/httpLogger' ) ;
24+ return {
25+ ...originalModule ,
26+ HttpLogger : jest . fn ( ) . mockImplementation ( ( ) => {
27+ return {
28+ log : jest . fn ( ) . mockResolvedValue ( true ) , // Spy on the add method
29+ } ;
30+ } ) ,
31+ } ;
32+ } ) ;
33+ const mockLogger = new HttpLogger (
34+ {
35+ enabled : true ,
36+ options : { 'http-logger' : { connection : { host : 'localhost' } } } ,
37+ } ,
38+ 'http-logger'
39+ ) ;
40+
2141describe ( 'Test cache layer refresher' , ( ) => {
2242 const folderPath = 'refresher-test-exported-parquets' ;
2343 const profiles = [
@@ -65,6 +85,10 @@ describe('Test cache layer refresher', () => {
6585 fs . rmSync ( folderPath , { recursive : true , force : true } ) ;
6686 } ) ;
6787
88+ afterEach ( ( ) => {
89+ jest . clearAllMocks ( ) ;
90+ } ) ;
91+
6892 it ( 'Should fail to start when exist duplicate cache table name over than one API schema' , async ( ) => {
6993 // Arrange
7094 const schemas : Array < APISchema > = [
@@ -98,7 +122,7 @@ describe('Test cache layer refresher', () => {
98122 ] as Array < CacheLayerInfo > ,
99123 } ,
100124 ] ;
101- const refresher = new CacheLayerRefresher ( stubCacheLoader ) ;
125+ const refresher = new CacheLayerRefresher ( stubCacheLoader , mockLogger ) ;
102126
103127 // Act, Assert
104128 await expect ( ( ) => refresher . start ( schemas ) ) . rejects . toThrow (
@@ -149,7 +173,7 @@ describe('Test cache layer refresher', () => {
149173 ] as Array < CacheLayerInfo > ,
150174 } ,
151175 ] ;
152- const refresher = new CacheLayerRefresher ( stubCacheLoader ) ;
176+ const refresher = new CacheLayerRefresher ( stubCacheLoader , mockLogger ) ;
153177
154178 // Act, Assert
155179 await expect ( ( ) => refresher . start ( schemas ) ) . rejects . toThrow (
@@ -195,7 +219,7 @@ describe('Test cache layer refresher', () => {
195219 ] ;
196220 // Act
197221 const loader = new CacheLayerLoader ( options , stubFactory as any ) ;
198- const refresher = new CacheLayerRefresher ( loader ) ;
222+ const refresher = new CacheLayerRefresher ( loader , mockLogger ) ;
199223 await refresher . start ( schemas ) ;
200224
201225 // Assert
@@ -271,7 +295,7 @@ describe('Test cache layer refresher', () => {
271295
272296 // Stub the load method to not do any thing.
273297 stubCacheLoader . load . resolves ( ) ;
274- const refresher = new CacheLayerRefresher ( stubCacheLoader ) ;
298+ const refresher = new CacheLayerRefresher ( stubCacheLoader , mockLogger ) ;
275299 // Act
276300 await refresher . start ( schemas ) ;
277301
@@ -304,4 +328,98 @@ describe('Test cache layer refresher', () => {
304328 refresher . stop ( ) ;
305329 jest . clearAllTimers ( ) ;
306330 } ) ;
331+
332+ it (
333+ 'Should send activity log after cacheLoader execute "load" successfully' ,
334+ async ( ) => {
335+ // Arrange
336+ const schemas : Array < APISchema > = [
337+ {
338+ ...sinon . stubInterface < APISchema > ( ) ,
339+ templateSource : 'template-1' ,
340+ profiles : [ profiles [ 0 ] . name , profiles [ 1 ] . name ] ,
341+ cache : [
342+ {
343+ cacheTableName : 'orders' ,
344+ sql : sinon . default . stub ( ) as any ,
345+ profile : profiles [ 0 ] . name ,
346+ } ,
347+ {
348+ cacheTableName : 'products' ,
349+ sql : sinon . default . stub ( ) as any ,
350+ profile : profiles [ 1 ] . name ,
351+ } ,
352+ ] as Array < CacheLayerInfo > ,
353+ } ,
354+ {
355+ ...sinon . stubInterface < APISchema > ( ) ,
356+ templateSource : 'template-2' ,
357+ profiles : [ profiles [ 2 ] . name ] ,
358+ cache : [
359+ {
360+ cacheTableName : 'users' ,
361+ sql : sinon . default . stub ( ) as any ,
362+ profile : profiles [ 2 ] . name ,
363+ } ,
364+ ] as Array < CacheLayerInfo > ,
365+ } ,
366+ ] ;
367+ // Act
368+ const loader = new CacheLayerLoader ( options , stubFactory as any ) ;
369+ const refresher = new CacheLayerRefresher ( loader , mockLogger ) ;
370+ await refresher . start ( schemas ) ;
371+
372+ // Assert
373+ expect ( mockLogger . log ) . toHaveBeenCalledTimes ( 3 ) ;
374+ refresher . stop ( ) ;
375+ } ,
376+ 100 * 1000
377+ ) ;
378+ // Should send activity log when cacheLoader failed on executing "load"
379+ it (
380+ 'Should send activity log after cacheLoader execute "load" failed' ,
381+ async ( ) => {
382+ const schemas : Array < APISchema > = [
383+ {
384+ ...sinon . stubInterface < APISchema > ( ) ,
385+ templateSource : 'template-1' ,
386+ profiles : [ profiles [ 0 ] . name , profiles [ 1 ] . name ] ,
387+ cache : [
388+ {
389+ cacheTableName : 'orders' ,
390+ sql : sinon . default . stub ( ) as any ,
391+ profile : profiles [ 0 ] . name ,
392+ } ,
393+ {
394+ cacheTableName : 'products' ,
395+ sql : sinon . default . stub ( ) as any ,
396+ profile : profiles [ 1 ] . name ,
397+ } ,
398+ ] as Array < CacheLayerInfo > ,
399+ } ,
400+ {
401+ ...sinon . stubInterface < APISchema > ( ) ,
402+ templateSource : 'template-2' ,
403+ profiles : [ profiles [ 2 ] . name ] ,
404+ cache : [
405+ {
406+ cacheTableName : 'users' ,
407+ sql : sinon . default . stub ( ) as any ,
408+ profile : profiles [ 2 ] . name ,
409+ } ,
410+ ] as Array < CacheLayerInfo > ,
411+ } ,
412+ ] ;
413+ // Act
414+ const loader = new CacheLayerLoader ( options , stubFactory as any ) ;
415+ stubCacheLoader . load . throws ( ) ;
416+ const refresher = new CacheLayerRefresher ( loader , mockLogger ) ;
417+ await refresher . start ( schemas ) ;
418+
419+ // Assert
420+ expect ( mockLogger . log ) . toHaveBeenCalledTimes ( 3 ) ;
421+ refresher . stop ( ) ;
422+ } ,
423+ 100 * 1000
424+ ) ;
307425} ) ;
0 commit comments