cache-service-default.e2e-spec.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import { CacheService, DefaultCachePlugin, mergeConfig } from '@vendure/core';
  2. import { createTestEnvironment } from '@vendure/testing';
  3. import path from 'path';
  4. import { afterAll, beforeAll, describe, it } from 'vitest';
  5. import { initialData } from '../../../e2e-common/e2e-initial-data';
  6. import { TEST_SETUP_TIMEOUT_MS, testConfig } from '../../../e2e-common/test-config';
  7. import { TestingCacheTtlProvider } from '../src/cache/cache-ttl-provider';
  8. import {
  9. deletesAKey,
  10. evictsTheOldestKeyWhenCacheIsFull,
  11. getReturnsUndefinedForNonExistentKey,
  12. invalidatesALargeNumberOfKeysByTag,
  13. invalidatesByMultipleTags,
  14. invalidatesBySingleTag,
  15. invalidatesManyByMultipleTags,
  16. invalidTTLsShouldNotSetKey,
  17. setsAKey,
  18. setsAKeyWithSubSecondTtl,
  19. setsAKeyWithTtl,
  20. setsArrayOfObjects,
  21. setsArrayValue,
  22. setsObjectValue,
  23. } from './fixtures/cache-service-shared-tests';
  24. describe('CacheService with DefaultCachePlugin (sql)', () => {
  25. const ttlProvider = new TestingCacheTtlProvider();
  26. let cacheService: CacheService;
  27. const { server, adminClient } = createTestEnvironment(
  28. mergeConfig(testConfig(), {
  29. plugins: [
  30. DefaultCachePlugin.init({
  31. cacheSize: 5,
  32. cacheTtlProvider: ttlProvider,
  33. }),
  34. ],
  35. }),
  36. );
  37. beforeAll(async () => {
  38. await server.init({
  39. initialData,
  40. productsCsvPath: path.join(__dirname, 'fixtures/e2e-products-minimal.csv'),
  41. customerCount: 1,
  42. });
  43. await adminClient.asSuperAdmin();
  44. cacheService = server.app.get(CacheService);
  45. }, TEST_SETUP_TIMEOUT_MS);
  46. afterAll(async () => {
  47. await server.destroy();
  48. });
  49. it('get returns undefined for non-existent key', () =>
  50. getReturnsUndefinedForNonExistentKey(cacheService));
  51. it('sets a key', () => setsAKey(cacheService));
  52. it('sets an object value', () => setsObjectValue(cacheService));
  53. it('sets an array value', () => setsArrayValue(cacheService));
  54. it('sets an array of objects', () => setsArrayOfObjects(cacheService));
  55. it('deletes a key', () => deletesAKey(cacheService));
  56. it('sets a key with ttl', () => setsAKeyWithTtl(cacheService, ttlProvider));
  57. it('sets a key with sub-second ttl', () => setsAKeyWithSubSecondTtl(cacheService, ttlProvider));
  58. it('evicts the oldest key when cache is full', () => evictsTheOldestKeyWhenCacheIsFull(cacheService));
  59. it('invalidates by single tag', () => invalidatesBySingleTag(cacheService));
  60. it('invalidates by multiple tags', () => invalidatesByMultipleTags(cacheService));
  61. it('invalidates many by multiple tags', () => invalidatesManyByMultipleTags(cacheService));
  62. it('invalidates a large number of keys by tag', () => invalidatesALargeNumberOfKeysByTag(cacheService));
  63. it('invalid ttls should not set key', () => invalidTTLsShouldNotSetKey(cacheService));
  64. });