From 54b2bfb943ac6a423840d782190b028b8835b06d Mon Sep 17 00:00:00 2001 From: Kacper Krzywiec Date: Tue, 31 Oct 2023 15:52:01 +0100 Subject: [PATCH 1/7] feat: add custom view installation model --- .changeset/blue-mangos-speak.md | 16 +++ models/custom-view-installation/LICENSE | 21 ++++ models/custom-view-installation/README.md | 21 ++++ models/custom-view-installation/package.json | 33 ++++++ .../builder.spec.ts | 56 +++++++++ .../builder.ts | 15 +++ .../generator.ts | 13 +++ .../index.ts | 3 + .../presets/index.ts | 4 + .../presets/manage-only-permissions.ts | 26 +++++ .../presets/presets.spec.ts | 26 +++++ .../presets/view-only-permissions.ts | 24 ++++ .../transformers.ts | 18 +++ .../types.ts | 15 +++ models/custom-view-installation/src/index.ts | 7 ++ .../builder.spec.ts | 109 ++++++++++++++++++ .../builder.ts | 16 +++ .../generator.ts | 24 ++++ .../index.ts | 3 + .../presets/index.ts | 3 + .../transformers.ts | 25 ++++ .../types.ts | 28 +++++ models/custom-view/src/index.ts | 4 + pnpm-lock.yaml | 39 +++++++ 24 files changed, 549 insertions(+) create mode 100644 .changeset/blue-mangos-speak.md create mode 100644 models/custom-view-installation/LICENSE create mode 100644 models/custom-view-installation/README.md create mode 100644 models/custom-view-installation/package.json create mode 100644 models/custom-view-installation/src/custom-view-installation-permission/builder.spec.ts create mode 100644 models/custom-view-installation/src/custom-view-installation-permission/builder.ts create mode 100644 models/custom-view-installation/src/custom-view-installation-permission/generator.ts create mode 100644 models/custom-view-installation/src/custom-view-installation-permission/index.ts create mode 100644 models/custom-view-installation/src/custom-view-installation-permission/presets/index.ts create mode 100644 models/custom-view-installation/src/custom-view-installation-permission/presets/manage-only-permissions.ts create mode 100644 models/custom-view-installation/src/custom-view-installation-permission/presets/presets.spec.ts create mode 100644 models/custom-view-installation/src/custom-view-installation-permission/presets/view-only-permissions.ts create mode 100644 models/custom-view-installation/src/custom-view-installation-permission/transformers.ts create mode 100644 models/custom-view-installation/src/custom-view-installation-permission/types.ts create mode 100644 models/custom-view-installation/src/index.ts create mode 100644 models/custom-view-installation/src/restricted-custom-view-installation-for-organization/builder.spec.ts create mode 100644 models/custom-view-installation/src/restricted-custom-view-installation-for-organization/builder.ts create mode 100644 models/custom-view-installation/src/restricted-custom-view-installation-for-organization/generator.ts create mode 100644 models/custom-view-installation/src/restricted-custom-view-installation-for-organization/index.ts create mode 100644 models/custom-view-installation/src/restricted-custom-view-installation-for-organization/presets/index.ts create mode 100644 models/custom-view-installation/src/restricted-custom-view-installation-for-organization/transformers.ts create mode 100644 models/custom-view-installation/src/restricted-custom-view-installation-for-organization/types.ts diff --git a/.changeset/blue-mangos-speak.md b/.changeset/blue-mangos-speak.md new file mode 100644 index 000000000..dbe5abe64 --- /dev/null +++ b/.changeset/blue-mangos-speak.md @@ -0,0 +1,16 @@ +--- +'@commercetools-test-data/custom-view': minor +'@commercetools-test-data/custom-view-installation': minor +--- + +New package to generate test data for Custom Views Installations. + +```ts +import { + RestrictedCustomViewInstallationForOrganization, + type TRestrictedCustomViewInstallationForOrganizationGraphql, +} from '@commercetools-test-data/custom-view-installation'; + +const restrictedCustomViewInstallationForOrganization = + RestrictedCustomViewInstallationForOrganization.random().buildGraphql(); +``` diff --git a/models/custom-view-installation/LICENSE b/models/custom-view-installation/LICENSE new file mode 100644 index 000000000..e113013cb --- /dev/null +++ b/models/custom-view-installation/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/custom-view-installation/README.md b/models/custom-view-installation/README.md new file mode 100644 index 000000000..815805c61 --- /dev/null +++ b/models/custom-view-installation/README.md @@ -0,0 +1,21 @@ +# @commercetools-test-data/custom-view-installation + +This package provides the data model for the commercetools internal API `CustomViewInstallation` type + +# Install + +```bash +$ pnpm add -D @commercetools-test-data/custom-view-installation +``` + +# Usage + +```ts +import { + RestrictedCustomViewInstallationForOrganization, + type TRestrictedCustomViewInstallationForOrganizationGraphql, +} from '@commercetools-test-data/custom-view-installation'; + +const restrictedCustomViewInstallationForOrganization = + RestrictedCustomViewInstallationForOrganization.random().buildGraphql(); +``` diff --git a/models/custom-view-installation/package.json b/models/custom-view-installation/package.json new file mode 100644 index 000000000..121ab9fad --- /dev/null +++ b/models/custom-view-installation/package.json @@ -0,0 +1,33 @@ +{ + "name": "@commercetools-test-data/custom-view-installation", + "version": "6.4.1", + "description": "Data model for internal Merchan Center API Custom View Installation", + "bugs": "https://github.com/commercetools/test-data/issues", + "repository": { + "type": "git", + "url": "https://github.com/commercetools/test-data.git", + "directory": "models/custom-view-installation" + }, + "keywords": ["javascript", "typescript", "test-data"], + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "main": "dist/commercetools-test-data-custom-view-installation.cjs.js", + "module": "dist/commercetools-test-data-custom-view-installation.esm.js", + "files": ["dist", "package.json", "LICENSE", "README.md"], + "dependencies": { + "@babel/runtime": "^7.17.9", + "@babel/runtime-corejs3": "^7.17.9", + "@commercetools-frontend/application-config": "^22.10.0", + "@commercetools-frontend/constants": "^22.10.0", + "@commercetools-test-data/commons": "6.4.1", + "@commercetools-test-data/custom-view": "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", + "@types/lodash": "^4.14.182", + "lodash": "^4.17.21" + } +} diff --git a/models/custom-view-installation/src/custom-view-installation-permission/builder.spec.ts b/models/custom-view-installation/src/custom-view-installation-permission/builder.spec.ts new file mode 100644 index 000000000..0a9d7dbce --- /dev/null +++ b/models/custom-view-installation/src/custom-view-installation-permission/builder.spec.ts @@ -0,0 +1,56 @@ +/* eslint-disable jest/no-disabled-tests */ +/* eslint-disable jest/valid-title */ +import { createBuilderSpec } from '@commercetools-test-data/core/test-utils'; +import type { + TCustomViewInstallationPermission, + TCustomViewInstallationPermissionGraphql, +} from './types'; +import * as CustomViewInstallationPermissionModel from './index'; + +describe('CustomViewInstallationPermission model builder', () => { + it( + ...createBuilderSpec< + TCustomViewInstallationPermission, + TCustomViewInstallationPermission + >( + 'default', + CustomViewInstallationPermissionModel.random(), + expect.objectContaining({ + name: 'view', + oAuthScopes: expect.arrayContaining([expect.stringMatching(/^view_/)]), + }) + ) + ); + + it( + ...createBuilderSpec< + TCustomViewInstallationPermission, + TCustomViewInstallationPermissionGraphql + >( + 'graphql', + CustomViewInstallationPermissionModel.presets.ViewOnlyPermissions(), + expect.objectContaining({ + __typename: 'CustomViewInstallationPermission', + name: 'view', + oAuthScopes: expect.arrayContaining([expect.stringMatching(/^view_/)]), + }) + ) + ); + + it( + ...createBuilderSpec< + TCustomViewInstallationPermission, + TCustomViewInstallationPermissionGraphql + >( + 'graphql', + CustomViewInstallationPermissionModel.presets.ManageOnlyPermissions(), + expect.objectContaining({ + __typename: 'CustomViewInstallationPermission', + name: 'manage', + oAuthScopes: expect.arrayContaining([ + expect.stringMatching(/^manage_/), + ]), + }) + ) + ); +}); diff --git a/models/custom-view-installation/src/custom-view-installation-permission/builder.ts b/models/custom-view-installation/src/custom-view-installation-permission/builder.ts new file mode 100644 index 000000000..cbdfb6507 --- /dev/null +++ b/models/custom-view-installation/src/custom-view-installation-permission/builder.ts @@ -0,0 +1,15 @@ +import { Builder } from '@commercetools-test-data/core'; +import generator from './generator'; +import transformers from './transformers'; +import type { + TCustomViewInstallationPermission, + TCreateCustomViewInstallationPermissionBuilder, +} from './types'; + +const Model: TCreateCustomViewInstallationPermissionBuilder = () => + Builder({ + generator, + transformers, + }); + +export default Model; diff --git a/models/custom-view-installation/src/custom-view-installation-permission/generator.ts b/models/custom-view-installation/src/custom-view-installation-permission/generator.ts new file mode 100644 index 000000000..0f8d74d8f --- /dev/null +++ b/models/custom-view-installation/src/custom-view-installation-permission/generator.ts @@ -0,0 +1,13 @@ +import { Generator } from '@commercetools-test-data/core'; +import { supportedViewOAuthScopes } from '@commercetools-test-data/custom-view'; +import sampleSize from 'lodash/sampleSize'; +import type { TCustomViewInstallationPermission } from './types'; + +const generator = Generator({ + fields: { + name: 'view', + oAuthScopes: sampleSize(supportedViewOAuthScopes, 2), + }, +}); + +export default generator; diff --git a/models/custom-view-installation/src/custom-view-installation-permission/index.ts b/models/custom-view-installation/src/custom-view-installation-permission/index.ts new file mode 100644 index 000000000..153b04270 --- /dev/null +++ b/models/custom-view-installation/src/custom-view-installation-permission/index.ts @@ -0,0 +1,3 @@ +export { default as random } from './builder'; +export * as presets from './presets'; +export * from './types'; diff --git a/models/custom-view-installation/src/custom-view-installation-permission/presets/index.ts b/models/custom-view-installation/src/custom-view-installation-permission/presets/index.ts new file mode 100644 index 000000000..55569c31c --- /dev/null +++ b/models/custom-view-installation/src/custom-view-installation-permission/presets/index.ts @@ -0,0 +1,4 @@ +import ManageOnlyPermissions from './manage-only-permissions'; +import ViewOnlyPermissions from './view-only-permissions'; + +export { ViewOnlyPermissions, ManageOnlyPermissions }; diff --git a/models/custom-view-installation/src/custom-view-installation-permission/presets/manage-only-permissions.ts b/models/custom-view-installation/src/custom-view-installation-permission/presets/manage-only-permissions.ts new file mode 100644 index 000000000..d7a293064 --- /dev/null +++ b/models/custom-view-installation/src/custom-view-installation-permission/presets/manage-only-permissions.ts @@ -0,0 +1,26 @@ +import { entryPointUriPathToResourceAccesses } from '@commercetools-frontend/application-config/ssr'; +import { CUSTOM_VIEW_HOST_ENTRY_POINT_URI_PATH } from '@commercetools-frontend/constants'; +import { supportedManageOAuthScopes } from '@commercetools-test-data/custom-view'; +import camelCase from 'lodash/camelCase'; +import sampleSize from 'lodash/sampleSize'; +import upperFirst from 'lodash/upperFirst'; +import CustomViewInstallationPermission from '../builder'; + +const preset = (additionalPermission = '') => { + const resourceAccesses = entryPointUriPathToResourceAccesses( + CUSTOM_VIEW_HOST_ENTRY_POINT_URI_PATH, + [additionalPermission] + ); + return CustomViewInstallationPermission() + .name( + !additionalPermission + ? resourceAccesses.manage + : // @ts-ignore + resourceAccesses[ + `manage${upperFirst(camelCase(additionalPermission))}` + ] + ) + .oAuthScopes(sampleSize(supportedManageOAuthScopes, 1)); +}; + +export default preset; diff --git a/models/custom-view-installation/src/custom-view-installation-permission/presets/presets.spec.ts b/models/custom-view-installation/src/custom-view-installation-permission/presets/presets.spec.ts new file mode 100644 index 000000000..7ce659952 --- /dev/null +++ b/models/custom-view-installation/src/custom-view-installation-permission/presets/presets.spec.ts @@ -0,0 +1,26 @@ +import { ViewOnlyPermissions, ManageOnlyPermissions } from '.'; + +describe('view only permissions', () => { + it('should build important properties', () => { + const built = ViewOnlyPermissions().buildGraphql(); + + expect(built).toEqual( + expect.objectContaining({ + name: 'view', + oAuthScopes: expect.arrayContaining([expect.any(String)]), + }) + ); + }); +}); +describe('with manage only permissions', () => { + it('should build important properties', () => { + const built = ManageOnlyPermissions().buildGraphql(); + + expect(built).toEqual( + expect.objectContaining({ + name: 'manage', + oAuthScopes: expect.arrayContaining([expect.any(String)]), + }) + ); + }); +}); diff --git a/models/custom-view-installation/src/custom-view-installation-permission/presets/view-only-permissions.ts b/models/custom-view-installation/src/custom-view-installation-permission/presets/view-only-permissions.ts new file mode 100644 index 000000000..0416ec8b3 --- /dev/null +++ b/models/custom-view-installation/src/custom-view-installation-permission/presets/view-only-permissions.ts @@ -0,0 +1,24 @@ +import { entryPointUriPathToResourceAccesses } from '@commercetools-frontend/application-config/ssr'; +import { CUSTOM_VIEW_HOST_ENTRY_POINT_URI_PATH } from '@commercetools-frontend/constants'; +import { supportedViewOAuthScopes } from '@commercetools-test-data/custom-view'; +import camelCase from 'lodash/camelCase'; +import sampleSize from 'lodash/sampleSize'; +import upperFirst from 'lodash/upperFirst'; +import CustomViewInstallationPermission from '../builder'; + +const preset = (additionalPermission = '') => { + const resourceAccesses = entryPointUriPathToResourceAccesses( + CUSTOM_VIEW_HOST_ENTRY_POINT_URI_PATH, + [additionalPermission] + ); + return CustomViewInstallationPermission() + .name( + !additionalPermission + ? resourceAccesses.view + : // @ts-ignore + resourceAccesses[`view${upperFirst(camelCase(additionalPermission))}`] + ) + .oAuthScopes(sampleSize(supportedViewOAuthScopes, 1)); +}; + +export default preset; diff --git a/models/custom-view-installation/src/custom-view-installation-permission/transformers.ts b/models/custom-view-installation/src/custom-view-installation-permission/transformers.ts new file mode 100644 index 000000000..aae9225db --- /dev/null +++ b/models/custom-view-installation/src/custom-view-installation-permission/transformers.ts @@ -0,0 +1,18 @@ +import { Transformer } from '@commercetools-test-data/core'; +import type { + TCustomViewInstallationPermission, + TCustomViewInstallationPermissionGraphql, +} from './types'; + +const transformers = { + graphql: Transformer< + TCustomViewInstallationPermission, + TCustomViewInstallationPermissionGraphql + >('graphql', { + addFields: () => ({ + __typename: 'CustomViewInstallationPermission', + }), + }), +}; + +export default transformers; diff --git a/models/custom-view-installation/src/custom-view-installation-permission/types.ts b/models/custom-view-installation/src/custom-view-installation-permission/types.ts new file mode 100644 index 000000000..144f4c2a3 --- /dev/null +++ b/models/custom-view-installation/src/custom-view-installation-permission/types.ts @@ -0,0 +1,15 @@ +import type { TBuilder } from '@commercetools-test-data/core'; + +export type TCustomViewInstallationPermission = { + name: string; + oAuthScopes: string[]; +}; +export type TCustomViewInstallationPermissionGraphql = + TCustomViewInstallationPermission & { + __typename: 'CustomViewInstallationPermission'; + }; + +export type TCustomViewInstallationPermissionBuilder = + TBuilder; +export type TCreateCustomViewInstallationPermissionBuilder = + () => TCustomViewInstallationPermissionBuilder; diff --git a/models/custom-view-installation/src/index.ts b/models/custom-view-installation/src/index.ts new file mode 100644 index 000000000..f23f1508f --- /dev/null +++ b/models/custom-view-installation/src/index.ts @@ -0,0 +1,7 @@ +// Export types +export * from './restricted-custom-view-installation-for-organization/types'; +export * from './custom-view-installation-permission/types'; + +// Export models +export * as RestrictedCustomViewInstallationForOrganization from './restricted-custom-view-installation-for-organization'; +export * as CustomViewInstallationPermission from './custom-view-installation-permission'; diff --git a/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/builder.spec.ts b/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/builder.spec.ts new file mode 100644 index 000000000..4bf519eb2 --- /dev/null +++ b/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/builder.spec.ts @@ -0,0 +1,109 @@ +/* eslint-disable jest/no-disabled-tests */ +/* eslint-disable jest/valid-title */ +import { createBuilderSpec } from '@commercetools-test-data/core/test-utils'; +import type { + TRestrictedCustomViewInstallationForOrganization, + TRestrictedCustomViewInstallationForOrganizationGraphql, +} from './types'; +import * as RestrictedCustomViewInstallationForOrganizationModel from './index'; + +describe('builder', () => { + it( + ...createBuilderSpec< + TRestrictedCustomViewInstallationForOrganization, + TRestrictedCustomViewInstallationForOrganization + >( + 'default', + RestrictedCustomViewInstallationForOrganizationModel.random(), + expect.objectContaining({ + id: expect.any(String), + createdAt: expect.any(String), + updatedAt: expect.any(String), + acceptedPermissions: expect.arrayContaining([ + expect.objectContaining({ + name: expect.stringMatching(/^(view|manage)$/), + oAuthScopes: expect.arrayContaining([expect.any(String)]), + }), + ]), + customView: expect.objectContaining({ + id: expect.any(String), + createdAt: expect.any(String), + updatedAt: expect.any(String), + defaultLabel: expect.any(String), + labelAllLocales: expect.arrayContaining([ + expect.objectContaining({ + locale: expect.stringMatching(/^(de|en|es)$/), + value: expect.any(String), + }), + ]), + locators: expect.arrayContaining([expect.any(String)]), + ownerId: expect.any(String), + permissions: expect.arrayContaining([ + expect.objectContaining({ + name: expect.stringMatching(/^(view|manage)$/), + oAuthScopes: expect.arrayContaining([expect.any(String)]), + }), + ]), + status: expect.stringMatching(/^(DRAFT|PRIVATE_USAGE)$/), + type: 'CustomPanel', + typeSettings: expect.objectContaining({ + size: expect.stringMatching(/^(SMALL|LARGE)$/), + }), + url: expect.any(String), + }), + installInAllProjects: expect.any(Boolean), + projects: expect.any(Array), + }) + ) + ); + it( + ...createBuilderSpec< + TRestrictedCustomViewInstallationForOrganization, + TRestrictedCustomViewInstallationForOrganizationGraphql + >( + 'graphql', + RestrictedCustomViewInstallationForOrganizationModel.random(), + expect.objectContaining({ + __typename: 'RestrictedCustomViewInstallationForOrganization', + id: expect.any(String), + createdAt: expect.any(String), + updatedAt: expect.any(String), + acceptedPermissions: expect.arrayContaining([ + expect.objectContaining({ + name: expect.stringMatching(/^(view|manage)$/), + oAuthScopes: expect.arrayContaining([expect.any(String)]), + }), + ]), + customView: expect.objectContaining({ + __typename: 'CustomView', + id: expect.any(String), + createdAt: expect.any(String), + updatedAt: expect.any(String), + defaultLabel: expect.any(String), + labelAllLocales: expect.arrayContaining([ + expect.objectContaining({ + locale: expect.stringMatching(/^(de|en|es)$/), + value: expect.any(String), + }), + ]), + locators: expect.arrayContaining([expect.any(String)]), + ownerId: expect.any(String), + permissions: expect.arrayContaining([ + expect.objectContaining({ + name: expect.stringMatching(/^(view|manage)$/), + oAuthScopes: expect.arrayContaining([expect.any(String)]), + }), + ]), + status: expect.stringMatching(/^(DRAFT|PRIVATE_USAGE)$/), + type: 'CustomPanel', + typeSettings: expect.objectContaining({ + size: expect.stringMatching(/^(SMALL|LARGE)$/), + }), + url: expect.any(String), + }), + installInAllProjects: expect.any(Boolean), + projects: expect.any(Array), + }) + ) + ); +}); diff --git a/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/builder.ts b/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/builder.ts new file mode 100644 index 000000000..2c86d4483 --- /dev/null +++ b/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/builder.ts @@ -0,0 +1,16 @@ +import { Builder } from '@commercetools-test-data/core'; +import generator from './generator'; +import transformers from './transformers'; +import type { + TRestrictedCustomViewInstallationForOrganization, + TCreateRestrictedCustomViewInstallationForOrganizationBuilder, +} from './types'; + +const Model: TCreateRestrictedCustomViewInstallationForOrganizationBuilder = + () => + Builder({ + generator, + transformers, + }); + +export default Model; diff --git a/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/generator.ts b/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/generator.ts new file mode 100644 index 000000000..aa0da9e6e --- /dev/null +++ b/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/generator.ts @@ -0,0 +1,24 @@ +import { fake, Generator } from '@commercetools-test-data/core'; +import { CustomView } from '@commercetools-test-data/custom-view'; +import { createRelatedDates } from '@commercetools-test-data/utils'; +import * as CustomViewInstallationPermission from '../custom-view-installation-permission'; +import type { TRestrictedCustomViewInstallationForOrganization } from './types'; + +const [getOlderDate, getNewerDate] = createRelatedDates(); + +const generator = Generator({ + fields: { + id: fake((f) => f.string.uuid()), + createdAt: fake(getOlderDate), + updatedAt: fake(getNewerDate), + customView: fake(() => CustomView.random()), + acceptedPermissions: fake(() => [ + CustomViewInstallationPermission.presets.ViewOnlyPermissions(), + CustomViewInstallationPermission.presets.ManageOnlyPermissions(), + ]), + projects: fake(() => []), + installInAllProjects: fake((f) => f.datatype.boolean()), + }, +}); + +export default generator; diff --git a/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/index.ts b/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/index.ts new file mode 100644 index 000000000..153b04270 --- /dev/null +++ b/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/index.ts @@ -0,0 +1,3 @@ +export { default as random } from './builder'; +export * as presets from './presets'; +export * from './types'; diff --git a/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/presets/index.ts b/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/presets/index.ts new file mode 100644 index 000000000..763e57fe0 --- /dev/null +++ b/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/presets/index.ts @@ -0,0 +1,3 @@ +const presets = {}; + +export default presets; diff --git a/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/transformers.ts b/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/transformers.ts new file mode 100644 index 000000000..2da40622e --- /dev/null +++ b/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/transformers.ts @@ -0,0 +1,25 @@ +import { Transformer } from '@commercetools-test-data/core'; +import type { + TRestrictedCustomViewInstallationForOrganization, + TRestrictedCustomViewInstallationForOrganizationGraphql, +} from './types'; + +const transformers = { + default: Transformer< + TRestrictedCustomViewInstallationForOrganization, + TRestrictedCustomViewInstallationForOrganization + >('default', { + buildFields: ['customView', 'acceptedPermissions', 'projects'], + }), + graphql: Transformer< + TRestrictedCustomViewInstallationForOrganization, + TRestrictedCustomViewInstallationForOrganizationGraphql + >('graphql', { + buildFields: ['customView', 'acceptedPermissions', 'projects'], + addFields: () => ({ + __typename: 'RestrictedCustomViewInstallationForOrganization', + }), + }), +}; + +export default transformers; diff --git a/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/types.ts b/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/types.ts new file mode 100644 index 000000000..ed976ce32 --- /dev/null +++ b/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/types.ts @@ -0,0 +1,28 @@ +import type { TBuilder } from '@commercetools-test-data/core'; +import type { TCustomView } from '@commercetools-test-data/custom-view'; +import type { TCustomViewInstallationPermission } from '../custom-view-installation-permission/types'; + +// TODO: generate graphql types and use those +type ProjectExtension = { + projectKey: string; +}; + +export type TRestrictedCustomViewInstallationForOrganization = { + acceptedPermissions: TCustomViewInstallationPermission[]; + createdAt: string; + customView: TCustomView; + id: string; + installInAllProjects: boolean; + projects: ProjectExtension[]; + updatedAt: string; +}; + +export type TRestrictedCustomViewInstallationForOrganizationGraphql = + TRestrictedCustomViewInstallationForOrganization & { + __typename: 'RestrictedCustomViewInstallationForOrganization'; + }; + +export type TRestrictedCustomViewInstallationForOrganizationBuilder = + TBuilder; +export type TCreateRestrictedCustomViewInstallationForOrganizationBuilder = + () => TRestrictedCustomViewInstallationForOrganizationBuilder; diff --git a/models/custom-view/src/index.ts b/models/custom-view/src/index.ts index f447e92b7..063fbb500 100644 --- a/models/custom-view/src/index.ts +++ b/models/custom-view/src/index.ts @@ -3,6 +3,10 @@ export * from './custom-view/types'; export * from './custom-view-permission/types'; export * from './custom-view-type-settings-for-custom-panel/types'; +// Export constants +export * from './custom-view/constants'; +export * from './custom-view-permission/constants'; + // Export models export * as CustomView from './custom-view'; export * as CustomViewDraft from './custom-view/custom-view-draft'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fc9219911..8035d6e60 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -371,6 +371,45 @@ importers: specifier: ^4.17.21 version: 4.17.21 + models/custom-view-installation: + dependencies: + '@babel/runtime': + specifier: ^7.17.9 + version: 7.23.1 + '@babel/runtime-corejs3': + specifier: ^7.17.9 + version: 7.23.1 + '@commercetools-frontend/application-config': + specifier: ^22.10.0 + version: 22.10.0 + '@commercetools-frontend/constants': + specifier: ^22.10.0 + version: 22.10.0 + '@commercetools-test-data/commons': + specifier: 6.4.1 + version: link:../commons + '@commercetools-test-data/core': + specifier: 6.4.1 + version: link:../../core + '@commercetools-test-data/custom-view': + specifier: 6.4.1 + version: link:../custom-view + '@commercetools-test-data/utils': + specifier: 6.4.1 + 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 + '@types/lodash': + specifier: ^4.14.182 + version: 4.14.200 + lodash: + specifier: ^4.17.21 + version: 4.17.21 + models/customer: dependencies: '@babel/runtime': From 24515373f72c441b685602be78a84dadb8512969 Mon Sep 17 00:00:00 2001 From: Kacper Krzywiec Date: Mon, 20 Nov 2023 12:18:55 +0100 Subject: [PATCH 2/7] refactor: code review improvements --- models/custom-view-installation/LICENSE | 21 ---------- models/custom-view-installation/README.md | 21 ---------- models/custom-view-installation/package.json | 33 ---------------- models/custom-view-installation/src/index.ts | 7 ---- .../builder.spec.ts | 0 .../builder.ts | 0 .../generator.ts | 2 +- .../index.ts | 0 .../presets/index.ts | 0 .../presets/manage-only-permissions.ts | 2 +- .../presets/presets.spec.ts | 0 .../presets/view-only-permissions.ts | 2 +- .../transformers.ts | 4 ++ .../types.ts | 0 .../src/custom-view-installation/index.ts | 3 ++ .../builder.spec.ts | 0 .../builder.ts | 0 .../generator.ts | 4 +- .../index.ts | 0 .../presets/index.ts | 0 .../transformers.ts | 0 .../types.ts | 4 +- .../src/custom-view-installation/types.ts | 2 + models/custom-view/src/index.ts | 4 ++ pnpm-lock.yaml | 39 ------------------- 25 files changed, 20 insertions(+), 128 deletions(-) delete mode 100644 models/custom-view-installation/LICENSE delete mode 100644 models/custom-view-installation/README.md delete mode 100644 models/custom-view-installation/package.json delete mode 100644 models/custom-view-installation/src/index.ts rename models/{custom-view-installation => custom-view}/src/custom-view-installation-permission/builder.spec.ts (100%) rename models/{custom-view-installation => custom-view}/src/custom-view-installation-permission/builder.ts (100%) rename models/{custom-view-installation => custom-view}/src/custom-view-installation-permission/generator.ts (81%) rename models/{custom-view-installation => custom-view}/src/custom-view-installation-permission/index.ts (100%) rename models/{custom-view-installation => custom-view}/src/custom-view-installation-permission/presets/index.ts (100%) rename models/{custom-view-installation => custom-view}/src/custom-view-installation-permission/presets/manage-only-permissions.ts (91%) rename models/{custom-view-installation => custom-view}/src/custom-view-installation-permission/presets/presets.spec.ts (100%) rename models/{custom-view-installation => custom-view}/src/custom-view-installation-permission/presets/view-only-permissions.ts (91%) rename models/{custom-view-installation => custom-view}/src/custom-view-installation-permission/transformers.ts (78%) rename models/{custom-view-installation => custom-view}/src/custom-view-installation-permission/types.ts (100%) create mode 100644 models/custom-view/src/custom-view-installation/index.ts rename models/{custom-view-installation/src => custom-view/src/custom-view-installation}/restricted-custom-view-installation-for-organization/builder.spec.ts (100%) rename models/{custom-view-installation/src => custom-view/src/custom-view-installation}/restricted-custom-view-installation-for-organization/builder.ts (100%) rename models/{custom-view-installation/src => custom-view/src/custom-view-installation}/restricted-custom-view-installation-for-organization/generator.ts (84%) rename models/{custom-view-installation/src => custom-view/src/custom-view-installation}/restricted-custom-view-installation-for-organization/index.ts (100%) rename models/{custom-view-installation/src => custom-view/src/custom-view-installation}/restricted-custom-view-installation-for-organization/presets/index.ts (100%) rename models/{custom-view-installation/src => custom-view/src/custom-view-installation}/restricted-custom-view-installation-for-organization/transformers.ts (100%) rename models/{custom-view-installation/src => custom-view/src/custom-view-installation}/restricted-custom-view-installation-for-organization/types.ts (83%) create mode 100644 models/custom-view/src/custom-view-installation/types.ts diff --git a/models/custom-view-installation/LICENSE b/models/custom-view-installation/LICENSE deleted file mode 100644 index e113013cb..000000000 --- a/models/custom-view-installation/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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/custom-view-installation/README.md b/models/custom-view-installation/README.md deleted file mode 100644 index 815805c61..000000000 --- a/models/custom-view-installation/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# @commercetools-test-data/custom-view-installation - -This package provides the data model for the commercetools internal API `CustomViewInstallation` type - -# Install - -```bash -$ pnpm add -D @commercetools-test-data/custom-view-installation -``` - -# Usage - -```ts -import { - RestrictedCustomViewInstallationForOrganization, - type TRestrictedCustomViewInstallationForOrganizationGraphql, -} from '@commercetools-test-data/custom-view-installation'; - -const restrictedCustomViewInstallationForOrganization = - RestrictedCustomViewInstallationForOrganization.random().buildGraphql(); -``` diff --git a/models/custom-view-installation/package.json b/models/custom-view-installation/package.json deleted file mode 100644 index 121ab9fad..000000000 --- a/models/custom-view-installation/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "@commercetools-test-data/custom-view-installation", - "version": "6.4.1", - "description": "Data model for internal Merchan Center API Custom View Installation", - "bugs": "https://github.com/commercetools/test-data/issues", - "repository": { - "type": "git", - "url": "https://github.com/commercetools/test-data.git", - "directory": "models/custom-view-installation" - }, - "keywords": ["javascript", "typescript", "test-data"], - "license": "MIT", - "publishConfig": { - "access": "public" - }, - "main": "dist/commercetools-test-data-custom-view-installation.cjs.js", - "module": "dist/commercetools-test-data-custom-view-installation.esm.js", - "files": ["dist", "package.json", "LICENSE", "README.md"], - "dependencies": { - "@babel/runtime": "^7.17.9", - "@babel/runtime-corejs3": "^7.17.9", - "@commercetools-frontend/application-config": "^22.10.0", - "@commercetools-frontend/constants": "^22.10.0", - "@commercetools-test-data/commons": "6.4.1", - "@commercetools-test-data/custom-view": "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", - "@types/lodash": "^4.14.182", - "lodash": "^4.17.21" - } -} diff --git a/models/custom-view-installation/src/index.ts b/models/custom-view-installation/src/index.ts deleted file mode 100644 index f23f1508f..000000000 --- a/models/custom-view-installation/src/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Export types -export * from './restricted-custom-view-installation-for-organization/types'; -export * from './custom-view-installation-permission/types'; - -// Export models -export * as RestrictedCustomViewInstallationForOrganization from './restricted-custom-view-installation-for-organization'; -export * as CustomViewInstallationPermission from './custom-view-installation-permission'; diff --git a/models/custom-view-installation/src/custom-view-installation-permission/builder.spec.ts b/models/custom-view/src/custom-view-installation-permission/builder.spec.ts similarity index 100% rename from models/custom-view-installation/src/custom-view-installation-permission/builder.spec.ts rename to models/custom-view/src/custom-view-installation-permission/builder.spec.ts diff --git a/models/custom-view-installation/src/custom-view-installation-permission/builder.ts b/models/custom-view/src/custom-view-installation-permission/builder.ts similarity index 100% rename from models/custom-view-installation/src/custom-view-installation-permission/builder.ts rename to models/custom-view/src/custom-view-installation-permission/builder.ts diff --git a/models/custom-view-installation/src/custom-view-installation-permission/generator.ts b/models/custom-view/src/custom-view-installation-permission/generator.ts similarity index 81% rename from models/custom-view-installation/src/custom-view-installation-permission/generator.ts rename to models/custom-view/src/custom-view-installation-permission/generator.ts index 0f8d74d8f..c8c6bfce9 100644 --- a/models/custom-view-installation/src/custom-view-installation-permission/generator.ts +++ b/models/custom-view/src/custom-view-installation-permission/generator.ts @@ -1,6 +1,6 @@ import { Generator } from '@commercetools-test-data/core'; -import { supportedViewOAuthScopes } from '@commercetools-test-data/custom-view'; import sampleSize from 'lodash/sampleSize'; +import { supportedViewOAuthScopes } from '../custom-view-permission/constants'; import type { TCustomViewInstallationPermission } from './types'; const generator = Generator({ diff --git a/models/custom-view-installation/src/custom-view-installation-permission/index.ts b/models/custom-view/src/custom-view-installation-permission/index.ts similarity index 100% rename from models/custom-view-installation/src/custom-view-installation-permission/index.ts rename to models/custom-view/src/custom-view-installation-permission/index.ts diff --git a/models/custom-view-installation/src/custom-view-installation-permission/presets/index.ts b/models/custom-view/src/custom-view-installation-permission/presets/index.ts similarity index 100% rename from models/custom-view-installation/src/custom-view-installation-permission/presets/index.ts rename to models/custom-view/src/custom-view-installation-permission/presets/index.ts diff --git a/models/custom-view-installation/src/custom-view-installation-permission/presets/manage-only-permissions.ts b/models/custom-view/src/custom-view-installation-permission/presets/manage-only-permissions.ts similarity index 91% rename from models/custom-view-installation/src/custom-view-installation-permission/presets/manage-only-permissions.ts rename to models/custom-view/src/custom-view-installation-permission/presets/manage-only-permissions.ts index d7a293064..f05dee6e4 100644 --- a/models/custom-view-installation/src/custom-view-installation-permission/presets/manage-only-permissions.ts +++ b/models/custom-view/src/custom-view-installation-permission/presets/manage-only-permissions.ts @@ -1,9 +1,9 @@ import { entryPointUriPathToResourceAccesses } from '@commercetools-frontend/application-config/ssr'; import { CUSTOM_VIEW_HOST_ENTRY_POINT_URI_PATH } from '@commercetools-frontend/constants'; -import { supportedManageOAuthScopes } from '@commercetools-test-data/custom-view'; import camelCase from 'lodash/camelCase'; import sampleSize from 'lodash/sampleSize'; import upperFirst from 'lodash/upperFirst'; +import { supportedManageOAuthScopes } from '../../custom-view-permission/constants'; import CustomViewInstallationPermission from '../builder'; const preset = (additionalPermission = '') => { diff --git a/models/custom-view-installation/src/custom-view-installation-permission/presets/presets.spec.ts b/models/custom-view/src/custom-view-installation-permission/presets/presets.spec.ts similarity index 100% rename from models/custom-view-installation/src/custom-view-installation-permission/presets/presets.spec.ts rename to models/custom-view/src/custom-view-installation-permission/presets/presets.spec.ts diff --git a/models/custom-view-installation/src/custom-view-installation-permission/presets/view-only-permissions.ts b/models/custom-view/src/custom-view-installation-permission/presets/view-only-permissions.ts similarity index 91% rename from models/custom-view-installation/src/custom-view-installation-permission/presets/view-only-permissions.ts rename to models/custom-view/src/custom-view-installation-permission/presets/view-only-permissions.ts index 0416ec8b3..3badf3d13 100644 --- a/models/custom-view-installation/src/custom-view-installation-permission/presets/view-only-permissions.ts +++ b/models/custom-view/src/custom-view-installation-permission/presets/view-only-permissions.ts @@ -1,9 +1,9 @@ import { entryPointUriPathToResourceAccesses } from '@commercetools-frontend/application-config/ssr'; import { CUSTOM_VIEW_HOST_ENTRY_POINT_URI_PATH } from '@commercetools-frontend/constants'; -import { supportedViewOAuthScopes } from '@commercetools-test-data/custom-view'; import camelCase from 'lodash/camelCase'; import sampleSize from 'lodash/sampleSize'; import upperFirst from 'lodash/upperFirst'; +import { supportedViewOAuthScopes } from '../../custom-view-permission/constants'; import CustomViewInstallationPermission from '../builder'; const preset = (additionalPermission = '') => { diff --git a/models/custom-view-installation/src/custom-view-installation-permission/transformers.ts b/models/custom-view/src/custom-view-installation-permission/transformers.ts similarity index 78% rename from models/custom-view-installation/src/custom-view-installation-permission/transformers.ts rename to models/custom-view/src/custom-view-installation-permission/transformers.ts index aae9225db..2dff50c0e 100644 --- a/models/custom-view-installation/src/custom-view-installation-permission/transformers.ts +++ b/models/custom-view/src/custom-view-installation-permission/transformers.ts @@ -5,6 +5,10 @@ import type { } from './types'; const transformers = { + default: Transformer< + TCustomViewInstallationPermission, + TCustomViewInstallationPermission + >('default', {}), graphql: Transformer< TCustomViewInstallationPermission, TCustomViewInstallationPermissionGraphql diff --git a/models/custom-view-installation/src/custom-view-installation-permission/types.ts b/models/custom-view/src/custom-view-installation-permission/types.ts similarity index 100% rename from models/custom-view-installation/src/custom-view-installation-permission/types.ts rename to models/custom-view/src/custom-view-installation-permission/types.ts diff --git a/models/custom-view/src/custom-view-installation/index.ts b/models/custom-view/src/custom-view-installation/index.ts new file mode 100644 index 000000000..17f7f2b09 --- /dev/null +++ b/models/custom-view/src/custom-view-installation/index.ts @@ -0,0 +1,3 @@ +// Export models +export * as RestrictedCustomViewInstallationForOrganization from './restricted-custom-view-installation-for-organization'; +export * as CustomViewInstallationPermission from '../custom-view-installation-permission'; diff --git a/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/builder.spec.ts b/models/custom-view/src/custom-view-installation/restricted-custom-view-installation-for-organization/builder.spec.ts similarity index 100% rename from models/custom-view-installation/src/restricted-custom-view-installation-for-organization/builder.spec.ts rename to models/custom-view/src/custom-view-installation/restricted-custom-view-installation-for-organization/builder.spec.ts diff --git a/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/builder.ts b/models/custom-view/src/custom-view-installation/restricted-custom-view-installation-for-organization/builder.ts similarity index 100% rename from models/custom-view-installation/src/restricted-custom-view-installation-for-organization/builder.ts rename to models/custom-view/src/custom-view-installation/restricted-custom-view-installation-for-organization/builder.ts diff --git a/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/generator.ts b/models/custom-view/src/custom-view-installation/restricted-custom-view-installation-for-organization/generator.ts similarity index 84% rename from models/custom-view-installation/src/restricted-custom-view-installation-for-organization/generator.ts rename to models/custom-view/src/custom-view-installation/restricted-custom-view-installation-for-organization/generator.ts index aa0da9e6e..8645292c1 100644 --- a/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/generator.ts +++ b/models/custom-view/src/custom-view-installation/restricted-custom-view-installation-for-organization/generator.ts @@ -1,7 +1,7 @@ import { fake, Generator } from '@commercetools-test-data/core'; -import { CustomView } from '@commercetools-test-data/custom-view'; import { createRelatedDates } from '@commercetools-test-data/utils'; -import * as CustomViewInstallationPermission from '../custom-view-installation-permission'; +import * as CustomView from '../../custom-view'; +import * as CustomViewInstallationPermission from '../../custom-view-installation-permission'; import type { TRestrictedCustomViewInstallationForOrganization } from './types'; const [getOlderDate, getNewerDate] = createRelatedDates(); diff --git a/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/index.ts b/models/custom-view/src/custom-view-installation/restricted-custom-view-installation-for-organization/index.ts similarity index 100% rename from models/custom-view-installation/src/restricted-custom-view-installation-for-organization/index.ts rename to models/custom-view/src/custom-view-installation/restricted-custom-view-installation-for-organization/index.ts diff --git a/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/presets/index.ts b/models/custom-view/src/custom-view-installation/restricted-custom-view-installation-for-organization/presets/index.ts similarity index 100% rename from models/custom-view-installation/src/restricted-custom-view-installation-for-organization/presets/index.ts rename to models/custom-view/src/custom-view-installation/restricted-custom-view-installation-for-organization/presets/index.ts diff --git a/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/transformers.ts b/models/custom-view/src/custom-view-installation/restricted-custom-view-installation-for-organization/transformers.ts similarity index 100% rename from models/custom-view-installation/src/restricted-custom-view-installation-for-organization/transformers.ts rename to models/custom-view/src/custom-view-installation/restricted-custom-view-installation-for-organization/transformers.ts diff --git a/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/types.ts b/models/custom-view/src/custom-view-installation/restricted-custom-view-installation-for-organization/types.ts similarity index 83% rename from models/custom-view-installation/src/restricted-custom-view-installation-for-organization/types.ts rename to models/custom-view/src/custom-view-installation/restricted-custom-view-installation-for-organization/types.ts index ed976ce32..073f2128b 100644 --- a/models/custom-view-installation/src/restricted-custom-view-installation-for-organization/types.ts +++ b/models/custom-view/src/custom-view-installation/restricted-custom-view-installation-for-organization/types.ts @@ -1,6 +1,6 @@ import type { TBuilder } from '@commercetools-test-data/core'; -import type { TCustomView } from '@commercetools-test-data/custom-view'; -import type { TCustomViewInstallationPermission } from '../custom-view-installation-permission/types'; +import type { TCustomView } from '../../custom-view'; +import type { TCustomViewInstallationPermission } from '../../custom-view-installation-permission/types'; // TODO: generate graphql types and use those type ProjectExtension = { diff --git a/models/custom-view/src/custom-view-installation/types.ts b/models/custom-view/src/custom-view-installation/types.ts new file mode 100644 index 000000000..4e2bbc669 --- /dev/null +++ b/models/custom-view/src/custom-view-installation/types.ts @@ -0,0 +1,2 @@ +// Export types +export * from './restricted-custom-view-installation-for-organization/types'; diff --git a/models/custom-view/src/index.ts b/models/custom-view/src/index.ts index 063fbb500..76c55e652 100644 --- a/models/custom-view/src/index.ts +++ b/models/custom-view/src/index.ts @@ -2,6 +2,8 @@ export * from './custom-view/types'; export * from './custom-view-permission/types'; export * from './custom-view-type-settings-for-custom-panel/types'; +export * from './custom-view-installation/types'; +export * from './custom-view-installation-permission/types'; // Export constants export * from './custom-view/constants'; @@ -15,3 +17,5 @@ export * as CustomViewPermission from './custom-view-permission'; export * as CustomViewPermissionDraft from './custom-view-permission-draft'; export * as CustomViewTypeSettingsForCustomPanel from './custom-view-type-settings-for-custom-panel'; +export { RestrictedCustomViewInstallationForOrganization } from './custom-view-installation'; +export * as CustomViewInstallationPermission from './custom-view-installation-permission'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8035d6e60..fc9219911 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -371,45 +371,6 @@ importers: specifier: ^4.17.21 version: 4.17.21 - models/custom-view-installation: - dependencies: - '@babel/runtime': - specifier: ^7.17.9 - version: 7.23.1 - '@babel/runtime-corejs3': - specifier: ^7.17.9 - version: 7.23.1 - '@commercetools-frontend/application-config': - specifier: ^22.10.0 - version: 22.10.0 - '@commercetools-frontend/constants': - specifier: ^22.10.0 - version: 22.10.0 - '@commercetools-test-data/commons': - specifier: 6.4.1 - version: link:../commons - '@commercetools-test-data/core': - specifier: 6.4.1 - version: link:../../core - '@commercetools-test-data/custom-view': - specifier: 6.4.1 - version: link:../custom-view - '@commercetools-test-data/utils': - specifier: 6.4.1 - 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 - '@types/lodash': - specifier: ^4.14.182 - version: 4.14.200 - lodash: - specifier: ^4.17.21 - version: 4.17.21 - models/customer: dependencies: '@babel/runtime': From 76efa9071330e36b47549b487692f1622f39f3ab Mon Sep 17 00:00:00 2001 From: Kacper Krzywiec Date: Mon, 20 Nov 2023 12:20:49 +0100 Subject: [PATCH 3/7] chore: changeset --- .changeset/blue-mangos-speak.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.changeset/blue-mangos-speak.md b/.changeset/blue-mangos-speak.md index dbe5abe64..4af6daf53 100644 --- a/.changeset/blue-mangos-speak.md +++ b/.changeset/blue-mangos-speak.md @@ -1,15 +1,14 @@ --- '@commercetools-test-data/custom-view': minor -'@commercetools-test-data/custom-view-installation': minor --- -New package to generate test data for Custom Views Installations. +Allow to generate test data for Custom Views Installations. ```ts import { RestrictedCustomViewInstallationForOrganization, type TRestrictedCustomViewInstallationForOrganizationGraphql, -} from '@commercetools-test-data/custom-view-installation'; +} from '@commercetools-test-data/custom-view'; const restrictedCustomViewInstallationForOrganization = RestrictedCustomViewInstallationForOrganization.random().buildGraphql(); From bfe83afd9e211b44c809961ea6884671554469f5 Mon Sep 17 00:00:00 2001 From: Kacper Krzywiec Date: Mon, 20 Nov 2023 12:24:21 +0100 Subject: [PATCH 4/7] refactor: cleanup --- models/custom-view/src/custom-view-installation/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/models/custom-view/src/custom-view-installation/index.ts b/models/custom-view/src/custom-view-installation/index.ts index 17f7f2b09..d18a01a1d 100644 --- a/models/custom-view/src/custom-view-installation/index.ts +++ b/models/custom-view/src/custom-view-installation/index.ts @@ -1,3 +1,2 @@ // Export models export * as RestrictedCustomViewInstallationForOrganization from './restricted-custom-view-installation-for-organization'; -export * as CustomViewInstallationPermission from '../custom-view-installation-permission'; From fcad30436bc62f224a5dee60958a9537f07274d1 Mon Sep 17 00:00:00 2001 From: Kacper Krzywiec Date: Fri, 1 Dec 2023 14:35:59 +0100 Subject: [PATCH 5/7] refactor: use generated types and add CustomViewInstallation model --- .../types.ts | 14 ++--- .../custom-view-installation/builder.spec.ts | 57 +++++++++++++++++++ .../custom-view-installation/builder.ts | 15 +++++ .../custom-view-installation/generator.ts | 24 ++++++++ .../custom-view-installation/index.ts | 3 + .../custom-view-installation/presets/index.ts | 3 + .../custom-view-installation/transformers.ts | 25 ++++++++ .../custom-view-installation/types.ts | 13 +++++ .../src/custom-view-installation/index.ts | 1 + .../types.ts | 27 +++------ .../src/custom-view-installation/types.ts | 1 + models/custom-view/src/custom-view/types.ts | 19 ------- models/custom-view/src/index.ts | 5 +- 13 files changed, 160 insertions(+), 47 deletions(-) create mode 100644 models/custom-view/src/custom-view-installation/custom-view-installation/builder.spec.ts create mode 100644 models/custom-view/src/custom-view-installation/custom-view-installation/builder.ts create mode 100644 models/custom-view/src/custom-view-installation/custom-view-installation/generator.ts create mode 100644 models/custom-view/src/custom-view-installation/custom-view-installation/index.ts create mode 100644 models/custom-view/src/custom-view-installation/custom-view-installation/presets/index.ts create mode 100644 models/custom-view/src/custom-view-installation/custom-view-installation/transformers.ts create mode 100644 models/custom-view/src/custom-view-installation/custom-view-installation/types.ts diff --git a/models/custom-view/src/custom-view-installation-permission/types.ts b/models/custom-view/src/custom-view-installation-permission/types.ts index 144f4c2a3..23cf6b228 100644 --- a/models/custom-view/src/custom-view-installation-permission/types.ts +++ b/models/custom-view/src/custom-view-installation-permission/types.ts @@ -1,13 +1,13 @@ import type { TBuilder } from '@commercetools-test-data/core'; +import type { TMcSettingsCustomViewInstallationPermission } from '../../../../graphql-types'; -export type TCustomViewInstallationPermission = { - name: string; - oAuthScopes: string[]; -}; export type TCustomViewInstallationPermissionGraphql = - TCustomViewInstallationPermission & { - __typename: 'CustomViewInstallationPermission'; - }; + TMcSettingsCustomViewInstallationPermission; + +export type TCustomViewInstallationPermission = Omit< + TCustomViewInstallationPermissionGraphql, + '__typename' +>; export type TCustomViewInstallationPermissionBuilder = TBuilder; diff --git a/models/custom-view/src/custom-view-installation/custom-view-installation/builder.spec.ts b/models/custom-view/src/custom-view-installation/custom-view-installation/builder.spec.ts new file mode 100644 index 000000000..9a306b5fa --- /dev/null +++ b/models/custom-view/src/custom-view-installation/custom-view-installation/builder.spec.ts @@ -0,0 +1,57 @@ +/* eslint-disable jest/no-disabled-tests */ +/* eslint-disable jest/valid-title */ +import { createBuilderSpec } from '@commercetools-test-data/core/test-utils'; +import type { + TCustomViewInstallation, + TCustomViewInstallationGraphql, +} from './types'; +import * as CustomViewInstallationModel from './index'; + +describe('builder', () => { + it( + ...createBuilderSpec( + 'default', + CustomViewInstallationModel.random(), + expect.objectContaining({ + id: expect.any(String), + createdAt: expect.any(String), + updatedAt: expect.any(String), + acceptedPermissions: expect.arrayContaining([ + expect.objectContaining({ + name: expect.stringMatching(/^(view|manage)$/), + oAuthScopes: expect.arrayContaining([expect.any(String)]), + }), + ]), + installInAllProjects: expect.any(Boolean), + projects: expect.any(Array), + ownerId: expect.any(String), + owner: expect.any(Object), + }) + ) + ); + it( + ...createBuilderSpec< + TCustomViewInstallation, + TCustomViewInstallationGraphql + >( + 'graphql', + CustomViewInstallationModel.random(), + expect.objectContaining({ + __typename: 'CustomViewInstallation', + id: expect.any(String), + createdAt: expect.any(String), + updatedAt: expect.any(String), + acceptedPermissions: expect.arrayContaining([ + expect.objectContaining({ + name: expect.stringMatching(/^(view|manage)$/), + oAuthScopes: expect.arrayContaining([expect.any(String)]), + }), + ]), + installInAllProjects: expect.any(Boolean), + projects: expect.any(Array), + ownerId: expect.any(String), + owner: expect.any(Object), + }) + ) + ); +}); diff --git a/models/custom-view/src/custom-view-installation/custom-view-installation/builder.ts b/models/custom-view/src/custom-view-installation/custom-view-installation/builder.ts new file mode 100644 index 000000000..903afaab4 --- /dev/null +++ b/models/custom-view/src/custom-view-installation/custom-view-installation/builder.ts @@ -0,0 +1,15 @@ +import { Builder } from '@commercetools-test-data/core'; +import generator from './generator'; +import transformers from './transformers'; +import type { + TCustomViewInstallation, + TCreateCustomViewInstallationBuilder, +} from './types'; + +const Model: TCreateCustomViewInstallationBuilder = () => + Builder({ + generator, + transformers, + }); + +export default Model; diff --git a/models/custom-view/src/custom-view-installation/custom-view-installation/generator.ts b/models/custom-view/src/custom-view-installation/custom-view-installation/generator.ts new file mode 100644 index 000000000..8fba71278 --- /dev/null +++ b/models/custom-view/src/custom-view-installation/custom-view-installation/generator.ts @@ -0,0 +1,24 @@ +import { fake, Generator } from '@commercetools-test-data/core'; +import { createRelatedDates } from '@commercetools-test-data/utils'; +import * as CustomViewInstallationPermission from '../../custom-view-installation-permission'; +import type { TCustomViewInstallation } from './types'; + +const [getOlderDate, getNewerDate] = createRelatedDates(); + +const generator = Generator({ + fields: { + id: fake((f) => f.string.uuid()), + createdAt: fake(getOlderDate), + updatedAt: fake(getNewerDate), + acceptedPermissions: fake(() => [ + CustomViewInstallationPermission.presets.ViewOnlyPermissions(), + CustomViewInstallationPermission.presets.ManageOnlyPermissions(), + ]), + projects: fake(() => []), + installInAllProjects: fake((f) => f.datatype.boolean()), + owner: fake(() => ({})), + ownerId: fake((f) => f.string.uuid()), + }, +}); + +export default generator; diff --git a/models/custom-view/src/custom-view-installation/custom-view-installation/index.ts b/models/custom-view/src/custom-view-installation/custom-view-installation/index.ts new file mode 100644 index 000000000..153b04270 --- /dev/null +++ b/models/custom-view/src/custom-view-installation/custom-view-installation/index.ts @@ -0,0 +1,3 @@ +export { default as random } from './builder'; +export * as presets from './presets'; +export * from './types'; diff --git a/models/custom-view/src/custom-view-installation/custom-view-installation/presets/index.ts b/models/custom-view/src/custom-view-installation/custom-view-installation/presets/index.ts new file mode 100644 index 000000000..763e57fe0 --- /dev/null +++ b/models/custom-view/src/custom-view-installation/custom-view-installation/presets/index.ts @@ -0,0 +1,3 @@ +const presets = {}; + +export default presets; diff --git a/models/custom-view/src/custom-view-installation/custom-view-installation/transformers.ts b/models/custom-view/src/custom-view-installation/custom-view-installation/transformers.ts new file mode 100644 index 000000000..e2ebd4c36 --- /dev/null +++ b/models/custom-view/src/custom-view-installation/custom-view-installation/transformers.ts @@ -0,0 +1,25 @@ +import { Transformer } from '@commercetools-test-data/core'; +import type { + TCustomViewInstallation, + TCustomViewInstallationGraphql, +} from './types'; + +const transformers = { + default: Transformer( + 'default', + { + buildFields: ['acceptedPermissions', 'projects'], + } + ), + graphql: Transformer( + 'graphql', + { + buildFields: ['acceptedPermissions', 'projects'], + addFields: () => ({ + __typename: 'CustomViewInstallation', + }), + } + ), +}; + +export default transformers; diff --git a/models/custom-view/src/custom-view-installation/custom-view-installation/types.ts b/models/custom-view/src/custom-view-installation/custom-view-installation/types.ts new file mode 100644 index 000000000..68cceda0f --- /dev/null +++ b/models/custom-view/src/custom-view-installation/custom-view-installation/types.ts @@ -0,0 +1,13 @@ +import type { TBuilder } from '@commercetools-test-data/core'; +import type { TMcSettingsCustomViewInstallation } from '../../../../../graphql-types'; + +export type TCustomViewInstallationGraphql = TMcSettingsCustomViewInstallation; + +export type TCustomViewInstallation = Omit< + TCustomViewInstallationGraphql, + '__typename' +>; + +export type TCustomViewInstallationBuilder = TBuilder; +export type TCreateCustomViewInstallationBuilder = + () => TCustomViewInstallationBuilder; diff --git a/models/custom-view/src/custom-view-installation/index.ts b/models/custom-view/src/custom-view-installation/index.ts index d18a01a1d..42d3b3863 100644 --- a/models/custom-view/src/custom-view-installation/index.ts +++ b/models/custom-view/src/custom-view-installation/index.ts @@ -1,2 +1,3 @@ // Export models +export * as CustomViewInstallation from './custom-view-installation'; export * as RestrictedCustomViewInstallationForOrganization from './restricted-custom-view-installation-for-organization'; diff --git a/models/custom-view/src/custom-view-installation/restricted-custom-view-installation-for-organization/types.ts b/models/custom-view/src/custom-view-installation/restricted-custom-view-installation-for-organization/types.ts index 073f2128b..b4b0ef229 100644 --- a/models/custom-view/src/custom-view-installation/restricted-custom-view-installation-for-organization/types.ts +++ b/models/custom-view/src/custom-view-installation/restricted-custom-view-installation-for-organization/types.ts @@ -1,26 +1,13 @@ import type { TBuilder } from '@commercetools-test-data/core'; -import type { TCustomView } from '../../custom-view'; -import type { TCustomViewInstallationPermission } from '../../custom-view-installation-permission/types'; - -// TODO: generate graphql types and use those -type ProjectExtension = { - projectKey: string; -}; - -export type TRestrictedCustomViewInstallationForOrganization = { - acceptedPermissions: TCustomViewInstallationPermission[]; - createdAt: string; - customView: TCustomView; - id: string; - installInAllProjects: boolean; - projects: ProjectExtension[]; - updatedAt: string; -}; +import type { TMcSettingsRestrictedCustomViewInstallationForOrganization } from '../../../../../graphql-types'; export type TRestrictedCustomViewInstallationForOrganizationGraphql = - TRestrictedCustomViewInstallationForOrganization & { - __typename: 'RestrictedCustomViewInstallationForOrganization'; - }; + TMcSettingsRestrictedCustomViewInstallationForOrganization; + +export type TRestrictedCustomViewInstallationForOrganization = Omit< + TMcSettingsRestrictedCustomViewInstallationForOrganization, + '__typename' +>; export type TRestrictedCustomViewInstallationForOrganizationBuilder = TBuilder; diff --git a/models/custom-view/src/custom-view-installation/types.ts b/models/custom-view/src/custom-view-installation/types.ts index 4e2bbc669..0ad0feb2e 100644 --- a/models/custom-view/src/custom-view-installation/types.ts +++ b/models/custom-view/src/custom-view-installation/types.ts @@ -1,2 +1,3 @@ // Export types +export * from './custom-view-installation/types'; export * from './restricted-custom-view-installation-for-organization/types'; diff --git a/models/custom-view/src/custom-view/types.ts b/models/custom-view/src/custom-view/types.ts index 26af9d266..985aa8618 100644 --- a/models/custom-view/src/custom-view/types.ts +++ b/models/custom-view/src/custom-view/types.ts @@ -23,25 +23,6 @@ type CustomViewPermission = { oAuthScopes: string[]; }; -export type CustomViewInstallationPermission = { - createdAt: string; - id: string; - name: string; - oAuthScopes: string[]; - updatedAt: string; -}; - -export type CustomViewInstallation = { - acceptedPermissions: CustomViewInstallationPermission[]; - createdAt: string; - id: string; - installInAllProjects: boolean; - // owner: OrganizationExtension; - ownerId: string; - // projects: ProjectExtension[]; - updatedAt: string; -}; - export type TCustomView = { id: string; // owner: OrganizationExtension; diff --git a/models/custom-view/src/index.ts b/models/custom-view/src/index.ts index 76c55e652..68415577a 100644 --- a/models/custom-view/src/index.ts +++ b/models/custom-view/src/index.ts @@ -17,5 +17,8 @@ export * as CustomViewPermission from './custom-view-permission'; export * as CustomViewPermissionDraft from './custom-view-permission-draft'; export * as CustomViewTypeSettingsForCustomPanel from './custom-view-type-settings-for-custom-panel'; -export { RestrictedCustomViewInstallationForOrganization } from './custom-view-installation'; +export { + RestrictedCustomViewInstallationForOrganization, + CustomViewInstallation, +} from './custom-view-installation'; export * as CustomViewInstallationPermission from './custom-view-installation-permission'; From e8ed40b4075b821607f03d0954e35ef42df5e183 Mon Sep 17 00:00:00 2001 From: Kacper Krzywiec Date: Fri, 1 Dec 2023 14:40:42 +0100 Subject: [PATCH 6/7] chore: update changeset --- .changeset/blue-mangos-speak.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.changeset/blue-mangos-speak.md b/.changeset/blue-mangos-speak.md index 4af6daf53..30dfdbcf9 100644 --- a/.changeset/blue-mangos-speak.md +++ b/.changeset/blue-mangos-speak.md @@ -6,10 +6,15 @@ Allow to generate test data for Custom Views Installations. ```ts import { + CustomViewInstallation, RestrictedCustomViewInstallationForOrganization, + type TCustomViewInstallationGraphql, type TRestrictedCustomViewInstallationForOrganizationGraphql, } from '@commercetools-test-data/custom-view'; +const customViewInstallation = + CustomViewInstallation.random().buildGraphql(); + const restrictedCustomViewInstallationForOrganization = RestrictedCustomViewInstallationForOrganization.random().buildGraphql(); ``` From b9c6ab9a29b076af0a0f9436214c6b0abdf940ec Mon Sep 17 00:00:00 2001 From: Kacper Krzywiec Date: Fri, 1 Dec 2023 14:51:11 +0100 Subject: [PATCH 7/7] chore: add proper imports --- .../src/custom-view-installation-permission/generator.ts | 8 +++++++- .../src/custom-view-installation-permission/types.ts | 2 +- .../custom-view-installation/types.ts | 2 +- .../types.ts | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/models/custom-view/src/custom-view-installation-permission/generator.ts b/models/custom-view/src/custom-view-installation-permission/generator.ts index c8c6bfce9..a7d18e5cd 100644 --- a/models/custom-view/src/custom-view-installation-permission/generator.ts +++ b/models/custom-view/src/custom-view-installation-permission/generator.ts @@ -1,10 +1,16 @@ -import { Generator } from '@commercetools-test-data/core'; +import { Generator, fake } from '@commercetools-test-data/core'; +import { createRelatedDates } from '@commercetools-test-data/utils'; import sampleSize from 'lodash/sampleSize'; import { supportedViewOAuthScopes } from '../custom-view-permission/constants'; import type { TCustomViewInstallationPermission } from './types'; +const [getOlderDate, getNewerDate] = createRelatedDates(); + const generator = Generator({ fields: { + id: fake((f) => f.string.uuid()), + createdAt: fake(getOlderDate), + updatedAt: fake(getNewerDate), name: 'view', oAuthScopes: sampleSize(supportedViewOAuthScopes, 2), }, diff --git a/models/custom-view/src/custom-view-installation-permission/types.ts b/models/custom-view/src/custom-view-installation-permission/types.ts index 23cf6b228..617f82058 100644 --- a/models/custom-view/src/custom-view-installation-permission/types.ts +++ b/models/custom-view/src/custom-view-installation-permission/types.ts @@ -1,5 +1,5 @@ import type { TBuilder } from '@commercetools-test-data/core'; -import type { TMcSettingsCustomViewInstallationPermission } from '../../../../graphql-types'; +import type { TMcSettingsCustomViewInstallationPermission } from '@commercetools-test-data/graphql-types'; export type TCustomViewInstallationPermissionGraphql = TMcSettingsCustomViewInstallationPermission; diff --git a/models/custom-view/src/custom-view-installation/custom-view-installation/types.ts b/models/custom-view/src/custom-view-installation/custom-view-installation/types.ts index 68cceda0f..641ff1cb3 100644 --- a/models/custom-view/src/custom-view-installation/custom-view-installation/types.ts +++ b/models/custom-view/src/custom-view-installation/custom-view-installation/types.ts @@ -1,5 +1,5 @@ import type { TBuilder } from '@commercetools-test-data/core'; -import type { TMcSettingsCustomViewInstallation } from '../../../../../graphql-types'; +import type { TMcSettingsCustomViewInstallation } from '@commercetools-test-data/graphql-types'; export type TCustomViewInstallationGraphql = TMcSettingsCustomViewInstallation; diff --git a/models/custom-view/src/custom-view-installation/restricted-custom-view-installation-for-organization/types.ts b/models/custom-view/src/custom-view-installation/restricted-custom-view-installation-for-organization/types.ts index b4b0ef229..f4a593b1b 100644 --- a/models/custom-view/src/custom-view-installation/restricted-custom-view-installation-for-organization/types.ts +++ b/models/custom-view/src/custom-view-installation/restricted-custom-view-installation-for-organization/types.ts @@ -1,5 +1,5 @@ import type { TBuilder } from '@commercetools-test-data/core'; -import type { TMcSettingsRestrictedCustomViewInstallationForOrganization } from '../../../../../graphql-types'; +import type { TMcSettingsRestrictedCustomViewInstallationForOrganization } from '@commercetools-test-data/graphql-types'; export type TRestrictedCustomViewInstallationForOrganizationGraphql = TMcSettingsRestrictedCustomViewInstallationForOrganization;