@@ -2,6 +2,7 @@ import appController from './appController';
22import http from '../helpers/httpClient' ;
33import { fetchOmdbData , fetchAndUpdatePosters , getSeriesDetail } from '../helpers/appHelper' ;
44import History from '../models/History' ;
5+ import { getLatest , setLatest , invalidateLatest } from '../helpers/cache' ;
56
67jest . mock ( '../helpers/httpClient' , ( ) => ( {
78 __esModule : true ,
@@ -13,6 +14,12 @@ jest.mock('../helpers/appHelper', () => ({
1314 getSeriesDetail : jest . fn ( ) ,
1415} ) ) ;
1516
17+ jest . mock ( '../helpers/cache' , ( ) => ( {
18+ getLatest : jest . fn ( ) ,
19+ setLatest : jest . fn ( ) ,
20+ invalidateLatest : jest . fn ( ) ,
21+ } ) ) ;
22+
1623jest . mock ( '../models/History' , ( ) => ( {
1724 findOne : jest . fn ( ) ,
1825 findOneAndUpdate : jest . fn ( ) ,
@@ -41,6 +48,7 @@ describe('controllers/appController', () => {
4148 . mockResolvedValueOnce ( { data : { result : [ { imdb_id : '1' } ] } } )
4249 . mockResolvedValueOnce ( { data : { result : [ { imdb_id : '2' } ] } } ) ;
4350 ( fetchAndUpdatePosters as jest . Mock ) . mockResolvedValue ( undefined ) ;
51+ ( getLatest as jest . Mock ) . mockReturnValue ( undefined ) ;
4452
4553 const req : any = { query : { } , user : { id : 1 } } ;
4654 const res : any = { locals : { APP_URL : 'http://app' , CARD_TYPE : 'card' } , render : jest . fn ( ) } ;
@@ -49,6 +57,7 @@ describe('controllers/appController', () => {
4957
5058 expect ( http . get ) . toHaveBeenCalledTimes ( 2 ) ;
5159 expect ( fetchAndUpdatePosters ) . toHaveBeenCalledTimes ( 2 ) ;
60+ expect ( setLatest ) . toHaveBeenCalledWith ( { movies : [ { imdb_id : '1' } ] , series : [ { imdb_id : '2' } ] } ) ;
5261 expect ( res . render ) . toHaveBeenCalledWith ( 'index' , expect . objectContaining ( {
5362 newMovies : [ { imdb_id : '1' } ] ,
5463 newSeries : [ { imdb_id : '2' } ] ,
@@ -62,6 +71,7 @@ describe('controllers/appController', () => {
6271 . mockResolvedValueOnce ( { data : { } } )
6372 . mockResolvedValueOnce ( { data : { } } ) ;
6473 ( fetchAndUpdatePosters as jest . Mock ) . mockResolvedValue ( undefined ) ;
74+ ( getLatest as jest . Mock ) . mockReturnValue ( undefined ) ;
6575
6676 const req : any = { query : { } , user : { } } ;
6777 const res : any = {
@@ -77,6 +87,34 @@ describe('controllers/appController', () => {
7787 } ) ) ;
7888 } ) ;
7989
90+ test ( 'getHome returns cached results when available' , async ( ) => {
91+ ( getLatest as jest . Mock ) . mockReturnValue ( {
92+ movies : [ { imdb_id : 'm1' } ] ,
93+ series : [ { imdb_id : 's1' } ] ,
94+ } ) ;
95+ const req : any = { query : { } , user : { } } ;
96+ const res : any = { locals : { APP_URL : 'http://app' , CARD_TYPE : 'card' } , render : jest . fn ( ) } ;
97+
98+ await appController . getHome ( req , res , jest . fn ( ) ) ;
99+
100+ expect ( http . get ) . not . toHaveBeenCalled ( ) ;
101+ expect ( fetchAndUpdatePosters ) . not . toHaveBeenCalled ( ) ;
102+ expect ( res . render ) . toHaveBeenCalledWith ( 'index' , expect . objectContaining ( {
103+ newMovies : [ { imdb_id : 'm1' } ] ,
104+ newSeries : [ { imdb_id : 's1' } ] ,
105+ } ) ) ;
106+ } ) ;
107+
108+ test ( 'clearCache invalidates cache' , async ( ) => {
109+ const req : any = { } ;
110+ const res : any = { json : jest . fn ( ) } ;
111+
112+ await appController . clearCache ( req , res , jest . fn ( ) ) ;
113+
114+ expect ( invalidateLatest ) . toHaveBeenCalled ( ) ;
115+ expect ( res . json ) . toHaveBeenCalledWith ( { cleared : true } ) ;
116+ } ) ;
117+
80118 test ( 'getView renders series view' , async ( ) => {
81119 ( fetchOmdbData as jest . Mock ) . mockResolvedValue ( { } ) ;
82120 const req : any = { params : { q : '' , id : 'tt' , type : 'series' , season : '1' , episode : '2' } , user : { id : 'u1' } } ;
0 commit comments