diff --git a/.changeset/rude-colts-brush.md b/.changeset/rude-colts-brush.md new file mode 100644 index 000000000..8a9cc9d2b --- /dev/null +++ b/.changeset/rude-colts-brush.md @@ -0,0 +1,6 @@ +--- +'@commercetools-test-data/quote-request': minor +'@commercetools-test-data/staged-quote': patch +--- + +feat(staged quote) add test data package for staged quote model diff --git a/models/quote-request/src/builder.spec.ts b/models/quote-request/src/builder.spec.ts index 428b78386..c0889409f 100644 --- a/models/quote-request/src/builder.spec.ts +++ b/models/quote-request/src/builder.spec.ts @@ -18,6 +18,7 @@ describe('builder', () => { id: expect.any(String), version: expect.any(Number), key: expect.any(String), + quoteRequestState: expect.any(String), comment: null, customer: expect.objectContaining({ email: expect.any(String), @@ -70,9 +71,8 @@ describe('builder', () => { directDiscounts: expect.arrayContaining([]), state: null, cart: expect.objectContaining({ - cartState: expect.any(String), + typeId: 'cart', }), - businessUnit: expect.objectContaining({ id: expect.any(String), key: expect.any(String), @@ -98,6 +98,7 @@ describe('builder', () => { id: expect.any(String), version: expect.any(Number), key: expect.any(String), + quoteRequestState: expect.any(String), comment: null, customer: expect.objectContaining({ id: expect.any(String), @@ -174,6 +175,7 @@ describe('builder', () => { id: expect.any(String), version: expect.any(Number), key: expect.any(String), + quoteRequestState: expect.any(String), comment: null, customer: expect.objectContaining({ email: expect.any(String), @@ -238,9 +240,6 @@ describe('builder', () => { directDiscounts: expect.arrayContaining([]), state: null, stateRef: undefined, - cart: expect.objectContaining({ - cartState: expect.any(String), - }), cartRef: expect.objectContaining({ typeId: 'cart', __typename: 'Reference', diff --git a/models/quote-request/src/generator.ts b/models/quote-request/src/generator.ts index 5a48f8c7a..8e1d14022 100644 --- a/models/quote-request/src/generator.ts +++ b/models/quote-request/src/generator.ts @@ -1,9 +1,10 @@ import { Company } from '@commercetools-test-data/business-unit'; -import { Cart, LineItem } from '@commercetools-test-data/cart'; +import { LineItem } from '@commercetools-test-data/cart'; import { CentPrecisionMoney, ClientLogging, Address, + Reference, } from '@commercetools-test-data/commons'; import { sequence, @@ -56,7 +57,7 @@ const generator = Generator({ directDiscounts: [], state: null, purchaseOrderNumber: null, - cart: fake(() => Cart.random()), + cart: fake(() => Reference.random().typeId('cart')), businessUnit: fake(() => Company.random()), custom: null, createdAt: fake(getOlderDate), diff --git a/models/quote-request/src/quote-request-draft/generator.ts b/models/quote-request/src/quote-request-draft/generator.ts index 522b0ed4b..aa44386b4 100644 --- a/models/quote-request/src/quote-request-draft/generator.ts +++ b/models/quote-request/src/quote-request-draft/generator.ts @@ -1,5 +1,5 @@ import { Reference } from '@commercetools-test-data/commons'; -import { fake, Generator } from '@commercetools-test-data/core'; +import { fake, Generator, sequence } from '@commercetools-test-data/core'; import { TQuoteRequestDraft } from '../types'; // https://docs.commercetools.com/api/projects/quote-requests#quoterequestdraft @@ -8,7 +8,7 @@ const generator = Generator({ fields: { key: fake((f) => f.lorem.slug(2)), cart: fake(() => Reference.random().typeId('cart')), - cartVersion: fake((f) => f.number.int()), + cartVersion: sequence(), comment: null, state: null, purchaseOrderNumber: null, diff --git a/models/quote-request/src/transformers.ts b/models/quote-request/src/transformers.ts index 985128a65..344686b55 100644 --- a/models/quote-request/src/transformers.ts +++ b/models/quote-request/src/transformers.ts @@ -73,11 +73,6 @@ const transformers = { .id(fields.state?.id) .build>(); - const cart = Reference.presets.cartReference - .cartReference() - .id(fields.cart?.id) - .build>(); - const businessUnit = KeyReference.random() .typeId('business-unit') .key(fields.businessUnit?.key) @@ -89,7 +84,6 @@ const transformers = { customerGroup: fields.customerGroup ? customerGroup : undefined, store: fields.store ? store : undefined, state: fields.state ? state : undefined, - cart: fields.cart ? cart : undefined, businessUnit: fields.businessUnit ? businessUnit : undefined, }; }, @@ -137,11 +131,13 @@ const transformers = { .typeId('state') .buildGraphql(); - const cartRef: TReferenceGraphql = Reference.presets.cartReference - .cartReference() - .id(fields.cart?.id) - .typeId('cart') - .buildGraphql(); + const cartRef: TReferenceGraphql | null = fields.cart + ? Reference.presets.cartReference + .cartReference() + .id(fields.cart.id) + .typeId('cart') + .buildGraphql() + : null; const businessUnitRef: TReferenceGraphql = Reference.presets.businessUnitReference @@ -152,14 +148,15 @@ const transformers = { return { customerRef, - customerGroupRef, - storeRef, + customerGroupRef: fields.customerGroup ? customerGroupRef : undefined, + storeRef: fields.store ? storeRef : undefined, stateRef: fields.state ? stateRef : undefined, - cartRef, + cartRef: fields.cart ? cartRef : undefined, businessUnitRef, __typename: 'QuoteRequest', }; }, + removeFields: ['cart'], }), }; diff --git a/models/quote-request/src/types.ts b/models/quote-request/src/types.ts index a46113b7b..4780e01b2 100644 --- a/models/quote-request/src/types.ts +++ b/models/quote-request/src/types.ts @@ -1,6 +1,6 @@ import type { BusinessUnit, - Cart, + CartReference, Customer, CustomerGroup, State, @@ -14,13 +14,12 @@ import type { TBuilder } from '@commercetools-test-data/core'; // Default export type TQuoteRequest = Omit< QuoteRequest, - 'customer' | 'customerGroup' | 'store' | 'state' | 'cart' | 'businessUnit' + 'customer' | 'customerGroup' | 'store' | 'state' | 'businessUnit' > & { customer: Customer; customerGroup: CustomerGroup; store: Store; state: State; - cart: Cart; businessUnit: BusinessUnit; }; diff --git a/models/staged-quote/LICENSE b/models/staged-quote/LICENSE new file mode 100644 index 000000000..e113013cb --- /dev/null +++ b/models/staged-quote/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) commercetools GmbH + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/models/staged-quote/README.md b/models/staged-quote/README.md new file mode 100644 index 000000000..a4067b7e2 --- /dev/null +++ b/models/staged-quote/README.md @@ -0,0 +1,25 @@ +# @commercetools-test-data/quote + +This package provides the data model for the commercetools platform `StagedQuote` type + +https://docs.commercetools.com/api/projects/staged-quotes + +# Install + +```bash +$ pnpm add -D @commercetools-test-data/staged-quote +``` + +# Usage + +```ts +import { + StagedQuote, + StagedQuoteDraft, + type TStagedQuote, + type TStagedQuoteDraft, +} from '@commercetools-test-data/quote-request'; + +const stagedQuote = StagedQuote.random().build(); +const stagedQuoteDraft = StagedQuoteDraft.random().build(); +``` diff --git a/models/staged-quote/package.json b/models/staged-quote/package.json new file mode 100644 index 000000000..586efe0c5 --- /dev/null +++ b/models/staged-quote/package.json @@ -0,0 +1,34 @@ +{ + "name": "@commercetools-test-data/staged-quote", + "version": "6.5.0", + "description": "Data model for commercetools API StagedQuote", + "bugs": "https://github.com/commercetools/test-data/issues", + "repository": { + "type": "git", + "url": "https://github.com/commercetools/test-data.git", + "directory": "models/quote" + }, + "keywords": ["javascript", "typescript", "test-data"], + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "main": "dist/commercetools-test-data-staged-quote.cjs.js", + "module": "dist/commercetools-test-data-staged-quote.esm.js", + "files": ["dist", "package.json", "LICENSE", "README.md"], + "dependencies": { + "@babel/runtime": "^7.17.9", + "@babel/runtime-corejs3": "^7.17.9", + "@commercetools-test-data/business-unit": "6.5.0", + "@commercetools-test-data/cart": "6.5.0", + "@commercetools-test-data/commons": "6.5.0", + "@commercetools-test-data/core": "6.5.0", + "@commercetools-test-data/customer": "6.5.0", + "@commercetools-test-data/customer-group": "6.5.0", + "@commercetools-test-data/quote-request": "6.5.0", + "@commercetools-test-data/store": "6.5.0", + "@commercetools-test-data/utils": "6.5.0", + "@commercetools/platform-sdk": "^6.0.0", + "@faker-js/faker": "^8.0.0" + } +} diff --git a/models/staged-quote/src/builder.spec.ts b/models/staged-quote/src/builder.spec.ts new file mode 100644 index 000000000..22df52bca --- /dev/null +++ b/models/staged-quote/src/builder.spec.ts @@ -0,0 +1,149 @@ +/* eslint-disable jest/valid-title */ +/* eslint-disable jest/no-disabled-tests */ + +import { createBuilderSpec } from '@commercetools-test-data/core/test-utils'; +import type { + TStagedQuote, + TStagedQuoteRest, + TStagedQuoteGraphql, +} from './types'; +import * as StagedQuote from './index'; + +describe('builder', () => { + it( + ...createBuilderSpec( + 'default', + StagedQuote.random(), + expect.objectContaining({ + id: expect.any(String), + version: expect.any(Number), + key: expect.any(String), + stagedQuoteState: expect.any(String), + customer: expect.objectContaining({ + email: expect.any(String), + }), + quoteRequest: expect.objectContaining({ + quoteRequestState: expect.any(String), + }), + quotationCart: expect.objectContaining({ + cartState: expect.any(String), + }), + validTo: expect.any(String), + sellerComment: expect.any(String), + state: null, + purchaseOrderNumber: null, + businessUnit: expect.objectContaining({ + id: expect.any(String), + key: expect.any(String), + associateMode: expect.any(String), + }), + custom: null, + createdAt: expect.any(String), + createdBy: expect.objectContaining({ + customer: expect.objectContaining({ typeId: 'customer' }), + }), + lastModifiedAt: expect.any(String), + lastModifiedBy: expect.objectContaining({ + customer: expect.objectContaining({ typeId: 'customer' }), + }), + }) + ) + ); + it( + ...createBuilderSpec( + 'rest', + StagedQuote.random(), + expect.objectContaining({ + id: expect.any(String), + version: expect.any(Number), + key: expect.any(String), + stagedQuoteState: expect.any(String), + customer: expect.objectContaining({ + id: expect.any(String), + typeId: 'customer', + }), + quoteRequest: expect.objectContaining({ + typeId: 'quote-request', + }), + quotationCart: expect.objectContaining({ + typeId: 'cart', + }), + validTo: expect.any(String), + sellerComment: expect.any(String), + state: undefined, + purchaseOrderNumber: null, + businessUnit: expect.objectContaining({ + typeId: 'business-unit', + }), + custom: null, + createdAt: expect.any(String), + createdBy: expect.objectContaining({ + customer: expect.objectContaining({ typeId: 'customer' }), + }), + lastModifiedAt: expect.any(String), + lastModifiedBy: expect.objectContaining({ + customer: expect.objectContaining({ typeId: 'customer' }), + }), + }) + ) + ); + it( + ...createBuilderSpec( + 'graphql', + StagedQuote.random(), + expect.objectContaining({ + id: expect.any(String), + version: expect.any(Number), + key: expect.any(String), + stagedQuoteState: expect.any(String), + customer: expect.objectContaining({ + email: expect.any(String), + }), + customerRef: expect.objectContaining({ + typeId: 'customer', + __typename: 'Reference', + }), + quoteRequest: expect.objectContaining({ + quoteRequestState: expect.any(String), + }), + quoteRequestRef: expect.objectContaining({ + typeId: 'quote-request', + __typename: 'Reference', + }), + quotationCart: expect.objectContaining({ + cartState: expect.any(String), + }), + quotationCartRef: expect.objectContaining({ + typeId: 'cart', + __typename: 'Reference', + }), + validTo: expect.any(String), + sellerComment: expect.any(String), + state: null, + stateRef: undefined, + purchaseOrderNumber: null, + businessUnit: expect.objectContaining({ + id: expect.any(String), + key: expect.any(String), + associateMode: expect.any(String), + }), + businessUnitRef: expect.objectContaining({ + typeId: 'business-unit', + __typename: 'Reference', + }), + custom: null, + createdAt: expect.any(String), + createdBy: expect.objectContaining({ + customerRef: expect.objectContaining({ typeId: 'customer' }), + userRef: expect.objectContaining({ typeId: 'user' }), + }), + lastModifiedAt: expect.any(String), + lastModifiedBy: expect.objectContaining({ + customerRef: expect.objectContaining({ typeId: 'customer' }), + userRef: expect.objectContaining({ typeId: 'user' }), + }), + __typename: 'StagedQuote', + }) + ) + ); +}); diff --git a/models/staged-quote/src/builder.ts b/models/staged-quote/src/builder.ts new file mode 100644 index 000000000..128995164 --- /dev/null +++ b/models/staged-quote/src/builder.ts @@ -0,0 +1,12 @@ +import { Builder } from '@commercetools-test-data/core'; +import generator from './generator'; +import transformers from './transformers'; +import type { TStagedQuote, TCreateStagedQuoteBuilder } from './types'; + +const Model: TCreateStagedQuoteBuilder = () => + Builder({ + generator, + transformers, + }); + +export default Model; diff --git a/models/staged-quote/src/constants.ts b/models/staged-quote/src/constants.ts new file mode 100644 index 000000000..3e93dc37a --- /dev/null +++ b/models/staged-quote/src/constants.ts @@ -0,0 +1,5 @@ +export const STAGED_QUOTE_STATE = { + inProgress: 'InProgress', + sent: 'Sent', + closed: 'Closed', +} as const; diff --git a/models/staged-quote/src/generator.ts b/models/staged-quote/src/generator.ts new file mode 100644 index 000000000..ba446c965 --- /dev/null +++ b/models/staged-quote/src/generator.ts @@ -0,0 +1,42 @@ +import { Company } from '@commercetools-test-data/business-unit'; +import { Cart } from '@commercetools-test-data/cart'; +import { ClientLogging } from '@commercetools-test-data/commons'; +import { + sequence, + fake, + Generator, + oneOf, +} from '@commercetools-test-data/core'; +import { Customer } from '@commercetools-test-data/customer'; +import { QuoteRequest } from '@commercetools-test-data/quote-request'; +import { createRelatedDates } from '@commercetools-test-data/utils'; +import { STAGED_QUOTE_STATE } from './constants'; +import type { TStagedQuote } from './types'; + +const [getOlderDate, getNewerDate, getFutureDate] = createRelatedDates(); + +// https://docs.commercetools.com/api/projects/staged-quotes#stagedquote + +const generator = Generator({ + fields: { + id: fake((f) => f.string.uuid()), + version: sequence(), + key: fake((f) => f.lorem.slug(2)), + stagedQuoteState: oneOf(...Object.values(STAGED_QUOTE_STATE)), + customer: fake(() => Customer.random()), + quoteRequest: fake(() => QuoteRequest.random()), + quotationCart: fake(() => Cart.random()), + validTo: fake(getFutureDate), + sellerComment: fake((f) => f.lorem.words(5)), + state: null, + purchaseOrderNumber: null, + businessUnit: fake(() => Company.random()), + custom: null, + createdAt: fake(getOlderDate), + createdBy: fake(() => ClientLogging.random()), + lastModifiedAt: fake(getNewerDate), + lastModifiedBy: fake(() => ClientLogging.random()), + }, +}); + +export default generator; diff --git a/models/staged-quote/src/index.ts b/models/staged-quote/src/index.ts new file mode 100644 index 000000000..0a6a82cba --- /dev/null +++ b/models/staged-quote/src/index.ts @@ -0,0 +1,7 @@ +export * as StagedQuoteDraft from './staged-quote-draft'; +export * as StagedQuote from '.'; + +export { default as random } from './builder'; +export { default as presets } from './presets'; +export * from './types'; +export * as constants from './constants'; diff --git a/models/staged-quote/src/presets/index.ts b/models/staged-quote/src/presets/index.ts new file mode 100644 index 000000000..763e57fe0 --- /dev/null +++ b/models/staged-quote/src/presets/index.ts @@ -0,0 +1,3 @@ +const presets = {}; + +export default presets; diff --git a/models/staged-quote/src/staged-quote-draft/builder.spec.ts b/models/staged-quote/src/staged-quote-draft/builder.spec.ts new file mode 100644 index 000000000..994ae0b20 --- /dev/null +++ b/models/staged-quote/src/staged-quote-draft/builder.spec.ts @@ -0,0 +1,58 @@ +/* eslint-disable jest/no-disabled-tests */ +/* eslint-disable jest/valid-title */ + +import { createBuilderSpec } from '@commercetools-test-data/core/test-utils'; +import type { TStagedQuoteDraft, TStagedQuoteDraftGraphql } from '../types'; + +import * as StagedQuoteDraft from './index'; + +describe('builder', () => { + it( + ...createBuilderSpec( + 'default', + StagedQuoteDraft.random(), + expect.objectContaining({ + key: expect.any(String), + quoteRequest: expect.objectContaining({ + id: expect.any(String), + }), + quoteRequestVersion: expect.any(Number), + quoteRequestStateToAccepted: undefined, + state: undefined, + custom: undefined, + }) + ) + ); + it( + ...createBuilderSpec( + 'rest', + StagedQuoteDraft.random(), + expect.objectContaining({ + key: expect.any(String), + quoteRequest: expect.objectContaining({ + id: expect.any(String), + }), + quoteRequestVersion: expect.any(Number), + quoteRequestStateToAccepted: undefined, + state: undefined, + custom: undefined, + }) + ) + ); + it( + ...createBuilderSpec( + 'graphql', + StagedQuoteDraft.random(), + expect.objectContaining({ + key: expect.any(String), + quoteRequest: expect.objectContaining({ + id: expect.any(String), + }), + quoteRequestVersion: expect.any(Number), + quoteRequestStateToAccepted: undefined, + state: undefined, + custom: undefined, + }) + ) + ); +}); diff --git a/models/staged-quote/src/staged-quote-draft/builder.ts b/models/staged-quote/src/staged-quote-draft/builder.ts new file mode 100644 index 000000000..46d192a17 --- /dev/null +++ b/models/staged-quote/src/staged-quote-draft/builder.ts @@ -0,0 +1,15 @@ +import { Builder } from '@commercetools-test-data/core'; +import type { + TStagedQuoteDraft, + TCreateStagedQuoteDraftBuilder, +} from '../types'; +import generator from './generator'; +import transformers from './transformers'; + +const Model: TCreateStagedQuoteDraftBuilder = () => + Builder({ + generator, + transformers, + }); + +export default Model; diff --git a/models/staged-quote/src/staged-quote-draft/generator.ts b/models/staged-quote/src/staged-quote-draft/generator.ts new file mode 100644 index 000000000..43638fd51 --- /dev/null +++ b/models/staged-quote/src/staged-quote-draft/generator.ts @@ -0,0 +1,18 @@ +import { Reference } from '@commercetools-test-data/commons'; +import { fake, Generator, sequence } from '@commercetools-test-data/core'; +import type { TStagedQuoteDraft } from '../types'; + +// https://docs.commercetools.com/api/projects/staged-quotes#stagedquotedraft + +const generator = Generator({ + fields: { + key: fake((f) => f.lorem.slug(2)), + quoteRequest: fake(() => Reference.random().typeId('quote-request')), + quoteRequestVersion: sequence(), + quoteRequestStateToAccepted: undefined, + state: undefined, + custom: undefined, + }, +}); + +export default generator; diff --git a/models/staged-quote/src/staged-quote-draft/index.ts b/models/staged-quote/src/staged-quote-draft/index.ts new file mode 100644 index 000000000..96e2519e1 --- /dev/null +++ b/models/staged-quote/src/staged-quote-draft/index.ts @@ -0,0 +1,2 @@ +export { default as random } from './builder'; +export { default as presets } from './presets'; diff --git a/models/staged-quote/src/staged-quote-draft/presets/index.ts b/models/staged-quote/src/staged-quote-draft/presets/index.ts new file mode 100644 index 000000000..763e57fe0 --- /dev/null +++ b/models/staged-quote/src/staged-quote-draft/presets/index.ts @@ -0,0 +1,3 @@ +const presets = {}; + +export default presets; diff --git a/models/staged-quote/src/staged-quote-draft/transformers.ts b/models/staged-quote/src/staged-quote-draft/transformers.ts new file mode 100644 index 000000000..b39562b16 --- /dev/null +++ b/models/staged-quote/src/staged-quote-draft/transformers.ts @@ -0,0 +1,16 @@ +import { Transformer } from '@commercetools-test-data/core'; +import type { TStagedQuoteDraft, TStagedQuoteDraftGraphql } from '../types'; + +const transformers = { + default: Transformer('default', { + buildFields: ['quoteRequest', 'state', 'custom'], + }), + rest: Transformer('rest', { + buildFields: ['quoteRequest', 'state', 'custom'], + }), + graphql: Transformer('graphql', { + buildFields: ['quoteRequest', 'state', 'custom'], + }), +}; + +export default transformers; diff --git a/models/staged-quote/src/transformers.ts b/models/staged-quote/src/transformers.ts new file mode 100644 index 000000000..788a18b19 --- /dev/null +++ b/models/staged-quote/src/transformers.ts @@ -0,0 +1,133 @@ +import { BusinessUnitKeyReference } from '@commercetools/platform-sdk'; +import { + Reference, + KeyReference, + TReference, + TReferenceGraphql, +} from '@commercetools-test-data/commons'; +import { Transformer } from '@commercetools-test-data/core'; + +import type { + TStagedQuote, + TStagedQuoteRest, + TStagedQuoteGraphql, +} from './types'; + +const transformers = { + default: Transformer('default', { + buildFields: [ + 'customer', + 'quoteRequest', + 'quotationCart', + 'state', + 'businessUnit', + 'custom', + 'createdBy', + 'lastModifiedBy', + ], + }), + rest: Transformer('rest', { + buildFields: [ + 'customer', + 'quoteRequest', + 'quotationCart', + 'state', + 'businessUnit', + 'custom', + 'createdBy', + 'lastModifiedBy', + ], + replaceFields: ({ fields }) => { + const customer = Reference.presets.customerReference + .customerReference() + .id(fields.customer.id) + .build>(); + + const quoteRequest = Reference.presets.quoteRequestReference + .quoteRequestReference() + .id(fields.quoteRequest.id) + .build>(); + + const quotationCart = Reference.presets.cartReference + .cartReference() + .id(fields.quotationCart.id) + .build>(); + + const state = Reference.presets.stateReference + .stateReference() + .id(fields.state?.id) + .build>(); + + const businessUnit = KeyReference.random() + .typeId('business-unit') + .key(fields.businessUnit?.key) + .buildRest() as unknown as BusinessUnitKeyReference; + + return { + ...fields, + customer, + quoteRequest, + quotationCart, + state: fields.state ? state : undefined, + businessUnit: fields.businessUnit ? businessUnit : undefined, + }; + }, + }), + graphql: Transformer('graphql', { + buildFields: [ + 'customer', + 'quoteRequest', + 'quotationCart', + 'state', + 'businessUnit', + 'custom', + 'createdBy', + 'lastModifiedBy', + ], + addFields: ({ fields }) => { + const customerRef: TReferenceGraphql = Reference.presets.customerReference + .customerReference() + .id(fields.customer.id) + .typeId('customer') + .buildGraphql(); + + const quoteRequestRef: TReferenceGraphql = + Reference.presets.quoteRequestReference + .quoteRequestReference() + .id(fields.quoteRequest.id) + .typeId('quote-request') + .buildGraphql(); + + const quotationCartRef: TReferenceGraphql = + Reference.presets.cartReference + .cartReference() + .id(fields.quotationCart.id) + .typeId('cart') + .buildGraphql(); + + const stateRef: TReferenceGraphql = Reference.presets.stateReference + .stateReference() + .id(fields.state?.id) + .typeId('state') + .buildGraphql(); + + const businessUnitRef: TReferenceGraphql = + Reference.presets.businessUnitReference + .businessUnitReference() + .id(fields.businessUnit?.id) + .typeId('business-unit') + .buildGraphql(); + + return { + customerRef, + quoteRequestRef, + quotationCartRef, + stateRef: fields.state ? stateRef : undefined, + businessUnitRef: fields.businessUnit ? businessUnitRef : undefined, + __typename: 'StagedQuote', + }; + }, + }), +}; + +export default transformers; diff --git a/models/staged-quote/src/types.ts b/models/staged-quote/src/types.ts new file mode 100644 index 000000000..9aedada74 --- /dev/null +++ b/models/staged-quote/src/types.ts @@ -0,0 +1,42 @@ +import type { + BusinessUnit, + Cart, + Customer, + StagedQuote, + StagedQuoteDraft, + State, + QuoteRequest, +} from '@commercetools/platform-sdk'; +import { TReferenceGraphql } from '@commercetools-test-data/commons'; +import type { TBuilder } from '@commercetools-test-data/core'; + +// Default +export type TStagedQuote = Omit< + StagedQuote, + 'businessUnit' | 'customer' | 'quotationCart' | 'quoteRequest' | 'state' +> & { + businessUnit: BusinessUnit; + customer: Customer; + quotationCart: Cart; + quoteRequest: QuoteRequest; + state: State; +}; + +// Rest +export type TStagedQuoteRest = StagedQuote; +export type TStagedQuoteDraft = StagedQuoteDraft; + +export type TStagedQuoteGraphql = TStagedQuote & { + businessUnitRef: TReferenceGraphql | null; + customerRef: TReferenceGraphql | null; + quotationCartRef: TReferenceGraphql; + quoteRequestRef: TReferenceGraphql; + stateRef: TReferenceGraphql | null; + __typename: 'StagedQuote'; +}; +export type TStagedQuoteDraftGraphql = TStagedQuoteDraft; + +export type TStagedQuoteBuilder = TBuilder; +export type TStagedQuoteDraftBuilder = TBuilder; +export type TCreateStagedQuoteBuilder = () => TStagedQuoteBuilder; +export type TCreateStagedQuoteDraftBuilder = () => TStagedQuoteDraftBuilder; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5787c4e1f..b98e746b7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -752,6 +752,48 @@ importers: specifier: ^8.0.0 version: 8.0.0 + models/staged-quote: + dependencies: + '@babel/runtime': + specifier: ^7.17.9 + version: 7.23.1 + '@babel/runtime-corejs3': + specifier: ^7.17.9 + version: 7.23.1 + '@commercetools-test-data/business-unit': + specifier: 6.5.0 + version: link:../business-unit + '@commercetools-test-data/cart': + specifier: 6.5.0 + version: link:../cart + '@commercetools-test-data/commons': + specifier: 6.5.0 + version: link:../commons + '@commercetools-test-data/core': + specifier: 6.5.0 + version: link:../../core + '@commercetools-test-data/customer': + specifier: 6.5.0 + version: link:../customer + '@commercetools-test-data/customer-group': + specifier: 6.5.0 + version: link:../customer-group + '@commercetools-test-data/quote-request': + specifier: 6.5.0 + version: link:../quote-request + '@commercetools-test-data/store': + specifier: 6.5.0 + version: link:../store + '@commercetools-test-data/utils': + specifier: 6.5.0 + version: link:../../utils + '@commercetools/platform-sdk': + specifier: ^6.0.0 + version: 6.0.0 + '@faker-js/faker': + specifier: ^8.0.0 + version: 8.0.0 + models/store: dependencies: '@babel/runtime': @@ -866,7 +908,7 @@ packages: '@babel/core': 7.23.0 '@babel/generator': 7.23.0 '@babel/parser': 7.23.0 - '@babel/runtime': 7.23.1 + '@babel/runtime': 7.23.4 '@babel/traverse': 7.23.2 '@babel/types': 7.23.0 babel-preset-fbjs: 3.4.0(@babel/core@7.23.0) @@ -2507,6 +2549,13 @@ packages: regenerator-runtime: 0.14.0 dev: false + /@babel/runtime@7.23.4: + resolution: {integrity: sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.0 + dev: false + /@babel/template@7.20.7: resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} engines: {node: '>=6.9.0'} @@ -2904,6 +2953,7 @@ packages: /@commercetools-test-data/attribute-definition@5.11.2: resolution: {integrity: sha512-uL5nP2+FJqUROv5gxdaYDp9xbuig45gxwEf3oBIOambnZjSO28dwh86mt5SeL5f29hhiN9ApswgjKIVjNbbgAw==} + deprecated: Use the @commercetools-test-data/product-type package instead dependencies: '@babel/runtime': 7.23.1 '@babel/runtime-corejs3': 7.23.1 @@ -2919,9 +2969,10 @@ packages: /@commercetools-test-data/attribute-type@5.11.2: resolution: {integrity: sha512-JecOqJ3jdc/1+mnNcYKRzQBzNlJSwzuuxOKWKWyAZzXW2sH3z4K+rECaQY3Y+HMFqIMgVboa9ebd6YIgDlFFNA==} + deprecated: Use the @commercetools-test-data/product-type package instead dependencies: - '@babel/runtime': 7.23.1 - '@babel/runtime-corejs3': 7.23.1 + '@babel/runtime': 7.21.0 + '@babel/runtime-corejs3': 7.19.4 '@commercetools-test-data/commons': 5.11.2 '@commercetools-test-data/core': 5.11.2 '@commercetools-test-data/utils': 5.11.2 @@ -2934,13 +2985,13 @@ packages: /@commercetools-test-data/commons@5.11.2: resolution: {integrity: sha512-AxcUby9NOEmil3kJKrNVa7Lz94UHOeW+nFgsmn5I3CLKrt/Q5VI0et+6Ls1UJh57buxbTQRK15O/Gd/hRMYwSA==} dependencies: - '@babel/runtime': 7.23.1 - '@babel/runtime-corejs3': 7.23.1 + '@babel/runtime': 7.21.0 + '@babel/runtime-corejs3': 7.19.4 '@commercetools-test-data/core': 5.11.2 '@commercetools-test-data/utils': 5.11.2 '@commercetools/platform-sdk': 4.11.0 '@faker-js/faker': 8.0.0 - '@types/lodash': 4.14.200 + '@types/lodash': 4.14.201 lodash: 4.17.21 transitivePeerDependencies: - encoding @@ -2949,10 +3000,10 @@ packages: /@commercetools-test-data/core@5.11.2: resolution: {integrity: sha512-iz++zEBengERwg3REm51RsEFmiUeNPQz1K9K2kZjH1sAkFxOf1ydmpM0Tt4Awmi/OHQ+G2tGKKdJewm8AQyHNg==} dependencies: - '@babel/runtime': 7.23.1 - '@babel/runtime-corejs3': 7.23.1 + '@babel/runtime': 7.21.0 + '@babel/runtime-corejs3': 7.19.4 '@faker-js/faker': 8.0.0 - '@types/lodash': 4.14.200 + '@types/lodash': 4.14.201 lodash: 4.17.21 dev: false @@ -2974,8 +3025,8 @@ packages: /@commercetools-test-data/utils@5.11.2: resolution: {integrity: sha512-7CU08wvYiQJ+tltvnEDunX/QtVgHimnMtNmwXBicL6/7OsiN/QHtW3pIuN8Sb/OQva6zUPLgOQe/6UbVHB+WpA==} dependencies: - '@babel/runtime': 7.23.1 - '@babel/runtime-corejs3': 7.23.1 + '@babel/runtime': 7.21.0 + '@babel/runtime-corejs3': 7.19.4 '@faker-js/faker': 8.0.0 dev: false @@ -2983,9 +3034,9 @@ packages: resolution: {integrity: sha512-ftcq6mCxzpIG9wmGpTED6KQCApk4nyURh81J3PRP3d48oCLOrkZSyzDDfvflGoVZQeIcox+YdtyqZoryFrRtmQ==} engines: {node: '>=14'} dependencies: - '@commercetools/sdk-client-v2': 2.2.0 + '@commercetools/sdk-client-v2': 2.3.0 '@commercetools/sdk-middleware-auth': 7.0.1 - '@commercetools/sdk-middleware-http': 7.0.3 + '@commercetools/sdk-middleware-http': 7.0.4 '@commercetools/sdk-middleware-logger': 3.0.0 transitivePeerDependencies: - encoding @@ -3013,6 +3064,16 @@ packages: - encoding dev: false + /@commercetools/sdk-client-v2@2.3.0: + resolution: {integrity: sha512-+vS6qRoKBbkunZCpdozung+7te97nFxaidLPqOTlz/9TmJaRfMMcYC/KUZCTS8S5a/4BFfY6DYujddolaU7e6Q==} + engines: {node: '>=14'} + dependencies: + buffer: 6.0.3 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + dev: false + /@commercetools/sdk-middleware-auth@7.0.1: resolution: {integrity: sha512-XLRm+o3Yd0mkVoyzsOA98PUu0U0ajQdBHMhZ8N2XMOtL4OY8zsgT8ap5JneXV8zWZNiwIYYAYoUDwBlLZh2lAQ==} engines: {node: '>=14'} @@ -3027,6 +3088,11 @@ packages: engines: {node: '>=14'} dev: false + /@commercetools/sdk-middleware-http@7.0.4: + resolution: {integrity: sha512-YpBDTA1NqjfwqPxrll6FzDc0A7hLSRwd9OLGMlPcvUG2Je1ks8Pe34pLdPqz7jgdURwfFXRBmXxPhezDzMbnZA==} + engines: {node: '>=14'} + dev: false + /@commercetools/sdk-middleware-logger@3.0.0: resolution: {integrity: sha512-DhMXAA2yIch/AaGxy7st85Z1HFmeLtHWGkr9z5rX4xKjan4PHGB/IE5saAR+SNGHhs6+1Lp8vZEHDo3tFqVLmg==} engines: {node: '>=14'} @@ -4680,6 +4746,10 @@ packages: resolution: {integrity: sha512-YI/M/4HRImtNf3pJgbF+W6FrXovqj+T+/HpENLTooK9PnkacBsDpeP3IpHab40CClUfhNmdM2WTNP2sa2dni5Q==} dev: false + /@types/lodash@4.14.201: + resolution: {integrity: sha512-y9euML0cim1JrykNxADLfaG0FgD1g/yTHwUs/Jg9ZIU7WKj2/4IW9Lbb1WZbvck78W/lfGXFfe+u2EGfIJXdLQ==} + dev: false + /@types/minimist@1.2.2: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: false @@ -7284,8 +7354,8 @@ packages: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: false - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true @@ -8418,7 +8488,7 @@ packages: micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: false /jest-leak-detector@29.7.0: @@ -9482,6 +9552,18 @@ packages: whatwg-url: 5.0.0 dev: false + /node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: false + /node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: false @@ -9647,8 +9729,8 @@ packages: /omit-empty-es@1.1.3: resolution: {integrity: sha512-rqEprmXZ0CaOcY7vtCdRLm7QPrmyst30GN4WWsUwcbvosHF55cszEZ6Gg9SNnVIiXC91luURcSp+xChg2ymjkA==} dependencies: - '@babel/runtime': 7.23.1 - '@babel/runtime-corejs3': 7.23.1 + '@babel/runtime': 7.21.0 + '@babel/runtime-corejs3': 7.21.0 dev: false /once@1.4.0: @@ -10250,7 +10332,7 @@ packages: /relay-runtime@12.0.0: resolution: {integrity: sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==} dependencies: - '@babel/runtime': 7.23.1 + '@babel/runtime': 7.23.4 fbjs: 3.0.5 invariant: 2.2.4 transitivePeerDependencies: @@ -10390,7 +10472,7 @@ packages: engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: false /rrweb-cssom@0.6.0: