@@ -142,6 +142,46 @@ describe('reducer', () => {
142142 expect ( nextMeta ) . toBeDefined ( ) ;
143143 expect ( nextMeta . date ) . toBe ( action . meta . date ) ;
144144 } ) ;
145+
146+ it ( 'should use entity.expiresAt()' , ( ) => {
147+ class ExpiresSoon extends ArticleResource {
148+ static expiresAt (
149+ { expiresAt, date } : { expiresAt : number ; date : number } ,
150+ input : any ,
151+ ) : number {
152+ return input . content ? expiresAt : 0 ;
153+ }
154+ }
155+ const spy = jest . spyOn ( ExpiresSoon , 'expiresAt' ) ;
156+ const localAction = {
157+ ...partialResultAction ,
158+ meta : {
159+ ...partialResultAction . meta ,
160+ schema : ExpiresSoon ,
161+ date : partialResultAction . meta . date * 2 ,
162+ expiresAt : partialResultAction . meta . expiresAt * 2 ,
163+ } ,
164+ } ;
165+ const getMeta = ( state : any ) : { date : number ; expiresAt : number } =>
166+ state . entityMeta [ ExpiresSoon . key ] [ `${ ExpiresSoon . pk ( action . payload ) } ` ] ;
167+ const getEntity = ( state : any ) : ExpiresSoon =>
168+ state . entities [ ExpiresSoon . key ] [ `${ ExpiresSoon . pk ( action . payload ) } ` ] ;
169+
170+ const prevEntity = getEntity ( newState ) ;
171+ const prevMeta = getMeta ( newState ) ;
172+ expect ( prevMeta ) . toBeDefined ( ) ;
173+ const nextState = reducer ( newState , localAction ) ;
174+ expect ( spy . mock . calls . length ) . toBeGreaterThanOrEqual ( 1 ) ;
175+
176+ const nextMeta = getMeta ( nextState ) ;
177+ const nextEntity = getEntity ( nextState ) ;
178+
179+ expect ( nextMeta ) . toBeDefined ( ) ;
180+ // our new expires was larger, but custom function returned 0, so we keep old expires
181+ expect ( nextMeta . expiresAt ) . toBe ( prevMeta . expiresAt ) ;
182+
183+ expect ( nextEntity . title ) . toBe ( 'hello' ) ;
184+ } ) ;
145185 } ) ;
146186
147187 it ( 'mutate should never change results' , ( ) => {
0 commit comments