Skip to content

Commit

Permalink
chore(business-unit): graphql transformers for Company and Division m…
Browse files Browse the repository at this point in the history
…odels (#439)

* chore(business-unit): add proper graphql transformer for Company and Division models

* fix(business-unit): fix types

* fix(business-unit): fix types and tests

* chore(business-unit): split final types into company and division

* chore(business-unit): refactor draft types
  • Loading branch information
ChristianMoll authored Dec 15, 2023
1 parent da33775 commit 291a0ea
Show file tree
Hide file tree
Showing 18 changed files with 283 additions and 101 deletions.
5 changes: 5 additions & 0 deletions .changeset/popular-falcons-share.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@commercetools-test-data/business-unit': minor
---

Replaced graphql scaffolding with real implementation for Company and Division
58 changes: 54 additions & 4 deletions models/business-unit/src/company/builder.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
/* eslint-disable jest/valid-title */

import { createBuilderSpec } from '@commercetools-test-data/core/test-utils';
import type { TBusinessUnit } from '../types';
import type { TCompany, TCompanyGraphql } from '../types';
import * as BusinessUnit from './index';

describe('builder', () => {
it(
...createBuilderSpec<TBusinessUnit, TBusinessUnit>(
...createBuilderSpec<TCompany, TCompany>(
'default',
BusinessUnit.random(),
expect.objectContaining({
Expand Down Expand Up @@ -43,7 +43,7 @@ describe('builder', () => {
);

it(
...createBuilderSpec<TBusinessUnit, TBusinessUnit>(
...createBuilderSpec<TCompany, TCompany>(
'rest',
BusinessUnit.random(),
expect.objectContaining({
Expand Down Expand Up @@ -77,5 +77,55 @@ describe('builder', () => {
})
)
);
// test for the graphql shape not added at this time

it(
...createBuilderSpec<TCompany, TCompanyGraphql>(
'graphql',
BusinessUnit.random(),
expect.objectContaining({
id: expect.any(String),
version: expect.any(Number),
key: expect.any(String),
status: expect.any(String),
storesRef: expect.objectContaining({
typeId: 'store',
}),
stores: [],
storeMode: expect.any(String),
unitType: 'Company',
name: expect.any(String),
contactEmail: expect.any(String),
addresses: expect.any(Array),
shippingAddressIds: [],
defaultShippingAddressId: null,
billingAddressIds: [],
defaultBillingAddressId: null,
associateMode: expect.any(String),
associates: expect.any(Array),
inheritedAssociates: expect.any(Array),
parentUnitRef: null,
parentUnit: null,
topLevelUnitRef: expect.objectContaining({
typeId: 'business-unit',
}),
topLevelUnit: expect.objectContaining({
__typename: 'BusinessUnit',
}),
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' }),
}),
ancestors: expect.any(Array),
inheritedStores: null,
__typename: 'BusinessUnit',
})
)
);
});
6 changes: 3 additions & 3 deletions models/business-unit/src/company/builder.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { Builder } from '@commercetools-test-data/core';
import type { TCreateBusinessUnitBuilder, TBusinessUnit } from '../types';
import type { TCreateCompanyBuilder, TCompany } from '../types';
import generator from './generator';
import transformers from './transformers';

const Model: TCreateBusinessUnitBuilder = () =>
Builder<TBusinessUnit>({
const Model: TCreateCompanyBuilder = () =>
Builder<TCompany>({
generator,
transformers,
});
Expand Down
12 changes: 6 additions & 6 deletions models/business-unit/src/company/company-draft/builder.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@
/* eslint-disable jest/valid-title */

import { createBuilderSpec } from '@commercetools-test-data/core/test-utils';
import type { TBusinessUnitDraft } from '../../types';
import * as BusinessUnitDraft from './index';
import type { TCompanyDraft } from '../../types';
import * as CompanyDraft from './index';

describe('builder', () => {
it(
...createBuilderSpec<TBusinessUnitDraft, TBusinessUnitDraft>(
...createBuilderSpec<TCompanyDraft, TCompanyDraft>(
'default',
BusinessUnitDraft.random(),
CompanyDraft.random(),
expect.objectContaining({
key: expect.any(String),
status: expect.any(String),
Expand All @@ -31,9 +31,9 @@ describe('builder', () => {
);

it(
...createBuilderSpec<TBusinessUnitDraft, TBusinessUnitDraft>(
...createBuilderSpec<TCompanyDraft, TCompanyDraft>(
'rest',
BusinessUnitDraft.random(),
CompanyDraft.random(),
expect.objectContaining({
key: expect.any(String),
status: expect.any(String),
Expand Down
9 changes: 3 additions & 6 deletions models/business-unit/src/company/company-draft/builder.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
import { Builder } from '@commercetools-test-data/core';
import type {
TCreateBusinessUnitDraftBuilder,
TBusinessUnitDraft,
} from '../../types';
import type { TCreateCompanyDraftBuilder, TCompanyDraft } from '../../types';
import generator from './generator';
import transformers from './transformers';

const Model: TCreateBusinessUnitDraftBuilder = () =>
Builder<TBusinessUnitDraft>({
const Model: TCreateCompanyDraftBuilder = () =>
Builder<TCompanyDraft>({
generator,
transformers,
});
Expand Down
4 changes: 2 additions & 2 deletions models/business-unit/src/company/company-draft/generator.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { AddressDraft } from '@commercetools-test-data/commons';
import { fake, Generator, oneOf } from '@commercetools-test-data/core';
import { status, storeMode, unitType, associateMode } from '../../constants';
import type { TBusinessUnitDraft } from '../../types';
import type { TCompanyDraft } from '../../types';

// https://docs.commercetools.com/api/projects/business-units#companydraft

const generator = Generator<TBusinessUnitDraft>({
const generator = Generator<TCompanyDraft>({
fields: {
key: fake((f) => f.lorem.slug(2)),
status: oneOf(...Object.values(status)),
Expand Down
16 changes: 6 additions & 10 deletions models/business-unit/src/company/company-draft/transformers.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,17 @@
import { Transformer } from '@commercetools-test-data/core';
import type {
TBusinessUnitDraft,
TBusinessUnitDraftGraphql,
} from '../../types';
import type { TCompanyDraft, TCompanyDraftGraphql } from '../../types';

const transformers = {
default: Transformer<TBusinessUnitDraft, TBusinessUnitDraft>('default', {
default: Transformer<TCompanyDraft, TCompanyDraft>('default', {
buildFields: ['addresses'],
}),
rest: Transformer<TBusinessUnitDraft, TBusinessUnitDraft>('rest', {
rest: Transformer<TCompanyDraft, TCompanyDraft>('rest', {
buildFields: ['addresses'],
}),
//only scaffolding provided at this time
graphql: Transformer<TBusinessUnitDraft, TBusinessUnitDraftGraphql>(
'graphql',
{ buildFields: [] }
),
graphql: Transformer<TCompanyDraft, TCompanyDraftGraphql>('graphql', {
buildFields: [],
}),
};

export default transformers;
5 changes: 3 additions & 2 deletions models/business-unit/src/company/generator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@ import {
} from '@commercetools-test-data/core';
import { createRelatedDates } from '@commercetools-test-data/utils';
import { status, storeMode, unitType, associateMode } from '../constants';
import type { TBusinessUnit } from '../types';
import type { TCompany } from '../types';

const [getOlderDate, getNewerDate] = createRelatedDates();

// https://docs.commercetools.com/api/projects/business-units#company

const generator = Generator<TBusinessUnit>({
const generator = Generator<TCompany>({
fields: {
id: fake((f) => f.string.uuid()),
version: sequence(),
Expand All @@ -36,6 +36,7 @@ const generator = Generator<TBusinessUnit>({
associateMode: associateMode.Explicit,
associates: [],
inheritedAssociates: [],
parentUnit: null,
topLevelUnit: KeyReference.random().typeId('business-unit'),
custom: null,
createdAt: fake(getOlderDate),
Expand Down
45 changes: 33 additions & 12 deletions models/business-unit/src/company/transformers.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,41 @@
import { KeyReference } from '@commercetools-test-data/commons';
import { Transformer } from '@commercetools-test-data/core';
import type { TBusinessUnit, TBusinessUnitGraphql } from '../types';
import type { TCompany, TCompanyGraphql } from '../types';

const transformers = {
default: Transformer<TBusinessUnit, TBusinessUnit>('default', {
buildFields: ['addresses', 'createdBy', 'lastModifiedBy'],
default: Transformer<TCompany, TCompany>('default', {
buildFields: ['addresses', 'createdBy', 'lastModifiedBy', 'topLevelUnit'],
}),
rest: Transformer<TBusinessUnit, TBusinessUnit>('rest', {
buildFields: ['addresses', 'createdBy', 'lastModifiedBy'],
rest: Transformer<TCompany, TCompany>('rest', {
buildFields: ['addresses', 'createdBy', 'lastModifiedBy', 'topLevelUnit'],
}),

//only scaffolding provided at this time
graphql: Transformer<TBusinessUnit, TBusinessUnitGraphql>('graphql', {
buildFields: [],
addFields: () => ({
__typename: 'BusinessUnit',
}),
graphql: Transformer<TCompany | TCompanyGraphql, TCompanyGraphql>('graphql', {
buildFields: ['addresses', 'createdBy', 'lastModifiedBy'],
replaceFields: ({ fields }) => {
return {
...(fields as TCompany),
storesRef: KeyReference.random().typeId('store').buildGraphql(),
parentUnitRef: null,
topLevelUnitRef: KeyReference.random()
.typeId('business-unit')
.key(fields.key)
.buildGraphql(),
topLevelUnit:
fields.topLevelUnit && 'id' in fields.topLevelUnit
? fields.topLevelUnit
: {
...(fields as TCompany),
__typename: 'BusinessUnit',
},
ancestors:
'ancestors' in fields && fields.ancestors ? fields.ancestors : [],
inheritedStores:
'inheritedStores' in fields && fields.inheritedStores
? fields.inheritedStores
: null,
__typename: 'BusinessUnit',
};
},
}),
};

Expand Down
56 changes: 52 additions & 4 deletions models/business-unit/src/division/builder.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
/* eslint-disable jest/valid-title */

import { createBuilderSpec } from '@commercetools-test-data/core/test-utils';
import type { TBusinessUnit } from '../types';
import type { TDivision, TDivisionGraphql } from '../types';
import * as BusinessUnit from './index';

describe('builder', () => {
it(
...createBuilderSpec<TBusinessUnit, TBusinessUnit>(
...createBuilderSpec<TDivision, TDivision>(
'default',
BusinessUnit.random(),
expect.objectContaining({
Expand Down Expand Up @@ -44,7 +44,7 @@ describe('builder', () => {
);

it(
...createBuilderSpec<TBusinessUnit, TBusinessUnit>(
...createBuilderSpec<TDivision, TDivision>(
'rest',
BusinessUnit.random(),
expect.objectContaining({
Expand Down Expand Up @@ -79,5 +79,53 @@ describe('builder', () => {
})
)
);
// test for the graphql shape not added at this time

it(
...createBuilderSpec<TDivision, TDivisionGraphql>(
'graphql',
BusinessUnit.random(),
expect.objectContaining({
id: expect.any(String),
version: expect.any(Number),
key: expect.any(String),
status: expect.any(String),
storesRef: expect.objectContaining({
typeId: 'store',
}),
stores: [],
storeMode: expect.any(String),
unitType: 'Division',
name: expect.any(String),
contactEmail: expect.any(String),
addresses: expect.any(Array),
shippingAddressIds: [],
defaultShippingAddressId: null,
billingAddressIds: [],
defaultBillingAddressId: null,
associateMode: expect.any(String),
associates: expect.any(Array),
inheritedAssociates: expect.any(Array),
parentUnit: expect.objectContaining({
__typename: 'BusinessUnit',
}),
topLevelUnit: expect.objectContaining({
__typename: 'BusinessUnit',
}),
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' }),
}),
ancestors: expect.any(Array),
inheritedStores: null,
__typename: 'BusinessUnit',
})
)
);
});
6 changes: 3 additions & 3 deletions models/business-unit/src/division/builder.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { Builder } from '@commercetools-test-data/core';
import type { TCreateBusinessUnitBuilder, TBusinessUnit } from '../types';
import type { TCreateDivisionBuilder, TDivision } from '../types';
import generator from './generator';
import transformers from './transformers';

const Model: TCreateBusinessUnitBuilder = () =>
Builder<TBusinessUnit>({
const Model: TCreateDivisionBuilder = () =>
Builder<TDivision>({
generator,
transformers,
});
Expand Down
12 changes: 6 additions & 6 deletions models/business-unit/src/division/division-draft/builder.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@
/* eslint-disable jest/valid-title */

import { createBuilderSpec } from '@commercetools-test-data/core/test-utils';
import type { TBusinessUnitDraft } from '../../types';
import * as BusinessUnitDraft from './index';
import type { TDivisionDraft } from '../../types';
import * as DivisionDraft from './index';

describe('builder', () => {
it(
...createBuilderSpec<TBusinessUnitDraft, TBusinessUnitDraft>(
...createBuilderSpec<TDivisionDraft, TDivisionDraft>(
'default',
BusinessUnitDraft.random(),
DivisionDraft.random(),
expect.objectContaining({
key: expect.any(String),
status: expect.any(String),
Expand All @@ -32,9 +32,9 @@ describe('builder', () => {
);

it(
...createBuilderSpec<TBusinessUnitDraft, TBusinessUnitDraft>(
...createBuilderSpec<TDivisionDraft, TDivisionDraft>(
'rest',
BusinessUnitDraft.random(),
DivisionDraft.random(),
expect.objectContaining({
key: expect.any(String),
status: expect.any(String),
Expand Down
Loading

0 comments on commit 291a0ea

Please sign in to comment.