Skip to content

Commit d286608

Browse files
authored
internal: Add test for Entity.expiresAt() (#921)
* feat: Add Entity.expiresAt() - entity TTL * internal: Add test for Entity.expiresAt()
1 parent e0919c2 commit d286608

File tree

2 files changed

+40
-1
lines changed

2 files changed

+40
-1
lines changed

packages/core/src/state/__tests__/reducer.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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', () => {

packages/core/src/state/selectors/useDenormalized.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,6 @@ export default function useDenormalized<
106106
// in packages/core/src/react-integration/__tests__/useResource.web.tsx
107107
const ready = !!cacheResults || found;
108108

109-
// TODO: move this to the .infer() method
110109
// oldest entity dictates age
111110
let expiresAt = Infinity;
112111
if (ready) {

0 commit comments

Comments
 (0)