diff --git a/.changeset/serious-ears-jog.md b/.changeset/serious-ears-jog.md new file mode 100644 index 00000000..07dbabe6 --- /dev/null +++ b/.changeset/serious-ears-jog.md @@ -0,0 +1,5 @@ +--- +"@labdigital/commercetools-mock": minor +--- + +Add a `strict` boolean option to make the mock service strict and throw errors when certain values are missing diff --git a/src/config.ts b/src/config.ts new file mode 100644 index 00000000..16fa1e24 --- /dev/null +++ b/src/config.ts @@ -0,0 +1,6 @@ +import type { AbstractStorage } from "./storage"; + +export type Config = { + strict: boolean; + storage: AbstractStorage; +}; diff --git a/src/ctMock.ts b/src/ctMock.ts index 6da46d44..cb1dc51c 100644 --- a/src/ctMock.ts +++ b/src/ctMock.ts @@ -14,7 +14,7 @@ import type { AbstractStorage } from "./storage"; import { InMemoryStorage } from "./storage"; // Services -import { warnDeprecation } from "./deprecation"; +import type { Config } from "./config"; import { mapHeaderType } from "./helpers"; import type { RepositoryMap } from "./repositories"; import { createRepositories } from "./repositories"; @@ -29,6 +29,7 @@ export type CommercetoolsMockOptions = { apiHost: RegExp | string; authHost: RegExp | string; silent: boolean; + strict: boolean; }; type AppOptions = { silent?: boolean }; @@ -39,7 +40,8 @@ const DEFAULT_OPTIONS: CommercetoolsMockOptions = { defaultProjectKey: undefined, apiHost: DEFAULT_API_HOSTNAME, authHost: DEFAULT_AUTH_HOSTNAME, - silent: false, + silent: true, + strict: false, }; const _globalListeners: SetupServer[] = []; @@ -74,7 +76,7 @@ export class CommercetoolsMock { } start() { - warnDeprecation( + process.emitWarning( "The start method is deprecated, use .registerHandlers() to bind to an msw server instead", ); @@ -84,7 +86,7 @@ export class CommercetoolsMock { } stop() { - warnDeprecation( + process.emitWarning( "The stop method is deprecated, use .registerHandlers() to bind to an msw server instead", ); this._mswServer?.close(); @@ -123,7 +125,11 @@ export class CommercetoolsMock { } private createApp(options?: AppOptions): express.Express { - this._repositories = createRepositories(this._storage); + const config: Config = { + strict: this.options.strict, + storage: this._storage, + }; + this._repositories = createRepositories(config); this._oauth2.setCustomerRepository(this._repositories.customer); const app = express(); @@ -292,7 +298,7 @@ export class CommercetoolsMock { if (this._mswServer !== undefined) { throw new Error("Server already started"); } else { - console.warn("Server wasn't stopped properly, clearing"); + process.emitWarning("Server wasn't stopped properly, clearing"); _globalListeners.forEach((listener) => listener.close()); } } diff --git a/src/deprecation.ts b/src/deprecation.ts deleted file mode 100644 index ffda8de7..00000000 --- a/src/deprecation.ts +++ /dev/null @@ -1,8 +0,0 @@ -const shownWarnings = new Set(); - -export const warnDeprecation = (msg: string) => { - if (!shownWarnings.has(msg)) { - console.warn(msg); - shownWarnings.add(msg); - } -}; diff --git a/src/index.test.ts b/src/index.test.ts index ecad4c3c..1abf99d3 100644 --- a/src/index.test.ts +++ b/src/index.test.ts @@ -1,8 +1,19 @@ import { type InvalidTokenError } from "@commercetools/platform-sdk"; import got from "got"; -import { expect, test } from "vitest"; +import { setupServer } from "msw/node"; +import { afterEach, beforeAll, expect, test } from "vitest"; import { CommercetoolsMock } from "./index"; +const mswServer = setupServer(); + +beforeAll(() => { + mswServer.listen({ onUnhandledRequest: "error" }); +}); + +afterEach(() => { + mswServer.resetHandlers(); +}); + test("node:fetch client", async () => { const ctMock = new CommercetoolsMock({ enableAuthentication: true, @@ -10,7 +21,7 @@ test("node:fetch client", async () => { apiHost: "https://localhost", authHost: "https://localhost:8080", }); - ctMock.start(); + ctMock.registerHandlers(mswServer); const authHeader = "Basic " + Buffer.from("foo:bar").toString("base64"); let response = await fetch("https://localhost:8080/oauth/token", { @@ -44,7 +55,6 @@ test("node:fetch client", async () => { limit: 20, results: [], }); - ctMock.stop(); }); test("got client", async () => { @@ -54,7 +64,7 @@ test("got client", async () => { apiHost: "https://localhost", authHost: "https://localhost:8080", }); - ctMock.start(); + ctMock.registerHandlers(mswServer); let response = await got.post<{ access_token: string }>( "https://localhost:8080/oauth/token", @@ -86,7 +96,6 @@ test("got client", async () => { limit: 20, results: [], }); - ctMock.stop(); }); test("Options.validateCredentials: true (error)", async () => { @@ -94,7 +103,7 @@ test("Options.validateCredentials: true (error)", async () => { enableAuthentication: true, validateCredentials: true, }); - ctMock.start(); + ctMock.registerHandlers(mswServer); const response = await got.get( "https://api.europe-west1.gcp.commercetools.com/my-project/orders", @@ -108,7 +117,6 @@ test("Options.validateCredentials: true (error)", async () => { ); expect(response.statusCode).toBe(401); expect(response.body.message).toBe("invalid_token"); - ctMock.stop(); }); test("Options.validateCredentials: false", async () => { @@ -116,7 +124,7 @@ test("Options.validateCredentials: false", async () => { enableAuthentication: true, validateCredentials: false, }); - ctMock.start(); + ctMock.registerHandlers(mswServer); const response = await got.get( "https://api.europe-west1.gcp.commercetools.com/my-project/orders", @@ -135,7 +143,6 @@ test("Options.validateCredentials: false", async () => { limit: 20, results: [], }); - ctMock.stop(); }); test("Options.enableAuthentication: false", async () => { @@ -143,7 +150,7 @@ test("Options.enableAuthentication: false", async () => { enableAuthentication: false, validateCredentials: false, }); - ctMock.start(); + ctMock.registerHandlers(mswServer); const response = await got.get( "https://api.europe-west1.gcp.commercetools.com/my-project/orders", @@ -159,7 +166,6 @@ test("Options.enableAuthentication: false", async () => { limit: 20, results: [], }); - ctMock.stop(); }); test("Options.apiHost: is overridden is set", async () => { @@ -168,7 +174,7 @@ test("Options.apiHost: is overridden is set", async () => { validateCredentials: false, apiHost: "http://api.localhost", }); - ctMock.start(); + ctMock.registerHandlers(mswServer); const response = await got.get("http://api.localhost/my-project/orders", { responseType: "json", @@ -181,7 +187,6 @@ test("Options.apiHost: is overridden is set", async () => { limit: 20, results: [], }); - ctMock.stop(); }); test("Options.authHost: is set", async () => { @@ -190,7 +195,7 @@ test("Options.authHost: is set", async () => { validateCredentials: true, authHost: "http://auth.localhost", }); - ctMock.start(); + ctMock.registerHandlers(mswServer); const response = await got.post<{ access_token: string }>( "http://auth.localhost/oauth/token", @@ -216,7 +221,7 @@ test("apiHost mock proxy: querystring", async () => { validateCredentials: false, apiHost: "http://api.localhost", }); - ctMock.start(); + ctMock.registerHandlers(mswServer); const response = await got.get("http://api.localhost/my-project/orders", { responseType: "json", @@ -234,5 +239,4 @@ test("apiHost mock proxy: querystring", async () => { limit: 20, results: [], }); - ctMock.stop(); }); diff --git a/src/oauth/server.test.ts b/src/oauth/server.test.ts index 6fae431a..a985107f 100644 --- a/src/oauth/server.test.ts +++ b/src/oauth/server.test.ts @@ -1,6 +1,7 @@ import express from "express"; import supertest from "supertest"; import { beforeEach, describe, expect, it } from "vitest"; +import type { Config } from "~src/config"; import { getBaseResourceProperties } from "../helpers"; import { hashPassword } from "../lib/password"; import { CustomerRepository } from "../repositories/customer"; @@ -21,7 +22,8 @@ describe("OAuth2Server", () => { app.use(server.createRouter()); storage = new InMemoryStorage(); - customerRepository = new CustomerRepository(storage); + const config: Config = { storage, strict: false }; + customerRepository = new CustomerRepository(config); server.setCustomerRepository(customerRepository); }); diff --git a/src/product-projection-search.ts b/src/product-projection-search.ts index d930d964..a7c5a09b 100644 --- a/src/product-projection-search.ts +++ b/src/product-projection-search.ts @@ -9,6 +9,7 @@ import type { RangeFacetResult, TermFacetResult, } from "@commercetools/platform-sdk"; +import type { Config } from "./config"; import { CommercetoolsError } from "./exceptions"; import { nestedLookup } from "./helpers"; import type { @@ -51,8 +52,8 @@ export type ProductProjectionSearchParams = { export class ProductProjectionSearch { protected _storage: AbstractStorage; - constructor(storage: AbstractStorage) { - this._storage = storage; + constructor(config: Config) { + this._storage = config.storage; } search( diff --git a/src/product-search.ts b/src/product-search.ts index 871974c7..0174f5ea 100644 --- a/src/product-search.ts +++ b/src/product-search.ts @@ -6,6 +6,7 @@ import type { ProductSearchRequest, ProductSearchResult, } from "@commercetools/platform-sdk"; +import type { Config } from "./config"; import { CommercetoolsError } from "./exceptions"; import { parseSearchQuery } from "./lib/productSearchFilter"; import { validateSearchQuery } from "./lib/searchQueryTypeChecker"; @@ -15,8 +16,8 @@ import type { AbstractStorage } from "./storage"; export class ProductSearch { protected _storage: AbstractStorage; - constructor(storage: AbstractStorage) { - this._storage = storage; + constructor(config: Config) { + this._storage = config.storage; } search( diff --git a/src/repositories/abstract.ts b/src/repositories/abstract.ts index ff1f062f..98620dfb 100644 --- a/src/repositories/abstract.ts +++ b/src/repositories/abstract.ts @@ -7,6 +7,7 @@ import type { UpdateAction, } from "@commercetools/platform-sdk"; import deepEqual from "deep-equal"; +import type { Config } from "~src/config"; import { CommercetoolsError } from "~src/exceptions"; import { cloneObject } from "../helpers"; import type { AbstractStorage } from "../storage"; @@ -40,10 +41,13 @@ export type RepositoryContext = { export abstract class AbstractRepository { protected _storage: AbstractStorage; + protected config: Config; + protected actions: AbstractUpdateHandler | undefined; - constructor(storage: AbstractStorage) { - this._storage = storage; + constructor(config: Config) { + this.config = config; + this._storage = config.storage; } abstract saveNew({ projectKey }: RepositoryContext, resource: R): void; @@ -92,8 +96,8 @@ export abstract class AbstractResourceRepository< > extends AbstractRepository { protected _typeId: T; - constructor(typeId: T, storage: AbstractStorage) { - super(storage); + constructor(typeId: T, config: Config) { + super(config); this._typeId = typeId; } diff --git a/src/repositories/associate-role.ts b/src/repositories/associate-role.ts index 7c48e9c2..c4dff3c7 100644 --- a/src/repositories/associate-role.ts +++ b/src/repositories/associate-role.ts @@ -10,8 +10,8 @@ import type { AssociateRoleSetPermissionsAction, AssociateRoleUpdateAction, } from "@commercetools/platform-sdk"; +import type { Config } from "~src/config"; import { getBaseResourceProperties } from "../helpers"; -import type { AbstractStorage } from "../storage/abstract"; import type { Writable } from "../types"; import type { UpdateHandlerInterface } from "./abstract"; import { @@ -22,8 +22,8 @@ import { import { createCustomFields } from "./helpers"; export class AssociateRoleRepository extends AbstractResourceRepository<"associate-role"> { - constructor(storage: AbstractStorage) { - super("associate-role", storage); + constructor(config: Config) { + super("associate-role", config); this.actions = new AssociateRoleUpdateHandler(this._storage); } diff --git a/src/repositories/attribute-group.ts b/src/repositories/attribute-group.ts index d8962de8..6db5882b 100644 --- a/src/repositories/attribute-group.ts +++ b/src/repositories/attribute-group.ts @@ -7,8 +7,8 @@ import type { AttributeGroupSetKeyAction, AttributeGroupUpdateAction, } from "@commercetools/platform-sdk"; +import type { Config } from "~src/config"; import { getBaseResourceProperties } from "../helpers"; -import type { AbstractStorage } from "../storage/abstract"; import type { Writable } from "../types"; import type { UpdateHandlerInterface } from "./abstract"; import { @@ -18,8 +18,8 @@ import { } from "./abstract"; export class AttributeGroupRepository extends AbstractResourceRepository<"attribute-group"> { - constructor(storage: AbstractStorage) { - super("attribute-group", storage); + constructor(config: Config) { + super("attribute-group", config); this.actions = new AttributeGroupUpdateHandler(this._storage); } diff --git a/src/repositories/business-unit.ts b/src/repositories/business-unit.ts index 1c256983..3b4b106c 100644 --- a/src/repositories/business-unit.ts +++ b/src/repositories/business-unit.ts @@ -23,7 +23,7 @@ import { type Company, type Division, } from "@commercetools/platform-sdk"; -import type { AbstractStorage } from "~src/storage"; +import type { Config } from "~src/config"; import { generateRandomString, getBaseResourceProperties } from "../helpers"; import type { Writable } from "../types"; import type { UpdateHandlerInterface } from "./abstract"; @@ -41,8 +41,8 @@ import { } from "./helpers"; export class BusinessUnitRepository extends AbstractResourceRepository<"business-unit"> { - constructor(storage: AbstractStorage) { - super("business-unit", storage); + constructor(config: Config) { + super("business-unit", config); this.actions = new BusinessUnitUpdateHandler(this._storage); } diff --git a/src/repositories/cart-discount/index.ts b/src/repositories/cart-discount/index.ts index 737b51a0..ebd04ca5 100644 --- a/src/repositories/cart-discount/index.ts +++ b/src/repositories/cart-discount/index.ts @@ -7,8 +7,8 @@ import type { CartDiscountValueGiftLineItem, CartDiscountValueRelative, } from "@commercetools/platform-sdk"; +import type { Config } from "~src/config"; import { getBaseResourceProperties } from "~src/helpers"; -import type { AbstractStorage } from "~src/storage/abstract"; import { AbstractResourceRepository, type RepositoryContext, @@ -21,9 +21,9 @@ import { import { CartDiscountUpdateHandler } from "./actions"; export class CartDiscountRepository extends AbstractResourceRepository<"cart-discount"> { - constructor(storage: AbstractStorage) { - super("cart-discount", storage); - this.actions = new CartDiscountUpdateHandler(storage); + constructor(config: Config) { + super("cart-discount", config); + this.actions = new CartDiscountUpdateHandler(config.storage); } create(context: RepositoryContext, draft: CartDiscountDraft): CartDiscount { @@ -80,7 +80,5 @@ export class CartDiscountRepository extends AbstractResourceRepository<"cart-dis } as CartDiscountValueRelative; } } - - return value; } } diff --git a/src/repositories/cart/index.test.ts b/src/repositories/cart/index.test.ts index ea46a9cc..2515ef56 100644 --- a/src/repositories/cart/index.test.ts +++ b/src/repositories/cart/index.test.ts @@ -1,11 +1,13 @@ import type { CartDraft, LineItem } from "@commercetools/platform-sdk"; import { describe, expect, test } from "vitest"; +import type { Config } from "~src/config"; import { InMemoryStorage } from "~src/storage"; import { CartRepository } from "./index"; describe("Cart repository", () => { const storage = new InMemoryStorage(); - const repository = new CartRepository(storage); + const config: Config = { storage, strict: false }; + const repository = new CartRepository(config); test("create cart in store", async () => { storage.add("dummy", "product", { diff --git a/src/repositories/cart/index.ts b/src/repositories/cart/index.ts index 3eb1a246..4cf1eb43 100644 --- a/src/repositories/cart/index.ts +++ b/src/repositories/cart/index.ts @@ -8,9 +8,9 @@ import { type ProductPagedQueryResponse, } from "@commercetools/platform-sdk"; import { v4 as uuidv4 } from "uuid"; +import type { Config } from "~src/config"; import { CommercetoolsError } from "~src/exceptions"; import { getBaseResourceProperties } from "~src/helpers"; -import type { AbstractStorage } from "~src/storage/abstract"; import type { Writable } from "~src/types"; import { AbstractResourceRepository, @@ -21,8 +21,8 @@ import { CartUpdateHandler } from "./actions"; import { calculateCartTotalPrice, selectPrice } from "./helpers"; export class CartRepository extends AbstractResourceRepository<"cart"> { - constructor(storage: AbstractStorage) { - super("cart", storage); + constructor(config: Config) { + super("cart", config); this.actions = new CartUpdateHandler(this._storage); } diff --git a/src/repositories/category/index.test.ts b/src/repositories/category/index.test.ts index 701746a8..48ac4c31 100644 --- a/src/repositories/category/index.test.ts +++ b/src/repositories/category/index.test.ts @@ -1,10 +1,12 @@ import { describe, expect, test } from "vitest"; +import type { Config } from "~src/config"; import { InMemoryStorage } from "~src/storage"; import { CategoryRepository } from "./index"; describe("Order repository", () => { const storage = new InMemoryStorage(); - const repository = new CategoryRepository(storage); + const config: Config = { storage, strict: false }; + const repository = new CategoryRepository(config); test("valid ancestors", async () => { const root = repository.create( diff --git a/src/repositories/category/index.ts b/src/repositories/category/index.ts index 05e66967..1313b3c1 100644 --- a/src/repositories/category/index.ts +++ b/src/repositories/category/index.ts @@ -4,9 +4,9 @@ import type { CategoryReference, } from "@commercetools/platform-sdk"; import { v4 as uuidv4 } from "uuid"; +import type { Config } from "~src/config"; import { getBaseResourceProperties } from "~src/helpers"; import { parseExpandClause } from "~src/lib/expandParser"; -import type { AbstractStorage } from "~src/storage/abstract"; import type { Writable } from "~src/types"; import type { GetParams } from "../abstract"; import { @@ -17,8 +17,8 @@ import { createCustomFields } from "../helpers"; import { CategoryUpdateHandler } from "./actions"; export class CategoryRepository extends AbstractResourceRepository<"category"> { - constructor(storage: AbstractStorage) { - super("category", storage); + constructor(config: Config) { + super("category", config); this.actions = new CategoryUpdateHandler(this._storage); } diff --git a/src/repositories/channel.ts b/src/repositories/channel.ts index bba1d443..1147f63c 100644 --- a/src/repositories/channel.ts +++ b/src/repositories/channel.ts @@ -10,8 +10,8 @@ import type { ChannelSetGeoLocationAction, ChannelUpdateAction, } from "@commercetools/platform-sdk"; +import type { Config } from "~src/config"; import { getBaseResourceProperties } from "../helpers"; -import type { AbstractStorage } from "../storage/abstract"; import type { Writable } from "../types"; import type { UpdateHandlerInterface } from "./abstract"; import { @@ -22,8 +22,8 @@ import { import { createAddress, createCustomFields } from "./helpers"; export class ChannelRepository extends AbstractResourceRepository<"channel"> { - constructor(storage: AbstractStorage) { - super("channel", storage); + constructor(config: Config) { + super("channel", config); this.actions = new ChannelUpdateHandler(this._storage); } diff --git a/src/repositories/custom-object.ts b/src/repositories/custom-object.ts index bd9f1a85..9a3ae14a 100644 --- a/src/repositories/custom-object.ts +++ b/src/repositories/custom-object.ts @@ -3,8 +3,8 @@ import type { CustomObjectDraft, InvalidOperationError, } from "@commercetools/platform-sdk"; +import type { Config } from "~src/config"; import { CommercetoolsError } from "~src/exceptions"; -import type { AbstractStorage } from "~src/storage"; import { cloneObject, getBaseResourceProperties } from "../helpers"; import type { Writable } from "../types"; import type { QueryParams } from "./abstract"; @@ -12,8 +12,8 @@ import { AbstractResourceRepository, type RepositoryContext } from "./abstract"; import { checkConcurrentModification } from "./errors"; export class CustomObjectRepository extends AbstractResourceRepository<"key-value-document"> { - constructor(storage: AbstractStorage) { - super("key-value-document", storage); + constructor(config: Config) { + super("key-value-document", config); } create( diff --git a/src/repositories/customer-group.ts b/src/repositories/customer-group.ts index e8d027ad..e3b67f92 100644 --- a/src/repositories/customer-group.ts +++ b/src/repositories/customer-group.ts @@ -7,8 +7,8 @@ import type { CustomerGroupSetKeyAction, CustomerGroupUpdateAction, } from "@commercetools/platform-sdk"; +import type { Config } from "~src/config"; import { getBaseResourceProperties } from "../helpers"; -import type { AbstractStorage } from "../storage/abstract"; import type { Writable } from "../types"; import type { UpdateHandlerInterface } from "./abstract"; import { @@ -19,9 +19,9 @@ import { import { createCustomFields } from "./helpers"; export class CustomerGroupRepository extends AbstractResourceRepository<"customer-group"> { - constructor(storage: AbstractStorage) { - super("customer-group", storage); - this.actions = new CustomerGroupUpdateHandler(storage); + constructor(config: Config) { + super("customer-group", config); + this.actions = new CustomerGroupUpdateHandler(config.storage); } create(context: RepositoryContext, draft: CustomerGroupDraft): CustomerGroup { diff --git a/src/repositories/customer/index.test.ts b/src/repositories/customer/index.test.ts index a0288ec0..caa88d49 100644 --- a/src/repositories/customer/index.test.ts +++ b/src/repositories/customer/index.test.ts @@ -1,11 +1,13 @@ import type { Store } from "@commercetools/platform-sdk"; import { describe, expect, test } from "vitest"; +import type { Config } from "~src/config"; import { InMemoryStorage } from "~src/storage"; import { CustomerRepository } from "./index"; describe("Customer repository", () => { const storage = new InMemoryStorage(); - const repository = new CustomerRepository(storage); + const config: Config = { storage, strict: false }; + const repository = new CustomerRepository(config); test("query by lowercaseEmail", async () => { const customer = repository.create( diff --git a/src/repositories/customer/index.ts b/src/repositories/customer/index.ts index 586bbd03..94fab6c7 100644 --- a/src/repositories/customer/index.ts +++ b/src/repositories/customer/index.ts @@ -13,6 +13,7 @@ import type { StoreKeyReference, StoreResourceIdentifier, } from "@commercetools/platform-sdk"; +import type { Config } from "~src/config"; import { CommercetoolsError } from "~src/exceptions"; import { generateRandomString, getBaseResourceProperties } from "~src/helpers"; import { @@ -21,7 +22,6 @@ import { hashPassword, validatePasswordResetToken, } from "~src/lib/password"; -import type { AbstractStorage } from "~src/storage/abstract"; import type { ResourceMap, ShallowWritable, Writable } from "~src/types"; import { AbstractResourceRepository, @@ -31,9 +31,9 @@ import { createCustomFields } from "../helpers"; import { CustomerUpdateHandler } from "./actions"; export class CustomerRepository extends AbstractResourceRepository<"customer"> { - constructor(storage: AbstractStorage) { - super("customer", storage); - this.actions = new CustomerUpdateHandler(storage); + constructor(config: Config) { + super("customer", config); + this.actions = new CustomerUpdateHandler(config.storage); } create(context: RepositoryContext, draft: CustomerDraft): Customer { diff --git a/src/repositories/discount-code/index.ts b/src/repositories/discount-code/index.ts index ead1590c..9b1c5f87 100644 --- a/src/repositories/discount-code/index.ts +++ b/src/repositories/discount-code/index.ts @@ -3,8 +3,8 @@ import type { DiscountCode, DiscountCodeDraft, } from "@commercetools/platform-sdk"; +import type { Config } from "~src/config"; import { getBaseResourceProperties } from "~src/helpers"; -import type { AbstractStorage } from "~src/storage/abstract"; import { AbstractResourceRepository, type RepositoryContext, @@ -13,9 +13,9 @@ import { createCustomFields } from "../helpers"; import { DiscountCodeUpdateHandler } from "./actions"; export class DiscountCodeRepository extends AbstractResourceRepository<"discount-code"> { - constructor(storage: AbstractStorage) { - super("discount-code", storage); - this.actions = new DiscountCodeUpdateHandler(storage); + constructor(config: Config) { + super("discount-code", config); + this.actions = new DiscountCodeUpdateHandler(config.storage); } create(context: RepositoryContext, draft: DiscountCodeDraft): DiscountCode { diff --git a/src/repositories/extension.ts b/src/repositories/extension.ts index 571c90d3..156c0c6c 100644 --- a/src/repositories/extension.ts +++ b/src/repositories/extension.ts @@ -7,7 +7,7 @@ import type { ExtensionSetTimeoutInMsAction, ExtensionUpdateAction, } from "@commercetools/platform-sdk"; -import type { AbstractStorage } from "~src/storage"; +import type { Config } from "~src/config"; import { getBaseResourceProperties } from "../helpers"; import { maskSecretValue } from "../lib/masking"; import type { Writable } from "../types"; @@ -19,9 +19,9 @@ import { } from "./abstract"; export class ExtensionRepository extends AbstractResourceRepository<"extension"> { - constructor(storage: AbstractStorage) { - super("extension", storage); - this.actions = new ExtensionUpdateHandler(storage); + constructor(config: Config) { + super("extension", config); + this.actions = new ExtensionUpdateHandler(config.storage); } create(context: RepositoryContext, draft: ExtensionDraft): Extension { diff --git a/src/repositories/index.ts b/src/repositories/index.ts index 21a9c499..21547b44 100644 --- a/src/repositories/index.ts +++ b/src/repositories/index.ts @@ -1,5 +1,5 @@ +import type { Config } from "~src/config"; import { ProductTailoringRepository } from "~src/repositories/product-tailoring"; -import type { AbstractStorage } from "../storage"; import { AsAssociateCartRepository, AsAssociateOrderRepository, @@ -44,50 +44,50 @@ import { ZoneRepository } from "./zone"; export type RepositoryMap = ReturnType; -export const createRepositories = (storage: AbstractStorage) => ({ +export const createRepositories = (config: Config) => ({ "as-associate": { - cart: new AsAssociateCartRepository(storage), - order: new AsAssociateOrderRepository(storage), + cart: new AsAssociateCartRepository(config), + order: new AsAssociateOrderRepository(config), }, - "associate-role": new AssociateRoleRepository(storage), - "attribute-group": new AttributeGroupRepository(storage), - "business-unit": new BusinessUnitRepository(storage), - "category": new CategoryRepository(storage), - "cart": new CartRepository(storage), - "cart-discount": new CartDiscountRepository(storage), - "customer": new CustomerRepository(storage), - "channel": new ChannelRepository(storage), - "customer-group": new CustomerGroupRepository(storage), - "discount-code": new DiscountCodeRepository(storage), - "extension": new ExtensionRepository(storage), - "inventory-entry": new InventoryEntryRepository(storage), - "key-value-document": new CustomObjectRepository(storage), - "order": new OrderRepository(storage), - "order-edit": new OrderEditRepository(storage), - "payment": new PaymentRepository(storage), - "my-cart": new CartRepository(storage), - "my-order": new MyOrderRepository(storage), - "my-customer": new MyCustomerRepository(storage), - "my-payment": new PaymentRepository(storage), - "my-shopping-list": new ShoppingListRepository(storage), - "product": new ProductRepository(storage), - "product-type": new ProductTypeRepository(storage), - "product-discount": new ProductDiscountRepository(storage), - "product-projection": new ProductProjectionRepository(storage), - "product-selection": new ProductSelectionRepository(storage), - "product-tailoring": new ProductTailoringRepository(storage), - "project": new ProjectRepository(storage), - "review": new ReviewRepository(storage), - "quote": new QuoteRepository(storage), - "quote-request": new QuoteRequestRepository(storage), - "shipping-method": new ShippingMethodRepository(storage), - "shopping-list": new ShoppingListRepository(storage), - "staged-quote": new StagedQuoteRepository(storage), - "standalone-price": new StandAlonePriceRepository(storage), - "state": new StateRepository(storage), - "store": new StoreRepository(storage), - "subscription": new SubscriptionRepository(storage), - "tax-category": new TaxCategoryRepository(storage), - "type": new TypeRepository(storage), - "zone": new ZoneRepository(storage), + "associate-role": new AssociateRoleRepository(config), + "attribute-group": new AttributeGroupRepository(config), + "business-unit": new BusinessUnitRepository(config), + "category": new CategoryRepository(config), + "cart": new CartRepository(config), + "cart-discount": new CartDiscountRepository(config), + "customer": new CustomerRepository(config), + "channel": new ChannelRepository(config), + "customer-group": new CustomerGroupRepository(config), + "discount-code": new DiscountCodeRepository(config), + "extension": new ExtensionRepository(config), + "inventory-entry": new InventoryEntryRepository(config), + "key-value-document": new CustomObjectRepository(config), + "order": new OrderRepository(config), + "order-edit": new OrderEditRepository(config), + "payment": new PaymentRepository(config), + "my-cart": new CartRepository(config), + "my-order": new MyOrderRepository(config), + "my-customer": new MyCustomerRepository(config), + "my-payment": new PaymentRepository(config), + "my-shopping-list": new ShoppingListRepository(config), + "product": new ProductRepository(config), + "product-type": new ProductTypeRepository(config), + "product-discount": new ProductDiscountRepository(config), + "product-projection": new ProductProjectionRepository(config), + "product-selection": new ProductSelectionRepository(config), + "product-tailoring": new ProductTailoringRepository(config), + "project": new ProjectRepository(config), + "review": new ReviewRepository(config), + "quote": new QuoteRepository(config), + "quote-request": new QuoteRequestRepository(config), + "shipping-method": new ShippingMethodRepository(config), + "shopping-list": new ShoppingListRepository(config), + "staged-quote": new StagedQuoteRepository(config), + "standalone-price": new StandAlonePriceRepository(config), + "state": new StateRepository(config), + "store": new StoreRepository(config), + "subscription": new SubscriptionRepository(config), + "tax-category": new TaxCategoryRepository(config), + "type": new TypeRepository(config), + "zone": new ZoneRepository(config), }); diff --git a/src/repositories/inventory-entry/index.ts b/src/repositories/inventory-entry/index.ts index 587e99bd..1cc4aaf1 100644 --- a/src/repositories/inventory-entry/index.ts +++ b/src/repositories/inventory-entry/index.ts @@ -2,8 +2,8 @@ import type { InventoryEntry, InventoryEntryDraft, } from "@commercetools/platform-sdk"; +import type { Config } from "~src/config"; import { getBaseResourceProperties } from "~src/helpers"; -import type { AbstractStorage } from "~src/storage/abstract"; import { AbstractResourceRepository, type RepositoryContext, @@ -12,9 +12,9 @@ import { createCustomFields } from "../helpers"; import { InventoryEntryUpdateHandler } from "./actions"; export class InventoryEntryRepository extends AbstractResourceRepository<"inventory-entry"> { - constructor(storage: AbstractStorage) { - super("inventory-entry", storage); - this.actions = new InventoryEntryUpdateHandler(storage); + constructor(config: Config) { + super("inventory-entry", config); + this.actions = new InventoryEntryUpdateHandler(config.storage); } create( diff --git a/src/repositories/order-edit.ts b/src/repositories/order-edit.ts index aedda377..87b476ac 100644 --- a/src/repositories/order-edit.ts +++ b/src/repositories/order-edit.ts @@ -3,14 +3,14 @@ import type { OrderEditDraft, OrderEditResult, } from "@commercetools/platform-sdk"; -import type { AbstractStorage } from "~src/storage"; +import type { Config } from "~src/config"; import { getBaseResourceProperties } from "../helpers"; import type { RepositoryContext } from "./abstract"; import { AbstractResourceRepository } from "./abstract"; export class OrderEditRepository extends AbstractResourceRepository<"order-edit"> { - constructor(storage: AbstractStorage) { - super("order-edit", storage); + constructor(config: Config) { + super("order-edit", config); } create(context: RepositoryContext, draft: OrderEditDraft): OrderEdit { diff --git a/src/repositories/order/index.test.ts b/src/repositories/order/index.test.ts index 703261de..ae623796 100644 --- a/src/repositories/order/index.test.ts +++ b/src/repositories/order/index.test.ts @@ -4,12 +4,17 @@ import type { OrderImportDraft, } from "@commercetools/platform-sdk"; import { describe, expect, test } from "vitest"; +import type { Config } from "~src/config"; import { InMemoryStorage } from "~src/storage"; import { OrderRepository } from "./index"; describe("Order repository", () => { const storage = new InMemoryStorage(); - const repository = new OrderRepository(storage); + const config: Config = { + storage, + strict: false, + }; + const repository = new OrderRepository(config); test("create from cart", async () => { const cart: Cart = { diff --git a/src/repositories/order/index.ts b/src/repositories/order/index.ts index e22bfb6a..1ee21c5e 100644 --- a/src/repositories/order/index.ts +++ b/src/repositories/order/index.ts @@ -14,9 +14,9 @@ import type { ProductVariant, } from "@commercetools/platform-sdk"; import assert from "assert"; +import type { Config } from "~src/config"; import { CommercetoolsError } from "~src/exceptions"; import { generateRandomString, getBaseResourceProperties } from "~src/helpers"; -import type { AbstractStorage } from "~src/storage/abstract"; import type { RepositoryContext } from "../abstract"; import { AbstractResourceRepository, type QueryParams } from "../abstract"; import { @@ -30,9 +30,9 @@ import { import { OrderUpdateHandler } from "./actions"; export class OrderRepository extends AbstractResourceRepository<"order"> { - constructor(storage: AbstractStorage) { - super("order", storage); - this.actions = new OrderUpdateHandler(storage); + constructor(config: Config) { + super("order", config); + this.actions = new OrderUpdateHandler(config.storage); } create(context: RepositoryContext, draft: OrderFromCartDraft): Order { diff --git a/src/repositories/payment/index.ts b/src/repositories/payment/index.ts index 940ba073..1ca307d5 100644 --- a/src/repositories/payment/index.ts +++ b/src/repositories/payment/index.ts @@ -3,8 +3,8 @@ import type { PaymentDraft, StateReference, } from "@commercetools/platform-sdk"; +import type { Config } from "~src/config"; import { getBaseResourceProperties } from "~src/helpers"; -import type { AbstractStorage } from "~src/storage/abstract"; import type { RepositoryContext } from "../abstract"; import { AbstractResourceRepository } from "../abstract"; import { @@ -16,8 +16,8 @@ import { PaymentUpdateHandler } from "./actions"; import { transactionFromTransactionDraft } from "./helpers"; export class PaymentRepository extends AbstractResourceRepository<"payment"> { - constructor(storage: AbstractStorage) { - super("payment", storage); + constructor(config: Config) { + super("payment", config); this.actions = new PaymentUpdateHandler(this._storage); } diff --git a/src/repositories/product-discount.ts b/src/repositories/product-discount.ts index ce89a356..13a90b90 100644 --- a/src/repositories/product-discount.ts +++ b/src/repositories/product-discount.ts @@ -18,16 +18,16 @@ import type { ProductDiscountValueExternal, ProductDiscountValueRelative, } from "@commercetools/platform-sdk"; +import type { Config } from "~src/config"; import { getBaseResourceProperties } from "../helpers"; -import type { AbstractStorage } from "../storage/abstract"; import type { Writable } from "../types"; import type { RepositoryContext, UpdateHandlerInterface } from "./abstract"; import { AbstractResourceRepository, AbstractUpdateHandler } from "./abstract"; import { createTypedMoney } from "./helpers"; export class ProductDiscountRepository extends AbstractResourceRepository<"product-discount"> { - constructor(storage: AbstractStorage) { - super("product-discount", storage); + constructor(config: Config) { + super("product-discount", config); this.actions = new ProductDiscountUpdateHandler(this._storage); } diff --git a/src/repositories/product-projection.ts b/src/repositories/product-projection.ts index 5a8ce8c5..08398fce 100644 --- a/src/repositories/product-projection.ts +++ b/src/repositories/product-projection.ts @@ -4,11 +4,11 @@ import type { ProductProjection, QueryParam, } from "@commercetools/platform-sdk"; +import type { Config } from "~src/config"; import { CommercetoolsError } from "~src/exceptions"; import { parseQueryExpression } from "../lib/predicateParser"; import { applyPriceSelector } from "../priceSelector"; import { ProductProjectionSearch } from "../product-projection-search"; -import { type AbstractStorage } from "../storage"; import type { GetParams, RepositoryContext } from "./abstract"; import { AbstractResourceRepository } from "./abstract"; @@ -32,9 +32,9 @@ export type ProductProjectionQueryParams = { export class ProductProjectionRepository extends AbstractResourceRepository<"product-projection"> { protected _searchService: ProductProjectionSearch; - constructor(storage: AbstractStorage) { - super("product-projection", storage); - this._searchService = new ProductProjectionSearch(storage); + constructor(config: Config) { + super("product-projection", config); + this._searchService = new ProductProjectionSearch(config); } create(context: RepositoryContext, draft: ProductDraft): ProductProjection { diff --git a/src/repositories/product-selection.ts b/src/repositories/product-selection.ts index 0570f340..cb4a57d9 100644 --- a/src/repositories/product-selection.ts +++ b/src/repositories/product-selection.ts @@ -5,16 +5,16 @@ import type { ProductSelectionSetCustomTypeAction, ProductSelectionUpdateAction, } from "@commercetools/platform-sdk"; +import type { Config } from "~src/config"; import { createCustomFields } from "~src/repositories/helpers"; import { getBaseResourceProperties } from "../helpers"; -import type { AbstractStorage } from "../storage/abstract"; import type { Writable } from "../types"; import type { RepositoryContext, UpdateHandlerInterface } from "./abstract"; import { AbstractResourceRepository, AbstractUpdateHandler } from "./abstract"; export class ProductSelectionRepository extends AbstractResourceRepository<"product-selection"> { - constructor(storage: AbstractStorage) { - super("product-selection", storage); + constructor(config: Config) { + super("product-selection", config); this.actions = new ProductSelectionUpdateHandler(this._storage); } diff --git a/src/repositories/product-tailoring.ts b/src/repositories/product-tailoring.ts index 4d3b9cd2..310754f7 100644 --- a/src/repositories/product-tailoring.ts +++ b/src/repositories/product-tailoring.ts @@ -2,13 +2,13 @@ import type { ProductTailoring, ProductTailoringUpdateAction, } from "@commercetools/platform-sdk"; -import type { AbstractStorage } from "~src/storage"; +import type { Config } from "~src/config"; import type { RepositoryContext, UpdateHandlerInterface } from "./abstract"; import { AbstractResourceRepository, AbstractUpdateHandler } from "./abstract"; export class ProductTailoringRepository extends AbstractResourceRepository<"product-tailoring"> { - constructor(storage: AbstractStorage) { - super("product-tailoring", storage); + constructor(config: Config) { + super("product-tailoring", config); this.actions = new ProductTailoringUpdateHandler(this._storage); } diff --git a/src/repositories/product-type.ts b/src/repositories/product-type.ts index b9ca4f58..0f015d6e 100644 --- a/src/repositories/product-type.ts +++ b/src/repositories/product-type.ts @@ -12,16 +12,16 @@ import type { ProductTypeRemoveEnumValuesAction, ProductTypeUpdateAction, } from "@commercetools/platform-sdk"; +import type { Config } from "~src/config"; import { getBaseResourceProperties } from "../helpers"; -import type { AbstractStorage } from "../storage/abstract"; import type { Writable } from "../types"; import type { RepositoryContext, UpdateHandlerInterface } from "./abstract"; import { AbstractResourceRepository, AbstractUpdateHandler } from "./abstract"; export class ProductTypeRepository extends AbstractResourceRepository<"product-type"> { - constructor(storage: AbstractStorage) { - super("product-type", storage); - this.actions = new ProductTypeUpdateHandler(storage); + constructor(config: Config) { + super("product-type", config); + this.actions = new ProductTypeUpdateHandler(config.storage); } create(context: RepositoryContext, draft: ProductTypeDraft): ProductType { diff --git a/src/repositories/product/index.ts b/src/repositories/product/index.ts index 8f7d3f41..f57ee099 100644 --- a/src/repositories/product/index.ts +++ b/src/repositories/product/index.ts @@ -10,10 +10,10 @@ import type { StateReference, TaxCategoryReference, } from "@commercetools/platform-sdk"; +import type { Config } from "~src/config"; import { CommercetoolsError } from "~src/exceptions"; import { getBaseResourceProperties } from "~src/helpers"; import { ProductSearch } from "~src/product-search"; -import type { AbstractStorage } from "~src/storage/abstract"; import type { RepositoryContext } from "../abstract"; import { AbstractResourceRepository } from "../abstract"; import { getReferenceFromResourceIdentifier } from "../helpers"; @@ -23,10 +23,10 @@ import { variantFromDraft } from "./helpers"; export class ProductRepository extends AbstractResourceRepository<"product"> { protected _searchService: ProductSearch; - constructor(storage: AbstractStorage) { - super("product", storage); - this.actions = new ProductUpdateHandler(storage); - this._searchService = new ProductSearch(storage); + constructor(config: Config) { + super("product", config); + this.actions = new ProductUpdateHandler(config.storage); + this._searchService = new ProductSearch(config); } create(context: RepositoryContext, draft: ProductDraft): Product { @@ -42,8 +42,12 @@ export class ProductRepository extends AbstractResourceRepository<"product"> { this._storage, ); } catch (err) { + if (this.config.strict) { + throw err; + } + // For now accept missing product types (but warn) - console.warn( + process.emitWarning( `Error resolving product-type '${draft.productType.id}'. This will be throw an error in later releases.`, ); productType = { diff --git a/src/repositories/project.ts b/src/repositories/project.ts index 51fe8d27..ea691649 100644 --- a/src/repositories/project.ts +++ b/src/repositories/project.ts @@ -16,16 +16,16 @@ import type { ProjectUpdateAction, } from "@commercetools/platform-sdk"; import type { ProjectSetBusinessUnitAssociateRoleOnCreationAction } from "@commercetools/platform-sdk/dist/declarations/src/generated/models/project"; +import type { Config } from "~src/config"; import { maskSecretValue } from "../lib/masking"; -import type { AbstractStorage } from "../storage/abstract"; import type { Writable } from "../types"; import type { RepositoryContext, UpdateHandlerInterface } from "./abstract"; import { AbstractRepository, AbstractUpdateHandler } from "./abstract"; export class ProjectRepository extends AbstractRepository { - constructor(storage: AbstractStorage) { - super(storage); - this.actions = new ProjectUpdateHandler(storage); + constructor(config: Config) { + super(config); + this.actions = new ProjectUpdateHandler(config.storage); } get(context: RepositoryContext): Project | null { diff --git a/src/repositories/quote-request.ts b/src/repositories/quote-request.ts index a1a807b2..d30d7616 100644 --- a/src/repositories/quote-request.ts +++ b/src/repositories/quote-request.ts @@ -2,13 +2,13 @@ import type { QuoteRequest, QuoteRequestDraft, } from "@commercetools/platform-sdk"; -import type { AbstractStorage } from "~src/storage"; +import type { Config } from "~src/config"; import type { RepositoryContext } from "./abstract"; import { AbstractResourceRepository } from "./abstract"; export class QuoteRequestRepository extends AbstractResourceRepository<"quote-request"> { - constructor(storage: AbstractStorage) { - super("quote-request", storage); + constructor(config: Config) { + super("quote-request", config); } create(context: RepositoryContext, draft: QuoteRequestDraft): QuoteRequest { diff --git a/src/repositories/quote.ts b/src/repositories/quote.ts index b04a6fda..6d14b395 100644 --- a/src/repositories/quote.ts +++ b/src/repositories/quote.ts @@ -1,11 +1,11 @@ import type { Quote, QuoteDraft } from "@commercetools/platform-sdk"; -import type { AbstractStorage } from "~src/storage"; +import type { Config } from "~src/config"; import type { RepositoryContext } from "./abstract"; import { AbstractResourceRepository } from "./abstract"; export class QuoteRepository extends AbstractResourceRepository<"quote"> { - constructor(storage: AbstractStorage) { - super("quote", storage); + constructor(config: Config) { + super("quote", config); } create(context: RepositoryContext, draft: QuoteDraft): Quote { diff --git a/src/repositories/review.ts b/src/repositories/review.ts index 331e8195..cccc8d14 100644 --- a/src/repositories/review.ts +++ b/src/repositories/review.ts @@ -7,7 +7,7 @@ import { type ReviewDraft, type StateReference, } from "@commercetools/platform-sdk"; -import type { AbstractStorage } from "~src/storage"; +import type { Config } from "~src/config"; import { getBaseResourceProperties } from "../helpers"; import type { RepositoryContext } from "./abstract"; import { AbstractResourceRepository } from "./abstract"; @@ -17,8 +17,8 @@ import { } from "./helpers"; export class ReviewRepository extends AbstractResourceRepository<"review"> { - constructor(storage: AbstractStorage) { - super("review", storage); + constructor(config: Config) { + super("review", config); } create(context: RepositoryContext, draft: ReviewDraft): Review { diff --git a/src/repositories/shipping-method/index.ts b/src/repositories/shipping-method/index.ts index b94bf454..2e776349 100644 --- a/src/repositories/shipping-method/index.ts +++ b/src/repositories/shipping-method/index.ts @@ -5,9 +5,9 @@ import { type ZoneRateDraft, type ZoneReference, } from "@commercetools/platform-sdk"; +import type { Config } from "~src/config"; import { getBaseResourceProperties } from "../../helpers"; import { getShippingMethodsMatchingCart } from "../../shipping"; -import type { AbstractStorage } from "../../storage/abstract"; import type { GetParams, RepositoryContext } from "../abstract"; import { AbstractResourceRepository } from "../abstract"; import { @@ -18,9 +18,9 @@ import { ShippingMethodUpdateHandler } from "./actions"; import { transformShippingRate } from "./helpers"; export class ShippingMethodRepository extends AbstractResourceRepository<"shipping-method"> { - constructor(storage: AbstractStorage) { - super("shipping-method", storage); - this.actions = new ShippingMethodUpdateHandler(storage); + constructor(config: Config) { + super("shipping-method", config); + this.actions = new ShippingMethodUpdateHandler(config.storage); } create( diff --git a/src/repositories/shopping-list/index.ts b/src/repositories/shopping-list/index.ts index a27be565..1ede56a6 100644 --- a/src/repositories/shopping-list/index.ts +++ b/src/repositories/shopping-list/index.ts @@ -6,8 +6,8 @@ import type { ShoppingListDraft, ShoppingListLineItem, } from "@commercetools/platform-sdk"; +import type { Config } from "~src/config"; import { getBaseResourceProperties } from "../../helpers"; -import type { AbstractStorage } from "../../storage/abstract"; import type { Writable } from "../../types"; import type { RepositoryContext } from "../abstract"; import { AbstractResourceRepository } from "../abstract"; @@ -19,9 +19,9 @@ import { import { ShoppingListUpdateHandler } from "./actions"; export class ShoppingListRepository extends AbstractResourceRepository<"shopping-list"> { - constructor(storage: AbstractStorage) { - super("shopping-list", storage); - this.actions = new ShoppingListUpdateHandler(storage); + constructor(config: Config) { + super("shopping-list", config); + this.actions = new ShoppingListUpdateHandler(config.storage); } create(context: RepositoryContext, draft: ShoppingListDraft): ShoppingList { diff --git a/src/repositories/staged-quote.ts b/src/repositories/staged-quote.ts index 7c36d8d6..d2a672cd 100644 --- a/src/repositories/staged-quote.ts +++ b/src/repositories/staged-quote.ts @@ -2,13 +2,13 @@ import type { StagedQuote, StagedQuoteDraft, } from "@commercetools/platform-sdk"; -import type { AbstractStorage } from "~src/storage"; +import type { Config } from "~src/config"; import type { RepositoryContext } from "./abstract"; import { AbstractResourceRepository } from "./abstract"; export class StagedQuoteRepository extends AbstractResourceRepository<"staged-quote"> { - constructor(storage: AbstractStorage) { - super("staged-quote", storage); + constructor(config: Config) { + super("staged-quote", config); } create(context: RepositoryContext, draft: StagedQuoteDraft): StagedQuote { diff --git a/src/repositories/standalone-price.ts b/src/repositories/standalone-price.ts index dfa55f83..f908e813 100644 --- a/src/repositories/standalone-price.ts +++ b/src/repositories/standalone-price.ts @@ -9,16 +9,16 @@ import type { StandalonePriceSetDiscountedPriceAction, StandalonePriceUpdateAction, } from "@commercetools/platform-sdk"; +import type { Config } from "~src/config"; import { getBaseResourceProperties } from "../helpers"; -import type { AbstractStorage } from "../storage/abstract"; import type { Writable } from "../types"; import type { RepositoryContext, UpdateHandlerInterface } from "./abstract"; import { AbstractResourceRepository, AbstractUpdateHandler } from "./abstract"; import { createTypedMoney } from "./helpers"; export class StandAlonePriceRepository extends AbstractResourceRepository<"standalone-price"> { - constructor(storage: AbstractStorage) { - super("standalone-price", storage); + constructor(config: Config) { + super("standalone-price", config); this.actions = new StandalonePriceUpdateHandler(this._storage); } diff --git a/src/repositories/state.ts b/src/repositories/state.ts index a0565a68..f0550f02 100644 --- a/src/repositories/state.ts +++ b/src/repositories/state.ts @@ -13,17 +13,17 @@ import type { StateSetTransitionsAction, StateUpdateAction, } from "@commercetools/platform-sdk"; +import type { Config } from "~src/config"; import { getBaseResourceProperties } from "../helpers"; -import type { AbstractStorage } from "../storage/abstract"; import type { Writable } from "../types"; import type { RepositoryContext, UpdateHandlerInterface } from "./abstract"; import { AbstractResourceRepository, AbstractUpdateHandler } from "./abstract"; import { getReferenceFromResourceIdentifier } from "./helpers"; export class StateRepository extends AbstractResourceRepository<"state"> { - constructor(storage: AbstractStorage) { - super("state", storage); - this.actions = new StateUpdateHandler(storage); + constructor(config: Config) { + super("state", config); + this.actions = new StateUpdateHandler(config.storage); } create(context: RepositoryContext, draft: StateDraft): State { diff --git a/src/repositories/store.ts b/src/repositories/store.ts index 3bdba1a8..a36a1514 100644 --- a/src/repositories/store.ts +++ b/src/repositories/store.ts @@ -11,6 +11,7 @@ import type { StoreSetNameAction, StoreUpdateAction, } from "@commercetools/platform-sdk"; +import type { Config } from "~src/config"; import { getBaseResourceProperties } from "../helpers"; import type { AbstractStorage } from "../storage/abstract"; import type { Writable } from "../types"; @@ -22,8 +23,8 @@ import { } from "./helpers"; export class StoreRepository extends AbstractResourceRepository<"store"> { - constructor(storage: AbstractStorage) { - super("store", storage); + constructor(config: Config) { + super("store", config); this.actions = new StoreUpdateHandler(this._storage); } diff --git a/src/repositories/subscription.ts b/src/repositories/subscription.ts index bec4f9a5..d06624c0 100644 --- a/src/repositories/subscription.ts +++ b/src/repositories/subscription.ts @@ -5,17 +5,17 @@ import type { SubscriptionSetKeyAction, SubscriptionUpdateAction, } from "@commercetools/platform-sdk"; +import type { Config } from "~src/config"; import { CommercetoolsError } from "~src/exceptions"; import { getBaseResourceProperties } from "../helpers"; -import type { AbstractStorage } from "../storage/abstract"; import type { Writable } from "../types"; import type { RepositoryContext, UpdateHandlerInterface } from "./abstract"; import { AbstractResourceRepository, AbstractUpdateHandler } from "./abstract"; export class SubscriptionRepository extends AbstractResourceRepository<"subscription"> { - constructor(storage: AbstractStorage) { - super("subscription", storage); - this.actions = new SubscriptionUpdateHandler(storage); + constructor(config: Config) { + super("subscription", config); + this.actions = new SubscriptionUpdateHandler(config.storage); } create(context: RepositoryContext, draft: SubscriptionDraft): Subscription { diff --git a/src/repositories/tax-category/index.ts b/src/repositories/tax-category/index.ts index 0e2a33dc..1b1220d9 100644 --- a/src/repositories/tax-category/index.ts +++ b/src/repositories/tax-category/index.ts @@ -2,16 +2,16 @@ import type { TaxCategory, TaxCategoryDraft, } from "@commercetools/platform-sdk"; +import type { Config } from "~src/config"; import { getBaseResourceProperties } from "~src/helpers"; -import type { AbstractStorage } from "~src/storage/abstract"; import type { RepositoryContext } from "../abstract"; import { AbstractResourceRepository } from "../abstract"; import { TaxCategoryUpdateHandler } from "./actions"; import { taxRateFromTaxRateDraft } from "./helpers"; export class TaxCategoryRepository extends AbstractResourceRepository<"tax-category"> { - constructor(storage: AbstractStorage) { - super("tax-category", storage); + constructor(config: Config) { + super("tax-category", config); this.actions = new TaxCategoryUpdateHandler(this._storage); } diff --git a/src/repositories/type/index.ts b/src/repositories/type/index.ts index e2a093e6..24dd6448 100644 --- a/src/repositories/type/index.ts +++ b/src/repositories/type/index.ts @@ -1,14 +1,14 @@ import type { Type, TypeDraft } from "@commercetools/platform-sdk"; +import type { Config } from "~src/config"; import { getBaseResourceProperties } from "~src/helpers"; -import type { AbstractStorage } from "~src/storage/abstract"; import type { RepositoryContext } from "../abstract"; import { AbstractResourceRepository } from "../abstract"; import { TypeUpdateHandler } from "./actions"; export class TypeRepository extends AbstractResourceRepository<"type"> { - constructor(storage: AbstractStorage) { - super("type", storage); - this.actions = new TypeUpdateHandler(storage); + constructor(config: Config) { + super("type", config); + this.actions = new TypeUpdateHandler(config.storage); } create(context: RepositoryContext, draft: TypeDraft): Type { diff --git a/src/repositories/zone.ts b/src/repositories/zone.ts index 5f4cab4f..458c3395 100644 --- a/src/repositories/zone.ts +++ b/src/repositories/zone.ts @@ -8,16 +8,16 @@ import type { ZoneSetKeyAction, ZoneUpdateAction, } from "@commercetools/platform-sdk"; +import type { Config } from "~src/config"; import { getBaseResourceProperties } from "../helpers"; -import type { AbstractStorage } from "../storage/abstract"; import type { Writable } from "../types"; import type { RepositoryContext, UpdateHandlerInterface } from "./abstract"; import { AbstractResourceRepository, AbstractUpdateHandler } from "./abstract"; export class ZoneRepository extends AbstractResourceRepository<"zone"> { - constructor(storage: AbstractStorage) { - super("zone", storage); - this.actions = new ZoneUpdateHandler(storage); + constructor(config: Config) { + super("zone", config); + this.actions = new ZoneUpdateHandler(config.storage); } create(context: RepositoryContext, draft: ZoneDraft): Zone { diff --git a/src/services/project.test.ts b/src/services/project.test.ts index 5792aab5..b479c655 100644 --- a/src/services/project.test.ts +++ b/src/services/project.test.ts @@ -1,23 +1,11 @@ import type { Project } from "@commercetools/platform-sdk"; import supertest from "supertest"; -import { afterAll, afterEach, beforeAll, describe, expect, test } from "vitest"; +import { describe, expect, test } from "vitest"; import { CommercetoolsMock } from "../index"; const ctMock = new CommercetoolsMock(); describe("Project", () => { - beforeAll(() => { - ctMock.start(); - }); - - afterEach(() => { - ctMock.clear(); - }); - - afterAll(() => { - ctMock.stop(); - }); - test("Get project by key", async () => { const response = await supertest(ctMock.app).get("/dummy/"); diff --git a/src/services/store.test.ts b/src/services/store.test.ts index 4e5605e2..19b82e0f 100644 --- a/src/services/store.test.ts +++ b/src/services/store.test.ts @@ -1,23 +1,11 @@ import type { Store } from "@commercetools/platform-sdk"; import supertest from "supertest"; -import { afterAll, afterEach, beforeAll, describe, expect, test } from "vitest"; +import { describe, expect, test } from "vitest"; import { CommercetoolsMock } from "../index"; const ctMock = new CommercetoolsMock(); describe("Store", () => { - beforeAll(() => { - ctMock.start(); - }); - - afterEach(() => { - ctMock.clear(); - }); - - afterAll(() => { - ctMock.stop(); - }); - test("Get store by key", async () => { ctMock.project("dummy").add("store", { id: "fake-store",