diff --git a/apps/taxes/graphql/subscriptions/OrderCreated.graphql b/apps/taxes/graphql/subscriptions/OrderConfirmed.graphql similarity index 77% rename from apps/taxes/graphql/subscriptions/OrderCreated.graphql rename to apps/taxes/graphql/subscriptions/OrderConfirmed.graphql index 42fb244..d605029 100644 --- a/apps/taxes/graphql/subscriptions/OrderCreated.graphql +++ b/apps/taxes/graphql/subscriptions/OrderConfirmed.graphql @@ -20,7 +20,7 @@ fragment OrderLine on OrderLine { } } -fragment OrderCreatedSubscription on Order { +fragment OrderConfirmedSubscription on Order { id user { id @@ -66,11 +66,11 @@ fragment OrderCreatedSubscription on Order { } avataxEntityCode: metafield(key: "avataxEntityCode") } -fragment OrderCreatedEventSubscription on Event { +fragment OrderConfirmedEventSubscription on Event { __typename - ... on OrderCreated { + ... on OrderConfirmed { order { - ...OrderCreatedSubscription + ...OrderConfirmedSubscription } } recipient { @@ -80,8 +80,8 @@ fragment OrderCreatedEventSubscription on Event { } } } -subscription OrderCreatedSubscription { +subscription OrderConfirmedSubscription { event { - ...OrderCreatedEventSubscription + ...OrderConfirmedEventSubscription } } diff --git a/apps/taxes/src/mocks.ts b/apps/taxes/src/mocks.ts index cadb72c..86ba577 100644 --- a/apps/taxes/src/mocks.ts +++ b/apps/taxes/src/mocks.ts @@ -1,6 +1,6 @@ -import { OrderCreatedSubscriptionFragment, OrderStatus } from "../generated/graphql"; +import { OrderConfirmedSubscriptionFragment, OrderStatus } from "../generated/graphql"; -export const defaultOrder: OrderCreatedSubscriptionFragment = { +export const defaultOrder: OrderConfirmedSubscriptionFragment = { id: "T3JkZXI6ZTUzZTBlM2MtMjk5Yi00OWYxLWIyZDItY2Q4NWExYTgxYjY2", user: { id: "VXNlcjoyMDg0NTEwNDEw", diff --git a/apps/taxes/src/modules/avatax/avatax-webhook.service.ts b/apps/taxes/src/modules/avatax/avatax-webhook.service.ts index a633e78..e8cd249 100644 --- a/apps/taxes/src/modules/avatax/avatax-webhook.service.ts +++ b/apps/taxes/src/modules/avatax/avatax-webhook.service.ts @@ -1,19 +1,18 @@ import { AuthData } from "@saleor/app-sdk/APL"; import { - OrderCancelledEventSubscriptionFragment, - OrderCreatedSubscriptionFragment, + OrderConfirmedSubscriptionFragment, OrderFulfilledSubscriptionFragment, TaxBaseFragment, } from "../../../generated/graphql"; import { Logger, createLogger } from "../../lib/logger"; -import { ProviderWebhookService } from "../taxes/tax-provider-webhook"; +import { OrderCancelledPayload } from "../../pages/api/webhooks/order-cancelled"; +import { CreateOrderResponse, ProviderWebhookService } from "../taxes/tax-provider-webhook"; import { AvataxClient } from "./avatax-client"; import { AvataxConfig, defaultAvataxConfig } from "./avatax-connection-schema"; import { AvataxCalculateTaxesAdapter } from "./calculate-taxes/avatax-calculate-taxes-adapter"; -import { AvataxOrderCreatedAdapter } from "./order-created/avatax-order-created-adapter"; -import { AvataxOrderFulfilledAdapter } from "./order-fulfilled/avatax-order-fulfilled-adapter"; import { AvataxOrderCancelledAdapter } from "./order-cancelled/avatax-order-cancelled-adapter"; -import { OrderCancelledPayload } from "../../pages/api/webhooks/order-cancelled"; +import { AvataxOrderConfirmedAdapter } from "./order-confirmed/avatax-order-confirmed-adapter"; +import { AvataxOrderFulfilledAdapter } from "./order-fulfilled/avatax-order-fulfilled-adapter"; export class AvataxWebhookService implements ProviderWebhookService { config = defaultAvataxConfig; @@ -38,8 +37,8 @@ export class AvataxWebhookService implements ProviderWebhookService { return response; } - async createOrder(order: OrderCreatedSubscriptionFragment) { - const adapter = new AvataxOrderCreatedAdapter(this.config, this.authData); + async confirmOrder(order: OrderConfirmedSubscriptionFragment) { + const adapter = new AvataxOrderConfirmedAdapter(this.config, this.authData); const response = await adapter.send({ order }); diff --git a/apps/taxes/src/modules/avatax/order-created/avatax-order-created-adapter.test.ts b/apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-adapter.test.ts similarity index 73% rename from apps/taxes/src/modules/avatax/order-created/avatax-order-created-adapter.test.ts rename to apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-adapter.test.ts index ac4952d..575e37f 100644 --- a/apps/taxes/src/modules/avatax/order-created/avatax-order-created-adapter.test.ts +++ b/apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-adapter.test.ts @@ -1,6 +1,6 @@ import { describe, it } from "vitest"; -describe("AvataxOrderCreatedAdapter", () => { +describe("AvataxOrderConfirmedAdapter", () => { // ? how to mock internal call to avatax? it.todo("calls avatax client", () => {}); }); diff --git a/apps/taxes/src/modules/avatax/order-created/avatax-order-created-adapter.ts b/apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-adapter.ts similarity index 54% rename from apps/taxes/src/modules/avatax/order-created/avatax-order-created-adapter.ts rename to apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-adapter.ts index d707d2c..d930ec3 100644 --- a/apps/taxes/src/modules/avatax/order-created/avatax-order-created-adapter.ts +++ b/apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-adapter.ts @@ -1,32 +1,31 @@ import { AuthData } from "@saleor/app-sdk/APL"; -import { OrderCreatedSubscriptionFragment } from "../../../../generated/graphql"; +import { OrderConfirmedSubscriptionFragment } from "../../../../generated/graphql"; import { Logger, createLogger } from "../../../lib/logger"; import { CreateOrderResponse } from "../../taxes/tax-provider-webhook"; import { WebhookAdapter } from "../../taxes/tax-webhook-adapter"; import { AvataxClient } from "../avatax-client"; import { AvataxConfig } from "../avatax-connection-schema"; -import { AvataxOrderCreatedPayloadTransformer } from "./avatax-order-created-payload-transformer"; -import { AvataxOrderCreatedPayloadService } from "./avatax-order-created-payload.service"; -import { AvataxOrderCreatedResponseTransformer } from "./avatax-order-created-response-transformer"; +import { AvataxOrderConfirmedPayloadService } from "./avatax-order-confirmed-payload.service"; +import { AvataxOrderConfirmedResponseTransformer } from "./avatax-order-confirmed-response-transformer"; -type AvataxOrderCreatedPayload = { - order: OrderCreatedSubscriptionFragment; +type AvataxOrderConfirmedPayload = { + order: OrderConfirmedSubscriptionFragment; }; -type AvataxOrderCreatedResponse = CreateOrderResponse; +type AvataxOrderConfirmedResponse = CreateOrderResponse; -export class AvataxOrderCreatedAdapter - implements WebhookAdapter +export class AvataxOrderConfirmedAdapter + implements WebhookAdapter { private logger: Logger; constructor(private readonly config: AvataxConfig, private authData: AuthData) { - this.logger = createLogger({ name: "AvataxOrderCreatedAdapter" }); + this.logger = createLogger({ name: "AvataxOrderConfirmedAdapter" }); } - async send(payload: AvataxOrderCreatedPayload): Promise { + async send(payload: AvataxOrderConfirmedPayload): Promise { this.logger.debug("Transforming the Saleor payload for creating order with Avatax..."); - const payloadService = new AvataxOrderCreatedPayloadService(this.authData); + const payloadService = new AvataxOrderConfirmedPayloadService(this.authData); const target = await payloadService.getPayload(payload.order, this.config); this.logger.debug("Calling Avatax createTransaction with transformed payload..."); @@ -36,7 +35,7 @@ export class AvataxOrderCreatedAdapter this.logger.debug("Avatax createTransaction successfully responded"); - const responseTransformer = new AvataxOrderCreatedResponseTransformer(); + const responseTransformer = new AvataxOrderConfirmedResponseTransformer(); const transformedResponse = responseTransformer.transform(response); this.logger.debug("Transformed Avatax createTransaction response"); diff --git a/apps/taxes/src/modules/avatax/order-created/avatax-order-created-mock-generator.ts b/apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-mock-generator.ts similarity index 75% rename from apps/taxes/src/modules/avatax/order-created/avatax-order-created-mock-generator.ts rename to apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-mock-generator.ts index c2e5eee..68b069b 100644 --- a/apps/taxes/src/modules/avatax/order-created/avatax-order-created-mock-generator.ts +++ b/apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-mock-generator.ts @@ -1,7 +1,7 @@ import { TransactionModel } from "avatax/lib/models/TransactionModel"; -import { OrderCreatedSubscriptionFragment } from "../../../../generated/graphql"; +import { OrderConfirmedSubscriptionFragment } from "../../../../generated/graphql"; import { ChannelConfig } from "../../channel-configuration/channel-config"; -import { orderCreatedTransactionMock } from "./avatax-order-created-response-transaction-mock"; +import { orderConfirmedTransactionMock } from "./avatax-order-confirmed-response-transaction-mock"; import { AvataxConfig } from "../avatax-connection-schema"; import { defaultOrder } from "../../../mocks"; import { AvataxConfigMockGenerator } from "../avatax-config-mock-generator"; @@ -14,23 +14,23 @@ const defaultChannelConfig: ChannelConfig = { }, }; -const defaultOrderCreatedResponse: TransactionModel = orderCreatedTransactionMock; +const defaultOrderConfirmedResponse: TransactionModel = orderConfirmedTransactionMock; const testingScenariosMap = { default: { order: defaultOrder, channelConfig: defaultChannelConfig, - response: defaultOrderCreatedResponse, + response: defaultOrderConfirmedResponse, }, }; type TestingScenario = keyof typeof testingScenariosMap; -export class AvataxOrderCreatedMockGenerator { +export class AvataxOrderConfirmedMockGenerator { constructor(private scenario: TestingScenario = "default") {} generateOrder = ( - overrides: Partial = {} - ): OrderCreatedSubscriptionFragment => + overrides: Partial = {} + ): OrderConfirmedSubscriptionFragment => structuredClone({ ...testingScenariosMap[this.scenario].order, ...overrides, diff --git a/apps/taxes/src/modules/avatax/order-created/avatax-order-created-payload-lines-transformer.test.ts b/apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-payload-lines-transformer.test.ts similarity index 69% rename from apps/taxes/src/modules/avatax/order-created/avatax-order-created-payload-lines-transformer.test.ts rename to apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-payload-lines-transformer.test.ts index 5060fa2..0aa702d 100644 --- a/apps/taxes/src/modules/avatax/order-created/avatax-order-created-payload-lines-transformer.test.ts +++ b/apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-payload-lines-transformer.test.ts @@ -1,16 +1,16 @@ import { describe, expect, it } from "vitest"; -import { AvataxOrderCreatedPayloadLinesTransformer } from "./avatax-order-created-payload-lines-transformer"; -import { avataxConfigMock } from "./avatax-order-created-payload-transformer.test"; +import { AvataxOrderConfirmedPayloadLinesTransformer } from "./avatax-order-confirmed-payload-lines-transformer"; +import { avataxConfigMock } from "./avatax-order-confirmed-payload-transformer.test"; import { AvataxTaxCodeMatches } from "../tax-code/avatax-tax-code-match-repository"; -import { AvataxOrderCreatedMockGenerator } from "./avatax-order-created-mock-generator"; +import { AvataxOrderConfirmedMockGenerator } from "./avatax-order-confirmed-mock-generator"; -const linesTransformer = new AvataxOrderCreatedPayloadLinesTransformer(); -const mockGenerator = new AvataxOrderCreatedMockGenerator(); +const linesTransformer = new AvataxOrderConfirmedPayloadLinesTransformer(); +const mockGenerator = new AvataxOrderConfirmedMockGenerator(); const orderMock = mockGenerator.generateOrder(); const matches: AvataxTaxCodeMatches = []; -describe("AvataxOrderCreatedPayloadLinesTransformer", () => { +describe("AvataxOrderConfirmedPayloadLinesTransformer", () => { const lines = linesTransformer.transform(orderMock, avataxConfigMock, matches); it("returns the correct number of lines", () => { diff --git a/apps/taxes/src/modules/avatax/order-created/avatax-order-created-payload-lines-transformer.ts b/apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-payload-lines-transformer.ts similarity index 78% rename from apps/taxes/src/modules/avatax/order-created/avatax-order-created-payload-lines-transformer.ts rename to apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-payload-lines-transformer.ts index 742f935..3059894 100644 --- a/apps/taxes/src/modules/avatax/order-created/avatax-order-created-payload-lines-transformer.ts +++ b/apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-payload-lines-transformer.ts @@ -1,19 +1,19 @@ import { LineItemModel } from "avatax/lib/models/LineItemModel"; -import { OrderCreatedSubscriptionFragment } from "../../../../generated/graphql"; +import { OrderConfirmedSubscriptionFragment } from "../../../../generated/graphql"; import { numbers } from "../../taxes/numbers"; import { AvataxConfig } from "../avatax-connection-schema"; import { AvataxTaxCodeMatches } from "../tax-code/avatax-tax-code-match-repository"; -import { SHIPPING_ITEM_CODE } from "./avatax-order-created-payload-transformer"; -import { AvataxOrderCreatedTaxCodeMatcher } from "./avatax-order-created-tax-code-matcher"; +import { SHIPPING_ITEM_CODE } from "./avatax-order-confirmed-payload-transformer"; +import { AvataxOrderConfirmedTaxCodeMatcher } from "./avatax-order-confirmed-tax-code-matcher"; -export class AvataxOrderCreatedPayloadLinesTransformer { +export class AvataxOrderConfirmedPayloadLinesTransformer { transform( - order: OrderCreatedSubscriptionFragment, + order: OrderConfirmedSubscriptionFragment, config: AvataxConfig, matches: AvataxTaxCodeMatches ): LineItemModel[] { const productLines: LineItemModel[] = order.lines.map((line) => { - const matcher = new AvataxOrderCreatedTaxCodeMatcher(); + const matcher = new AvataxOrderConfirmedTaxCodeMatcher(); const taxCode = matcher.match(line, matches); return { diff --git a/apps/taxes/src/modules/avatax/order-created/avatax-order-created-payload-transformer.test.ts b/apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-payload-transformer.test.ts similarity index 79% rename from apps/taxes/src/modules/avatax/order-created/avatax-order-created-payload-transformer.test.ts rename to apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-payload-transformer.test.ts index 9846ddb..44f7303 100644 --- a/apps/taxes/src/modules/avatax/order-created/avatax-order-created-payload-transformer.test.ts +++ b/apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-payload-transformer.test.ts @@ -1,9 +1,9 @@ import { describe, expect, it } from "vitest"; -import { AvataxOrderCreatedMockGenerator } from "./avatax-order-created-mock-generator"; -import { AvataxOrderCreatedPayloadTransformer } from "./avatax-order-created-payload-transformer"; +import { AvataxOrderConfirmedMockGenerator } from "./avatax-order-confirmed-mock-generator"; +import { AvataxOrderConfirmedPayloadTransformer } from "./avatax-order-confirmed-payload-transformer"; import { DocumentType } from "avatax/lib/enums/DocumentType"; -const mockGenerator = new AvataxOrderCreatedMockGenerator(); +const mockGenerator = new AvataxOrderConfirmedMockGenerator(); const orderMock = mockGenerator.generateOrder(); const discountedOrderMock = mockGenerator.generateOrder({ @@ -17,11 +17,11 @@ const discountedOrderMock = mockGenerator.generateOrder({ ], }); -const transformer = new AvataxOrderCreatedPayloadTransformer(); +const transformer = new AvataxOrderConfirmedPayloadTransformer(); export const avataxConfigMock = mockGenerator.generateAvataxConfig(); -describe("AvataxOrderCreatedPayloadTransformer", () => { +describe("AvataxOrderConfirmedPayloadTransformer", () => { it("returns document type of SalesInvoice when isDocumentRecordingEnabled is true", async () => { const payload = await transformer.transform(orderMock, avataxConfigMock, []); @@ -48,7 +48,7 @@ describe("AvataxOrderCreatedPayloadTransformer", () => { expect(check).toBe(true); }); it("returns lines with discounted: false when there are no discounts", async () => { - const transformer = new AvataxOrderCreatedPayloadTransformer(); + const transformer = new AvataxOrderConfirmedPayloadTransformer(); const payload = await transformer.transform(orderMock, avataxConfigMock, []); const linesWithoutShipping = payload.model.lines.slice(0, -1); diff --git a/apps/taxes/src/modules/avatax/order-created/avatax-order-created-payload-transformer.ts b/apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-payload-transformer.ts similarity index 86% rename from apps/taxes/src/modules/avatax/order-created/avatax-order-created-payload-transformer.ts rename to apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-payload-transformer.ts index c91d5ba..cdc3bbc 100644 --- a/apps/taxes/src/modules/avatax/order-created/avatax-order-created-payload-transformer.ts +++ b/apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-payload-transformer.ts @@ -1,16 +1,16 @@ import { DocumentType } from "avatax/lib/enums/DocumentType"; -import { OrderCreatedSubscriptionFragment } from "../../../../generated/graphql"; +import { OrderConfirmedSubscriptionFragment } from "../../../../generated/graphql"; import { discountUtils } from "../../taxes/discount-utils"; import { avataxAddressFactory } from "../address-factory"; import { AvataxClient, CreateTransactionArgs } from "../avatax-client"; import { AvataxConfig } from "../avatax-connection-schema"; import { AvataxTaxCodeMatches } from "../tax-code/avatax-tax-code-match-repository"; -import { AvataxOrderCreatedPayloadLinesTransformer } from "./avatax-order-created-payload-lines-transformer"; +import { AvataxOrderConfirmedPayloadLinesTransformer } from "./avatax-order-confirmed-payload-lines-transformer"; import { AvataxEntityTypeMatcher } from "../avatax-entity-type-matcher"; export const SHIPPING_ITEM_CODE = "Shipping"; -export class AvataxOrderCreatedPayloadTransformer { +export class AvataxOrderConfirmedPayloadTransformer { private matchDocumentType(config: AvataxConfig): DocumentType { if (!config.isDocumentRecordingEnabled) { // isDocumentRecordingEnabled = false changes all the DocTypes within your AvaTax requests to SalesOrder. This will stop any transaction from being recorded within AvaTax. @@ -20,11 +20,11 @@ export class AvataxOrderCreatedPayloadTransformer { return DocumentType.SalesInvoice; } async transform( - order: OrderCreatedSubscriptionFragment, + order: OrderConfirmedSubscriptionFragment, avataxConfig: AvataxConfig, matches: AvataxTaxCodeMatches ): Promise { - const linesTransformer = new AvataxOrderCreatedPayloadLinesTransformer(); + const linesTransformer = new AvataxOrderConfirmedPayloadLinesTransformer(); const avataxClient = new AvataxClient(avataxConfig); const entityTypeMatcher = new AvataxEntityTypeMatcher({ client: avataxClient }); const entityUseCode = await entityTypeMatcher.match(order.avataxEntityCode); diff --git a/apps/taxes/src/modules/avatax/order-created/avatax-order-created-payload.service.ts b/apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-payload.service.ts similarity index 65% rename from apps/taxes/src/modules/avatax/order-created/avatax-order-created-payload.service.ts rename to apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-payload.service.ts index d1ffd0d..eaadd7d 100644 --- a/apps/taxes/src/modules/avatax/order-created/avatax-order-created-payload.service.ts +++ b/apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-payload.service.ts @@ -1,11 +1,11 @@ import { AuthData } from "@saleor/app-sdk/APL"; -import { OrderCreatedSubscriptionFragment } from "../../../../generated/graphql"; +import { OrderConfirmedSubscriptionFragment } from "../../../../generated/graphql"; import { CreateTransactionArgs } from "../avatax-client"; import { AvataxConfig } from "../avatax-connection-schema"; import { AvataxTaxCodeMatchesService } from "../tax-code/avatax-tax-code-matches.service"; -import { AvataxOrderCreatedPayloadTransformer } from "./avatax-order-created-payload-transformer"; +import { AvataxOrderConfirmedPayloadTransformer } from "./avatax-order-confirmed-payload-transformer"; -export class AvataxOrderCreatedPayloadService { +export class AvataxOrderConfirmedPayloadService { constructor(private authData: AuthData) {} private getMatches() { @@ -15,11 +15,11 @@ export class AvataxOrderCreatedPayloadService { } async getPayload( - order: OrderCreatedSubscriptionFragment, + order: OrderConfirmedSubscriptionFragment, avataxConfig: AvataxConfig ): Promise { const matches = await this.getMatches(); - const payloadTransformer = new AvataxOrderCreatedPayloadTransformer(); + const payloadTransformer = new AvataxOrderConfirmedPayloadTransformer(); return payloadTransformer.transform(order, avataxConfig, matches); } diff --git a/apps/taxes/src/modules/avatax/order-created/avatax-order-created-response-transaction-mock.ts b/apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-response-transaction-mock.ts similarity index 99% rename from apps/taxes/src/modules/avatax/order-created/avatax-order-created-response-transaction-mock.ts rename to apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-response-transaction-mock.ts index 3affc97..32d5729 100644 --- a/apps/taxes/src/modules/avatax/order-created/avatax-order-created-response-transaction-mock.ts +++ b/apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-response-transaction-mock.ts @@ -1,6 +1,6 @@ import { TransactionModel } from "avatax/lib/models/TransactionModel"; -export const orderCreatedTransactionMock = { +export const orderConfirmedTransactionMock = { id: 85026453274669, code: "31fa9e94-e8df-429b-b303-549e7bc10f1e", companyId: 7799660, diff --git a/apps/taxes/src/modules/avatax/order-created/avatax-order-created-response-transformer.test.ts b/apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-response-transformer.test.ts similarity index 97% rename from apps/taxes/src/modules/avatax/order-created/avatax-order-created-response-transformer.test.ts rename to apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-response-transformer.test.ts index 96b87ca..a003026 100644 --- a/apps/taxes/src/modules/avatax/order-created/avatax-order-created-response-transformer.test.ts +++ b/apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-response-transformer.test.ts @@ -9,7 +9,7 @@ import { LiabilityType } from "avatax/lib/enums/LiabilityType"; import { RateType } from "avatax/lib/enums/RateType"; import { TransactionModel } from "avatax/lib/models/TransactionModel"; import { describe, expect, it } from "vitest"; -import { AvataxOrderCreatedResponseTransformer } from "./avatax-order-created-response-transformer"; +import { AvataxOrderConfirmedResponseTransformer } from "./avatax-order-confirmed-response-transformer"; const MOCKED_TRANSACTION: TransactionModel = { id: 0, @@ -497,9 +497,9 @@ const MOCKED_TRANSACTION: TransactionModel = { ], }; -describe("AvataxOrderCreatedResponseTransformer", () => { +describe("AvataxOrderConfirmedResponseTransformer", () => { it("returns orded id in response", () => { - const transformer = new AvataxOrderCreatedResponseTransformer(); + const transformer = new AvataxOrderConfirmedResponseTransformer(); const result = transformer.transform(MOCKED_TRANSACTION); expect(result).toEqual({ @@ -507,7 +507,7 @@ describe("AvataxOrderCreatedResponseTransformer", () => { }); }); it("throws an error when no transaction id is present", () => { - const transformer = new AvataxOrderCreatedResponseTransformer(); + const transformer = new AvataxOrderConfirmedResponseTransformer(); expect(() => transformer.transform({} as any)).toThrowError(); }); diff --git a/apps/taxes/src/modules/avatax/order-created/avatax-order-created-response-transformer.ts b/apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-response-transformer.ts similarity index 90% rename from apps/taxes/src/modules/avatax/order-created/avatax-order-created-response-transformer.ts rename to apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-response-transformer.ts index 890a9cb..756260a 100644 --- a/apps/taxes/src/modules/avatax/order-created/avatax-order-created-response-transformer.ts +++ b/apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-response-transformer.ts @@ -2,7 +2,7 @@ import { CreateOrderResponse } from "../../taxes/tax-provider-webhook"; import { TransactionModel } from "avatax/lib/models/TransactionModel"; import { taxProviderUtils } from "../../taxes/tax-provider-utils"; -export class AvataxOrderCreatedResponseTransformer { +export class AvataxOrderConfirmedResponseTransformer { transform(response: TransactionModel): CreateOrderResponse { return { id: taxProviderUtils.resolveOptionalOrThrow( diff --git a/apps/taxes/src/modules/avatax/order-created/avatax-order-created-tax-code-matcher.test.ts b/apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-tax-code-matcher.test.ts similarity index 80% rename from apps/taxes/src/modules/avatax/order-created/avatax-order-created-tax-code-matcher.test.ts rename to apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-tax-code-matcher.test.ts index e6c781d..e47ab0f 100644 --- a/apps/taxes/src/modules/avatax/order-created/avatax-order-created-tax-code-matcher.test.ts +++ b/apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-tax-code-matcher.test.ts @@ -1,7 +1,7 @@ import { OrderLineFragment } from "../../../../generated/graphql"; import { describe, expect, it } from "vitest"; import { AvataxTaxCodeMatches } from "../tax-code/avatax-tax-code-match-repository"; -import { AvataxOrderCreatedTaxCodeMatcher } from "./avatax-order-created-tax-code-matcher"; +import { AvataxOrderConfirmedTaxCodeMatcher } from "./avatax-order-confirmed-tax-code-matcher"; const mockedLine: OrderLineFragment = { productSku: "sku", @@ -42,15 +42,15 @@ const matches: AvataxTaxCodeMatches = [ }, ]; -describe("AvataxOrderCreatedTaxCodeMatcher", () => { +describe("AvataxOrderConfirmedTaxCodeMatcher", () => { it("should return empty string if tax class is not found", () => { - const matcher = new AvataxOrderCreatedTaxCodeMatcher(); + const matcher = new AvataxOrderConfirmedTaxCodeMatcher(); expect(matcher.match(mockedLine, matches)).toEqual(""); }); it("should return tax code if tax class is found", () => { const line = structuredClone({ ...mockedLine, taxClass: { id: "tax-class-id" } }); - const matcher = new AvataxOrderCreatedTaxCodeMatcher(); + const matcher = new AvataxOrderConfirmedTaxCodeMatcher(); expect(matcher.match(line, matches)).toEqual("P0000000"); }); diff --git a/apps/taxes/src/modules/avatax/order-created/avatax-order-created-tax-code-matcher.ts b/apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-tax-code-matcher.ts similarity index 93% rename from apps/taxes/src/modules/avatax/order-created/avatax-order-created-tax-code-matcher.ts rename to apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-tax-code-matcher.ts index 77a5e74..f582316 100644 --- a/apps/taxes/src/modules/avatax/order-created/avatax-order-created-tax-code-matcher.ts +++ b/apps/taxes/src/modules/avatax/order-confirmed/avatax-order-confirmed-tax-code-matcher.ts @@ -1,7 +1,7 @@ import { OrderLineFragment } from "../../../../generated/graphql"; import { AvataxTaxCodeMatches } from "../tax-code/avatax-tax-code-match-repository"; -export class AvataxOrderCreatedTaxCodeMatcher { +export class AvataxOrderConfirmedTaxCodeMatcher { private mapTaxClassWithTaxMatch(taxClassId: string, matches: AvataxTaxCodeMatches) { return matches.find((m) => m.data.saleorTaxClassId === taxClassId); } diff --git a/apps/taxes/src/modules/taxes/get-active-connection-service.ts b/apps/taxes/src/modules/taxes/get-active-connection-service.ts index a50458e..f9aae1a 100644 --- a/apps/taxes/src/modules/taxes/get-active-connection-service.ts +++ b/apps/taxes/src/modules/taxes/get-active-connection-service.ts @@ -2,7 +2,7 @@ import { AuthData } from "@saleor/app-sdk/APL"; import { MetadataItem, OrderCancelledEventSubscriptionFragment, - OrderCreatedSubscriptionFragment, + OrderConfirmedSubscriptionFragment, OrderFulfilledSubscriptionFragment, TaxBaseFragment, } from "../../../generated/graphql"; @@ -12,7 +12,7 @@ import { getAppConfig } from "../app/get-app-config"; import { AvataxWebhookService } from "../avatax/avatax-webhook.service"; import { ProviderConnection } from "../provider-connections/provider-connections"; import { TaxJarWebhookService } from "../taxjar/taxjar-webhook.service"; -import { ProviderWebhookService } from "./tax-provider-webhook"; +import { CreateOrderResponse, ProviderWebhookService } from "./tax-provider-webhook"; import { OrderCancelledPayload } from "../../pages/api/webhooks/order-cancelled"; // todo: refactor to a factory @@ -50,8 +50,8 @@ class ActiveTaxProviderService implements ProviderWebhookService { return this.client.calculateTaxes(payload); } - async createOrder(order: OrderCreatedSubscriptionFragment) { - return this.client.createOrder(order); + async confirmOrder(order: OrderConfirmedSubscriptionFragment) { + return this.client.confirmOrder(order); } async fulfillOrder(payload: OrderFulfilledSubscriptionFragment) { diff --git a/apps/taxes/src/modules/taxes/tax-provider-webhook.ts b/apps/taxes/src/modules/taxes/tax-provider-webhook.ts index 8a4d070..af44988 100644 --- a/apps/taxes/src/modules/taxes/tax-provider-webhook.ts +++ b/apps/taxes/src/modules/taxes/tax-provider-webhook.ts @@ -1,6 +1,6 @@ import { SyncWebhookResponsesMap } from "@saleor/app-sdk/handlers/next"; import { - OrderCreatedSubscriptionFragment, + OrderConfirmedSubscriptionFragment, OrderFulfilledSubscriptionFragment, TaxBaseFragment, } from "../../../generated/graphql"; @@ -12,7 +12,7 @@ export type CreateOrderResponse = { id: string }; export interface ProviderWebhookService { calculateTaxes: (payload: TaxBaseFragment) => Promise; - createOrder: (payload: OrderCreatedSubscriptionFragment) => Promise; + confirmOrder: (payload: OrderConfirmedSubscriptionFragment) => Promise; fulfillOrder: (payload: OrderFulfilledSubscriptionFragment) => Promise<{ ok: boolean }>; cancelOrder: (payload: OrderCancelledPayload) => Promise; } diff --git a/apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-adapter.test.ts b/apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-adapter.test.ts new file mode 100644 index 0000000..000395c --- /dev/null +++ b/apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-adapter.test.ts @@ -0,0 +1,3 @@ +import { describe } from "vitest"; + +describe.todo("TaxJarOrderConfirmedAdapter", () => {}); diff --git a/apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-adapter.ts b/apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-adapter.ts similarity index 53% rename from apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-adapter.ts rename to apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-adapter.ts index 331e766..f5aa737 100644 --- a/apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-adapter.ts +++ b/apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-adapter.ts @@ -1,30 +1,30 @@ import { AuthData } from "@saleor/app-sdk/APL"; -import { OrderCreatedSubscriptionFragment } from "../../../../generated/graphql"; +import { OrderConfirmedSubscriptionFragment } from "../../../../generated/graphql"; import { Logger, createLogger } from "../../../lib/logger"; import { CreateOrderResponse } from "../../taxes/tax-provider-webhook"; import { WebhookAdapter } from "../../taxes/tax-webhook-adapter"; import { CreateOrderArgs, TaxJarClient } from "../taxjar-client"; import { TaxJarConfig } from "../taxjar-connection-schema"; -import { TaxJarOrderCreatedPayloadService } from "./taxjar-order-created-payload.service"; -import { TaxJarOrderCreatedResponseTransformer } from "./taxjar-order-created-response-transformer"; +import { TaxJarOrderConfirmedPayloadService } from "./taxjar-order-confirmed-payload.service"; +import { TaxJarOrderConfirmedResponseTransformer } from "./taxjar-order-confirmed-response-transformer"; -export type TaxJarOrderCreatedPayload = { - order: OrderCreatedSubscriptionFragment; +export type TaxJarOrderConfirmedPayload = { + order: OrderConfirmedSubscriptionFragment; }; -export type TaxJarOrderCreatedTarget = CreateOrderArgs; -export type TaxJarOrderCreatedResponse = CreateOrderResponse; +export type TaxJarOrderConfirmedTarget = CreateOrderArgs; +export type TaxJarOrderConfirmedResponse = CreateOrderResponse; -export class TaxJarOrderCreatedAdapter - implements WebhookAdapter +export class TaxJarOrderConfirmedAdapter + implements WebhookAdapter { private logger: Logger; constructor(private readonly config: TaxJarConfig, private authData: AuthData) { - this.logger = createLogger({ name: "TaxJarOrderCreatedAdapter" }); + this.logger = createLogger({ name: "TaxJarOrderConfirmedAdapter" }); } - async send(payload: TaxJarOrderCreatedPayload): Promise { + async send(payload: TaxJarOrderConfirmedPayload): Promise { this.logger.debug("Transforming the Saleor payload for creating order with TaxJar..."); - const payloadService = new TaxJarOrderCreatedPayloadService(this.authData); + const payloadService = new TaxJarOrderConfirmedPayloadService(this.authData); const target = await payloadService.getPayload(payload.order, this.config); this.logger.debug("Calling TaxJar fetchTaxForOrder with transformed payload..."); @@ -33,7 +33,7 @@ export class TaxJarOrderCreatedAdapter const response = await client.createOrder(target); this.logger.debug("TaxJar createOrder successfully responded"); - const responseTransformer = new TaxJarOrderCreatedResponseTransformer(); + const responseTransformer = new TaxJarOrderConfirmedResponseTransformer(); const transformedResponse = responseTransformer.transform(response); this.logger.debug("Transformed TaxJar createOrder response"); diff --git a/apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-mock-generator.ts b/apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-mock-generator.ts similarity index 91% rename from apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-mock-generator.ts rename to apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-mock-generator.ts index 1a1aa74..b2f37b5 100644 --- a/apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-mock-generator.ts +++ b/apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-mock-generator.ts @@ -1,11 +1,11 @@ import { CreateOrderRes } from "taxjar/dist/types/returnTypes"; -import { OrderCreatedSubscriptionFragment, OrderStatus } from "../../../../generated/graphql"; -import { ChannelConfig } from "../../channel-configuration/channel-config"; +import { OrderConfirmedSubscriptionFragment } from "../../../../generated/graphql"; import { defaultOrder } from "../../../mocks"; -import { TaxJarConfig } from "../taxjar-connection-schema"; +import { ChannelConfig } from "../../channel-configuration/channel-config"; import { ChannelConfigMockGenerator } from "../../channel-configuration/channel-config-mock-generator"; +import { TaxJarConfig } from "../taxjar-connection-schema"; -type Order = OrderCreatedSubscriptionFragment; +type Order = OrderConfirmedSubscriptionFragment; // providerConfigMockGenerator class that other classes extend? const defaultProviderConfig: TaxJarConfig = { @@ -23,7 +23,7 @@ const defaultProviderConfig: TaxJarConfig = { }, }; -const defaultOrderCreatedResponse: CreateOrderRes = { +const defaultOrderConfirmedResponse: CreateOrderRes = { order: { user_id: 314973, transaction_reference_id: null, @@ -82,14 +82,14 @@ const defaultOrderCreatedResponse: CreateOrderRes = { const testingScenariosMap = { default: { order: defaultOrder, - response: defaultOrderCreatedResponse, + response: defaultOrderConfirmedResponse, providerConfig: defaultProviderConfig, }, }; type TestingScenario = keyof typeof testingScenariosMap; -export class TaxJarOrderCreatedMockGenerator { +export class TaxJarOrderConfirmedMockGenerator { constructor(private scenario: TestingScenario = "default") {} generateOrder = (overrides: Partial = {}): Order => structuredClone({ diff --git a/apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-payload-lines-transformer.test.ts b/apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-payload-lines-transformer.test.ts similarity index 79% rename from apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-payload-lines-transformer.test.ts rename to apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-payload-lines-transformer.test.ts index 92029ad..8c741ed 100644 --- a/apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-payload-lines-transformer.test.ts +++ b/apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-payload-lines-transformer.test.ts @@ -1,12 +1,12 @@ -import { OrderCreatedSubscriptionFragment, OrderLineFragment } from "../../../../generated/graphql"; +import { OrderConfirmedSubscriptionFragment } from "../../../../generated/graphql"; import { TaxJarTaxCodeMatches } from "../tax-code/taxjar-tax-code-match-repository"; import { describe, expect, it } from "vitest"; -import { TaxJarOrderCreatedPayloadLinesTransformer } from "./taxjar-order-created-payload-lines-transformer"; +import { TaxJarOrderConfirmedPayloadLinesTransformer } from "./taxjar-order-confirmed-payload-lines-transformer"; -const transformer = new TaxJarOrderCreatedPayloadLinesTransformer(); +const transformer = new TaxJarOrderConfirmedPayloadLinesTransformer(); -const mockedLines: OrderCreatedSubscriptionFragment["lines"] = [ +const mockedLines: OrderConfirmedSubscriptionFragment["lines"] = [ { productSku: "sku", productName: "Test product", @@ -67,7 +67,7 @@ const matches: TaxJarTaxCodeMatches = [ }, ]; -describe("TaxJarOrderCreatedPayloadLinesTransformer", () => { +describe("TaxJarOrderConfirmedPayloadLinesTransformer", () => { it("should map payload lines correctly", () => { expect(transformer.transform(mockedLines, matches)).toEqual([ { diff --git a/apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-payload-lines-transformer.ts b/apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-payload-lines-transformer.ts similarity index 61% rename from apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-payload-lines-transformer.ts rename to apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-payload-lines-transformer.ts index c0eff39..1443994 100644 --- a/apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-payload-lines-transformer.ts +++ b/apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-payload-lines-transformer.ts @@ -1,15 +1,15 @@ import { LineItem } from "taxjar/dist/util/types"; -import { OrderCreatedSubscriptionFragment } from "../../../../generated/graphql"; +import { OrderConfirmedSubscriptionFragment } from "../../../../generated/graphql"; import { TaxJarTaxCodeMatches } from "../tax-code/taxjar-tax-code-match-repository"; -import { TaxJarOrderCreatedTaxCodeMatcher } from "./taxjar-order-created-tax-code-matcher"; +import { TaxJarOrderConfirmedTaxCodeMatcher } from "./taxjar-order-confirmed-tax-code-matcher"; -export class TaxJarOrderCreatedPayloadLinesTransformer { +export class TaxJarOrderConfirmedPayloadLinesTransformer { transform( - lines: OrderCreatedSubscriptionFragment["lines"], + lines: OrderConfirmedSubscriptionFragment["lines"], matches: TaxJarTaxCodeMatches ): LineItem[] { return lines.map((line) => { - const matcher = new TaxJarOrderCreatedTaxCodeMatcher(); + const matcher = new TaxJarOrderConfirmedTaxCodeMatcher(); const taxCode = matcher.match(line, matches); return { diff --git a/apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-payload-transformer.test.ts b/apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-payload-transformer.test.ts similarity index 77% rename from apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-payload-transformer.test.ts rename to apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-payload-transformer.test.ts index cab9009..89834bc 100644 --- a/apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-payload-transformer.test.ts +++ b/apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-payload-transformer.test.ts @@ -1,17 +1,17 @@ import { describe, expect, it } from "vitest"; -import { TaxJarOrderCreatedMockGenerator } from "./taxjar-order-created-mock-generator"; +import { TaxJarOrderConfirmedMockGenerator } from "./taxjar-order-confirmed-mock-generator"; import { - TaxJarOrderCreatedPayloadTransformer, + TaxJarOrderConfirmedPayloadTransformer, sumPayloadLines, -} from "./taxjar-order-created-payload-transformer"; +} from "./taxjar-order-confirmed-payload-transformer"; -const mockGenerator = new TaxJarOrderCreatedMockGenerator(); +const mockGenerator = new TaxJarOrderConfirmedMockGenerator(); -describe("TaxJarOrderCreatedPayloadTransformer", () => { +describe("TaxJarOrderConfirmedPayloadTransformer", () => { it("returns the correct order amount", () => { const orderMock = mockGenerator.generateOrder(); const providerConfig = mockGenerator.generateProviderConfig(); - const transformer = new TaxJarOrderCreatedPayloadTransformer(); + const transformer = new TaxJarOrderConfirmedPayloadTransformer(); const transformedPayload = transformer.transform(orderMock, providerConfig, []); expect(transformedPayload.params.amount).toBe(239.17); diff --git a/apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-payload-transformer.ts b/apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-payload-transformer.ts similarity index 81% rename from apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-payload-transformer.ts rename to apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-payload-transformer.ts index 3b669f4..33d4a90 100644 --- a/apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-payload-transformer.ts +++ b/apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-payload-transformer.ts @@ -1,11 +1,11 @@ import { LineItem } from "taxjar/dist/util/types"; -import { OrderCreatedSubscriptionFragment } from "../../../../generated/graphql"; +import { OrderConfirmedSubscriptionFragment } from "../../../../generated/graphql"; import { numbers } from "../../taxes/numbers"; import { taxProviderUtils } from "../../taxes/tax-provider-utils"; import { TaxJarTaxCodeMatches } from "../tax-code/taxjar-tax-code-match-repository"; import { TaxJarConfig } from "../taxjar-connection-schema"; -import { TaxJarOrderCreatedTarget } from "./taxjar-order-created-adapter"; -import { TaxJarOrderCreatedPayloadLinesTransformer } from "./taxjar-order-created-payload-lines-transformer"; +import { TaxJarOrderConfirmedTarget } from "./taxjar-order-confirmed-adapter"; +import { TaxJarOrderConfirmedPayloadLinesTransformer } from "./taxjar-order-confirmed-payload-lines-transformer"; export function sumPayloadLines(lines: LineItem[]): number { return numbers.roundFloatToTwoDecimals( @@ -25,13 +25,13 @@ export function sumPayloadLines(lines: LineItem[]): number { ); } -export class TaxJarOrderCreatedPayloadTransformer { +export class TaxJarOrderConfirmedPayloadTransformer { transform( - order: OrderCreatedSubscriptionFragment, + order: OrderConfirmedSubscriptionFragment, taxJarConfig: TaxJarConfig, matches: TaxJarTaxCodeMatches - ): TaxJarOrderCreatedTarget { - const linesTransformer = new TaxJarOrderCreatedPayloadLinesTransformer(); + ): TaxJarOrderConfirmedTarget { + const linesTransformer = new TaxJarOrderConfirmedPayloadLinesTransformer(); const lineItems = linesTransformer.transform(order.lines, matches); const lineSum = sumPayloadLines(lineItems); const shippingAmount = order.shippingPrice.gross.amount; diff --git a/apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-payload.service.ts b/apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-payload.service.ts similarity index 64% rename from apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-payload.service.ts rename to apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-payload.service.ts index b42582c..b31501f 100644 --- a/apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-payload.service.ts +++ b/apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-payload.service.ts @@ -1,11 +1,11 @@ import { AuthData } from "@saleor/app-sdk/APL"; -import { OrderCreatedSubscriptionFragment } from "../../../../generated/graphql"; +import { OrderConfirmedSubscriptionFragment } from "../../../../generated/graphql"; import { TaxJarTaxCodeMatchesService } from "../tax-code/taxjar-tax-code-matches.service"; import { TaxJarConfig } from "../taxjar-connection-schema"; -import { TaxJarOrderCreatedPayloadTransformer } from "./taxjar-order-created-payload-transformer"; +import { TaxJarOrderConfirmedPayloadTransformer } from "./taxjar-order-confirmed-payload-transformer"; import { CreateOrderArgs } from "../taxjar-client"; -export class TaxJarOrderCreatedPayloadService { +export class TaxJarOrderConfirmedPayloadService { constructor(private authData: AuthData) {} private getMatches() { @@ -15,11 +15,11 @@ export class TaxJarOrderCreatedPayloadService { } async getPayload( - order: OrderCreatedSubscriptionFragment, + order: OrderConfirmedSubscriptionFragment, taxJarConfig: TaxJarConfig ): Promise { const matches = await this.getMatches(); - const payloadTransformer = new TaxJarOrderCreatedPayloadTransformer(); + const payloadTransformer = new TaxJarOrderConfirmedPayloadTransformer(); return payloadTransformer.transform(order, taxJarConfig, matches); } diff --git a/apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-response-transformer.test.ts b/apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-response-transformer.test.ts new file mode 100644 index 0000000..b08cd74 --- /dev/null +++ b/apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-response-transformer.test.ts @@ -0,0 +1,16 @@ +import { describe, expect, it } from "vitest"; +import { TaxJarOrderConfirmedMockGenerator } from "./taxjar-order-confirmed-mock-generator"; +import { TaxJarOrderConfirmedResponseTransformer } from "./taxjar-order-confirmed-response-transformer"; + +describe("TaxJarOrderConfirmedResponseTransformer", () => { + it("returns orded id in response", () => { + const mockGenerator = new TaxJarOrderConfirmedMockGenerator(); + const responseMock = mockGenerator.generateResponse(); + const transformer = new TaxJarOrderConfirmedResponseTransformer(); + const result = transformer.transform(responseMock); + + expect(result).toEqual({ + id: "T3JkZXI6ZTUzZTBlM2MtMjk5Yi00OWYxLWIyZDItY2Q4NWExYTgxYjY2", + }); + }); +}); diff --git a/apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-response-transformer.ts b/apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-response-transformer.ts similarity index 82% rename from apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-response-transformer.ts rename to apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-response-transformer.ts index 3022785..9185b8f 100644 --- a/apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-response-transformer.ts +++ b/apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-response-transformer.ts @@ -1,7 +1,7 @@ import { CreateOrderRes } from "taxjar/dist/types/returnTypes"; import { CreateOrderResponse } from "../../taxes/tax-provider-webhook"; -export class TaxJarOrderCreatedResponseTransformer { +export class TaxJarOrderConfirmedResponseTransformer { transform(response: CreateOrderRes): CreateOrderResponse { return { id: response.order.transaction_id, diff --git a/apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-tax-code-matcher.test.ts b/apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-tax-code-matcher.test.ts similarity index 80% rename from apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-tax-code-matcher.test.ts rename to apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-tax-code-matcher.test.ts index 88d74ba..15fca46 100644 --- a/apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-tax-code-matcher.test.ts +++ b/apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-tax-code-matcher.test.ts @@ -1,6 +1,6 @@ import { OrderLineFragment } from "../../../../generated/graphql"; import { TaxJarTaxCodeMatches } from "../tax-code/taxjar-tax-code-match-repository"; -import { TaxJarOrderCreatedTaxCodeMatcher } from "./taxjar-order-created-tax-code-matcher"; +import { TaxJarOrderConfirmedTaxCodeMatcher } from "./taxjar-order-confirmed-tax-code-matcher"; import { describe, expect, it } from "vitest"; const mockedLine: OrderLineFragment = { @@ -42,15 +42,15 @@ const matches: TaxJarTaxCodeMatches = [ }, ]; -describe("TaxJarOrderCreatedTaxCodeMatcher", () => { +describe("TaxJarOrderConfirmedTaxCodeMatcher", () => { it("should return empty string if tax class is not found", () => { - const matcher = new TaxJarOrderCreatedTaxCodeMatcher(); + const matcher = new TaxJarOrderConfirmedTaxCodeMatcher(); expect(matcher.match(mockedLine, matches)).toEqual(""); }); it("should return tax code if tax class is found", () => { const line = structuredClone({ ...mockedLine, taxClass: { id: "tax-class-id" } }); - const matcher = new TaxJarOrderCreatedTaxCodeMatcher(); + const matcher = new TaxJarOrderConfirmedTaxCodeMatcher(); expect(matcher.match(line, matches)).toEqual("P0000000"); }); diff --git a/apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-tax-code-matcher.ts b/apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-tax-code-matcher.ts similarity index 93% rename from apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-tax-code-matcher.ts rename to apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-tax-code-matcher.ts index 62e5ff4..e3e745e 100644 --- a/apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-tax-code-matcher.ts +++ b/apps/taxes/src/modules/taxjar/order-confirmed/taxjar-order-confirmed-tax-code-matcher.ts @@ -1,7 +1,7 @@ import { OrderLineFragment } from "../../../../generated/graphql"; import { TaxJarTaxCodeMatches } from "../tax-code/taxjar-tax-code-match-repository"; -export class TaxJarOrderCreatedTaxCodeMatcher { +export class TaxJarOrderConfirmedTaxCodeMatcher { private mapTaxClassWithTaxMatch(taxClassId: string, matches: TaxJarTaxCodeMatches) { return matches.find((m) => m.data.saleorTaxClassId === taxClassId); } diff --git a/apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-adapter.test.ts b/apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-adapter.test.ts deleted file mode 100644 index 256bb87..0000000 --- a/apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-adapter.test.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { describe } from "vitest"; - -describe.todo("TaxJarOrderCreatedAdapter", () => {}); diff --git a/apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-response-transformer.test.ts b/apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-response-transformer.test.ts deleted file mode 100644 index bbe9a66..0000000 --- a/apps/taxes/src/modules/taxjar/order-created/taxjar-order-created-response-transformer.test.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { describe, expect, it } from "vitest"; -import { TaxJarOrderCreatedMockGenerator } from "./taxjar-order-created-mock-generator"; -import { TaxJarOrderCreatedResponseTransformer } from "./taxjar-order-created-response-transformer"; - -describe("TaxJarOrderCreatedResponseTransformer", () => { - it("returns orded id in response", () => { - const mockGenerator = new TaxJarOrderCreatedMockGenerator(); - const responseMock = mockGenerator.generateResponse(); - const transformer = new TaxJarOrderCreatedResponseTransformer(); - const result = transformer.transform(responseMock); - - expect(result).toEqual({ - id: "T3JkZXI6ZTUzZTBlM2MtMjk5Yi00OWYxLWIyZDItY2Q4NWExYTgxYjY2", - }); - }); -}); diff --git a/apps/taxes/src/modules/taxjar/taxjar-webhook.service.ts b/apps/taxes/src/modules/taxjar/taxjar-webhook.service.ts index d1b3222..c3766eb 100644 --- a/apps/taxes/src/modules/taxjar/taxjar-webhook.service.ts +++ b/apps/taxes/src/modules/taxjar/taxjar-webhook.service.ts @@ -1,14 +1,14 @@ import { OrderCancelledEventSubscriptionFragment, - OrderCreatedSubscriptionFragment, + OrderConfirmedSubscriptionFragment, TaxBaseFragment, } from "../../../generated/graphql"; import { Logger, createLogger } from "../../lib/logger"; import { TaxJarCalculateTaxesAdapter } from "./calculate-taxes/taxjar-calculate-taxes-adapter"; import { TaxJarClient } from "./taxjar-client"; import { TaxJarConfig } from "./taxjar-connection-schema"; -import { TaxJarOrderCreatedAdapter } from "./order-created/taxjar-order-created-adapter"; -import { ProviderWebhookService } from "../taxes/tax-provider-webhook"; +import { TaxJarOrderConfirmedAdapter } from "./order-confirmed/taxjar-order-confirmed-adapter"; +import { CreateOrderResponse, ProviderWebhookService } from "../taxes/tax-provider-webhook"; import { AuthData } from "@saleor/app-sdk/APL"; export class TaxJarWebhookService implements ProviderWebhookService { @@ -34,8 +34,8 @@ export class TaxJarWebhookService implements ProviderWebhookService { return response; } - async createOrder(order: OrderCreatedSubscriptionFragment) { - const adapter = new TaxJarOrderCreatedAdapter(this.config, this.authData); + async confirmOrder(order: OrderConfirmedSubscriptionFragment) { + const adapter = new TaxJarOrderConfirmedAdapter(this.config, this.authData); const response = await adapter.send({ order }); diff --git a/apps/taxes/src/pages/api/manifest.ts b/apps/taxes/src/pages/api/manifest.ts index fd0d8cb..2a34991 100644 --- a/apps/taxes/src/pages/api/manifest.ts +++ b/apps/taxes/src/pages/api/manifest.ts @@ -4,7 +4,7 @@ import { AppManifest } from "@saleor/app-sdk/types"; import packageJson from "../../../package.json"; import { checkoutCalculateTaxesSyncWebhook } from "./webhooks/checkout-calculate-taxes"; import { orderCalculateTaxesSyncWebhook } from "./webhooks/order-calculate-taxes"; -import { orderCreatedAsyncWebhook } from "./webhooks/order-created"; +import { orderConfirmedAsyncWebhook } from "./webhooks/order-confirmed"; import { orderFulfilledAsyncWebhook } from "./webhooks/order-fulfilled"; import { REQUIRED_SALEOR_VERSION } from "../../../saleor-app"; import { orderCancelledAsyncWebhook } from "./webhooks/order-cancelled"; @@ -36,7 +36,7 @@ export default createManifestHandler({ webhooks: [ orderCalculateTaxesSyncWebhook.getWebhookManifest(apiBaseURL), checkoutCalculateTaxesSyncWebhook.getWebhookManifest(apiBaseURL), - orderCreatedAsyncWebhook.getWebhookManifest(apiBaseURL), + orderConfirmedAsyncWebhook.getWebhookManifest(apiBaseURL), orderFulfilledAsyncWebhook.getWebhookManifest(apiBaseURL), orderCancelledAsyncWebhook.getWebhookManifest(apiBaseURL), ], diff --git a/apps/taxes/src/pages/api/webhooks/order-created.ts b/apps/taxes/src/pages/api/webhooks/order-confirmed.ts similarity index 72% rename from apps/taxes/src/pages/api/webhooks/order-created.ts rename to apps/taxes/src/pages/api/webhooks/order-confirmed.ts index 3a43b7d..11016be 100644 --- a/apps/taxes/src/pages/api/webhooks/order-created.ts +++ b/apps/taxes/src/pages/api/webhooks/order-confirmed.ts @@ -1,8 +1,8 @@ import { SaleorAsyncWebhook } from "@saleor/app-sdk/handlers/next"; import { - OrderCreatedEventSubscriptionFragment, + OrderConfirmedEventSubscriptionFragment, OrderStatus, - UntypedOrderCreatedSubscriptionDocument, + UntypedOrderConfirmedSubscriptionDocument, } from "../../../../generated/graphql"; import { saleorApp } from "../../../../saleor-app"; import { createLogger } from "../../../lib/logger"; @@ -17,20 +17,20 @@ export const config = { }, }; -type OrderCreatedPayload = Extract< - OrderCreatedEventSubscriptionFragment, - { __typename: "OrderCreated" } +type OrderConfirmedPayload = Extract< + OrderConfirmedEventSubscriptionFragment, + { __typename: "OrderConfirmed" } >; -export const orderCreatedAsyncWebhook = new SaleorAsyncWebhook({ - name: "OrderCreated", +export const orderConfirmedAsyncWebhook = new SaleorAsyncWebhook({ + name: "OrderConfirmed", apl: saleorApp.apl, - event: "ORDER_CREATED", - query: UntypedOrderCreatedSubscriptionDocument, - webhookPath: "/api/webhooks/order-created", + event: "ORDER_CONFIRMED", + query: UntypedOrderConfirmedSubscriptionDocument, + webhookPath: "/api/webhooks/order-confirmed", }); -export default orderCreatedAsyncWebhook.createHandler(async (req, res, ctx) => { +export default orderConfirmedAsyncWebhook.createHandler(async (req, res, ctx) => { const logger = createLogger({ event: ctx.event }); const { payload, authData } = ctx; const { saleorApiUrl, token } = authData; @@ -54,9 +54,9 @@ export default orderCreatedAsyncWebhook.createHandler(async (req, res, ctx) => { logger.info("Creating order..."); - const createdOrder = await taxProvider.createOrder(payload.order); + const confirmedOrder = await taxProvider.confirmOrder(payload.order); - logger.info({ createdOrder }, "Order created"); + logger.info({ confirmedOrder }, "Order confirmed"); const client = createGraphQLClient({ saleorApiUrl, token, @@ -64,7 +64,10 @@ export default orderCreatedAsyncWebhook.createHandler(async (req, res, ctx) => { const orderMetadataManager = new OrderMetadataManager(client); - await orderMetadataManager.updateOrderMetadataWithExternalId(payload.order.id, createdOrder.id); + await orderMetadataManager.updateOrderMetadataWithExternalId( + payload.order.id, + confirmedOrder.id + ); logger.info("Updated order metadata with externalId"); return webhookResponse.success();