| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- /* tslint:disable:no-console */
- import { INestApplication, INestMicroservice } from '@nestjs/common';
- import { LanguageCode } from '@vendure/common/lib/generated-types';
- import fs from 'fs-extra';
- import { setConfig } from '../src/config/config-helpers';
- import { VendureConfig } from '../src/config/vendure-config';
- import { clearAllTables } from './clear-all-tables';
- import { populateCustomers } from './populate-customers';
- export interface PopulateOptions {
- logging?: boolean;
- customerCount: number;
- productsCsvPath: string;
- initialDataPath: string;
- }
- // tslint:disable:no-floating-promises
- /**
- * Clears all tables from the database and populates with (deterministic) random data.
- */
- export async function populateForTesting(
- config: VendureConfig,
- bootstrapFn: (config: VendureConfig) => Promise<[INestApplication, INestMicroservice | undefined]>,
- options: PopulateOptions,
- ): Promise<[INestApplication, INestMicroservice | undefined]> {
- (config.dbConnectionOptions as any).logging = false;
- const logging = options.logging === undefined ? true : options.logging;
- const originalRequireVerification = config.authOptions.requireVerification;
- config.authOptions.requireVerification = false;
- setConfig(config);
- await clearAllTables(config, logging);
- const [app, worker] = await bootstrapFn(config);
- await populateInitialData(app, options.initialDataPath, logging);
- await populateProducts(app, options.productsCsvPath, logging);
- await populateCollections(app, options.initialDataPath, logging);
- await populateCustomers(options.customerCount, config, logging);
- config.authOptions.requireVerification = originalRequireVerification;
- return [app, worker];
- }
- async function populateInitialData(app: INestApplication, initialDataPath: string, logging: boolean) {
- const { Populator } = await import('../src/data-import/providers/populator/populator');
- const { initialData } = await import(initialDataPath);
- const populator = app.get(Populator);
- try {
- await populator.populateInitialData(initialData);
- if (logging) {
- console.log(`\nPopulated initial data`);
- }
- } catch (err) {
- console.error(err.message);
- }
- }
- async function populateCollections(app: INestApplication, initialDataPath: string, logging: boolean) {
- const { Populator } = await import('../src/data-import/providers/populator/populator');
- const { initialData } = await import(initialDataPath);
- if (!initialData.collections.length) {
- return;
- }
- const populator = app.get(Populator);
- try {
- await populator.populateCollections(initialData);
- if (logging) {
- console.log(`\nCreated ${initialData.collections.length} Collections`);
- }
- } catch (err) {
- console.error(err);
- }
- }
- async function populateProducts(app: INestApplication, productsCsvPath: string, logging: boolean) {
- const { Importer } = await import('../src/data-import/providers/importer/importer');
- const importer = app.get(Importer);
- const productData = await fs.readFile(productsCsvPath, 'utf-8');
- const importResult = await importer.parseAndImport(productData, LanguageCode.en, false).toPromise();
- if (importResult.errors && importResult.errors.length) {
- console.log(`${importResult.errors.length} errors encountered when importing product data:`);
- await console.log(importResult.errors.join('\n'));
- }
- if (logging) {
- console.log(`\nImported ${importResult.imported} products`);
- }
- }
|