Skip to content

Commit

Permalink
Merge pull request #3 from rewiko/cache-is-not-working
Browse files Browse the repository at this point in the history
Cache is not working
  • Loading branch information
rewiko authored Nov 27, 2021
2 parents f7a4599 + 3e8c0b5 commit ea8e0b5
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 4 deletions.
4 changes: 2 additions & 2 deletions jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ module.exports = {
],
coverageThreshold: {
global: {
branches: 98,
functions: 98,
branches: 97,
functions: 97,
lines: 98,
statements: 98,
},
Expand Down
10 changes: 9 additions & 1 deletion packages/crud-typeorm/src/typeorm-crud.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,8 @@ export class TypeOrmCrudService<T> extends CrudService<T> {
public async updateOne(req: CrudRequest, dto: DeepPartial<T>): Promise<T> {
const { allowParamsOverride, returnShallow } = req.options.routes.updateOneBase;
const paramsFilters = this.getParamFilters(req.parsed);
// disable cache while updating
req.options.query.cache = false;
const found = await this.getOneOrFail(req, returnShallow);
const toSave = !allowParamsOverride
? { ...found, ...dto, ...paramsFilters, ...req.parsed.authPersist }
Expand All @@ -200,6 +202,8 @@ export class TypeOrmCrudService<T> extends CrudService<T> {
* @param dto
*/
public async recoverOne(req: CrudRequest): Promise<T> {
// disable cache while recovering
req.options.query.cache = false;
const found = await this.getOneOrFail(req, false, true);
return this.repo.recover(found);
}
Expand All @@ -212,6 +216,8 @@ export class TypeOrmCrudService<T> extends CrudService<T> {
public async replaceOne(req: CrudRequest, dto: DeepPartial<T>): Promise<T> {
const { allowParamsOverride, returnShallow } = req.options.routes.replaceOneBase;
const paramsFilters = this.getParamFilters(req.parsed);
// disable cache while replacing
req.options.query.cache = false;
const [_, found] = await oO(this.getOneOrFail(req, returnShallow));
const toSave = !allowParamsOverride
? { ...(found || {}), ...dto, ...paramsFilters, ...req.parsed.authPersist }
Expand Down Expand Up @@ -247,6 +253,8 @@ export class TypeOrmCrudService<T> extends CrudService<T> {
*/
public async deleteOne(req: CrudRequest): Promise<void | T> {
const { returnDeleted } = req.options.routes.deleteOneBase;
// disable cache while deleting
req.options.query.cache = false;
const found = await this.getOneOrFail(req, returnDeleted);
const toReturn = returnDeleted
? plainToClass(this.entityType, { ...found })
Expand Down Expand Up @@ -352,7 +360,7 @@ export class TypeOrmCrudService<T> extends CrudService<T> {
// set cache
/* istanbul ignore else */
if (options.query.cache && parsed.cache !== 0) {
builder.cache(builder.getQueryAndParameters(), options.query.cache);
builder.cache(options.query.cache);
}

return builder;
Expand Down
46 changes: 45 additions & 1 deletion packages/crud-typeorm/test/c.basic-crud.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ describe('#crud-typeorm', () => {
},
query: {
persist: ['isActive'],
cache: 10,
cache: 10000,
},
validation: {
transform: true,
Expand Down Expand Up @@ -602,6 +602,50 @@ describe('#crud-typeorm', () => {
done();
});
});
it('should not return cached value while patching', async () => {
const dto = { name: { first: 'nameHasBeenPatched' } };
const updateUser = () =>
request(server)
.patch('/companies/2/users/17')
.send(dto);

const query = qb.select(['name.first']).query();
const getUserCachedAfterUpdate = () =>
request(server)
.get('/companies/2/users/17')
.query(query);

const resBeforeUpdateGetUser = await getUserCachedAfterUpdate().expect(200);
expect(resBeforeUpdateGetUser.body.name.first).toBe(null);

const resUpdateUser = await updateUser().expect(200);
expect(resUpdateUser.body.name.first).toBe('nameHasBeenPatched');

const resGetUser = await getUserCachedAfterUpdate().expect(200);
expect(resGetUser.body.name.first).toBe('nameHasBeenPatched');
});
it('should not return cached value while updating', async () => {
const dto = { name: { last: 'nameHasBeenUpdated' } };
const updateUser = () =>
request(server)
.put('/companies/2/users/17')
.send(dto);

const query = qb.select(['name.last']).query();
const getUserCachedAfterUpdate = () =>
request(server)
.get('/companies/2/users/17')
.query(query);

const resBeforeUpdateGetUser = await getUserCachedAfterUpdate().expect(200);
expect(resBeforeUpdateGetUser.body.name.last).toBe(null);

const resUpdateUser = await updateUser().expect(200);
expect(resUpdateUser.body.name.last).toBe('nameHasBeenUpdated');

const resGetUser = await getUserCachedAfterUpdate().expect(200);
expect(resGetUser.body.name.last).toBe('nameHasBeenUpdated');
});
});

describe('#replaceOneBase', () => {
Expand Down

0 comments on commit ea8e0b5

Please sign in to comment.