From 3a29c8f833fba086c0cd4c11eb06e2d1673d4820 Mon Sep 17 00:00:00 2001 From: Jonathan Creasman Date: Thu, 30 Nov 2023 13:10:06 -0500 Subject: [PATCH 01/10] feat(state-model): add initial setup files --- models/state/LICENSE | 21 ++++++++++++ models/state/README.md | 25 ++++++++++++++ models/state/package.json | 37 +++++++++++++++++++++ models/state/src/constants.ts | 6 ++++ models/state/src/types.ts | 15 +++++++++ pnpm-lock.yaml | 61 +++++++++++++++++++++++++++++++++++ 6 files changed, 165 insertions(+) create mode 100644 models/state/LICENSE create mode 100644 models/state/README.md create mode 100644 models/state/package.json create mode 100644 models/state/src/constants.ts create mode 100644 models/state/src/types.ts diff --git a/models/state/LICENSE b/models/state/LICENSE new file mode 100644 index 000000000..e113013cb --- /dev/null +++ b/models/state/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/state/README.md b/models/state/README.md new file mode 100644 index 000000000..a9bf2504d --- /dev/null +++ b/models/state/README.md @@ -0,0 +1,25 @@ +# @commercetools-test-data/state + +This package provides data models for the commercetools platform `State` representations. + +https://docs.commercetools.com/api/projects/states#representations + +# Install + +```bash +$ pnpm add -D @commercetools-test-data/state +``` + +# Usage + +```ts +import { + State, + StateDraft, + type TState, + type TStateDraft, +} from '@commercetools-test-data/state'; + +const state = State.random().build(); +const StateDraft = StateDraft.random().build(); +``` diff --git a/models/state/package.json b/models/state/package.json new file mode 100644 index 000000000..44389f857 --- /dev/null +++ b/models/state/package.json @@ -0,0 +1,37 @@ +{ + "name": "@commercetools-test-data/state", + "version": "6.4.1", + "description": "Data model for commercetools API State", + "bugs": "https://github.com/commercetools/test-data/issues", + "repository": { + "type": "git", + "url": "https://github.com/commercetools/test-data.git", + "directory": "models/state" + }, + "keywords": [ + "javascript", + "typescript", + "test-data" + ], + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "main": "dist/commercetools-test-data-state.cjs.js", + "module": "dist/commercetools-test-data-state.esm.js", + "files": [ + "dist", + "package.json", + "LICENSE", + "README.md" + ], + "dependencies": { + "@babel/runtime": "^7.17.9", + "@babel/runtime-corejs3": "^7.17.9", + "@commercetools-test-data/commons": "6.4.1", + "@commercetools-test-data/core": "6.4.1", + "@commercetools-test-data/utils": "6.4.1", + "@commercetools/platform-sdk": "^6.0.0", + "@faker-js/faker": "^8.0.0" + } +} diff --git a/models/state/src/constants.ts b/models/state/src/constants.ts new file mode 100644 index 000000000..9108507d5 --- /dev/null +++ b/models/state/src/constants.ts @@ -0,0 +1,6 @@ +const roles = { + ReviewIncludedInStatistics: 'ReviewIncludedInStatistics', + Return: 'Return', +} as const; + +export { roles }; diff --git a/models/state/src/types.ts b/models/state/src/types.ts new file mode 100644 index 000000000..58fdc40d6 --- /dev/null +++ b/models/state/src/types.ts @@ -0,0 +1,15 @@ +import type { State, StateDraft } from '@commercetools/platform-sdk'; +import type { TBuilder } from '@commercetools-test-data/core'; + +export type TState = State; +export type TStateDraft = StateDraft; + +export type TStateGraphql = TState & { + __typename: 'State'; +}; +export type TStateDraftGraphql = TStateDraft; + +export type TStateBuilder = TBuilder; +export type TStateDraftBuilder = TBuilder; +export type TCreateStateBuilder = () => TStateBuilder; +export type TCreateStateDraftBuilder = () => TStateDraftBuilder; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9936c6655..c89094fcc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,5 +1,9 @@ lockfileVersion: '6.0' +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + settings: autoInstallPeers: true excludeLinksFromLockfile: false @@ -887,6 +891,30 @@ importers: specifier: ^8.0.0 version: 8.0.0 + models/state: + dependencies: + '@babel/runtime': + specifier: ^7.17.9 + version: 7.23.4 + '@babel/runtime-corejs3': + specifier: ^7.17.9 + version: 7.23.4 + '@commercetools-test-data/commons': + specifier: 6.4.1 + version: 6.4.1 + '@commercetools-test-data/core': + specifier: 6.4.1 + version: 6.4.1 + '@commercetools-test-data/utils': + specifier: 6.4.1 + version: 6.4.1 + '@commercetools/platform-sdk': + specifier: ^6.0.0 + version: 6.0.0 + '@faker-js/faker': + specifier: ^8.0.0 + version: 8.3.1 + models/store: dependencies: '@babel/runtime': @@ -3097,6 +3125,21 @@ packages: - encoding dev: false + /@commercetools-test-data/commons@6.4.1: + resolution: {integrity: sha512-77+dDMcLKOUPyrFOoM9SrpptdV6D+fiqKUT4k0gZZ5lwFlOYcvZnbu6P7p1WyT7C0JxuEdq3d5PWy5wSfgIdRg==} + dependencies: + '@babel/runtime': 7.23.4 + '@babel/runtime-corejs3': 7.23.4 + '@commercetools-test-data/core': 6.4.1 + '@commercetools-test-data/utils': 6.4.1 + '@commercetools/platform-sdk': 6.0.0 + '@faker-js/faker': 8.3.1 + '@types/lodash': 4.14.202 + lodash: 4.17.21 + transitivePeerDependencies: + - encoding + dev: false + /@commercetools-test-data/core@5.11.2: resolution: {integrity: sha512-iz++zEBengERwg3REm51RsEFmiUeNPQz1K9K2kZjH1sAkFxOf1ydmpM0Tt4Awmi/OHQ+G2tGKKdJewm8AQyHNg==} dependencies: @@ -3107,6 +3150,16 @@ packages: lodash: 4.17.21 dev: false + /@commercetools-test-data/core@6.4.1: + resolution: {integrity: sha512-rQO3SYMOiVSzFxFQP/BZCG/d/VnnaDikCzqT3RCZJ7VSAGVykiiJgUUbVxDzdsNYWNl/RQGeSxs2MDRwPTK4kg==} + dependencies: + '@babel/runtime': 7.23.4 + '@babel/runtime-corejs3': 7.23.4 + '@faker-js/faker': 8.3.1 + '@types/lodash': 4.14.202 + lodash: 4.17.21 + dev: false + /@commercetools-test-data/product-variant@5.11.2: resolution: {integrity: sha512-7VT0Iez2bi8fhpqJOzVx/WfmLV+mAXlc5SOxZoTeP1JyUyY07GiujI0ctKAh8Q3/0qzVyJ08RFV1BLtYxLWeKA==} dependencies: @@ -3130,6 +3183,14 @@ packages: '@faker-js/faker': 8.3.1 dev: false + /@commercetools-test-data/utils@6.4.1: + resolution: {integrity: sha512-fkYsW3YQgA2ciqsuAObgK0yuB4H6SL5hlMqMBT6MmYpxfV+MYAaBi7JQLqXGQ/leXqd4fpAxHdZ6JRfyeolz5g==} + dependencies: + '@babel/runtime': 7.23.4 + '@babel/runtime-corejs3': 7.23.4 + '@faker-js/faker': 8.3.1 + dev: false + /@commercetools/platform-sdk@4.11.0: resolution: {integrity: sha512-ftcq6mCxzpIG9wmGpTED6KQCApk4nyURh81J3PRP3d48oCLOrkZSyzDDfvflGoVZQeIcox+YdtyqZoryFrRtmQ==} engines: {node: '>=14'} From 9daba536e5b043bf09a0ce327d8b31d11793b755 Mon Sep 17 00:00:00 2001 From: Jonathan Creasman Date: Thu, 30 Nov 2023 13:42:00 -0500 Subject: [PATCH 02/10] feat(state-model): add state draft model --- models/state/src/state-draft/builder.spec.ts | 98 +++++++++++++++++++ models/state/src/state-draft/builder.ts | 12 +++ models/state/src/state-draft/generator.ts | 20 ++++ models/state/src/state-draft/index.ts | 2 + models/state/src/state-draft/presets/index.ts | 3 + models/state/src/state-draft/transformers.ts | 16 +++ 6 files changed, 151 insertions(+) create mode 100644 models/state/src/state-draft/builder.spec.ts create mode 100644 models/state/src/state-draft/builder.ts create mode 100644 models/state/src/state-draft/generator.ts create mode 100644 models/state/src/state-draft/index.ts create mode 100644 models/state/src/state-draft/presets/index.ts create mode 100644 models/state/src/state-draft/transformers.ts diff --git a/models/state/src/state-draft/builder.spec.ts b/models/state/src/state-draft/builder.spec.ts new file mode 100644 index 000000000..b5e22beae --- /dev/null +++ b/models/state/src/state-draft/builder.spec.ts @@ -0,0 +1,98 @@ +/* eslint-disable jest/no-disabled-tests */ +/* eslint-disable jest/valid-title */ + +import { createBuilderSpec } from '@commercetools-test-data/core/test-utils'; +import type { TStateDraft, TStateDraftGraphql } from '../types'; +import * as StateDraft from './index'; +import { roles } from '../constants'; + +describe('builder', () => { + it( + ...createBuilderSpec( + 'default', + StateDraft.random(), + expect.objectContaining({ + key: expect.any(String), + type: 'orderState', + name: expect.objectContaining({ + de: expect.any(String), + en: expect.any(String), + fr: expect.any(String), + }), + description: expect.objectContaining({ + en: expect.any(String), + }), + initial: expect.any(Boolean), + roles: [roles.Return], + transitions: [], + }) + ) + ); + + it( + ...createBuilderSpec( + 'rest', + StateDraft.random(), + expect.objectContaining({ + key: expect.any(String), + type: 'orderState', + name: expect.objectContaining({ + de: expect.any(String), + en: expect.any(String), + fr: expect.any(String), + }), + description: expect.objectContaining({ + en: expect.any(String), + }), + initial: expect.any(Boolean), + roles: [roles.Return], + transitions: [], + }) + ) + ); + // Note that the StateDraft graphql is provided as scaffolding only and may not be complete at this time. + it( + ...createBuilderSpec( + 'graphql', + StateDraft.random(), + expect.objectContaining({ + key: expect.any(String), + type: 'orderState', + name: expect.arrayContaining([ + expect.objectContaining({ + locale: 'en', + value: expect.any(String), + }), + expect.objectContaining({ + locale: 'de', + value: expect.any(String), + }), + expect.objectContaining({ + locale: 'fr', + value: expect.any(String), + }), + ]), + description: expect.arrayContaining([ + expect.objectContaining({ + locale: 'en', + value: expect.any(String), + __typename: 'LocalizedString', + }), + expect.objectContaining({ + locale: 'de', + value: expect.any(String), + __typename: 'LocalizedString', + }), + expect.objectContaining({ + locale: 'fr', + value: expect.any(String), + __typename: 'LocalizedString', + }), + ]), + initial: expect.any(Boolean), + roles: [roles.Return], + transitions: [], + }) + ) + ); +}); diff --git a/models/state/src/state-draft/builder.ts b/models/state/src/state-draft/builder.ts new file mode 100644 index 000000000..13bac3ee9 --- /dev/null +++ b/models/state/src/state-draft/builder.ts @@ -0,0 +1,12 @@ +import { Builder } from '@commercetools-test-data/core'; +import type { TCreateStateDraftBuilder, TStateDraft } from '../types'; +import generator from './generator'; +import transformers from './transformers'; + +const Model: TCreateStateDraftBuilder = () => + Builder({ + generator, + transformers, + }); + +export default Model; diff --git a/models/state/src/state-draft/generator.ts b/models/state/src/state-draft/generator.ts new file mode 100644 index 000000000..ebab3378f --- /dev/null +++ b/models/state/src/state-draft/generator.ts @@ -0,0 +1,20 @@ +import { LocalizedString } from '@commercetools-test-data/commons'; +import { fake, Generator } from '@commercetools-test-data/core'; +import { roles } from '../constants'; +import { TStateDraft } from '../types'; + +// https://docs.commercetools.com/api/projects/states#statedraft + +const generator = Generator({ + fields: { + key: fake((f) => f.lorem.slug(2)), + type: 'orderState', + name: fake(() => LocalizedString.random()), + description: fake(() => LocalizedString.random()), + initial: fake((f) => f.datatype.boolean()), + roles: [roles.Return], + transitions: [], + }, +}); + +export default generator; diff --git a/models/state/src/state-draft/index.ts b/models/state/src/state-draft/index.ts new file mode 100644 index 000000000..96e2519e1 --- /dev/null +++ b/models/state/src/state-draft/index.ts @@ -0,0 +1,2 @@ +export { default as random } from './builder'; +export { default as presets } from './presets'; diff --git a/models/state/src/state-draft/presets/index.ts b/models/state/src/state-draft/presets/index.ts new file mode 100644 index 000000000..763e57fe0 --- /dev/null +++ b/models/state/src/state-draft/presets/index.ts @@ -0,0 +1,3 @@ +const presets = {}; + +export default presets; diff --git a/models/state/src/state-draft/transformers.ts b/models/state/src/state-draft/transformers.ts new file mode 100644 index 000000000..0e98a698a --- /dev/null +++ b/models/state/src/state-draft/transformers.ts @@ -0,0 +1,16 @@ +import { Transformer } from '@commercetools-test-data/core'; +import type { TStateDraft, TStateDraftGraphql } from '../types'; +const transformers = { + default: Transformer('default', { + buildFields: ['name', 'description'], + }), + rest: Transformer('rest', { + buildFields: ['name', 'description'], + }), + // Note that the StateDraft graphql is provided as scaffolding only and may not be complete at this time. + graphql: Transformer('graphql', { + buildFields: ['name', 'description'], + }), +}; + +export default transformers; From 5dd71630b6464623025fed65f9fee81c0e67eba7 Mon Sep 17 00:00:00 2001 From: Jonathan Creasman Date: Fri, 1 Dec 2023 12:09:52 -0500 Subject: [PATCH 03/10] feat(state-model): add state model --- models/state/src/builder.spec.ts | 121 ++++++++++++++++++++++++++++++ models/state/src/builder.ts | 12 +++ models/state/src/generator.ts | 33 ++++++++ models/state/src/index.ts | 6 ++ models/state/src/presets/index.ts | 3 + models/state/src/transformers.ts | 20 +++++ 6 files changed, 195 insertions(+) create mode 100644 models/state/src/builder.spec.ts create mode 100644 models/state/src/builder.ts create mode 100644 models/state/src/generator.ts create mode 100644 models/state/src/index.ts create mode 100644 models/state/src/presets/index.ts create mode 100644 models/state/src/transformers.ts diff --git a/models/state/src/builder.spec.ts b/models/state/src/builder.spec.ts new file mode 100644 index 000000000..948b47fbd --- /dev/null +++ b/models/state/src/builder.spec.ts @@ -0,0 +1,121 @@ +/* eslint-disable jest/no-disabled-tests */ +/* eslint-disable jest/valid-title */ + +import { createBuilderSpec } from '@commercetools-test-data/core/test-utils'; +import type { TState, TStateGraphql } from './types'; +import * as State from './index'; +import { roles } from './constants'; + +describe('builder', () => { + it( + ...createBuilderSpec( + 'default', + State.random(), + expect.objectContaining({ + id: expect.any(String), + version: expect.any(Number), + key: expect.any(String), + type: 'orderState', + name: expect.objectContaining({ + de: expect.any(String), + en: expect.any(String), + fr: expect.any(String), + }), + description: expect.objectContaining({ + en: expect.any(String), + }), + initial: expect.any(Boolean), + builtIn: expect.any(Boolean), + roles: [roles.Return], + transitions: [], + 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', + State.random(), + expect.objectContaining({ + id: expect.any(String), + version: expect.any(Number), + key: expect.any(String), + type: 'orderState', + name: expect.objectContaining({ + de: expect.any(String), + en: expect.any(String), + fr: expect.any(String), + }), + description: expect.objectContaining({ + en: expect.any(String), + }), + initial: expect.any(Boolean), + builtIn: expect.any(Boolean), + roles: [roles.Return], + transitions: [], + createdAt: expect.any(String), + createdBy: expect.objectContaining({ + customer: expect.objectContaining({ typeId: 'customer' }), + }), + lastModifiedAt: expect.any(String), + lastModifiedBy: expect.objectContaining({ + customer: expect.objectContaining({ typeId: 'customer' }), + }), + }) + ) + ); + // Note that the State graphql is provided as scaffolding only and may not be complete at this time. + it( + ...createBuilderSpec( + 'graphql', + State.random(), + expect.objectContaining({ + id: expect.any(String), + version: expect.any(Number), + key: expect.any(String), + type: 'orderState', + name: expect.arrayContaining([ + expect.objectContaining({ + locale: 'en', + value: expect.any(String), + }), + expect.objectContaining({ + locale: 'de', + value: expect.any(String), + }), + expect.objectContaining({ + locale: 'fr', + value: expect.any(String), + }), + ]), + description: expect.arrayContaining([ + expect.objectContaining({ + locale: 'en', + value: expect.any(String), + }), + ]), + initial: expect.any(Boolean), + builtIn: expect.any(Boolean), + roles: [roles.Return], + transitions: [], + 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' }), + }), + }) + ) + ); +}); diff --git a/models/state/src/builder.ts b/models/state/src/builder.ts new file mode 100644 index 000000000..a590781ac --- /dev/null +++ b/models/state/src/builder.ts @@ -0,0 +1,12 @@ +import { Builder } from '@commercetools-test-data/core'; +import generator from './generator'; +import transformers from './transformers'; +import type { TCreateStateBuilder, TState } from './types'; + +const Model: TCreateStateBuilder = () => + Builder({ + generator, + transformers, + }); + +export default Model; diff --git a/models/state/src/generator.ts b/models/state/src/generator.ts new file mode 100644 index 000000000..e07184d9e --- /dev/null +++ b/models/state/src/generator.ts @@ -0,0 +1,33 @@ +import { + ClientLogging, + LocalizedString, +} from '@commercetools-test-data/commons'; +import { sequence, fake, Generator } from '@commercetools-test-data/core'; +import { createRelatedDates } from '@commercetools-test-data/utils'; +import { roles } from './constants'; +import { TState } from './types'; + +const [getOlderDate, getNewerDate] = createRelatedDates(); + +// https://docs.commercetools.com/api/projects/States#States + +const generator = Generator({ + fields: { + id: fake((f) => f.string.uuid()), + version: sequence(), + key: fake((f) => f.lorem.slug(2)), + type: 'orderState', + name: fake(() => LocalizedString.random()), + description: fake(() => LocalizedString.random()), + initial: fake((f) => f.datatype.boolean()), + builtIn: fake((f) => f.datatype.boolean()), + roles: [roles.Return], + transitions: [], + createdAt: fake(getOlderDate), + createdBy: fake(() => ClientLogging.random()), + lastModifiedAt: fake(getNewerDate), + lastModifiedBy: fake(() => ClientLogging.random()), + }, +}); + +export default generator; diff --git a/models/state/src/index.ts b/models/state/src/index.ts new file mode 100644 index 000000000..741905d5f --- /dev/null +++ b/models/state/src/index.ts @@ -0,0 +1,6 @@ +export * as StateDraft from './state-draft'; +export * as State from '.'; + +export { default as random } from './builder'; +export { default as presets } from './presets'; +export * from './types'; diff --git a/models/state/src/presets/index.ts b/models/state/src/presets/index.ts new file mode 100644 index 000000000..763e57fe0 --- /dev/null +++ b/models/state/src/presets/index.ts @@ -0,0 +1,3 @@ +const presets = {}; + +export default presets; diff --git a/models/state/src/transformers.ts b/models/state/src/transformers.ts new file mode 100644 index 000000000..e20642c9c --- /dev/null +++ b/models/state/src/transformers.ts @@ -0,0 +1,20 @@ +import { Transformer } from '@commercetools-test-data/core'; +import type { TState, TStateGraphql } from './types'; + +const transformers = { + default: Transformer('default', { + buildFields: ['name', 'description', 'createdBy', 'lastModifiedBy'], + }), + rest: Transformer('rest', { + buildFields: ['name', 'description', 'createdBy', 'lastModifiedBy'], + }), + // Note that the State graphql is provided as scaffolding only and may not be complete at this time. + graphql: Transformer('graphql', { + buildFields: ['name', 'description', 'createdBy', 'lastModifiedBy'], + addFields: () => ({ + __typename: 'State', + }), + }), +}; + +export default transformers; From 33280292447c344c3d5c46b3fc155ccbc7f65731 Mon Sep 17 00:00:00 2001 From: Jonathan Creasman Date: Mon, 4 Dec 2023 12:27:59 -0500 Subject: [PATCH 04/10] feat(state-model): update type to LineItemState --- models/state/src/builder.spec.ts | 6 +++--- models/state/src/generator.ts | 2 +- models/state/src/state-draft/builder.spec.ts | 6 +++--- models/state/src/state-draft/generator.ts | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/models/state/src/builder.spec.ts b/models/state/src/builder.spec.ts index 948b47fbd..98db846be 100644 --- a/models/state/src/builder.spec.ts +++ b/models/state/src/builder.spec.ts @@ -15,7 +15,7 @@ describe('builder', () => { id: expect.any(String), version: expect.any(Number), key: expect.any(String), - type: 'orderState', + type: 'LineItemState', name: expect.objectContaining({ de: expect.any(String), en: expect.any(String), @@ -47,7 +47,7 @@ describe('builder', () => { id: expect.any(String), version: expect.any(Number), key: expect.any(String), - type: 'orderState', + type: 'LineItemState', name: expect.objectContaining({ de: expect.any(String), en: expect.any(String), @@ -80,7 +80,7 @@ describe('builder', () => { id: expect.any(String), version: expect.any(Number), key: expect.any(String), - type: 'orderState', + type: 'LineItemState', name: expect.arrayContaining([ expect.objectContaining({ locale: 'en', diff --git a/models/state/src/generator.ts b/models/state/src/generator.ts index e07184d9e..01076e662 100644 --- a/models/state/src/generator.ts +++ b/models/state/src/generator.ts @@ -16,7 +16,7 @@ const generator = Generator({ id: fake((f) => f.string.uuid()), version: sequence(), key: fake((f) => f.lorem.slug(2)), - type: 'orderState', + type: 'LineItemState', name: fake(() => LocalizedString.random()), description: fake(() => LocalizedString.random()), initial: fake((f) => f.datatype.boolean()), diff --git a/models/state/src/state-draft/builder.spec.ts b/models/state/src/state-draft/builder.spec.ts index b5e22beae..fa7c26590 100644 --- a/models/state/src/state-draft/builder.spec.ts +++ b/models/state/src/state-draft/builder.spec.ts @@ -13,7 +13,7 @@ describe('builder', () => { StateDraft.random(), expect.objectContaining({ key: expect.any(String), - type: 'orderState', + type: 'LineItemState', name: expect.objectContaining({ de: expect.any(String), en: expect.any(String), @@ -35,7 +35,7 @@ describe('builder', () => { StateDraft.random(), expect.objectContaining({ key: expect.any(String), - type: 'orderState', + type: 'LineItemState', name: expect.objectContaining({ de: expect.any(String), en: expect.any(String), @@ -57,7 +57,7 @@ describe('builder', () => { StateDraft.random(), expect.objectContaining({ key: expect.any(String), - type: 'orderState', + type: 'LineItemState', name: expect.arrayContaining([ expect.objectContaining({ locale: 'en', diff --git a/models/state/src/state-draft/generator.ts b/models/state/src/state-draft/generator.ts index ebab3378f..33e401d07 100644 --- a/models/state/src/state-draft/generator.ts +++ b/models/state/src/state-draft/generator.ts @@ -8,7 +8,7 @@ import { TStateDraft } from '../types'; const generator = Generator({ fields: { key: fake((f) => f.lorem.slug(2)), - type: 'orderState', + type: 'LineItemState', name: fake(() => LocalizedString.random()), description: fake(() => LocalizedString.random()), initial: fake((f) => f.datatype.boolean()), From b295222c913f58557b3ea7c3b388169841527336 Mon Sep 17 00:00:00 2001 From: Jonathan Creasman Date: Mon, 4 Dec 2023 15:27:42 -0500 Subject: [PATCH 05/10] feat(state-model): update transitions key --- models/state/src/builder.spec.ts | 6 ++--- models/state/src/generator.ts | 2 +- models/state/src/state-draft/builder.spec.ts | 6 ++--- models/state/src/state-draft/generator.ts | 2 +- models/state/src/state-draft/transformers.ts | 6 ++--- models/state/src/transformers.ts | 24 +++++++++++++++++--- 6 files changed, 32 insertions(+), 14 deletions(-) diff --git a/models/state/src/builder.spec.ts b/models/state/src/builder.spec.ts index 98db846be..b4cab2336 100644 --- a/models/state/src/builder.spec.ts +++ b/models/state/src/builder.spec.ts @@ -27,7 +27,7 @@ describe('builder', () => { initial: expect.any(Boolean), builtIn: expect.any(Boolean), roles: [roles.Return], - transitions: [], + transitions: null, createdAt: expect.any(String), createdBy: expect.objectContaining({ customer: expect.objectContaining({ typeId: 'customer' }), @@ -59,7 +59,7 @@ describe('builder', () => { initial: expect.any(Boolean), builtIn: expect.any(Boolean), roles: [roles.Return], - transitions: [], + transitions: null, createdAt: expect.any(String), createdBy: expect.objectContaining({ customer: expect.objectContaining({ typeId: 'customer' }), @@ -104,7 +104,7 @@ describe('builder', () => { initial: expect.any(Boolean), builtIn: expect.any(Boolean), roles: [roles.Return], - transitions: [], + transitions: null, createdAt: expect.any(String), createdBy: expect.objectContaining({ customerRef: expect.objectContaining({ typeId: 'customer' }), diff --git a/models/state/src/generator.ts b/models/state/src/generator.ts index 01076e662..9fa639d2b 100644 --- a/models/state/src/generator.ts +++ b/models/state/src/generator.ts @@ -22,7 +22,7 @@ const generator = Generator({ initial: fake((f) => f.datatype.boolean()), builtIn: fake((f) => f.datatype.boolean()), roles: [roles.Return], - transitions: [], + transitions: null, createdAt: fake(getOlderDate), createdBy: fake(() => ClientLogging.random()), lastModifiedAt: fake(getNewerDate), diff --git a/models/state/src/state-draft/builder.spec.ts b/models/state/src/state-draft/builder.spec.ts index fa7c26590..69e660da6 100644 --- a/models/state/src/state-draft/builder.spec.ts +++ b/models/state/src/state-draft/builder.spec.ts @@ -24,7 +24,7 @@ describe('builder', () => { }), initial: expect.any(Boolean), roles: [roles.Return], - transitions: [], + transitions: null, }) ) ); @@ -46,7 +46,7 @@ describe('builder', () => { }), initial: expect.any(Boolean), roles: [roles.Return], - transitions: [], + transitions: null, }) ) ); @@ -91,7 +91,7 @@ describe('builder', () => { ]), initial: expect.any(Boolean), roles: [roles.Return], - transitions: [], + transitions: null, }) ) ); diff --git a/models/state/src/state-draft/generator.ts b/models/state/src/state-draft/generator.ts index 33e401d07..b88651707 100644 --- a/models/state/src/state-draft/generator.ts +++ b/models/state/src/state-draft/generator.ts @@ -13,7 +13,7 @@ const generator = Generator({ description: fake(() => LocalizedString.random()), initial: fake((f) => f.datatype.boolean()), roles: [roles.Return], - transitions: [], + transitions: null, }, }); diff --git a/models/state/src/state-draft/transformers.ts b/models/state/src/state-draft/transformers.ts index 0e98a698a..b08fcfb5a 100644 --- a/models/state/src/state-draft/transformers.ts +++ b/models/state/src/state-draft/transformers.ts @@ -2,14 +2,14 @@ import { Transformer } from '@commercetools-test-data/core'; import type { TStateDraft, TStateDraftGraphql } from '../types'; const transformers = { default: Transformer('default', { - buildFields: ['name', 'description'], + buildFields: ['name', 'description', 'transitions'], }), rest: Transformer('rest', { - buildFields: ['name', 'description'], + buildFields: ['name', 'description', 'transitions'], }), // Note that the StateDraft graphql is provided as scaffolding only and may not be complete at this time. graphql: Transformer('graphql', { - buildFields: ['name', 'description'], + buildFields: ['name', 'description', 'transitions'], }), }; diff --git a/models/state/src/transformers.ts b/models/state/src/transformers.ts index e20642c9c..a2ce39a8e 100644 --- a/models/state/src/transformers.ts +++ b/models/state/src/transformers.ts @@ -3,14 +3,32 @@ import type { TState, TStateGraphql } from './types'; const transformers = { default: Transformer('default', { - buildFields: ['name', 'description', 'createdBy', 'lastModifiedBy'], + buildFields: [ + 'name', + 'description', + 'createdBy', + 'lastModifiedBy', + 'transitions', + ], }), rest: Transformer('rest', { - buildFields: ['name', 'description', 'createdBy', 'lastModifiedBy'], + buildFields: [ + 'name', + 'description', + 'createdBy', + 'lastModifiedBy', + 'transitions', + ], }), // Note that the State graphql is provided as scaffolding only and may not be complete at this time. graphql: Transformer('graphql', { - buildFields: ['name', 'description', 'createdBy', 'lastModifiedBy'], + buildFields: [ + 'name', + 'description', + 'createdBy', + 'lastModifiedBy', + 'transitions', + ], addFields: () => ({ __typename: 'State', }), From ca5b760763c88c0425b9da4fcd3c66b074155a6b Mon Sep 17 00:00:00 2001 From: Jonathan Creasman Date: Tue, 5 Dec 2023 14:25:24 -0500 Subject: [PATCH 06/10] feat(state-model): update key value for type --- models/state/src/builder.spec.ts | 6 +++--- models/state/src/constants.ts | 13 ++++++++++++- models/state/src/generator.ts | 11 ++++++++--- models/state/src/state-draft/builder.spec.ts | 6 +++--- models/state/src/state-draft/generator.ts | 6 +++--- 5 files changed, 29 insertions(+), 13 deletions(-) diff --git a/models/state/src/builder.spec.ts b/models/state/src/builder.spec.ts index b4cab2336..36ff7b97b 100644 --- a/models/state/src/builder.spec.ts +++ b/models/state/src/builder.spec.ts @@ -15,7 +15,7 @@ describe('builder', () => { id: expect.any(String), version: expect.any(Number), key: expect.any(String), - type: 'LineItemState', + type: expect.any(String), name: expect.objectContaining({ de: expect.any(String), en: expect.any(String), @@ -47,7 +47,7 @@ describe('builder', () => { id: expect.any(String), version: expect.any(Number), key: expect.any(String), - type: 'LineItemState', + type: expect.any(String), name: expect.objectContaining({ de: expect.any(String), en: expect.any(String), @@ -80,7 +80,7 @@ describe('builder', () => { id: expect.any(String), version: expect.any(Number), key: expect.any(String), - type: 'LineItemState', + type: expect.any(String), name: expect.arrayContaining([ expect.objectContaining({ locale: 'en', diff --git a/models/state/src/constants.ts b/models/state/src/constants.ts index 9108507d5..fe735c99c 100644 --- a/models/state/src/constants.ts +++ b/models/state/src/constants.ts @@ -3,4 +3,15 @@ const roles = { Return: 'Return', } as const; -export { roles }; +const type = { + OrderState: 'OrderState', + LineItemState: 'LineItemState', + ProductState: 'ProductState', + ReviewState: 'ReviewState', + PaymentState: 'PaymentState', + QuoteRequestState: 'QuoteRequestState', + StagedQuoteState: 'StagedQuoteState', + QuoteState: 'QuoteState', +} as const; + +export { roles, type }; diff --git a/models/state/src/generator.ts b/models/state/src/generator.ts index 9fa639d2b..bc43f1f60 100644 --- a/models/state/src/generator.ts +++ b/models/state/src/generator.ts @@ -2,9 +2,14 @@ import { ClientLogging, LocalizedString, } from '@commercetools-test-data/commons'; -import { sequence, fake, Generator } from '@commercetools-test-data/core'; +import { + sequence, + fake, + Generator, + oneOf, +} from '@commercetools-test-data/core'; import { createRelatedDates } from '@commercetools-test-data/utils'; -import { roles } from './constants'; +import { roles, type } from './constants'; import { TState } from './types'; const [getOlderDate, getNewerDate] = createRelatedDates(); @@ -16,7 +21,7 @@ const generator = Generator({ id: fake((f) => f.string.uuid()), version: sequence(), key: fake((f) => f.lorem.slug(2)), - type: 'LineItemState', + type: oneOf(...Object.values(type)), name: fake(() => LocalizedString.random()), description: fake(() => LocalizedString.random()), initial: fake((f) => f.datatype.boolean()), diff --git a/models/state/src/state-draft/builder.spec.ts b/models/state/src/state-draft/builder.spec.ts index 69e660da6..9f0bf3c03 100644 --- a/models/state/src/state-draft/builder.spec.ts +++ b/models/state/src/state-draft/builder.spec.ts @@ -13,7 +13,7 @@ describe('builder', () => { StateDraft.random(), expect.objectContaining({ key: expect.any(String), - type: 'LineItemState', + type: expect.any(String), name: expect.objectContaining({ de: expect.any(String), en: expect.any(String), @@ -35,7 +35,7 @@ describe('builder', () => { StateDraft.random(), expect.objectContaining({ key: expect.any(String), - type: 'LineItemState', + type: expect.any(String), name: expect.objectContaining({ de: expect.any(String), en: expect.any(String), @@ -57,7 +57,7 @@ describe('builder', () => { StateDraft.random(), expect.objectContaining({ key: expect.any(String), - type: 'LineItemState', + type: expect.any(String), name: expect.arrayContaining([ expect.objectContaining({ locale: 'en', diff --git a/models/state/src/state-draft/generator.ts b/models/state/src/state-draft/generator.ts index b88651707..d88c16137 100644 --- a/models/state/src/state-draft/generator.ts +++ b/models/state/src/state-draft/generator.ts @@ -1,6 +1,6 @@ import { LocalizedString } from '@commercetools-test-data/commons'; -import { fake, Generator } from '@commercetools-test-data/core'; -import { roles } from '../constants'; +import { fake, Generator, oneOf } from '@commercetools-test-data/core'; +import { roles, type } from '../constants'; import { TStateDraft } from '../types'; // https://docs.commercetools.com/api/projects/states#statedraft @@ -8,7 +8,7 @@ import { TStateDraft } from '../types'; const generator = Generator({ fields: { key: fake((f) => f.lorem.slug(2)), - type: 'LineItemState', + type: oneOf(...Object.values(type)), name: fake(() => LocalizedString.random()), description: fake(() => LocalizedString.random()), initial: fake((f) => f.datatype.boolean()), From f26352590ac083606c75a726139084c65e71a29d Mon Sep 17 00:00:00 2001 From: Jonathan Creasman Date: Tue, 5 Dec 2023 16:26:28 -0500 Subject: [PATCH 07/10] feat(state-model): add preset --- models/state/src/index.ts | 2 ++ models/state/src/state-draft/index.ts | 2 +- .../src/state-draft/presets/change-history-data/index.ts | 7 +++++++ .../change-history-data/with-type-line-item-state.ts | 5 +++++ models/state/src/state-draft/presets/index.ts | 4 +++- 5 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 models/state/src/state-draft/presets/change-history-data/index.ts create mode 100644 models/state/src/state-draft/presets/change-history-data/with-type-line-item-state.ts diff --git a/models/state/src/index.ts b/models/state/src/index.ts index 741905d5f..8e91d8439 100644 --- a/models/state/src/index.ts +++ b/models/state/src/index.ts @@ -3,4 +3,6 @@ export * as State from '.'; export { default as random } from './builder'; export { default as presets } from './presets'; +export { default as draftPresets } from './state-draft/presets/change-history-data'; export * from './types'; +export * as constants from './constants'; diff --git a/models/state/src/state-draft/index.ts b/models/state/src/state-draft/index.ts index 96e2519e1..4cfba5b7f 100644 --- a/models/state/src/state-draft/index.ts +++ b/models/state/src/state-draft/index.ts @@ -1,2 +1,2 @@ export { default as random } from './builder'; -export { default as presets } from './presets'; +export { default as presets } from './presets/change-history-data'; diff --git a/models/state/src/state-draft/presets/change-history-data/index.ts b/models/state/src/state-draft/presets/change-history-data/index.ts new file mode 100644 index 000000000..7dcf53ab5 --- /dev/null +++ b/models/state/src/state-draft/presets/change-history-data/index.ts @@ -0,0 +1,7 @@ +import withTypeLineItemState from './with-type-line-item-state'; + +const presets = { + withTypeLineItemState, +}; + +export default presets; diff --git a/models/state/src/state-draft/presets/change-history-data/with-type-line-item-state.ts b/models/state/src/state-draft/presets/change-history-data/with-type-line-item-state.ts new file mode 100644 index 000000000..ff15c65e0 --- /dev/null +++ b/models/state/src/state-draft/presets/change-history-data/with-type-line-item-state.ts @@ -0,0 +1,5 @@ +import State from '../../builder'; + +const withTypeLineItemState = () => State().type('LineItemState'); + +export default withTypeLineItemState; diff --git a/models/state/src/state-draft/presets/index.ts b/models/state/src/state-draft/presets/index.ts index 763e57fe0..5346f1f1b 100644 --- a/models/state/src/state-draft/presets/index.ts +++ b/models/state/src/state-draft/presets/index.ts @@ -1,3 +1,5 @@ -const presets = {}; +import changeHistoryData from './change-history-data'; + +const presets = { changeHistoryData }; export default presets; From ed4bfd6f820877d448b02a15687474c072fd78ec Mon Sep 17 00:00:00 2001 From: Jonathan Creasman Date: Wed, 6 Dec 2023 13:02:52 -0500 Subject: [PATCH 08/10] feat(state-model): add preset test --- .../with-type-line-item-state.spec.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 models/state/src/state-draft/presets/change-history-data/with-type-line-item-state.spec.ts diff --git a/models/state/src/state-draft/presets/change-history-data/with-type-line-item-state.spec.ts b/models/state/src/state-draft/presets/change-history-data/with-type-line-item-state.spec.ts new file mode 100644 index 000000000..1eb03b7e1 --- /dev/null +++ b/models/state/src/state-draft/presets/change-history-data/with-type-line-item-state.spec.ts @@ -0,0 +1,14 @@ +import type { TState } from '../../../types'; +import withTypeLineItemState from './with-type-line-item-state'; + +describe('State with type of LineItemState', () => { + it('should return a State containing a type of LineItemState', () => { + const typeLineItemState = withTypeLineItemState().build(); + + expect(typeLineItemState).toEqual( + expect.objectContaining({ + type: 'LineItemState', + }) + ); + }); +}); From de6fb224bfa4a3d2b550bc1825a4f6eb02f8fb41 Mon Sep 17 00:00:00 2001 From: Jonathan Creasman Date: Wed, 6 Dec 2023 16:22:04 -0500 Subject: [PATCH 09/10] feat(state-model): update preset --- models/state/src/builder.spec.ts | 6 +++--- models/state/src/generator.ts | 2 +- models/state/src/index.ts | 1 - models/state/src/state-draft/builder.spec.ts | 6 +++--- models/state/src/state-draft/generator.ts | 2 +- .../change-history-data/with-type-line-item-state.spec.ts | 5 +++-- .../change-history-data/with-type-line-item-state.ts | 4 +++- 7 files changed, 14 insertions(+), 12 deletions(-) diff --git a/models/state/src/builder.spec.ts b/models/state/src/builder.spec.ts index 36ff7b97b..45329529e 100644 --- a/models/state/src/builder.spec.ts +++ b/models/state/src/builder.spec.ts @@ -26,7 +26,7 @@ describe('builder', () => { }), initial: expect.any(Boolean), builtIn: expect.any(Boolean), - roles: [roles.Return], + roles: expect.any(Array), transitions: null, createdAt: expect.any(String), createdBy: expect.objectContaining({ @@ -58,7 +58,7 @@ describe('builder', () => { }), initial: expect.any(Boolean), builtIn: expect.any(Boolean), - roles: [roles.Return], + roles: expect.any(Array), transitions: null, createdAt: expect.any(String), createdBy: expect.objectContaining({ @@ -103,7 +103,7 @@ describe('builder', () => { ]), initial: expect.any(Boolean), builtIn: expect.any(Boolean), - roles: [roles.Return], + roles: expect.any(Array), transitions: null, createdAt: expect.any(String), createdBy: expect.objectContaining({ diff --git a/models/state/src/generator.ts b/models/state/src/generator.ts index bc43f1f60..25dd332c8 100644 --- a/models/state/src/generator.ts +++ b/models/state/src/generator.ts @@ -26,7 +26,7 @@ const generator = Generator({ description: fake(() => LocalizedString.random()), initial: fake((f) => f.datatype.boolean()), builtIn: fake((f) => f.datatype.boolean()), - roles: [roles.Return], + roles: [oneOf(...Object.values(roles))], transitions: null, createdAt: fake(getOlderDate), createdBy: fake(() => ClientLogging.random()), diff --git a/models/state/src/index.ts b/models/state/src/index.ts index 8e91d8439..f88b31ee1 100644 --- a/models/state/src/index.ts +++ b/models/state/src/index.ts @@ -3,6 +3,5 @@ export * as State from '.'; export { default as random } from './builder'; export { default as presets } from './presets'; -export { default as draftPresets } from './state-draft/presets/change-history-data'; export * from './types'; export * as constants from './constants'; diff --git a/models/state/src/state-draft/builder.spec.ts b/models/state/src/state-draft/builder.spec.ts index 9f0bf3c03..91c90b486 100644 --- a/models/state/src/state-draft/builder.spec.ts +++ b/models/state/src/state-draft/builder.spec.ts @@ -23,7 +23,7 @@ describe('builder', () => { en: expect.any(String), }), initial: expect.any(Boolean), - roles: [roles.Return], + roles: expect.any(Array), transitions: null, }) ) @@ -45,7 +45,7 @@ describe('builder', () => { en: expect.any(String), }), initial: expect.any(Boolean), - roles: [roles.Return], + roles: expect.any(Array), transitions: null, }) ) @@ -90,7 +90,7 @@ describe('builder', () => { }), ]), initial: expect.any(Boolean), - roles: [roles.Return], + roles: expect.any(Array), transitions: null, }) ) diff --git a/models/state/src/state-draft/generator.ts b/models/state/src/state-draft/generator.ts index d88c16137..0ff2009ca 100644 --- a/models/state/src/state-draft/generator.ts +++ b/models/state/src/state-draft/generator.ts @@ -12,7 +12,7 @@ const generator = Generator({ name: fake(() => LocalizedString.random()), description: fake(() => LocalizedString.random()), initial: fake((f) => f.datatype.boolean()), - roles: [roles.Return], + roles: [oneOf(...Object.values(roles))], transitions: null, }, }); diff --git a/models/state/src/state-draft/presets/change-history-data/with-type-line-item-state.spec.ts b/models/state/src/state-draft/presets/change-history-data/with-type-line-item-state.spec.ts index 1eb03b7e1..da46c14ce 100644 --- a/models/state/src/state-draft/presets/change-history-data/with-type-line-item-state.spec.ts +++ b/models/state/src/state-draft/presets/change-history-data/with-type-line-item-state.spec.ts @@ -1,13 +1,14 @@ import type { TState } from '../../../types'; import withTypeLineItemState from './with-type-line-item-state'; -describe('State with type of LineItemState', () => { - it('should return a State containing a type of LineItemState', () => { +describe('State with type of LineItemState and role of Return', () => { + it('should return a State containing a type of LineItemState and role of Return', () => { const typeLineItemState = withTypeLineItemState().build(); expect(typeLineItemState).toEqual( expect.objectContaining({ type: 'LineItemState', + roles: ['Return'], }) ); }); diff --git a/models/state/src/state-draft/presets/change-history-data/with-type-line-item-state.ts b/models/state/src/state-draft/presets/change-history-data/with-type-line-item-state.ts index ff15c65e0..c0b4f3155 100644 --- a/models/state/src/state-draft/presets/change-history-data/with-type-line-item-state.ts +++ b/models/state/src/state-draft/presets/change-history-data/with-type-line-item-state.ts @@ -1,5 +1,7 @@ import State from '../../builder'; -const withTypeLineItemState = () => State().type('LineItemState'); +//`LineItemState` requires a role of `Return` +const withTypeLineItemState = () => + State().type('LineItemState').roles(['Return']); export default withTypeLineItemState; From fec17655f7332a56abfb2e0253f1b75cf47bbbab Mon Sep 17 00:00:00 2001 From: Jonathan Creasman Date: Wed, 6 Dec 2023 16:31:35 -0500 Subject: [PATCH 10/10] feat(state-model): update graphql in transformors --- models/state/src/transformers.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/models/state/src/transformers.ts b/models/state/src/transformers.ts index a2ce39a8e..030c869fc 100644 --- a/models/state/src/transformers.ts +++ b/models/state/src/transformers.ts @@ -1,3 +1,4 @@ +import { LocalizedString } from '@commercetools-test-data/commons'; import { Transformer } from '@commercetools-test-data/core'; import type { TState, TStateGraphql } from './types'; @@ -29,9 +30,18 @@ const transformers = { 'lastModifiedBy', 'transitions', ], - addFields: () => ({ - __typename: 'State', - }), + addFields: ({ fields }) => { + const nameAllLocales = LocalizedString.toLocalizedField(fields.name); + const descriptionAllLocales = LocalizedString.toLocalizedField( + fields.description + ); + + return { + __typename: 'State', + nameAllLocales, + descriptionAllLocales, + }; + }, }), };