testing-asset-storage-strategy.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import { Request } from 'express';
  2. import { Readable, Stream, Writable } from 'stream';
  3. import { AssetStorageStrategy } from '../../src/config/asset-storage-strategy/asset-storage-strategy';
  4. import { getTestImageBuffer } from './testing-asset-preview-strategy';
  5. /**
  6. * A mock storage strategy which does not actually persist the assets anywhere.
  7. */
  8. export class TestingAssetStorageStrategy implements AssetStorageStrategy {
  9. readFileToBuffer(identifier: string): Promise<Buffer> {
  10. return Promise.resolve(getTestImageBuffer());
  11. }
  12. readFileToStream(identifier: string): Promise<Stream> {
  13. const s = new Readable();
  14. s.push(identifier);
  15. s.push(null);
  16. return Promise.resolve(s);
  17. }
  18. toAbsoluteUrl(reqest: Request, identifier: string): string {
  19. const prefix = `test-url/`;
  20. return identifier.startsWith(prefix) ? identifier : `${prefix}${identifier}`;
  21. }
  22. writeFileFromBuffer(fileName: string, data: Buffer): Promise<string> {
  23. return Promise.resolve(`test-assets/${fileName}`);
  24. }
  25. writeFileFromStream(fileName: string, data: Stream): Promise<string> {
  26. const writable = new Writable();
  27. writable._write = (chunk, encoding, done) => {
  28. done();
  29. };
  30. return new Promise<string>((resolve, reject) => {
  31. data.pipe(writable);
  32. writable.on('finish', () => resolve(`test-assets/${fileName}`));
  33. writable.on('error', reject);
  34. });
  35. }
  36. fileExists(fileName: string): Promise<boolean> {
  37. return Promise.resolve(false);
  38. }
  39. }