populate-for-testing.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /* eslint-disable no-console */
  2. import { INestApplicationContext } from '@nestjs/common';
  3. import { LanguageCode } from '@vendure/common/lib/generated-types';
  4. import { VendureConfig } from '@vendure/core';
  5. import { importProductsFromCsv, populateCollections, populateInitialData } from '@vendure/core/cli';
  6. import { TestServerOptions } from '../types';
  7. import { populateCustomers } from './populate-customers';
  8. /* eslint-disable @typescript-eslint/no-floating-promises */
  9. /**
  10. * Clears all tables from the database and populates with (deterministic) random data.
  11. */
  12. export async function populateForTesting<T extends INestApplicationContext>(
  13. config: Required<VendureConfig>,
  14. bootstrapFn: (config: VendureConfig) => Promise<T>,
  15. options: TestServerOptions,
  16. ): Promise<T> {
  17. (config.dbConnectionOptions as any).logging = false;
  18. const logging = options.logging === undefined ? true : options.logging;
  19. const originalRequireVerification = config.authOptions.requireVerification;
  20. config.authOptions.requireVerification = false;
  21. const app = await bootstrapFn(config);
  22. const logFn = (message: string) => (logging ? console.log(message) : null);
  23. await populateInitialData(app, options.initialData);
  24. await populateProducts(app, options.productsCsvPath, logging);
  25. await populateCollections(app, options.initialData);
  26. await populateCustomers(app, options.customerCount ?? 10, logFn);
  27. config.authOptions.requireVerification = originalRequireVerification;
  28. return app;
  29. }
  30. async function populateProducts(
  31. app: INestApplicationContext,
  32. productsCsvPath: string | undefined,
  33. logging: boolean,
  34. ) {
  35. if (!productsCsvPath) {
  36. if (logging) {
  37. console.log('\nNo product data provided, skipping product import');
  38. }
  39. return;
  40. }
  41. const importResult = await importProductsFromCsv(app, productsCsvPath, LanguageCode.en);
  42. if (importResult.errors && importResult.errors.length) {
  43. console.log(`${importResult.errors.length} errors encountered when importing product data:`);
  44. console.log(importResult.errors.join('\n'));
  45. }
  46. if (logging) {
  47. console.log(`\nImported ${importResult.imported} products`);
  48. }
  49. }