diff --git a/.changeset/cuddly-eagles-serve.md b/.changeset/cuddly-eagles-serve.md new file mode 100644 index 000000000..c2a3cdddf --- /dev/null +++ b/.changeset/cuddly-eagles-serve.md @@ -0,0 +1,5 @@ +--- +'@commercetools-test-data/tax-category': minor +--- + +Added a new preset called `withAllFields` to the model. diff --git a/.changeset/eight-keys-reflect.md b/.changeset/eight-keys-reflect.md new file mode 100644 index 000000000..ac152988a --- /dev/null +++ b/.changeset/eight-keys-reflect.md @@ -0,0 +1,9 @@ +--- +'@commercetools-test-data/cart': minor +--- + +Added new child models used within the `Cart` one: + +- `TaxedItemPrice` +- `TaxPortion` +- `ShippingInfo` diff --git a/.changeset/tame-swans-clean.md b/.changeset/tame-swans-clean.md new file mode 100644 index 000000000..3ce024584 --- /dev/null +++ b/.changeset/tame-swans-clean.md @@ -0,0 +1,9 @@ +--- +'@commercetools-test-data/commons': minor +--- + +Added three new test data models: + +- `DicountedLineItemPortion` +- `DicountedLineItemPortionDraft` +- `DiscountedLitemItemPrice` diff --git a/models/cart/README.md b/models/cart/README.md index f0eb6ba99..79674115e 100644 --- a/models/cart/README.md +++ b/models/cart/README.md @@ -62,3 +62,44 @@ const emptyLineItemDraft = LineItemDraft.presets .empty() .build(); ``` + +## TaxPortion + +```ts +import { + TaxPortionRest, + TaxPortionDraftRest, + TaxPortionGraphql, + TaxPortionDraftGraphql, +} from '@commercetools-test-data/cart'; + +const restTaxPortion = TaxPortionRest.random().build(); +const graphqlTaxPortion = TaxPortionGraphql.random().build(); + +const restTaxPortionDraft = TaxPortionDraftRest.random().build(); +const graphqlTaxPortionDraft = TaxPortionDraftGraphql.random().build(); +``` + +## TaxedItemPrice + +```ts +import { + TaxedItemPriceRest, + TaxedItemPriceGraphql, +} from '@commercetools-test-data/cart'; + +const restTaxedItemPrice = TaxedItemPriceRest.random().build(); +const graphqlTaxedItemPrice = TaxedItemPriceGraphql.random().build(); +``` + +## ShippingInfo + +```ts +import { + ShippingInfoRest, + ShippingInfoGraphql, +} from '@commercetools-test-data/cart'; + +const restShippingInfo = ShippingInfoRest.random().build(); +const graphqlShippingInfo = ShippingInfoGraphql.random().build(); +``` diff --git a/models/cart/package.json b/models/cart/package.json index 1b5109735..416b750a5 100644 --- a/models/cart/package.json +++ b/models/cart/package.json @@ -25,6 +25,7 @@ "@commercetools-test-data/core": "10.10.1", "@commercetools-test-data/customer": "10.10.1", "@commercetools-test-data/discount-code": "10.10.1", + "@commercetools-test-data/graphql-types": "10.10.1", "@commercetools-test-data/product": "10.10.1", "@commercetools-test-data/shipping-method": "10.10.1", "@commercetools-test-data/store": "10.10.1", diff --git a/models/cart/src/index.ts b/models/cart/src/index.ts index 4582729d9..c23007c19 100644 --- a/models/cart/src/index.ts +++ b/models/cart/src/index.ts @@ -10,3 +10,7 @@ export * as CustomLineItem from './custom-line-item'; export * as CustomLineItemDraft from './custom-line-item/custom-line-item-draft'; export * as LineItem from './line-item'; export * as LineItemDraft from './line-item/line-item-draft'; + +export * from './shipping-info'; +export * from './tax-portion'; +export * from './taxed-item-price'; diff --git a/models/cart/src/shipping-info/builders.spec.ts b/models/cart/src/shipping-info/builders.spec.ts new file mode 100644 index 000000000..a00168b4c --- /dev/null +++ b/models/cart/src/shipping-info/builders.spec.ts @@ -0,0 +1,57 @@ +import { ShippingInfoRest, ShippingInfoGraphql } from './index'; + +describe('ShippingInfo Builder', () => { + it('should build properties for the REST representation', () => { + const restModel = ShippingInfoRest.random().build(); + + expect(restModel).toEqual( + expect.objectContaining({ + deliveries: [], + discountedPrice: null, + price: expect.objectContaining({ + type: 'centPrecision', + }), + shippingMethod: null, + shippingMethodName: expect.any(String), + shippingMethodState: expect.stringMatching( + /DoesNotMatchCart|MatchesCart/ + ), + shippingRate: expect.objectContaining({ + price: expect.objectContaining({ + type: 'centPrecision', + }), + }), + taxCategory: null, + taxRate: null, + taxedPrice: null, + }) + ); + }); + it('should build properties for the GraphQL representation', () => { + const graphqlModel = ShippingInfoGraphql.random().build(); + + expect(graphqlModel).toEqual( + expect.objectContaining({ + deliveries: [], + discountedPrice: null, + price: expect.objectContaining({ + __typename: 'Money', + }), + shippingMethod: null, + shippingMethodName: expect.any(String), + shippingMethodState: expect.stringMatching( + /DoesNotMatchCart|MatchesCart/ + ), + shippingRate: expect.objectContaining({ + __typename: 'ShippingRate', + }), + taxCategory: null, + taxRate: null, + taxedPrice: null, + shippingMethodRef: null, + taxCategoryRef: null, + __typename: 'ShippingInfo', + }) + ); + }); +}); diff --git a/models/cart/src/shipping-info/builders.ts b/models/cart/src/shipping-info/builders.ts new file mode 100644 index 000000000..c40550db0 --- /dev/null +++ b/models/cart/src/shipping-info/builders.ts @@ -0,0 +1,25 @@ +import { createSpecializedBuilder } from '@commercetools-test-data/core'; +import { restFieldsConfig, graphqlFieldsConfig } from './fields-config'; +import type { + TCreateShippingInfoBuilder, + TShippingInfoGraphql, + TShippingInfoRest, +} from './types'; + +export const RestModelBuilder: TCreateShippingInfoBuilder< + TShippingInfoRest +> = () => + createSpecializedBuilder({ + name: 'ShippingInfoRestBuilder', + type: 'rest', + modelFieldsConfig: restFieldsConfig, + }); + +export const GraphqlModelBuilder: TCreateShippingInfoBuilder< + TShippingInfoGraphql +> = () => + createSpecializedBuilder({ + name: 'ShippingInfoGraphqlBuilder', + type: 'graphql', + modelFieldsConfig: graphqlFieldsConfig, + }); diff --git a/models/cart/src/shipping-info/fields-config.ts b/models/cart/src/shipping-info/fields-config.ts new file mode 100644 index 000000000..8c1684cee --- /dev/null +++ b/models/cart/src/shipping-info/fields-config.ts @@ -0,0 +1,47 @@ +import { + CentPrecisionMoney, + Reference, +} from '@commercetools-test-data/commons'; +import { fake, type TModelFieldsConfig } from '@commercetools-test-data/core'; +import { ShippingRate } from '@commercetools-test-data/shipping-method'; +import type { TShippingInfoGraphql, TShippingInfoRest } from './types'; + +const commonFieldsConfig = { + deliveries: [], + discountedPrice: null, + price: fake(() => CentPrecisionMoney.random()), + shippingMethod: null, + shippingMethodName: fake((f) => f.lorem.words(2)), + shippingMethodState: fake((f) => + f.helpers.arrayElement(['DoesNotMatchCart', 'MatchesCart']) + ), + shippingRate: fake(() => ShippingRate.random()), + taxCategory: null, + taxRate: null, + taxedPrice: null, +}; + +export const restFieldsConfig: TModelFieldsConfig = { + fields: { + ...commonFieldsConfig, + }, +}; + +export const graphqlFieldsConfig: TModelFieldsConfig = { + fields: { + ...commonFieldsConfig, + shippingMethodRef: null, + taxCategoryRef: null, + __typename: 'ShippingInfo', + }, + postBuild: (model) => { + return { + shippingMethodRef: model.shippingMethod + ? Reference.presets + .shippingMethodReference() + .id(model.shippingMethod.id) + .buildGraphql() + : model.shippingMethodRef, + }; + }, +}; diff --git a/models/cart/src/shipping-info/index.ts b/models/cart/src/shipping-info/index.ts new file mode 100644 index 000000000..65d9838db --- /dev/null +++ b/models/cart/src/shipping-info/index.ts @@ -0,0 +1,13 @@ +import { RestModelBuilder, GraphqlModelBuilder } from './builders'; +import * as ShippingInfoPresets from './presets'; +export * from './types'; + +export const ShippingInfoRest = { + random: RestModelBuilder, + presets: ShippingInfoPresets.restPresets, +}; + +export const ShippingInfoGraphql = { + random: GraphqlModelBuilder, + presets: ShippingInfoPresets.graphqlPresets, +}; diff --git a/models/cart/src/shipping-info/presets/index.ts b/models/cart/src/shipping-info/presets/index.ts new file mode 100644 index 000000000..21d9d39b6 --- /dev/null +++ b/models/cart/src/shipping-info/presets/index.ts @@ -0,0 +1,2 @@ +export const restPresets = {}; +export const graphqlPresets = {}; diff --git a/models/cart/src/shipping-info/presets/with-all-fields/with-all-fields-presets.spec.ts b/models/cart/src/shipping-info/presets/with-all-fields/with-all-fields-presets.spec.ts new file mode 100644 index 000000000..ea74e328e --- /dev/null +++ b/models/cart/src/shipping-info/presets/with-all-fields/with-all-fields-presets.spec.ts @@ -0,0 +1,77 @@ +import * as withAllPresets from './with-all-fields-presets'; + +describe('with all fields', () => { + it(`should create the expected object preset - rest`, () => { + const restExamplePreset = withAllPresets.restPreset().build(); + + expect(restExamplePreset).toEqual( + expect.objectContaining({ + deliveries: expect.any(Array), + price: expect.objectContaining({ + currencyCode: 'EUR', + }), + shippingMethod: expect.objectContaining({ + typeId: 'shipping-method', + }), + shippingMethodName: 'shipping-method-name', + shippingRate: expect.objectContaining({ + price: expect.objectContaining({ + currencyCode: expect.any(String), + }), + }), + taxCategory: expect.objectContaining({ + typeId: 'tax-category', + }), + taxRate: expect.objectContaining({ + id: expect.any(String), + name: expect.any(String), + amount: expect.any(Number), + }), + taxedPrice: expect.objectContaining({ + totalNet: expect.objectContaining({ + currencyCode: 'EUR', + }), + totalGross: expect.objectContaining({ + currencyCode: 'EUR', + }), + totalTax: expect.objectContaining({ + currencyCode: 'EUR', + }), + taxPortions: expect.any(Array), + }), + }) + ); + }); + + it(`should create the expected object preset - graphql`, () => { + const graphqlExamplePreset = withAllPresets.graphqlPreset().build(); + + expect(graphqlExamplePreset).toEqual( + expect.objectContaining({ + deliveries: expect.any(Array), + price: expect.objectContaining({ + currencyCode: 'EUR', + __typename: 'Money', + }), + shippingMethod: expect.objectContaining({ + __typename: 'ShippingMethod', + }), + shippingMethodRef: expect.objectContaining({ + typeId: 'shipping-method', + __typename: 'Reference', + }), + shippingMethodName: 'shipping-method-name', + shippingRate: expect.objectContaining({ + __typename: 'ShippingRate', + }), + taxCategory: expect.objectContaining({ + typeId: 'tax-category', + }), + taxRate: expect.objectContaining({ + __typename: 'TaxRate', + }), + __typename: 'ShippingInfo', + }) + ); + }); +}); diff --git a/models/cart/src/shipping-info/presets/with-all-fields/with-all-fields-presets.ts b/models/cart/src/shipping-info/presets/with-all-fields/with-all-fields-presets.ts new file mode 100644 index 000000000..f27135b70 --- /dev/null +++ b/models/cart/src/shipping-info/presets/with-all-fields/with-all-fields-presets.ts @@ -0,0 +1,34 @@ +import { Money, Reference } from '@commercetools-test-data/commons'; +import type { TBuilder } from '@commercetools-test-data/core'; +import { + ShippingMethod, + ShippingRate, +} from '@commercetools-test-data/shipping-method'; +import { TaxRate } from '@commercetools-test-data/tax-category'; +import { + TaxedItemPriceGraphql, + TaxedItemPriceRest, +} from '../../../taxed-item-price'; +import { ShippingInfoGraphql, ShippingInfoRest } from '../../index'; +import { TShippingInfoGraphql, TShippingInfoRest } from '../../types'; + +const populatePreset = ( + builder: TBuilder +): TBuilder => + builder + .deliveries([]) + .price(Money.presets.withCurrency('EUR')) + .shippingMethodName('shipping-method-name') + .shippingRate(ShippingRate.random()) + .taxCategory(Reference.presets.taxCategoryReference()) + .taxRate(TaxRate.presets.withAllFields()); + +export const restPreset = (): TBuilder => + populatePreset(ShippingInfoRest.random()) + .shippingMethod(Reference.presets.shippingMethodReference()) + .taxedPrice(TaxedItemPriceRest.presets.withAllFields()); + +export const graphqlPreset = (): TBuilder => + populatePreset(ShippingInfoGraphql.random()) + .shippingMethod(ShippingMethod.random()) + .taxedPrice(TaxedItemPriceGraphql.presets.withAllFields()); diff --git a/models/cart/src/shipping-info/types.ts b/models/cart/src/shipping-info/types.ts new file mode 100644 index 000000000..c949d5875 --- /dev/null +++ b/models/cart/src/shipping-info/types.ts @@ -0,0 +1,11 @@ +import { ShippingInfo } from '@commercetools/platform-sdk'; +import type { TBuilder } from '@commercetools-test-data/core'; +import { TCtpShippingInfo } from '@commercetools-test-data/graphql-types'; + +export type TShippingInfoRest = ShippingInfo; + +export type TShippingInfoGraphql = TCtpShippingInfo; + +export type TCreateShippingInfoBuilder< + TModel extends TShippingInfoRest | TShippingInfoGraphql, +> = () => TBuilder; diff --git a/models/cart/src/tax-portion/builders.spec.ts b/models/cart/src/tax-portion/builders.spec.ts new file mode 100644 index 000000000..96a2f877d --- /dev/null +++ b/models/cart/src/tax-portion/builders.spec.ts @@ -0,0 +1,35 @@ +import { TaxPortionRest, TaxPortionGraphql } from './index'; + +describe('TaxPortion Builder', () => { + it('should build properties for the REST representation', () => { + const restModel = TaxPortionRest.random().build(); + + expect(restModel).toEqual( + expect.objectContaining({ + name: null, + rate: expect.any(Number), + amount: expect.objectContaining({ + currencyCode: expect.any(String), + centAmount: expect.any(Number), + }), + }) + ); + }); + + it('should build properties for the GraphQL representation', () => { + const graphqlModel = TaxPortionGraphql.random().build(); + + expect(graphqlModel).toEqual( + expect.objectContaining({ + name: null, + rate: expect.any(Number), + amount: expect.objectContaining({ + currencyCode: expect.any(String), + centAmount: expect.any(Number), + __typename: 'Money', + }), + __typename: 'TaxPortion', + }) + ); + }); +}); diff --git a/models/cart/src/tax-portion/builders.ts b/models/cart/src/tax-portion/builders.ts new file mode 100644 index 000000000..ac9c71848 --- /dev/null +++ b/models/cart/src/tax-portion/builders.ts @@ -0,0 +1,23 @@ +import { createSpecializedBuilder } from '@commercetools-test-data/core'; +import { restFieldsConfig, graphqlFieldsConfig } from './fields-config'; +import type { + TCreateTaxPortionBuilder, + TTaxPortionGraphql, + TTaxPortionRest, +} from './types'; + +export const RestModelBuilder: TCreateTaxPortionBuilder = () => + createSpecializedBuilder({ + name: 'TaxPortionRestBuilder', + type: 'rest', + modelFieldsConfig: restFieldsConfig, + }); + +export const GraphqlModelBuilder: TCreateTaxPortionBuilder< + TTaxPortionGraphql +> = () => + createSpecializedBuilder({ + name: 'TaxPortionGraphqlBuilder', + type: 'graphql', + modelFieldsConfig: graphqlFieldsConfig, + }); diff --git a/models/cart/src/tax-portion/fields-config.ts b/models/cart/src/tax-portion/fields-config.ts new file mode 100644 index 000000000..134665661 --- /dev/null +++ b/models/cart/src/tax-portion/fields-config.ts @@ -0,0 +1,22 @@ +import { Money } from '@commercetools-test-data/commons'; +import { fake, type TModelFieldsConfig } from '@commercetools-test-data/core'; +import type { TTaxPortionGraphql, TTaxPortionRest } from './types'; + +const commonFieldsConfig = { + rate: fake((f) => f.number.float({ min: 0, max: 1 })), + amount: fake(() => Money.random()), + name: null, +}; + +export const restFieldsConfig: TModelFieldsConfig = { + fields: { + ...commonFieldsConfig, + }, +}; + +export const graphqlFieldsConfig: TModelFieldsConfig = { + fields: { + ...commonFieldsConfig, + __typename: 'TaxPortion', + }, +}; diff --git a/models/cart/src/tax-portion/index.ts b/models/cart/src/tax-portion/index.ts new file mode 100644 index 000000000..7acadad60 --- /dev/null +++ b/models/cart/src/tax-portion/index.ts @@ -0,0 +1,14 @@ +import { RestModelBuilder, GraphqlModelBuilder } from './builders'; +import * as TaxPortionPresets from './presets'; +export * from './types'; +export * from './tax-portion-draft'; + +export const TaxPortionRest = { + random: RestModelBuilder, + presets: TaxPortionPresets.restPresets, +}; + +export const TaxPortionGraphql = { + random: GraphqlModelBuilder, + presets: TaxPortionPresets.graphqlPresets, +}; diff --git a/models/cart/src/tax-portion/presets/index.ts b/models/cart/src/tax-portion/presets/index.ts new file mode 100644 index 000000000..a5681161e --- /dev/null +++ b/models/cart/src/tax-portion/presets/index.ts @@ -0,0 +1,3 @@ +export const restPresets = {}; + +export const graphqlPresets = {}; diff --git a/models/cart/src/tax-portion/tax-portion-draft/builders.spec.ts b/models/cart/src/tax-portion/tax-portion-draft/builders.spec.ts new file mode 100644 index 000000000..325ad520a --- /dev/null +++ b/models/cart/src/tax-portion/tax-portion-draft/builders.spec.ts @@ -0,0 +1,33 @@ +import { TaxPortionDraftRest, TaxPortionDraftGraphql } from './index'; + +describe('TaxPortion Builder', () => { + it('should build properties for the REST representation', () => { + const restModel = TaxPortionDraftRest.random().build(); + + expect(restModel).toEqual( + expect.objectContaining({ + name: null, + rate: expect.any(Number), + amount: expect.objectContaining({ + currencyCode: expect.any(String), + centAmount: expect.any(Number), + }), + }) + ); + }); + + it('should build properties for the GraphQL representation', () => { + const graphqlModel = TaxPortionDraftGraphql.random().build(); + + expect(graphqlModel).toEqual( + expect.objectContaining({ + name: null, + rate: expect.any(Number), + amount: expect.objectContaining({ + currencyCode: expect.any(String), + centAmount: expect.any(Number), + }), + }) + ); + }); +}); diff --git a/models/cart/src/tax-portion/tax-portion-draft/builders.ts b/models/cart/src/tax-portion/tax-portion-draft/builders.ts new file mode 100644 index 000000000..9dd6263e7 --- /dev/null +++ b/models/cart/src/tax-portion/tax-portion-draft/builders.ts @@ -0,0 +1,25 @@ +import { createSpecializedBuilder } from '@commercetools-test-data/core'; +import type { + TCreateTaxPortionBuilder, + TTaxPortionDraftGraphql, + TTaxPortionDraftRest, +} from '../types'; +import { restFieldsConfig, graphqlFieldsConfig } from './fields-config'; + +export const RestModelBuilder: TCreateTaxPortionBuilder< + TTaxPortionDraftRest +> = () => + createSpecializedBuilder({ + name: 'TaxPortionDraftRestBuilder', + type: 'rest', + modelFieldsConfig: restFieldsConfig, + }); + +export const GraphqlModelBuilder: TCreateTaxPortionBuilder< + TTaxPortionDraftGraphql +> = () => + createSpecializedBuilder({ + name: 'TaxPortionDraftGraphqlBuilder', + type: 'graphql', + modelFieldsConfig: graphqlFieldsConfig, + }); diff --git a/models/cart/src/tax-portion/tax-portion-draft/fields-config.ts b/models/cart/src/tax-portion/tax-portion-draft/fields-config.ts new file mode 100644 index 000000000..0ce604160 --- /dev/null +++ b/models/cart/src/tax-portion/tax-portion-draft/fields-config.ts @@ -0,0 +1,22 @@ +import { Money } from '@commercetools-test-data/commons'; +import { fake, type TModelFieldsConfig } from '@commercetools-test-data/core'; +import type { TTaxPortionDraftGraphql, TTaxPortionDraftRest } from '../types'; + +const commonFieldsConfig = { + rate: fake((f) => f.number.float({ min: 0, max: 1 })), + amount: fake(() => Money.random()), + name: null, +}; + +export const restFieldsConfig: TModelFieldsConfig = { + fields: { + ...commonFieldsConfig, + }, +}; + +export const graphqlFieldsConfig: TModelFieldsConfig = + { + fields: { + ...commonFieldsConfig, + }, + }; diff --git a/models/cart/src/tax-portion/tax-portion-draft/index.ts b/models/cart/src/tax-portion/tax-portion-draft/index.ts new file mode 100644 index 000000000..11142b0bc --- /dev/null +++ b/models/cart/src/tax-portion/tax-portion-draft/index.ts @@ -0,0 +1,12 @@ +import { RestModelBuilder, GraphqlModelBuilder } from './builders'; +import * as TaxPortionDraftPresets from './presets'; + +export const TaxPortionDraftRest = { + random: RestModelBuilder, + presets: TaxPortionDraftPresets.restPresets, +}; + +export const TaxPortionDraftGraphql = { + random: GraphqlModelBuilder, + presets: TaxPortionDraftPresets.graphqlPresets, +}; diff --git a/models/cart/src/tax-portion/tax-portion-draft/presets/index.ts b/models/cart/src/tax-portion/tax-portion-draft/presets/index.ts new file mode 100644 index 000000000..21d9d39b6 --- /dev/null +++ b/models/cart/src/tax-portion/tax-portion-draft/presets/index.ts @@ -0,0 +1,2 @@ +export const restPresets = {}; +export const graphqlPresets = {}; diff --git a/models/cart/src/tax-portion/types.ts b/models/cart/src/tax-portion/types.ts new file mode 100644 index 000000000..f8d0c1b3c --- /dev/null +++ b/models/cart/src/tax-portion/types.ts @@ -0,0 +1,21 @@ +import { TaxPortion, TaxPortionDraft } from '@commercetools/platform-sdk'; +import type { TBuilder } from '@commercetools-test-data/core'; +import { + TCtpTaxPortion, + TCtpTaxPortionDraft, +} from '@commercetools-test-data/graphql-types'; + +export type TTaxPortionRest = TaxPortion; + +export type TTaxPortionGraphql = TCtpTaxPortion; + +export type TTaxPortionDraftRest = TaxPortionDraft; +export type TTaxPortionDraftGraphql = TCtpTaxPortionDraft; + +export type TCreateTaxPortionBuilder< + TModel extends + | TTaxPortionRest + | TTaxPortionGraphql + | TTaxPortionDraftRest + | TTaxPortionDraftGraphql, +> = () => TBuilder; diff --git a/models/cart/src/taxed-item-price/builders.spec.ts b/models/cart/src/taxed-item-price/builders.spec.ts new file mode 100644 index 000000000..b75715e2e --- /dev/null +++ b/models/cart/src/taxed-item-price/builders.spec.ts @@ -0,0 +1,51 @@ +import { TaxedItemPriceRest, TaxedItemPriceGraphql } from './index'; + +describe('TaxedItemPrice Builder', () => { + it('should build properties for the REST representation', () => { + const restModel = TaxedItemPriceRest.random().build(); + + expect(restModel).toEqual( + expect.objectContaining({ + totalNet: expect.objectContaining({ + currencyCode: expect.any(String), + centAmount: expect.any(Number), + }), + totalGross: expect.objectContaining({ + currencyCode: expect.any(String), + centAmount: expect.any(Number), + }), + taxPortions: expect.arrayContaining([ + expect.objectContaining({ + rate: expect.any(Number), + amount: expect.objectContaining({ + currencyCode: expect.any(String), + centAmount: expect.any(Number), + }), + }), + ]), + totalTax: null, + }) + ); + }); + it('should build properties for the GraphQL representation', () => { + const graphqlModel = TaxedItemPriceGraphql.random().build(); + + expect(graphqlModel).toEqual( + expect.objectContaining({ + totalNet: expect.objectContaining({ + __typename: 'Money', + }), + totalGross: expect.objectContaining({ + __typename: 'Money', + }), + taxPortions: expect.arrayContaining([ + expect.objectContaining({ + __typename: 'TaxPortion', + }), + ]), + totalTax: null, + __typename: 'TaxedItemPrice', + }) + ); + }); +}); diff --git a/models/cart/src/taxed-item-price/builders.ts b/models/cart/src/taxed-item-price/builders.ts new file mode 100644 index 000000000..bca6ee979 --- /dev/null +++ b/models/cart/src/taxed-item-price/builders.ts @@ -0,0 +1,25 @@ +import { createSpecializedBuilder } from '@commercetools-test-data/core'; +import { restFieldsConfig, graphqlFieldsConfig } from './fields-config'; +import type { + TCreateTaxedItemPriceBuilder, + TTaxedItemPriceGraphql, + TTaxedItemPriceRest, +} from './types'; + +export const RestModelBuilder: TCreateTaxedItemPriceBuilder< + TTaxedItemPriceRest +> = () => + createSpecializedBuilder({ + name: 'TaxedItemPriceRestBuilder', + type: 'rest', + modelFieldsConfig: restFieldsConfig, + }); + +export const GraphqlModelBuilder: TCreateTaxedItemPriceBuilder< + TTaxedItemPriceGraphql +> = () => + createSpecializedBuilder({ + name: 'TaxedItemPriceGraphqlBuilder', + type: 'graphql', + modelFieldsConfig: graphqlFieldsConfig, + }); diff --git a/models/cart/src/taxed-item-price/fields-config.ts b/models/cart/src/taxed-item-price/fields-config.ts new file mode 100644 index 000000000..373d61f10 --- /dev/null +++ b/models/cart/src/taxed-item-price/fields-config.ts @@ -0,0 +1,25 @@ +import { Money } from '@commercetools-test-data/commons'; +import { fake, type TModelFieldsConfig } from '@commercetools-test-data/core'; +import { TaxPortionGraphql, TaxPortionRest } from '../tax-portion'; +import type { TTaxedItemPriceGraphql, TTaxedItemPriceRest } from './types'; + +const commonFieldsConfig = { + totalNet: fake(() => Money.random()), + totalGross: fake(() => Money.random()), + totalTax: null, +}; + +export const restFieldsConfig: TModelFieldsConfig = { + fields: { + ...commonFieldsConfig, + taxPortions: fake(() => [TaxPortionRest.random()]), + }, +}; + +export const graphqlFieldsConfig: TModelFieldsConfig = { + fields: { + ...commonFieldsConfig, + taxPortions: fake(() => [TaxPortionGraphql.random()]), + __typename: 'TaxedItemPrice', + }, +}; diff --git a/models/cart/src/taxed-item-price/index.ts b/models/cart/src/taxed-item-price/index.ts new file mode 100644 index 000000000..ad64189b7 --- /dev/null +++ b/models/cart/src/taxed-item-price/index.ts @@ -0,0 +1,13 @@ +import { RestModelBuilder, GraphqlModelBuilder } from './builders'; +import * as TaxedItemPricePresets from './presets'; +export * from './types'; + +export const TaxedItemPriceRest = { + random: RestModelBuilder, + presets: TaxedItemPricePresets.restPresets, +}; + +export const TaxedItemPriceGraphql = { + random: GraphqlModelBuilder, + presets: TaxedItemPricePresets.graphqlPresets, +}; diff --git a/models/cart/src/taxed-item-price/presets/index.ts b/models/cart/src/taxed-item-price/presets/index.ts new file mode 100644 index 000000000..5067dc049 --- /dev/null +++ b/models/cart/src/taxed-item-price/presets/index.ts @@ -0,0 +1,9 @@ +import * as withAllFields from './with-all-fields/with-all-fields-presets'; + +export const restPresets = { + withAllFields: withAllFields.restPreset, +}; + +export const graphqlPresets = { + withAllFields: withAllFields.graphqlPreset, +}; diff --git a/models/cart/src/taxed-item-price/presets/with-all-fields/with-all-fields-presets.spec.ts b/models/cart/src/taxed-item-price/presets/with-all-fields/with-all-fields-presets.spec.ts new file mode 100644 index 000000000..74fc9577e --- /dev/null +++ b/models/cart/src/taxed-item-price/presets/with-all-fields/with-all-fields-presets.spec.ts @@ -0,0 +1,53 @@ +import * as withAllPresets from './with-all-fields-presets'; + +describe('with all fields', () => { + it(`should create the expected object preset - rest`, () => { + const restExamplePreset = withAllPresets.restPreset().build(); + + expect(restExamplePreset).toEqual( + expect.objectContaining({ + totalNet: expect.objectContaining({ + currencyCode: 'EUR', + }), + totalGross: expect.objectContaining({ + currencyCode: 'EUR', + }), + totalTax: expect.objectContaining({ + currencyCode: 'EUR', + }), + taxPortions: [ + expect.objectContaining({ + name: null, + rate: expect.any(Number), + amount: expect.objectContaining({ + currencyCode: expect.any(String), + centAmount: expect.any(Number), + }), + }), + ], + }) + ); + }); + + it(`should create the expected object preset - graphql`, () => { + const graphqlExamplePreset = withAllPresets.graphqlPreset().build(); + expect(graphqlExamplePreset).toEqual( + expect.objectContaining({ + totalNet: expect.objectContaining({ + __typename: 'Money', + }), + totalGross: expect.objectContaining({ + __typename: 'Money', + }), + totalTax: expect.objectContaining({ + __typename: 'Money', + }), + taxPortions: [ + expect.objectContaining({ + __typename: 'TaxPortion', + }), + ], + }) + ); + }); +}); diff --git a/models/cart/src/taxed-item-price/presets/with-all-fields/with-all-fields-presets.ts b/models/cart/src/taxed-item-price/presets/with-all-fields/with-all-fields-presets.ts new file mode 100644 index 000000000..30ac2150f --- /dev/null +++ b/models/cart/src/taxed-item-price/presets/with-all-fields/with-all-fields-presets.ts @@ -0,0 +1,19 @@ +import { Money } from '@commercetools-test-data/commons'; +import type { TBuilder } from '@commercetools-test-data/core'; +import { TaxedItemPriceGraphql, TaxedItemPriceRest } from '../..'; +import { TaxPortionGraphql, TaxPortionRest } from '../../../tax-portion'; +import type { TTaxedItemPriceGraphql, TTaxedItemPriceRest } from '../../types'; + +export const restPreset = (): TBuilder => + TaxedItemPriceRest.random() + .totalNet(Money.presets.withCurrency('EUR')) + .totalGross(Money.presets.withCurrency('EUR')) + .totalTax(Money.presets.withCurrency('EUR')) + .taxPortions([TaxPortionRest.random()]); + +export const graphqlPreset = (): TBuilder => + TaxedItemPriceGraphql.random() + .totalNet(Money.presets.withCurrency('EUR')) + .totalGross(Money.presets.withCurrency('EUR')) + .totalTax(Money.presets.withCurrency('EUR')) + .taxPortions([TaxPortionGraphql.random()]); diff --git a/models/cart/src/taxed-item-price/types.ts b/models/cart/src/taxed-item-price/types.ts new file mode 100644 index 000000000..537d2bf02 --- /dev/null +++ b/models/cart/src/taxed-item-price/types.ts @@ -0,0 +1,11 @@ +import { TaxedItemPrice } from '@commercetools/platform-sdk'; +import type { TBuilder } from '@commercetools-test-data/core'; +import { TCtpTaxedItemPrice } from '@commercetools-test-data/graphql-types'; + +export type TTaxedItemPriceRest = TaxedItemPrice; + +export type TTaxedItemPriceGraphql = TCtpTaxedItemPrice; + +export type TCreateTaxedItemPriceBuilder< + TModel extends TTaxedItemPriceRest | TTaxedItemPriceGraphql, +> = () => TBuilder; diff --git a/models/commons/README.md b/models/commons/README.md index 6820b8b2d..03cd7f175 100644 --- a/models/commons/README.md +++ b/models/commons/README.md @@ -15,6 +15,8 @@ $ pnpm add -D @commercetools-test-data/commons - [Address](#address)
- [CentPrecisionMoney](#centprecisionmoney)
- [ClientLogging](#clientlogging)
+- [DiscountedLineItemPortion](#dicountedlineitemportion)
+- [DiscountedLineItemPrice](#discountedlineitemprice)
- [HighPrecisionMoney](#highprecisionmoney)
- [KeyReference](#keyreference)
- [LocalizedString](#localizedstring)
@@ -63,6 +65,41 @@ import { const clientLogging = ClientLogging.random().build(); ``` +# DiscountedLineItemPortion + +```ts +import { + DiscountedLineItemPortionRest, + DiscountedLineItemPortionDraftRest, + DiscountedLineItemPortionGraphql, + DiscountedLineItemPortionDraftGraphql, +} from '@commercetools-test-data/commons'; + +const restDiscountedLineItemPortion = \ + DiscountedLineItemPortionRest.random().build(); +const restDiscountedLineItemPortionDraft = + DiscountedLineItemPortionDraftRest.random().build(); + +const graphqlDiscountedLineItemPortion = + DiscountedLineItemPortionGraphql.random().build(); +const graphqlDiscountedLineItemPortionDraft = + DiscountedLineItemPortionDraftGraphql.random().build(); +``` + +# DiscountedLineItemPrice + +```ts +import { + DiscountedLineItemPriceRest, + DiscountedLineItemPriceGraphql, +} from '@commercetools-test-data/commons'; + +const restDiscountedLineItemPrice = \ + DiscountedLineItemPriceRest.random().build(); +const restDiscountedLineItemPriceDraft = + DiscountedLineItemPriceDraftRest.random().build(); +``` + # HighPrecisionMoney ```ts diff --git a/models/commons/src/discounted-line-item-portion/builders.spec.ts b/models/commons/src/discounted-line-item-portion/builders.spec.ts new file mode 100644 index 000000000..ce2ef0917 --- /dev/null +++ b/models/commons/src/discounted-line-item-portion/builders.spec.ts @@ -0,0 +1,42 @@ +import { + DiscountedLineItemPortionRest, + DiscountedLineItemPortionGraphql, +} from './index'; + +describe('DiscountedLineItemPortion Builder', () => { + it('should build properties for the REST representation', () => { + const restModel = DiscountedLineItemPortionRest.random().build(); + + expect(restModel).toEqual( + expect.objectContaining({ + discount: expect.objectContaining({ + id: expect.any(String), + typeId: 'cart-discount', + }), + discountedAmount: expect.objectContaining({ + centAmount: expect.any(Number), + currencyCode: expect.any(String), + }), + }) + ); + }); + it('should build properties for the GraphQL representation', () => { + const graphqlModel = DiscountedLineItemPortionGraphql.random().build(); + + expect(graphqlModel).toEqual( + expect.objectContaining({ + discount: null, + discountRef: expect.objectContaining({ + id: expect.any(String), + typeId: 'cart-discount', + __typename: 'Reference', + }), + discountedAmount: expect.objectContaining({ + centAmount: expect.any(Number), + currencyCode: expect.any(String), + }), + __typename: 'DiscountedLineItemPortion', + }) + ); + }); +}); diff --git a/models/commons/src/discounted-line-item-portion/builders.ts b/models/commons/src/discounted-line-item-portion/builders.ts new file mode 100644 index 000000000..2993893c6 --- /dev/null +++ b/models/commons/src/discounted-line-item-portion/builders.ts @@ -0,0 +1,25 @@ +import { createSpecializedBuilder } from '@commercetools-test-data/core'; +import { restFieldsConfig, graphqlFieldsConfig } from './fields-config'; +import type { + TCreateDiscountedLineItemPortionBuilder, + TDiscountedLineItemPortionGraphql, + TDiscountedLineItemPortionRest, +} from './types'; + +export const RestModelBuilder: TCreateDiscountedLineItemPortionBuilder< + TDiscountedLineItemPortionRest +> = () => + createSpecializedBuilder({ + name: 'DiscountedLineItemPortionRestBuilder', + type: 'rest', + modelFieldsConfig: restFieldsConfig, + }); + +export const GraphqlModelBuilder: TCreateDiscountedLineItemPortionBuilder< + TDiscountedLineItemPortionGraphql +> = () => + createSpecializedBuilder({ + name: 'DiscountedLineItemPortionGraphqlBuilder', + type: 'graphql', + modelFieldsConfig: graphqlFieldsConfig, + }); diff --git a/models/commons/src/discounted-line-item-portion/discounted-line-item-portion-draft/builders.spec.ts b/models/commons/src/discounted-line-item-portion/discounted-line-item-portion-draft/builders.spec.ts new file mode 100644 index 000000000..aa47263a1 --- /dev/null +++ b/models/commons/src/discounted-line-item-portion/discounted-line-item-portion-draft/builders.spec.ts @@ -0,0 +1,40 @@ +import { + DiscountedLineItemPortionDraftRest, + DiscountedLineItemPortionDraftGraphql, +} from './index'; + +describe('DiscountedLineItemPortion Builder', () => { + it('should build properties for the REST representation', () => { + const restModel = DiscountedLineItemPortionDraftRest.random().build(); + + expect(restModel).toEqual( + expect.objectContaining({ + discount: expect.objectContaining({ + id: expect.any(String), + typeId: 'cart-discount', + }), + discountedAmount: expect.objectContaining({ + centAmount: expect.any(Number), + currencyCode: expect.any(String), + }), + }) + ); + }); + it('should build properties for the GraphQL representation', () => { + const graphqlModel = DiscountedLineItemPortionDraftGraphql.random().build(); + + expect(graphqlModel).toEqual( + expect.objectContaining({ + discount: expect.objectContaining({ + id: expect.any(String), + typeId: 'cart-discount', + __typename: 'Reference', + }), + discountedAmount: expect.objectContaining({ + centAmount: expect.any(Number), + currencyCode: expect.any(String), + }), + }) + ); + }); +}); diff --git a/models/commons/src/discounted-line-item-portion/discounted-line-item-portion-draft/builders.ts b/models/commons/src/discounted-line-item-portion/discounted-line-item-portion-draft/builders.ts new file mode 100644 index 000000000..2093a7072 --- /dev/null +++ b/models/commons/src/discounted-line-item-portion/discounted-line-item-portion-draft/builders.ts @@ -0,0 +1,25 @@ +import { createSpecializedBuilder } from '@commercetools-test-data/core'; +import type { + TCreateDiscountedLineItemPortionBuilder, + TDiscountedLineItemPortionDraftGraphql, + TDiscountedLineItemPortionDraftRest, +} from '../types'; +import { restFieldsConfig, graphqlFieldsConfig } from './fields-config'; + +export const RestModelBuilder: TCreateDiscountedLineItemPortionBuilder< + TDiscountedLineItemPortionDraftRest +> = () => + createSpecializedBuilder({ + name: 'DiscountedLineItemPortionDraftRestBuilder', + type: 'rest', + modelFieldsConfig: restFieldsConfig, + }); + +export const GraphqlModelBuilder: TCreateDiscountedLineItemPortionBuilder< + TDiscountedLineItemPortionDraftGraphql +> = () => + createSpecializedBuilder({ + name: 'DiscountedLineItemPortionDraftGraphqlBuilder', + type: 'graphql', + modelFieldsConfig: graphqlFieldsConfig, + }); diff --git a/models/commons/src/discounted-line-item-portion/discounted-line-item-portion-draft/fields-config.ts b/models/commons/src/discounted-line-item-portion/discounted-line-item-portion-draft/fields-config.ts new file mode 100644 index 000000000..a5bdfb9c0 --- /dev/null +++ b/models/commons/src/discounted-line-item-portion/discounted-line-item-portion-draft/fields-config.ts @@ -0,0 +1,25 @@ +import { fake, type TModelFieldsConfig } from '@commercetools-test-data/core'; +import { MoneyDraft, Reference } from '../../index'; +import type { + TDiscountedLineItemPortionDraftGraphql, + TDiscountedLineItemPortionDraftRest, +} from '../types'; + +const commonFieldsConfig = { + discount: fake(() => Reference.presets.cartDiscountReference()), + discountedAmount: fake(() => MoneyDraft.random()), +}; + +export const restFieldsConfig: TModelFieldsConfig = + { + fields: { + ...commonFieldsConfig, + }, + }; + +export const graphqlFieldsConfig: TModelFieldsConfig = + { + fields: { + ...commonFieldsConfig, + }, + }; diff --git a/models/commons/src/discounted-line-item-portion/discounted-line-item-portion-draft/index.ts b/models/commons/src/discounted-line-item-portion/discounted-line-item-portion-draft/index.ts new file mode 100644 index 000000000..939bf35ac --- /dev/null +++ b/models/commons/src/discounted-line-item-portion/discounted-line-item-portion-draft/index.ts @@ -0,0 +1,12 @@ +import { RestModelBuilder, GraphqlModelBuilder } from './builders'; +import * as DiscountedLineItemPortionDraftPresets from './presets'; + +export const DiscountedLineItemPortionDraftRest = { + random: RestModelBuilder, + presets: DiscountedLineItemPortionDraftPresets.restPresets, +}; + +export const DiscountedLineItemPortionDraftGraphql = { + random: GraphqlModelBuilder, + presets: DiscountedLineItemPortionDraftPresets.graphqlPresets, +}; diff --git a/models/commons/src/discounted-line-item-portion/discounted-line-item-portion-draft/presets/index.ts b/models/commons/src/discounted-line-item-portion/discounted-line-item-portion-draft/presets/index.ts new file mode 100644 index 000000000..21d9d39b6 --- /dev/null +++ b/models/commons/src/discounted-line-item-portion/discounted-line-item-portion-draft/presets/index.ts @@ -0,0 +1,2 @@ +export const restPresets = {}; +export const graphqlPresets = {}; diff --git a/models/commons/src/discounted-line-item-portion/fields-config.ts b/models/commons/src/discounted-line-item-portion/fields-config.ts new file mode 100644 index 000000000..368ef59a0 --- /dev/null +++ b/models/commons/src/discounted-line-item-portion/fields-config.ts @@ -0,0 +1,39 @@ +// import { CartDiscount } from '@commercetools-test-data/cart-discount'; +import { fake, type TModelFieldsConfig } from '@commercetools-test-data/core'; +import { Money, Reference, TReferenceGraphql } from '../index'; +import type { + TDiscountedLineItemPortionGraphql, + TDiscountedLineItemPortionRest, +} from './types'; + +const commonFieldsConfig = { + discountedAmount: fake(() => Money.random()), +}; + +export const restFieldsConfig: TModelFieldsConfig = + { + fields: { + discount: fake(() => Reference.presets.cartDiscountReference()), + ...commonFieldsConfig, + }, + }; + +export const graphqlFieldsConfig: TModelFieldsConfig = + { + fields: { + ...commonFieldsConfig, + discount: null, + discountRef: fake(() => Reference.presets.cartDiscountReference()), + __typename: 'DiscountedLineItemPortion', + }, + postBuild: (model) => { + return { + discountRef: model.discount + ? Reference.presets + .cartDiscountReference() + .id(model.discount.id) + .buildGraphql>() + : model.discountRef, + }; + }, + }; diff --git a/models/commons/src/discounted-line-item-portion/index.ts b/models/commons/src/discounted-line-item-portion/index.ts new file mode 100644 index 000000000..2a43377ff --- /dev/null +++ b/models/commons/src/discounted-line-item-portion/index.ts @@ -0,0 +1,13 @@ +import { RestModelBuilder, GraphqlModelBuilder } from './builders'; +import * as DiscountedLineItemPortionPresets from './presets'; +export * from './discounted-line-item-portion-draft'; + +export const DiscountedLineItemPortionRest = { + random: RestModelBuilder, + presets: DiscountedLineItemPortionPresets.restPresets, +}; + +export const DiscountedLineItemPortionGraphql = { + random: GraphqlModelBuilder, + presets: DiscountedLineItemPortionPresets.graphqlPresets, +}; diff --git a/models/commons/src/discounted-line-item-portion/presets/index.ts b/models/commons/src/discounted-line-item-portion/presets/index.ts new file mode 100644 index 000000000..21d9d39b6 --- /dev/null +++ b/models/commons/src/discounted-line-item-portion/presets/index.ts @@ -0,0 +1,2 @@ +export const restPresets = {}; +export const graphqlPresets = {}; diff --git a/models/commons/src/discounted-line-item-portion/types.ts b/models/commons/src/discounted-line-item-portion/types.ts new file mode 100644 index 000000000..9b47eb1b2 --- /dev/null +++ b/models/commons/src/discounted-line-item-portion/types.ts @@ -0,0 +1,25 @@ +import { + DiscountedLineItemPortion, + DiscountedLineItemPortionDraft, +} from '@commercetools/platform-sdk'; +import type { TBuilder } from '@commercetools-test-data/core'; +import type { + TCtpDiscountedLineItemPortion, + TCtpDiscountedLineItemPortionDraft, +} from '@commercetools-test-data/graphql-types'; + +export type TDiscountedLineItemPortionRest = DiscountedLineItemPortion; +export type TDiscountedLineItemPortionGraphql = TCtpDiscountedLineItemPortion; + +export type TDiscountedLineItemPortionDraftRest = + DiscountedLineItemPortionDraft; +export type TDiscountedLineItemPortionDraftGraphql = + TCtpDiscountedLineItemPortionDraft; + +export type TCreateDiscountedLineItemPortionBuilder< + TModel extends + | TDiscountedLineItemPortionRest + | TDiscountedLineItemPortionGraphql + | TDiscountedLineItemPortionDraftRest + | TDiscountedLineItemPortionDraftGraphql, +> = () => TBuilder; diff --git a/models/commons/src/discounted-line-item-price/builders.spec.ts b/models/commons/src/discounted-line-item-price/builders.spec.ts new file mode 100644 index 000000000..75eb5551a --- /dev/null +++ b/models/commons/src/discounted-line-item-price/builders.spec.ts @@ -0,0 +1,52 @@ +import { + DiscountedLineItemPriceRest, + DiscountedLineItemPriceGraphql, +} from './index'; + +describe('DiscountedLineItemPrice Builder', () => { + it('should build properties for the REST representation', () => { + const restModel = DiscountedLineItemPriceRest.random().build(); + + expect(restModel).toEqual( + expect.objectContaining({ + includedDiscounts: expect.arrayContaining([ + expect.objectContaining({ + discount: expect.objectContaining({ + typeId: 'cart-discount', + }), + }), + ]), + value: expect.objectContaining({ + centAmount: expect.any(Number), + currencyCode: expect.any(String), + }), + }) + ); + }); + + it('should build properties for the GraphQL representation', () => { + const graphqlModel = DiscountedLineItemPriceGraphql.random().build(); + + expect(graphqlModel).toEqual( + expect.objectContaining({ + value: expect.objectContaining({ + __typename: 'Money', + }), + includedDiscounts: expect.arrayContaining([ + expect.objectContaining({ + discountedAmount: expect.objectContaining({ + __typename: 'Money', + }), + discount: null, + discountRef: expect.objectContaining({ + typeId: 'cart-discount', + __typename: 'Reference', + }), + __typename: 'DiscountedLineItemPortion', + }), + ]), + __typename: 'DiscountedLineItemPrice', + }) + ); + }); +}); diff --git a/models/commons/src/discounted-line-item-price/builders.ts b/models/commons/src/discounted-line-item-price/builders.ts new file mode 100644 index 000000000..8afbd1335 --- /dev/null +++ b/models/commons/src/discounted-line-item-price/builders.ts @@ -0,0 +1,25 @@ +import { createSpecializedBuilder } from '@commercetools-test-data/core'; +import { restFieldsConfig, graphqlFieldsConfig } from './fields-config'; +import type { + TCreateDiscountedLineItemPriceBuilder, + TDiscountedLineItemPriceGraphql, + TDiscountedLineItemPriceRest, +} from './types'; + +export const RestModelBuilder: TCreateDiscountedLineItemPriceBuilder< + TDiscountedLineItemPriceRest +> = () => + createSpecializedBuilder({ + name: 'DiscountedLineItemPriceRestBuilder', + type: 'rest', + modelFieldsConfig: restFieldsConfig, + }); + +export const GraphqlModelBuilder: TCreateDiscountedLineItemPriceBuilder< + TDiscountedLineItemPriceGraphql +> = () => + createSpecializedBuilder({ + name: 'DiscountedLineItemPriceGraphqlBuilder', + type: 'graphql', + modelFieldsConfig: graphqlFieldsConfig, + }); diff --git a/models/commons/src/discounted-line-item-price/fields-config.ts b/models/commons/src/discounted-line-item-price/fields-config.ts new file mode 100644 index 000000000..3ae6b0198 --- /dev/null +++ b/models/commons/src/discounted-line-item-price/fields-config.ts @@ -0,0 +1,34 @@ +import { fake, type TModelFieldsConfig } from '@commercetools-test-data/core'; +import { + DiscountedLineItemPortionGraphql, + DiscountedLineItemPortionRest, + Money, +} from '../index'; +import type { + TDiscountedLineItemPriceGraphql, + TDiscountedLineItemPriceRest, +} from './types'; + +const commonFieldsConfig = { + value: fake(() => Money.random()), + includedDiscounts: [], +}; + +export const restFieldsConfig: TModelFieldsConfig = + { + fields: { + ...commonFieldsConfig, + includedDiscounts: fake(() => [DiscountedLineItemPortionRest.random()]), + }, + }; + +export const graphqlFieldsConfig: TModelFieldsConfig = + { + fields: { + ...commonFieldsConfig, + includedDiscounts: fake(() => [ + DiscountedLineItemPortionGraphql.random(), + ]), + __typename: 'DiscountedLineItemPrice', + }, + }; diff --git a/models/commons/src/discounted-line-item-price/index.ts b/models/commons/src/discounted-line-item-price/index.ts new file mode 100644 index 000000000..d0d2f6ecc --- /dev/null +++ b/models/commons/src/discounted-line-item-price/index.ts @@ -0,0 +1,12 @@ +import { RestModelBuilder, GraphqlModelBuilder } from './builders'; +import * as DiscountedLineItemPricePresets from './presets'; + +export const DiscountedLineItemPriceRest = { + random: RestModelBuilder, + presets: DiscountedLineItemPricePresets.restPresets, +}; + +export const DiscountedLineItemPriceGraphql = { + random: GraphqlModelBuilder, + presets: DiscountedLineItemPricePresets.graphqlPresets, +}; diff --git a/models/commons/src/discounted-line-item-price/presets/index.ts b/models/commons/src/discounted-line-item-price/presets/index.ts new file mode 100644 index 000000000..21d9d39b6 --- /dev/null +++ b/models/commons/src/discounted-line-item-price/presets/index.ts @@ -0,0 +1,2 @@ +export const restPresets = {}; +export const graphqlPresets = {}; diff --git a/models/commons/src/discounted-line-item-price/types.ts b/models/commons/src/discounted-line-item-price/types.ts new file mode 100644 index 000000000..505e172ca --- /dev/null +++ b/models/commons/src/discounted-line-item-price/types.ts @@ -0,0 +1,11 @@ +import { DiscountedLineItemPrice } from '@commercetools/platform-sdk'; +import type { TBuilder } from '@commercetools-test-data/core'; +import { TCtpDiscountedLineItemPrice } from '@commercetools-test-data/graphql-types'; + +export type TDiscountedLineItemPriceRest = DiscountedLineItemPrice; + +export type TDiscountedLineItemPriceGraphql = TCtpDiscountedLineItemPrice; + +export type TCreateDiscountedLineItemPriceBuilder< + TModel extends TDiscountedLineItemPriceRest | TDiscountedLineItemPriceGraphql, +> = () => TBuilder; diff --git a/models/commons/src/index.ts b/models/commons/src/index.ts index 2f9b4103a..10f50a694 100644 --- a/models/commons/src/index.ts +++ b/models/commons/src/index.ts @@ -2,15 +2,17 @@ export * from './address/types'; export * from './cent-precision-money/types'; export * from './client-logging/types'; +export * from './discounted-line-item-portion/types'; +export * from './discounted-line-item-price/types'; +export * from './geometry/types'; export * from './high-precision-money/types'; export * from './key-reference/types'; export * from './localized-field/types'; export * from './localized-string/types'; export * from './money/types'; export * from './price/types'; -export * from './reference/types'; export * from './price-tier/types'; -export * from './geometry/types'; +export * from './reference/types'; // Export models export * as Address from './address'; @@ -34,4 +36,6 @@ export * as ReferenceDraft from './reference/reference-draft'; export * as PriceTier from './price-tier'; export * as PriceTierDraft from './price-tier/price-tier-draft'; +export * from './discounted-line-item-portion'; +export * from './discounted-line-item-price'; export * from './geometry'; diff --git a/models/tax-category/src/tax-rate/presets/index.ts b/models/tax-category/src/tax-rate/presets/index.ts index 763e57fe0..30cc879ab 100644 --- a/models/tax-category/src/tax-rate/presets/index.ts +++ b/models/tax-category/src/tax-rate/presets/index.ts @@ -1,3 +1,7 @@ -const presets = {}; +import withAllFields from './with-all-fields/with-all-fields-preset'; + +const presets = { + withAllFields, +}; export default presets; diff --git a/models/tax-category/src/tax-rate/presets/with-all-fields/with-all-fields-preset.ts b/models/tax-category/src/tax-rate/presets/with-all-fields/with-all-fields-preset.ts new file mode 100644 index 000000000..6c6a3a166 --- /dev/null +++ b/models/tax-category/src/tax-rate/presets/with-all-fields/with-all-fields-preset.ts @@ -0,0 +1,5 @@ +import TaxRate from '../../builder'; + +const withAllFields = () => TaxRate().subRates([]); + +export default withAllFields; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f2ac2854c..be951cc84 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -279,6 +279,9 @@ importers: '@commercetools-test-data/discount-code': specifier: 10.10.1 version: link:../discount-code + '@commercetools-test-data/graphql-types': + specifier: 10.10.1 + version: link:../../graphql-types '@commercetools-test-data/product': specifier: 10.10.1 version: link:../product