From 6bdcbe6c75b49aa6d6258ad3c64230bb8c19de03 Mon Sep 17 00:00:00 2001 From: Carlos Cortizas <97907068+CarlosCortizasCT@users.noreply.github.com> Date: Tue, 8 Oct 2024 15:43:44 +0200 Subject: [PATCH] Update Core helpers to support the new proposed way of writing test data models (#688) * refactor(core): support new test data models pattern * refactor(models/commons): add meta info * fix(core): transformers execution * refactor(core): refine code * refactor(core): remove unsupported tests * chore(core): add code comment * chore: add changeset --- .changeset/blue-sloths-repair.md | 12 ++ core/src/builder.spec.ts | 163 +----------------- core/src/builder.ts | 111 ++++++++---- core/src/helpers.ts | 81 +++++++++ core/src/index.ts | 3 + core/src/transformer.ts | 28 ++- core/src/types.ts | 44 ++++- models/channel/src/builder.ts | 1 + .../src/address/address-draft/builder.ts | 1 + models/commons/src/address/builder.ts | 1 + .../src/cent-precision-money/builder.ts | 1 + .../cent-precision-money-draft/builder.ts | 1 + models/commons/src/client-logging/builder.ts | 1 + .../src/client-logging/transformers.ts | 1 + .../src/high-precision-money/builder.ts | 1 + .../high-precision-money-draft/builder.ts | 1 + models/commons/src/key-reference/builder.ts | 1 + .../key-reference-draft/builder.ts | 1 + models/commons/src/localized-field/builder.ts | 1 + .../commons/src/localized-string/builder.ts | 1 + .../localized-string-draft/builder.ts | 1 + models/commons/src/money/builder.ts | 1 + .../commons/src/money/money-draft/builder.ts | 1 + models/commons/src/price-tier/builder.ts | 1 + .../price-tier/price-tier-draft/builder.ts | 1 + models/commons/src/price/builder.ts | 6 +- .../commons/src/price/price-draft/builder.ts | 1 + models/commons/src/reference/builder.ts | 1 + .../src/reference/reference-draft/builder.ts | 1 + models/commons/src/reference/transformers.ts | 2 + models/customer-group/src/builder.ts | 1 + .../src/attribute-enum-type/transformers.ts | 1 + .../transformers.ts | 1 + .../attribute-set-type-draft/transformers.ts | 1 + .../product-type-draft/transformers.ts | 1 + models/standalone-price/src/builder.ts | 1 + 36 files changed, 267 insertions(+), 210 deletions(-) create mode 100644 .changeset/blue-sloths-repair.md diff --git a/.changeset/blue-sloths-repair.md b/.changeset/blue-sloths-repair.md new file mode 100644 index 000000000..aa83061c7 --- /dev/null +++ b/.changeset/blue-sloths-repair.md @@ -0,0 +1,12 @@ +--- +'@commercetools-test-data/standalone-price': minor +'@commercetools-test-data/customer-group': minor +'@commercetools-test-data/product-type': minor +'@commercetools-test-data/channel': minor +'@commercetools-test-data/commons': minor +'@commercetools-test-data/core': minor +--- + +The main change is about the `core` package where we are introducing support for writing test data models using new implementation patterns which makes the process simpler. Also, the resulting code will be more maintainable. + +You can head over [here]() for updated documentation about those new patterns. diff --git a/core/src/builder.spec.ts b/core/src/builder.spec.ts index be4c555ee..84426d498 100644 --- a/core/src/builder.spec.ts +++ b/core/src/builder.spec.ts @@ -1,12 +1,7 @@ import { sequence, fake } from './@jackfranklin/test-data-bot'; import Builder from './builder'; import Generator from './generator'; -import { - buildField, - buildFields, - buildGraphqlList, - buildRestList, -} from './helpers'; +import { buildGraphqlList, buildRestList } from './helpers'; import Transformer from './transformer'; type TestUser = { @@ -24,11 +19,6 @@ type TestOrganization = { name: string; email?: string; }; -type TestOrganizationTransformed = { - identifier: number; - v: string; - name: string; -}; type TestOrganizationTransformedWithEmail = { name: string; email: string; @@ -287,71 +277,6 @@ describe('building', () => { ); }); - it('should build all build upon properties with callbacks', () => { - const built = Builder({ generator }) - .id('my-id') - .name(({ version }) => ({ - name: 'My name', - version: version ?? 0 + 1, - })) - .build(); - - expect(built).toEqual( - expect.objectContaining({ - id: 'my-id', - name: 'My name', - version: 2, - }) - ); - }); - - it('should build all build upon properties with transforms', () => { - const transformers = { - graphql: Transformer( - 'graphql', - { - addFields: ({ fields }) => { - const identifier = 1; - return { - identifier, - v: `${fields.version}-${identifier}`, - }; - }, - removeFields: ['id', 'version'], - } - ), - }; - const built = Builder({ - generator, - transformers, - }) - .name('My name') - .buildGraphql(); - - // Should keep non overwritten properties - expect(built).toEqual( - expect.objectContaining({ - name: 'My name', - }) - ); - - // Should allow overwriting generated properties - expect(built).toEqual( - expect.objectContaining({ - identifier: 1, - v: '3-1', - }) - ); - - // Should remove properties - expect(built).toEqual( - expect.not.objectContaining({ - id: expect.any(String), - version: expect.any(Number), - }) - ); - }); - describe('when fields should be omitted', () => { describe('with `omitFields`', () => { it('should build properties and omit as requested', () => { @@ -509,92 +434,6 @@ describe('building', () => { }); }); }); - - describe('building in transform', () => { - describe('with property', () => { - it('should build nested builders on demand', () => { - const transformers = { - graphql: Transformer( - 'graphql', - { - replaceFields: ({ fields }) => ({ - ...fields, - user: buildField(fields.user), - }), - } - ), - }; - const userBuilder = - Builder().name('My name'); - const built = Builder({ transformers }) - .id('my-id') - .user(userBuilder) - .buildGraphql(); - - expect(built).toEqual({ - id: 'my-id', - user: { - name: 'My name', - }, - }); - }); - }); - - describe('with list', () => { - it('should build nested builders on demand', () => { - const teamTransformers = { - graphql: Transformer('graphql', { - replaceFields: ({ fields }) => ({ - ...fields, - users: buildFields( - fields.users, - 'graphql' - ), - }), - }), - }; - const userTransformers = { - graphql: Transformer< - TestExpandedUserReference, - TestExpandedUserReferenceGraphql - >('graphql', { - addFields: () => ({ - __typename: 'User', - }), - }), - }; - const userBuilder1 = Builder({ - transformers: userTransformers, - }).name('My name'); - const userBuilder2 = Builder({ - transformers: userTransformers, - }).name('My other name'); - const built = Builder({ - transformers: teamTransformers, - }) - .id('my-id') - .users([ - userBuilder1, - userBuilder2, - ]) - .buildGraphql(); - - expect(built).toEqual({ - id: 'my-id', - users: [ - { - __typename: 'User', - name: 'My name', - }, - { - __typename: 'User', - name: 'My other name', - }, - ], - }); - }); - }); - }); }); describe('paginated list', () => { diff --git a/core/src/builder.ts b/core/src/builder.ts index 7fad8f4da..d856be66c 100644 --- a/core/src/builder.ts +++ b/core/src/builder.ts @@ -1,10 +1,5 @@ -import { - isFunction, - isBuilderFunction, - isString, - omitMany, - pickMany, -} from './helpers'; +import omit from 'lodash/omit'; +import { isFunction, isBuilderFunction, isString, pickMany } from './helpers'; import type { TBuilderMapStateFunction, TBuilderOptions, @@ -12,6 +7,7 @@ import type { TBuilder, TPropertyBuilder, TPropertyFieldUpdater, + TGeneratorResult, } from './types'; // The Proxy constructor type does not differentiate between the target and the return type. @@ -34,8 +30,12 @@ const createState = ({ return { get: () => state, - merge: (update: Partial) => { - state = { ...state, ...update }; + merge: (update: Partial, overwrite = true) => { + if (overwrite) { + state = { ...state, ...update }; + } else { + state = { ...update, ...state }; + } }, set: (prop: string, value: unknown) => { state = { ...state, [prop]: value }; @@ -69,6 +69,15 @@ function PropertyBuilder(initialProps?: Partial) { } } }, + // This allows to inject initial props into the state after it's created. + set(_target, prop, value) { + if (prop === 'initialProps') { + state.merge(value, false); + } else { + state.set(prop as string, value); + } + return true; + }, } ); return builder; @@ -77,13 +86,27 @@ function PropertyBuilder(initialProps?: Partial) { function Builder({ generator, transformers, + type, + postBuild, + name = 'Unknown Builder', + compatConfig, }: TBuilderOptions = {}): TBuilder { - const applyGeneratorIfExists = (): Partial => { - if (!generator) return {}; - return generator.generate(); + const applyGenerator = ( + type: 'rest' | 'graphql' + ): ReturnType['generate']> => { + if (compatConfig?.generators) { + return compatConfig.generators[type].generate(); + } + if (generator) { + return generator.generate(); + } + return {} as Model; }; - const propertyBuilder = PropertyBuilder(applyGeneratorIfExists()); + // We build the properties builder here becuase it handles the builder state and + // it needs to be bound to the instance. + // We do not run the generator here though as it can depend on the build call (rest or graphql). + const propertyBuilder = PropertyBuilder(); const builder: { proxy: TBuilder; @@ -112,35 +135,55 @@ function Builder({ omitFields = [], keepFields = [], }: TFieldBuilderArgs = {}) => { + const builderType = + type === 'graphql' || propToSet === 'buildGraphql' + ? 'graphql' + : 'rest'; + + // Now that we know which type of builder we are dealing with, we can + // run the appropriate generator + // This is required for compatibility between the new and legacy models. + const generatedFields = applyGenerator(builderType); + // @ts-expect-error `initialProps` is a dymamic property created in the PropertyBuilder proxy + propertyBuilder.initialProps = generatedFields; + const built = propertyBuilder.get() as Model; let transformed = built; - switch (propToSet) { - case 'build': { - transformed = (transformers?.default?.transform(built) ?? - built) as Model; - break; - } - case 'buildGraphql': { - transformed = (transformers?.graphql?.transform(built) ?? - built) as Model; - break; - } - case 'buildRest': { - transformed = (transformers?.rest?.transform(built) ?? - built) as Model; - break; - } - default: - break; - } + // Run transformers (they build the nested models) + // By now we need to keep the three types in order to be backwards compatible + // but the "default" one should be removed in the future. When that happens + // we can get rid of this property and just use the `builderType` one. + const transformersType = + type === 'graphql' || propToSet === 'buildGraphql' + ? 'graphql' + : type === 'rest' || propToSet === 'buildRest' + ? 'rest' + : 'default'; + transformed = (transformers?.[transformersType]?.transform({ + fields: built, + builderName: name, + }) ?? built) as Model; if (keepFields.length > 0) { - return pickMany(transformed, ...keepFields); + transformed = pickMany(transformed, ...keepFields); } if (omitFields.length > 0) { - return omitMany(transformed, ...omitFields); + transformed = omit(transformed as {}, omitFields) as Model; } + + // This is required for compatibility between the new and legacy models. + const postBuilder = compatConfig?.postBuilders + ? compatConfig.postBuilders[builderType] + : postBuild; + // Run the callback to allow for additional transformations + if (postBuilder) { + transformed = { + ...transformed, + ...postBuilder(transformed), + }; + } + return transformed; }; } diff --git a/core/src/helpers.ts b/core/src/helpers.ts index 880465832..04d59dabc 100644 --- a/core/src/helpers.ts +++ b/core/src/helpers.ts @@ -1,3 +1,6 @@ +import Builder from './builder'; +import Generator from './generator'; +import Transformer from './transformer'; import type { TReferenceObject, TExpandedReference, @@ -9,6 +12,7 @@ import type { TBuildFieldMeta, TTransformType, TTransformBuildName, + TModelFieldsConfig, } from './types'; const isFunction = (value: unknown): value is Fn => @@ -168,6 +172,80 @@ const buildRestList = ( }); }; +type TCreateSpecializedTransformersParams = { + type: 'rest' | 'graphql'; + buildFields?: (keyof TModel)[]; +}; +const createSpecializedTransformers = ({ + type, + buildFields, +}: TCreateSpecializedTransformersParams) => { + return { + [type]: Transformer(type, { + buildFields: buildFields, + }), + }; +}; + +type TCreateSpecializedBuilderParams = { + modelFieldsConfig: TModelFieldsConfig; + type: 'rest' | 'graphql'; + name: string; +}; +const createSpecializedBuilder = ( + params: TCreateSpecializedBuilderParams +) => { + const modelBuilder = Builder({ + type: params.type, + generator: Generator({ + fields: params.modelFieldsConfig.fields, + }), + name: params.name, + transformers: createSpecializedTransformers({ + type: params.type, + }), + postBuild: params.modelFieldsConfig.postBuild, + }); + + return modelBuilder as TBuilder; +}; + +const createCompatibilityBuilder = (params: { + name: string; + modelFieldsConfig: { + rest: TModelFieldsConfig; + graphql: TModelFieldsConfig; + }; +}) => { + const modelBuilder = Builder({ + name: params.name, + compatConfig: { + generators: { + rest: Generator({ + fields: params.modelFieldsConfig.rest.fields, + }), + graphql: Generator({ + fields: params.modelFieldsConfig.graphql.fields, + }), + }, + postBuilders: { + rest: params.modelFieldsConfig.rest.postBuild, + graphql: params.modelFieldsConfig.graphql.postBuild, + }, + }, + transformers: { + ...createSpecializedTransformers({ + type: 'rest', + }), + ...createSpecializedTransformers({ + type: 'graphql', + }), + }, + }); + + return modelBuilder; +}; + export { isFunction, isString, @@ -186,4 +264,7 @@ export { buildFields, buildGraphqlList, buildRestList, + createSpecializedTransformers, + createSpecializedBuilder, + createCompatibilityBuilder, }; diff --git a/core/src/index.ts b/core/src/index.ts index 80c01bc90..2ed61050e 100644 --- a/core/src/index.ts +++ b/core/src/index.ts @@ -7,6 +7,9 @@ export { buildFields, buildGraphqlList, buildRestList, + createSpecializedTransformers, + createSpecializedBuilder, + createCompatibilityBuilder, toExpandedReference, toRestPaginatedQueryResult, toGraphqlPaginatedQueryResult, diff --git a/core/src/transformer.ts b/core/src/transformer.ts index 27d130b23..65ce1be81 100644 --- a/core/src/transformer.ts +++ b/core/src/transformer.ts @@ -4,14 +4,21 @@ import type { TTransformerOptions, TBuilder, TTransformType, + TTransformFnParams, } from './types'; +const isBuilder = (value?: unknown): boolean => { + const fieldValue = + value && Array.isArray(value) && value.length > 0 ? value[0] : value; + return Boolean(fieldValue) && fieldValue.build instanceof Function; +}; + function Transformer( transformType: TTransformType, transformOptions: TTransformerOptions ): TTransformer { - function transform(fields: Model) { - let transformedFields = { ...fields }; + function transform(params: TTransformFnParams) { + let transformedFields: Model = { ...params.fields }; const fieldsReplacer = transformOptions?.replaceFields; const fieldsAdder = transformOptions?.addFields; const fieldsToRemove = transformOptions?.removeFields; @@ -36,6 +43,21 @@ function Transformer( }; } }); + } else if (fieldsToBuild !== false) { + for (const [key, value] of Object.entries(transformedFields as {})) { + if (!value || !isBuilder(value)) continue; + const fieldKey = key as keyof Model; + const fieldValue = value as unknown as + | TBuilder + | TBuilder[]; + transformedFields[fieldKey] = Array.isArray(fieldValue) + ? (buildFields(fieldValue, transformType, { + fieldToBuild: fieldKey, + }) as unknown as Model[keyof Model]) + : (buildField(fieldValue, transformType, { + fieldToBuild: fieldKey, + }) as unknown as Model[keyof Model]); + } } // The default transformer only allows building nested fields to not @@ -63,7 +85,7 @@ function Transformer( } if (fieldsAdder) { - const fieldsToAdd = fieldsAdder({ fields }); + const fieldsToAdd = fieldsAdder({ fields: params.fields }); Object.entries(fieldsToAdd).forEach(([fieldName, fieldValue]) => { // @ts-ignore: TS does not know about the `Model` being an object. if (transformedFields[fieldName]) return; diff --git a/core/src/types.ts b/core/src/types.ts index 9ff1d3fa5..ef18e5608 100644 --- a/core/src/types.ts +++ b/core/src/types.ts @@ -1,3 +1,5 @@ +import { Field } from './@jackfranklin/test-data-bot'; + export type TReferenceObject = { id?: string; }; @@ -49,12 +51,18 @@ export type TTransformerOptions = { addFields?: (args: { fields: Model }) => Partial; removeFields?: (keyof Model)[]; replaceFields?: (args: { fields: Model }) => TransformedModel; - buildFields?: (keyof Model)[]; + // The `false` value means that the transformer should not build any model's fields + buildFields?: (keyof Model)[] | false; +}; + +export type TTransformFnParams = { + fields: Model; + builderName?: string; }; export interface TTransformer { type: TTransformType; - transform(fields: Model): unknown; + transform(params: TTransformFnParams): unknown; } export type TPropertyFieldUpdater = ( @@ -66,6 +74,7 @@ export type TPropertyBuilder = { } & { get: () => Partial; update: (obj: Partial) => TPropertyBuilder; + mergeInitialProps: (initialProps: Partial) => void; }; export type TFieldUpdater = ( @@ -87,39 +96,58 @@ export type TBuilder = { OriginalModel[K] >; } & { - build( + build( args?: TFieldBuilderArgs ): TransformedModel; - buildGraphql( + buildGraphql( args?: TFieldBuilderArgs ): TransformedModel; - buildRest( + buildRest( args?: TFieldBuilderArgs ): TransformedModel; }; export type TDefaultTransformer< TransformerType extends TTransformType, - Model + Model, > = 'default' extends TransformerType ? { default: TTransformer } : never; export type TGraphqlTransformer< TransformerType extends TTransformType, - Model + Model, > = 'graphql' extends TransformerType ? { graphql: TTransformer } : never; export type TRestTransformer< TransformerType extends TTransformType, - Model + Model, > = 'rest' extends TransformerType ? { rest: TTransformer } : never; +export type TModelFieldsConfig = { + fields: Record; + postBuild?: (model: TModel) => Partial; +}; + export type TBuilderOptions = { + initializerConfig?: TModelFieldsConfig; generator?: TGeneratorResult; transformers?: { [Key in TTransformType]?: TTransformer; }; + type?: 'rest' | 'graphql'; + name?: string; + postBuild?: (fields: Model) => Partial; + compatConfig?: { + generators: { + rest: TGeneratorResult; + graphql: TGeneratorResult; + }; + postBuilders?: { + rest?: (fields: Model) => Partial; + graphql?: (fields: Model) => Partial; + }; + }; }; diff --git a/models/channel/src/builder.ts b/models/channel/src/builder.ts index bdda1f5fa..a9dffc4a8 100644 --- a/models/channel/src/builder.ts +++ b/models/channel/src/builder.ts @@ -6,6 +6,7 @@ import type { TCreateChannelBuilder } from './types'; const Model: TCreateChannelBuilder = () => Builder({ + name: 'Channel', generator, transformers, }); diff --git a/models/commons/src/address/address-draft/builder.ts b/models/commons/src/address/address-draft/builder.ts index b7d24ead6..40baf92a8 100644 --- a/models/commons/src/address/address-draft/builder.ts +++ b/models/commons/src/address/address-draft/builder.ts @@ -5,6 +5,7 @@ import transformers from './transformers'; const AddressDraft: TCreateAddressDraftBuilder = () => Builder({ + name: 'AddressDraft', generator, transformers, }); diff --git a/models/commons/src/address/builder.ts b/models/commons/src/address/builder.ts index f1439459a..8aeb385d0 100644 --- a/models/commons/src/address/builder.ts +++ b/models/commons/src/address/builder.ts @@ -5,6 +5,7 @@ import type { TCreateAddressBuilder, TAddress } from './types'; const Model: TCreateAddressBuilder = () => Builder({ + name: 'Address', generator, transformers, }); diff --git a/models/commons/src/cent-precision-money/builder.ts b/models/commons/src/cent-precision-money/builder.ts index a1ff1e851..0618850ab 100644 --- a/models/commons/src/cent-precision-money/builder.ts +++ b/models/commons/src/cent-precision-money/builder.ts @@ -8,6 +8,7 @@ import type { const Model: TCreateCentPrecisionMoneyBuilder = () => Builder({ + name: 'CentPrecisionMoney', generator, transformers, }); diff --git a/models/commons/src/cent-precision-money/cent-precision-money-draft/builder.ts b/models/commons/src/cent-precision-money/cent-precision-money-draft/builder.ts index c4848697b..c977f09b3 100644 --- a/models/commons/src/cent-precision-money/cent-precision-money-draft/builder.ts +++ b/models/commons/src/cent-precision-money/cent-precision-money-draft/builder.ts @@ -8,6 +8,7 @@ import transformers from './transformers'; const Model: TCreateCentPrecisionMoneyDraftBuilder = () => Builder({ + name: 'CentPrecisionMoneyDraft', generator, transformers, }); diff --git a/models/commons/src/client-logging/builder.ts b/models/commons/src/client-logging/builder.ts index b369ddd15..621ec0abd 100644 --- a/models/commons/src/client-logging/builder.ts +++ b/models/commons/src/client-logging/builder.ts @@ -5,6 +5,7 @@ import type { TCreateClientLoggingBuilder, TClientLogging } from './types'; const Model: TCreateClientLoggingBuilder = () => Builder({ + name: 'ClientLogging', generator, transformers, }); diff --git a/models/commons/src/client-logging/transformers.ts b/models/commons/src/client-logging/transformers.ts index b9eacf090..6dc9180e9 100644 --- a/models/commons/src/client-logging/transformers.ts +++ b/models/commons/src/client-logging/transformers.ts @@ -12,6 +12,7 @@ const transformers = { buildFields: ['customer'], }), graphql: Transformer('graphql', { + buildFields: false, replaceFields: ({ fields }) => { const customerRef = buildField( fields.customer, diff --git a/models/commons/src/high-precision-money/builder.ts b/models/commons/src/high-precision-money/builder.ts index cb329c5e3..b739d7f59 100644 --- a/models/commons/src/high-precision-money/builder.ts +++ b/models/commons/src/high-precision-money/builder.ts @@ -8,6 +8,7 @@ import type { const Model: TCreateHighPrecisionMoneyBuilder = () => Builder({ + name: 'HighPrecisionMoney', generator, transformers, }); diff --git a/models/commons/src/high-precision-money/high-precision-money-draft/builder.ts b/models/commons/src/high-precision-money/high-precision-money-draft/builder.ts index cb7635e7c..f8f376f76 100644 --- a/models/commons/src/high-precision-money/high-precision-money-draft/builder.ts +++ b/models/commons/src/high-precision-money/high-precision-money-draft/builder.ts @@ -8,6 +8,7 @@ import transformers from './transformers'; const Model: TCreateHighPrecisionMoneyDraftBuilder = () => Builder({ + name: 'HighPrecisionMoneyDraft', generator, transformers, }); diff --git a/models/commons/src/key-reference/builder.ts b/models/commons/src/key-reference/builder.ts index 87e180984..a5abc1659 100644 --- a/models/commons/src/key-reference/builder.ts +++ b/models/commons/src/key-reference/builder.ts @@ -5,6 +5,7 @@ import type { TCreateKeyReferenceBuilder, TKeyReference } from './types'; const Model: TCreateKeyReferenceBuilder = () => Builder({ + name: 'KeyReference', generator, transformers, }); diff --git a/models/commons/src/key-reference/key-reference-draft/builder.ts b/models/commons/src/key-reference/key-reference-draft/builder.ts index 73cb3ac49..52c195275 100644 --- a/models/commons/src/key-reference/key-reference-draft/builder.ts +++ b/models/commons/src/key-reference/key-reference-draft/builder.ts @@ -8,6 +8,7 @@ import transformers from './transformers'; const Model: TCreateKeyReferenceDraftBuilder = () => Builder({ + name: 'KeyReferenceDraft', generator, transformers, }); diff --git a/models/commons/src/localized-field/builder.ts b/models/commons/src/localized-field/builder.ts index baef0683d..7b9fd9445 100644 --- a/models/commons/src/localized-field/builder.ts +++ b/models/commons/src/localized-field/builder.ts @@ -5,6 +5,7 @@ import type { TCreateLocalizedFieldBuilder, TLocalizedField } from './types'; const Model: TCreateLocalizedFieldBuilder = () => Builder({ + name: 'LocalizedField', generator, transformers, }); diff --git a/models/commons/src/localized-string/builder.ts b/models/commons/src/localized-string/builder.ts index 51aba3b95..80eae5c07 100644 --- a/models/commons/src/localized-string/builder.ts +++ b/models/commons/src/localized-string/builder.ts @@ -5,6 +5,7 @@ import type { TCreateLocalizedStringBuilder, TLocalizedString } from './types'; const Model: TCreateLocalizedStringBuilder = () => Builder({ + name: 'LocalizedString', generator, transformers, }); diff --git a/models/commons/src/localized-string/localized-string-draft/builder.ts b/models/commons/src/localized-string/localized-string-draft/builder.ts index 90b61f46d..3c9d68862 100644 --- a/models/commons/src/localized-string/localized-string-draft/builder.ts +++ b/models/commons/src/localized-string/localized-string-draft/builder.ts @@ -8,6 +8,7 @@ import transformers from './transformers'; const Model: TCreateLocalizedStringDraftBuilder = () => Builder({ + name: 'LocalizedStringDraft', generator, transformers, }); diff --git a/models/commons/src/money/builder.ts b/models/commons/src/money/builder.ts index c821b6a3a..5fbed74eb 100644 --- a/models/commons/src/money/builder.ts +++ b/models/commons/src/money/builder.ts @@ -5,6 +5,7 @@ import type { TMoney, TCreateMoneyBuilder } from './types'; const Model: TCreateMoneyBuilder = () => Builder({ + name: 'Money', generator, transformers, }); diff --git a/models/commons/src/money/money-draft/builder.ts b/models/commons/src/money/money-draft/builder.ts index 4f517d133..d625afbb2 100644 --- a/models/commons/src/money/money-draft/builder.ts +++ b/models/commons/src/money/money-draft/builder.ts @@ -5,6 +5,7 @@ import transformers from './transformers'; const Model: TCreateMoneyBuilder = () => Builder({ + name: 'MoneyDraft', generator, transformers, }); diff --git a/models/commons/src/price-tier/builder.ts b/models/commons/src/price-tier/builder.ts index 329fe0fbb..c0b9beeb0 100644 --- a/models/commons/src/price-tier/builder.ts +++ b/models/commons/src/price-tier/builder.ts @@ -5,6 +5,7 @@ import type { TPriceTier, TCreatePriceTierBuilder } from './types'; const Model: TCreatePriceTierBuilder = () => Builder({ + name: 'PriceTier', generator, transformers, }); diff --git a/models/commons/src/price-tier/price-tier-draft/builder.ts b/models/commons/src/price-tier/price-tier-draft/builder.ts index 3a13a68f3..354fe697b 100644 --- a/models/commons/src/price-tier/price-tier-draft/builder.ts +++ b/models/commons/src/price-tier/price-tier-draft/builder.ts @@ -5,6 +5,7 @@ import transformers from './transformers'; const Model: TCreatePriceTierDraftBuilder = () => Builder({ + name: 'PriceTierDraft', generator, transformers, }); diff --git a/models/commons/src/price/builder.ts b/models/commons/src/price/builder.ts index 31e43b3c6..065e58f6b 100644 --- a/models/commons/src/price/builder.ts +++ b/models/commons/src/price/builder.ts @@ -1,11 +1,11 @@ -import type { Price } from '@commercetools/platform-sdk'; import { Builder } from '@commercetools-test-data/core'; import generator from './generator'; import transformers from './transformers'; -import type { TCreatePriceBuilder } from './types'; +import type { TPrice, TCreatePriceBuilder } from './types'; const Model: TCreatePriceBuilder = () => - Builder({ + Builder({ + name: 'Price', generator, transformers, }); diff --git a/models/commons/src/price/price-draft/builder.ts b/models/commons/src/price/price-draft/builder.ts index 4bb30b9d8..7420b4fa2 100644 --- a/models/commons/src/price/price-draft/builder.ts +++ b/models/commons/src/price/price-draft/builder.ts @@ -5,6 +5,7 @@ import transformers from './transformers'; const PriceDraft: TCreatePriceDraftBuilder = () => Builder({ + name: 'PriceDraft', generator, transformers, }); diff --git a/models/commons/src/reference/builder.ts b/models/commons/src/reference/builder.ts index d1124d8af..3ba7bb4f3 100644 --- a/models/commons/src/reference/builder.ts +++ b/models/commons/src/reference/builder.ts @@ -5,6 +5,7 @@ import type { TCreateReferenceBuilder, TReference } from './types'; const Model: TCreateReferenceBuilder = () => Builder({ + name: 'Reference', generator, transformers, }); diff --git a/models/commons/src/reference/reference-draft/builder.ts b/models/commons/src/reference/reference-draft/builder.ts index 87ea290ea..4ec344300 100644 --- a/models/commons/src/reference/reference-draft/builder.ts +++ b/models/commons/src/reference/reference-draft/builder.ts @@ -5,6 +5,7 @@ import transformers from './transformers'; const Model: TCreateReferenceDraftBuilder = () => Builder({ + name: 'ReferenceDraft', generator, transformers, }); diff --git a/models/commons/src/reference/transformers.ts b/models/commons/src/reference/transformers.ts index d585a166e..abb2fcfc2 100644 --- a/models/commons/src/reference/transformers.ts +++ b/models/commons/src/reference/transformers.ts @@ -5,6 +5,7 @@ import type { TReference, TReferenceGraphql, TReferenceRest } from './types'; const transformers = { default: Transformer('default', {}), rest: Transformer('rest', { + buildFields: false, replaceFields: ({ fields }) => ({ ...fields, obj: omit(fields, ['typeId']), @@ -14,6 +15,7 @@ const transformers = { // since some fields are pure `*Ref`, e.g `channelsRef` // with no option to expand. graphql: Transformer('graphql', { + buildFields: false, addFields: () => ({ __typename: 'Reference', }), diff --git a/models/customer-group/src/builder.ts b/models/customer-group/src/builder.ts index bbdd1f9d6..97ac7b06a 100644 --- a/models/customer-group/src/builder.ts +++ b/models/customer-group/src/builder.ts @@ -5,6 +5,7 @@ import type { TCreateCustomerGroupBuilder, TCustomerGroup } from './types'; const Model: TCreateCustomerGroupBuilder = () => Builder({ + name: 'CustomerGroup', generator, transformers, }); diff --git a/models/product-type/src/attribute-enum-type/transformers.ts b/models/product-type/src/attribute-enum-type/transformers.ts index ca21da4f2..81215a9dc 100644 --- a/models/product-type/src/attribute-enum-type/transformers.ts +++ b/models/product-type/src/attribute-enum-type/transformers.ts @@ -11,6 +11,7 @@ const transformers = { graphql: Transformer( 'graphql', { + buildFields: false, replaceFields: ({ fields }) => ({ ...fields, values: { diff --git a/models/product-type/src/attribute-localized-enum-type/attribute-localized-enum-type-draft/transformers.ts b/models/product-type/src/attribute-localized-enum-type/attribute-localized-enum-type-draft/transformers.ts index af2f41c9c..c3ecb28b2 100644 --- a/models/product-type/src/attribute-localized-enum-type/attribute-localized-enum-type-draft/transformers.ts +++ b/models/product-type/src/attribute-localized-enum-type/attribute-localized-enum-type-draft/transformers.ts @@ -15,6 +15,7 @@ const transformers = { TAttributeLocalizedEnumTypeDraft, TAttributeLocalizedEnumTypeDraftGraphql >('graphql', { + buildFields: false, replaceFields: ({ fields }) => { return { [fields.name]: { diff --git a/models/product-type/src/attribute-set-type/attribute-set-type-draft/transformers.ts b/models/product-type/src/attribute-set-type/attribute-set-type-draft/transformers.ts index 76b6fc8c0..a134a1a15 100644 --- a/models/product-type/src/attribute-set-type/attribute-set-type-draft/transformers.ts +++ b/models/product-type/src/attribute-set-type/attribute-set-type-draft/transformers.ts @@ -14,6 +14,7 @@ const transformers = { graphql: Transformer( 'graphql', { + buildFields: false, replaceFields: ({ fields }) => { return { [fields.name]: { diff --git a/models/product-type/src/product-type/product-type-draft/transformers.ts b/models/product-type/src/product-type/product-type-draft/transformers.ts index d6603e16e..6b9064bd1 100644 --- a/models/product-type/src/product-type/product-type-draft/transformers.ts +++ b/models/product-type/src/product-type/product-type-draft/transformers.ts @@ -10,6 +10,7 @@ const transformers = { buildFields: ['attributes'], }), graphql: Transformer('graphql', { + buildFields: false, addFields: ({ fields }) => { return { attributeDefinitions: fields.attributes!.map((attribute) => diff --git a/models/standalone-price/src/builder.ts b/models/standalone-price/src/builder.ts index 38729f02a..9d8a6a3b1 100644 --- a/models/standalone-price/src/builder.ts +++ b/models/standalone-price/src/builder.ts @@ -5,6 +5,7 @@ import type { TStandalonePrice, TCreateStandalonePriceBuilder } from './types'; const Model: TCreateStandalonePriceBuilder = () => Builder({ + name: 'StandalonePrice', generator, transformers, });