From 531d3eb42d78566ac97998522fad6ae98f46d11b Mon Sep 17 00:00:00 2001 From: Gediminas Gaubys Date: Tue, 29 Oct 2024 17:23:13 +0200 Subject: [PATCH 01/10] [Shopify] - Different Shipping Charges Types Tests --- .../Codeunits/ShpfyProcessOrder.Codeunit.al | 9 +- .../ShpfyShippingChargesTest.Codeunit.al | 435 ++++++++++++++++++ 2 files changed, 442 insertions(+), 2 deletions(-) create mode 100644 Apps/W1/Shopify/test/Shipping/ShpfyShippingChargesTest.Codeunit.al diff --git a/Apps/W1/Shopify/app/src/Order handling/Codeunits/ShpfyProcessOrder.Codeunit.al b/Apps/W1/Shopify/app/src/Order handling/Codeunits/ShpfyProcessOrder.Codeunit.al index 5104106cb9..e6b95108bd 100644 --- a/Apps/W1/Shopify/app/src/Order handling/Codeunits/ShpfyProcessOrder.Codeunit.al +++ b/Apps/W1/Shopify/app/src/Order handling/Codeunits/ShpfyProcessOrder.Codeunit.al @@ -57,7 +57,7 @@ codeunit 30166 "Shpfy Process Order" /// /// Parameter of type Record "Sales Header". /// Parameter of type Record "Shopify Order Header". - local procedure CreateHeaderFromShopifyOrder(var SalesHeader: Record "Sales Header"; ShopifyOrderHeader: Record "Shpfy Order Header") + internal procedure CreateHeaderFromShopifyOrder(var SalesHeader: Record "Sales Header"; ShopifyOrderHeader: Record "Shpfy Order Header") var ShopifyTaxArea: Record "Shpfy Tax Area"; DocLinkToBCDoc: Record "Shpfy Doc. Link To Doc."; @@ -184,7 +184,7 @@ codeunit 30166 "Shpfy Process Order" /// /// Parameter of type Record "Sales Header". /// Parameter of type Record "Shopify Order Header". - local procedure CreateLinesFromShopifyOrder(var SalesHeader: Record "Sales Header"; ShopifyOrderHeader: Record "Shpfy Order Header") + internal procedure CreateLinesFromShopifyOrder(var SalesHeader: Record "Sales Header"; ShopifyOrderHeader: Record "Shpfy Order Header") var Item: Record Item; SalesLine: Record "Sales Line"; @@ -432,6 +432,11 @@ codeunit 30166 "Shpfy Process Order" SalesHeader.Delete(true); end; + internal procedure SetShopifyShop(Shop: Record "Shpfy Shop") + begin + ShopifyShop := Shop; + end; + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Sales-Post", 'OnInsertShipmentHeaderOnAfterTransferfieldsToSalesShptHeader', '', false, false)] local procedure TransferShopifyOrderNoToShipmentHeader(SalesHeader: Record "Sales Header"; var SalesShptHeader: Record "Sales Shipment Header") begin diff --git a/Apps/W1/Shopify/test/Shipping/ShpfyShippingChargesTest.Codeunit.al b/Apps/W1/Shopify/test/Shipping/ShpfyShippingChargesTest.Codeunit.al new file mode 100644 index 0000000000..eabb81b67d --- /dev/null +++ b/Apps/W1/Shopify/test/Shipping/ShpfyShippingChargesTest.Codeunit.al @@ -0,0 +1,435 @@ +codeunit 139576 "Shpfy Shipping Charges Test" +{ + Subtype = Test; + TestPermissions = Disabled; + + var + ShipmentMethod: Record "Shipment Method"; + ShippingAgent: Record "Shipping Agent"; + ShippingAgentServices: Record "Shipping Agent Services"; + Shop: Record "Shpfy Shop"; + LibraryInventory: Codeunit "Library - Inventory"; + LibraryRandom: Codeunit "Library - Random"; + LibraryAssert: Codeunit "Library Assert"; + CommunicationMgt: Codeunit "Shpfy Communication Mgt."; + ShpfyInitializeTest: Codeunit "Shpfy Initialize Test"; + IsInitialized: Boolean; + + trigger OnRun() + begin + IsInitialized := false; + end; + + #region Test Methods + [Test] + procedure UnitTestValidateShopifyOrderShippingAgentServiceMapping() + var + OrderHeader: Record "Shpfy Order Header"; + Item: Record Item; + ShpfyShipmentMethodMapping: Record "Shpfy Shipment Method Mapping"; + OrderShippingCharges: Record "Shpfy Order Shipping Charges"; + OrderMapping: Codeunit "Shpfy Order Mapping"; + ImportOrder: Codeunit "Shpfy Import Order"; + ShippingChargesType: Enum "Sales Line Type"; + begin + // [SCENARIO] Creating a random Shopify order and try to map shipping agent and service data from the Shopify shipment method mapping. + Initialize(); + + // [GIVEN] Shopify Shop + Shop := CommunicationMgt.GetShopRecord(); + ImportOrder.SetShop(Shop.Code); + + // [GIVEN] Shopify order is imported + ImportShopifyOrder(Shop, OrderHeader, ImportOrder, false); + + // [GIVEN] Order shipping charges are created for the Shopify order + CreateOrderShippingCharges(OrderShippingCharges, OrderHeader."Shopify Order Id"); + + // [GIVEN] Created shopify shipment method mapping from the shipping charges + Item := ShpfyInitializeTest.GetDummyItem(); + CreateShopifyShipmentMethodMapping( + ShpfyShipmentMethodMapping, + ShippingChargesType::Item, + ShipmentMethod.Code, + ShippingAgent.Code, + ShippingAgentServices.Code, + Item."No.", + OrderShippingCharges.Title + ); + + // [WHEN] Order mapping is done + OrderMapping.DoMapping(OrderHeader); + + // [THEN] Order header is mapped with the correct shipping agent and service code + LibraryAssert.AreEqual(ShpfyShipmentMethodMapping."Shipping Agent Code", OrderHeader."Shipping Agent Code", 'Shipping Agent Code must be correct'); + LibraryAssert.AreEqual(ShpfyShipmentMethodMapping."Shipping Agent Service Code", OrderHeader."Shipping Agent Service Code", 'Shipping Agent Service Code must be correct'); + end; + + [Test] + procedure UnitTestValidateSalesOrderShippingAgentServiceMapping() + var + OrderHeader: Record "Shpfy Order Header"; + Item: Record Item; + SalesHeader: Record "Sales Header"; + OrderShippingCharges: Record "Shpfy Order Shipping Charges"; + ShpfyShipmentMethodMapping: Record "Shpfy Shipment Method Mapping"; + ProcessOrder: Codeunit "Shpfy Process Order"; + ImportOrder: Codeunit "Shpfy Import Order"; + ShippingChargesType: Enum "Sales Line Type"; + begin + // [SCENARIO] Creating Sales document from a Shopify order and try to map shipping agent and service data. + Initialize(); + + // [GIVEN] Shopify shop + Shop := CommunicationMgt.GetShopRecord(); + + // [GIVEN] Shopify order is imported + ImportOrder.SetShop(Shop.Code); + ImportShopifyOrder(Shop, OrderHeader, ImportOrder, false); + + // [GIVEN] Order shipping charges are created for the Shopify order + CreateOrderShippingCharges(OrderShippingCharges, OrderHeader."Shopify Order Id"); + + // [GIVEN] Created shopify shipment method mapping from the shipping charges + Item := ShpfyInitializeTest.GetDummyItem(); + CreateShopifyShipmentMethodMapping( + ShpfyShipmentMethodMapping, + ShippingChargesType::Item, + ShipmentMethod.Code, + ShippingAgent.Code, + ShippingAgentServices.Code, + Item."No.", + OrderShippingCharges.Title + ); + + // [WHEN] Order is processed + ProcessOrder.Run(OrderHeader); + + // [THEN] Sales document with correct shipping agent and service code is created. + AssertSalesHeaderValues(OrderHeader, SalesHeader, ShpfyShipmentMethodMapping); + end; + + [Test] + procedure UnitTestMapShippingChargesForEmptyType() + var + OrderHeader: Record "Shpfy Order Header"; + ShpfyShipmentMethodMapping: Record "Shpfy Shipment Method Mapping"; + OrderShippingCharges: Record "Shpfy Order Shipping Charges"; + ProcessOrder: Codeunit "Shpfy Process Order"; + ImportOrder: Codeunit "Shpfy Import Order"; + ShippingChargesType: Enum "Sales Line Type"; + begin + // [SCENARIO] Create sales line from a Shopify order and try to map shipping charges account information when type is empty. + Initialize(); + + // [GIVEN] Shopify Shop + Shop := CommunicationMgt.GetShopRecord(); + + // [GIVEN] Shopify order is imported + ImportOrder.SetShop(Shop.Code); + ImportShopifyOrder(Shop, OrderHeader, ImportOrder, false); + + // [GIVEN] Order shipping charges are created for the Shopify order + CreateOrderShippingCharges(OrderShippingCharges, OrderHeader."Shopify Order Id"); + + // [GIVEN] Created shopify shipment method mapping from the shipping charges + CreateShopifyShipmentMethodMapping( + ShpfyShipmentMethodMapping, + ShippingChargesType::" ", + ShipmentMethod.Code, + ShippingAgent.Code, + ShippingAgentServices.Code, + LibraryRandom.RandText(20), + OrderShippingCharges.Title + ); + + // [WHEN] Order is processed + ProcessOrder.Run(OrderHeader); + + // [THEN] Sales line is created with the correct shipping charges account information + AssertSalesLineValues( + OrderShippingCharges, + ShpfyShipmentMethodMapping, + ShippingChargesType::"G/L Account", + Shop."Shipping Charges Account" + ); + end; + + [Test] + procedure UnitTestMapShippingChargesForItemType() + var + OrderHeader: Record "Shpfy Order Header"; + Item: Record Item; + ShpfyShipmentMethodMapping: Record "Shpfy Shipment Method Mapping"; + OrderShippingCharges: Record "Shpfy Order Shipping Charges"; + ProcessOrder: Codeunit "Shpfy Process Order"; + ImportOrder: Codeunit "Shpfy Import Order"; + ShippingChargesType: Enum "Sales Line Type"; + begin + // [SCENARIO] Create sales line from a Shopify order and try to map shipping charges account information when type is an item. + Initialize(); + + // [GIVEN] Shopify Shop + Shop := CommunicationMgt.GetShopRecord(); + + // [GIVEN] Shopify order is imported + ImportOrder.SetShop(Shop.Code); + ImportShopifyOrder(Shop, OrderHeader, ImportOrder, false); + + // [GIVEN] Order shipping charges are created for the Shopify order + CreateOrderShippingCharges(OrderShippingCharges, OrderHeader."Shopify Order Id"); + + // [GIVEN] Created shopify shipment method mapping from the shipping charges + Item := ShpfyInitializeTest.GetDummyItem(); + CreateShopifyShipmentMethodMapping( + ShpfyShipmentMethodMapping, + ShippingChargesType::Item, + ShipmentMethod.Code, + ShippingAgent.Code, + ShippingAgentServices.Code, + Item."No.", + OrderShippingCharges.Title + ); + + // [WHEN] Order is processed + ProcessOrder.Run(OrderHeader); + + // [THEN] Sales line is created with the correct shipping charges account information + AssertSalesLineValues( + OrderShippingCharges, + ShpfyShipmentMethodMapping, + ShippingChargesType::Item, + ShpfyShipmentMethodMapping."Shipping Charges No." + ); + end; + + [Test] + procedure UnitTestMapShippingChargesForGLType() + var + OrderHeader: Record "Shpfy Order Header"; + GLAccount: Record "G/L Account"; + ShpfyShipmentMethodMapping: Record "Shpfy Shipment Method Mapping"; + OrderShippingCharges: Record "Shpfy Order Shipping Charges"; + ImportOrder: Codeunit "Shpfy Import Order"; + ProcessOrder: Codeunit "Shpfy Process Order"; + ShippingChargesType: Enum "Sales Line Type"; + begin + // [SCENARIO] Create sales line from a Shopify order and try to map shipping charges account information when type is an gl account. + Initialize(); + + // [GIVEN] Shopify Shop + Shop := CommunicationMgt.GetShopRecord(); + + // [GIVEN] ShpfyImportOrder.ImportOrder + ImportOrder.SetShop(Shop.Code); + ImportShopifyOrder(Shop, OrderHeader, ImportOrder, false); + + // [GIVEN] Order shipping charges are created for the Shopify order + CreateOrderShippingCharges(OrderShippingCharges, OrderHeader."Shopify Order Id"); + + // [GIVEN] Created shopify shipment method mapping from the shipping charges + GetGLAccount(GLAccount); + CreateShopifyShipmentMethodMapping( + ShpfyShipmentMethodMapping, + ShippingChargesType::"G/L Account", + ShipmentMethod.Code, + ShippingAgent.Code, + ShippingAgentServices.Code, + GLAccount."No.", + OrderShippingCharges.Title + ); + + // [WHEN] Order is processed + ProcessOrder.Run(OrderHeader); + + // [THEN] Sales line is created with the correct shipping charges account information + AssertSalesLineValues( + OrderShippingCharges, + ShpfyShipmentMethodMapping, + ShippingChargesType::"G/L Account", + ShpfyShipmentMethodMapping."Shipping Charges No." + ); + end; + + [Test] + procedure UnitTestMapShippingChargesForItemChargeType() + var + OrderHeader: Record "Shpfy Order Header"; + ItemCharge: Record "Item Charge"; + ShpfyShipmentMethodMapping: Record "Shpfy Shipment Method Mapping"; + OrderShippingCharges: Record "Shpfy Order Shipping Charges"; + RefundGLAccount: Record "G/L Account"; + ImportOrder: Codeunit "Shpfy Import Order"; + ProcessOrder: Codeunit "Shpfy Process Order"; + ShippingChargesType: Enum "Sales Line Type"; + begin + // [SCENARIO] Create sales line from a Shopify order and try to map shipping charges account information when type is an item charge. + Initialize(); + + // [GIVEN] Shopify Shop + Shop := CommunicationMgt.GetShopRecord(); + + // [GIVEN] ShpfyImportOrder.ImportOrder + ImportOrder.SetShop(Shop.Code); + ImportShopifyOrder(Shop, OrderHeader, ImportOrder, false); + + // [GIVEN] Order shipping charges are created for the Shopify order + CreateOrderShippingCharges(OrderShippingCharges, OrderHeader."Shopify Order Id"); + + // [GIVEN] Created Item Charge + RefundGLAccount.Get(Shop."Refund Account"); + LibraryInventory.CreateItemCharge(ItemCharge); + ItemCharge.Validate("VAT Prod. Posting Group", RefundGLAccount."VAT Prod. Posting Group"); + ItemCharge.Modify(true); + + // [GIVEN] Created shopify shipment method mapping from the shipping charges + CreateShopifyShipmentMethodMapping( + ShpfyShipmentMethodMapping, + ShippingChargesType::"Charge (Item)", + ShipmentMethod.Code, + ShippingAgent.Code, + ShippingAgentServices.Code, + ItemCharge."No.", + OrderShippingCharges.Title + ); + + // [WHEN] Order is processed + ProcessOrder.Run(OrderHeader); + + // [THEN] Sales line is created with the correct shipping charges account information + AssertSalesLineValues( + OrderShippingCharges, + ShpfyShipmentMethodMapping, + ShippingChargesType::"Charge (Item)", + ShpfyShipmentMethodMapping."Shipping Charges No." + ); + end; + #endregion + + #region Local Procedures + local procedure Initialize() + var + OrdersAPISubscriber: Codeunit "Shpfy Orders API Subscriber"; + DateFormula: DateFormula; + begin + if IsInitialized then + exit; + + Codeunit.Run(Codeunit::"Shpfy Initialize Test"); + if BindSubscription(OrdersAPISubscriber) then; + + Evaluate(DateFormula, '<1W>'); + CreateShipmentMethod(ShipmentMethod); + LibraryInventory.CreateShippingAgent(ShippingAgent); + LibraryInventory.CreateShippingAgentService(ShippingAgentServices, ShippingAgent.Code, DateFormula); + + Commit(); + + IsInitialized := true; + end; + + local procedure CreateShopifyShipmentMethodMapping( + var ShpfyShipmentMethodMapping: Record "Shpfy Shipment Method Mapping"; + ShippingChargesType: Enum "Sales Line Type"; + ShipmentMethodCode: Code[10]; + ShippingAgentCode: Code[10]; + ShippingAgentServiceCode: Code[10]; + ShippingChargesNo: Code[20]; + Name: Text[50] + ) + begin + ShpfyShipmentMethodMapping.Init(); + ShpfyShipmentMethodMapping."Shop Code" := Shop.Code; + ShpfyShipmentMethodMapping.Name := Name; + ShpfyShipmentMethodMapping."Shipment Method Code" := ShipmentMethodCode; + ShpfyShipmentMethodMapping."Shipping Charges Type" := ShippingChargesType; + ShpfyShipmentMethodMapping."Shipping Charges No." := ShippingChargesNo; + ShpfyShipmentMethodMapping."Shipping Agent Code" := ShippingAgentCode; + ShpfyShipmentMethodMapping."Shipping Agent Service Code" := ShippingAgentServiceCode; + ShpfyShipmentMethodMapping.Insert(true); + end; + + local procedure CreateShipmentMethod(ShipmentMethod: Record "Shipment Method") + var + LibraryUtility: Codeunit "Library - Utility"; + begin + ShipmentMethod.Init(); + ShipmentMethod.Code := CopyStr(LibraryUtility.GenerateRandomText(MaxStrLen(ShipmentMethod.Code)), 1, MaxStrLen(ShipmentMethod.Code)); + ShipmentMethod.Insert(true); + end; + + local procedure ImportShopifyOrder(var Shop: Record "Shpfy Shop"; var OrderHeader: Record "Shpfy Order Header"; var OrdersToImport: Record "Shpfy Orders to Import"; var ImportOrder: Codeunit "Shpfy Import Order"; var JShopifyOrder: JsonObject; var JShopifyLineItems: JsonArray) + var + begin + ImportOrder.ImportCreateAndUpdateOrderHeaderFromMock(Shop.Code, OrdersToImport.Id, JShopifyOrder); + ImportOrder.ImportCreateAndUpdateOrderLinesFromMock(OrdersToImport.Id, JShopifyLineItems); + Commit(); + OrderHeader.Get(OrdersToImport.Id); + end; + + local procedure ImportShopifyOrder(var Shop: Record "Shpfy Shop"; var OrderHeader: Record "Shpfy Order Header"; var ImportOrder: Codeunit "Shpfy Import Order"; B2B: Boolean) + var + OrdersToImport: Record "Shpfy Orders to Import"; + OrderHandlingHelper: Codeunit "Shpfy Order Handling Helper"; + JShopifyLineItems: JsonArray; + JShopifyOrder: JsonObject; + begin + JShopifyOrder := OrderHandlingHelper.CreateShopifyOrderAsJson(Shop, OrdersToImport, JShopifyLineItems, B2B); + ImportShopifyOrder(Shop, OrderHeader, OrdersToImport, ImportOrder, JShopifyOrder, JShopifyLineItems); + end; + + local procedure CreateOrderShippingCharges(var OrderShippingCharges: Record "Shpfy Order Shipping Charges"; ShopifyOrderId: BigInteger) + begin + OrderShippingCharges.Init(); + OrderShippingCharges."Shopify Shipping Line Id" := LibraryRandom.RandInt(100000); + OrderShippingCharges."Shopify Order Id" := ShopifyOrderId; + OrderShippingCharges.Title := LibraryRandom.RandText(50); + OrderShippingCharges.Amount := LibraryRandom.RandDec(10, 0); + OrderShippingCharges.Insert(true); + end; + + local procedure GetGLAccount(var GLAccount: Record "G/L Account") + begin + GLAccount.SetRange("Direct Posting", true); + GLAccount.SetRange("Blocked", false); + GLAccount.SetRange("Account Type", GLAccount."Account Type"::Posting); + GLAccount.FindLast(); + end; + + local procedure AssertSalesLineValues( + OrderShippingCharges: Record "Shpfy Order Shipping Charges"; + ShpfyShipmentMethodMapping: Record "Shpfy Shipment Method Mapping"; + SalesLineType: Enum "Sales Line Type"; + ExpectedChargesAccountNo: Code[20] + ) + var + SalesHeader: Record "Sales Header"; + SalesLine: Record "Sales Line"; + begin + SalesHeader.SetRange("Shpfy Order Id", OrderShippingCharges."Shopify Order Id"); + LibraryAssert.IsTrue(SalesHeader.FindLast(), 'Sales document is not created from Shopify order'); + + SalesLine.SetRange("Document Type", SalesHeader."Document Type"); + SalesLine.SetRange("Document No.", SalesHeader."No."); + SalesLine.SetRange(Type, SalesLineType); + SalesLine.SetRange(Description, OrderShippingCharges.Title); + + LibraryAssert.IsTrue(SalesLine.FindLast(), 'Sales line is not created from Shopify order'); + LibraryAssert.AreEqual(ExpectedChargesAccountNo, SalesLine."No.", 'Shipping Charges Account is not as expected'); + LibraryAssert.AreEqual(ShpfyShipmentMethodMapping."Shipping Agent Code", SalesLine."Shipping Agent Code", 'Shipping Agent Code is not as expected'); + LibraryAssert.AreEqual(ShpfyShipmentMethodMapping."Shipping Agent Service Code", SalesLine."Shipping Agent Service Code", 'Shipping Agent Service Code is not as expected'); + end; + + local procedure AssertSalesHeaderValues( + OrderHeader: Record "Shpfy Order Header"; + SalesHeader: Record "Sales Header"; + ShpfyShipmentMethodMapping: Record "Shpfy Shipment Method Mapping" + ) + begin + SalesHeader.SetRange("Shpfy Order Id", OrderHeader."Shopify Order Id"); + LibraryAssert.IsTrue(SalesHeader.FindLast(), 'Sales document is not created from Shopify order'); + LibraryAssert.AreEqual(ShpfyShipmentMethodMapping."Shipping Agent Code", SalesHeader."Shipping Agent Code", 'Shipping Agent Code must be the same as in the shipment method mapping.'); + LibraryAssert.AreEqual(ShpfyShipmentMethodMapping."Shipping Agent Service Code", SalesHeader."Shipping Agent Service Code", 'Shipping Agent Service Code must be the same as in the shipment method mapping.'); + end; + #endregion +} \ No newline at end of file From 8a25c8f515f77d3090fba367c2141abb2b7e6f2a Mon Sep 17 00:00:00 2001 From: Gediminas Gaubys Date: Thu, 31 Oct 2024 11:40:57 +0200 Subject: [PATCH 02/10] Additional small changes --- .../ShpfyShippingChargesTest.Codeunit.al | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/Apps/W1/Shopify/test/Shipping/ShpfyShippingChargesTest.Codeunit.al b/Apps/W1/Shopify/test/Shipping/ShpfyShippingChargesTest.Codeunit.al index eabb81b67d..7168676f50 100644 --- a/Apps/W1/Shopify/test/Shipping/ShpfyShippingChargesTest.Codeunit.al +++ b/Apps/W1/Shopify/test/Shipping/ShpfyShippingChargesTest.Codeunit.al @@ -13,6 +13,7 @@ codeunit 139576 "Shpfy Shipping Charges Test" LibraryAssert: Codeunit "Library Assert"; CommunicationMgt: Codeunit "Shpfy Communication Mgt."; ShpfyInitializeTest: Codeunit "Shpfy Initialize Test"; + OrdersAPISubscriber: Codeunit "Shpfy Orders API Subscriber"; IsInitialized: Boolean; trigger OnRun() @@ -37,10 +38,12 @@ codeunit 139576 "Shpfy Shipping Charges Test" // [GIVEN] Shopify Shop Shop := CommunicationMgt.GetShopRecord(); - ImportOrder.SetShop(Shop.Code); // [GIVEN] Shopify order is imported + BindSubscription(OrdersAPISubscriber); + ImportOrder.SetShop(Shop.Code); ImportShopifyOrder(Shop, OrderHeader, ImportOrder, false); + UnbindSubscription(OrdersAPISubscriber); // [GIVEN] Order shipping charges are created for the Shopify order CreateOrderShippingCharges(OrderShippingCharges, OrderHeader."Shopify Order Id"); @@ -84,8 +87,10 @@ codeunit 139576 "Shpfy Shipping Charges Test" Shop := CommunicationMgt.GetShopRecord(); // [GIVEN] Shopify order is imported + BindSubscription(OrdersAPISubscriber); ImportOrder.SetShop(Shop.Code); ImportShopifyOrder(Shop, OrderHeader, ImportOrder, false); + UnbindSubscription(OrdersAPISubscriber); // [GIVEN] Order shipping charges are created for the Shopify order CreateOrderShippingCharges(OrderShippingCharges, OrderHeader."Shopify Order Id"); @@ -126,8 +131,10 @@ codeunit 139576 "Shpfy Shipping Charges Test" Shop := CommunicationMgt.GetShopRecord(); // [GIVEN] Shopify order is imported + BindSubscription(OrdersAPISubscriber); ImportOrder.SetShop(Shop.Code); ImportShopifyOrder(Shop, OrderHeader, ImportOrder, false); + UnbindSubscription(OrdersAPISubscriber); // [GIVEN] Order shipping charges are created for the Shopify order CreateOrderShippingCharges(OrderShippingCharges, OrderHeader."Shopify Order Id"); @@ -173,8 +180,10 @@ codeunit 139576 "Shpfy Shipping Charges Test" Shop := CommunicationMgt.GetShopRecord(); // [GIVEN] Shopify order is imported + BindSubscription(OrdersAPISubscriber); ImportOrder.SetShop(Shop.Code); ImportShopifyOrder(Shop, OrderHeader, ImportOrder, false); + UnbindSubscription(OrdersAPISubscriber); // [GIVEN] Order shipping charges are created for the Shopify order CreateOrderShippingCharges(OrderShippingCharges, OrderHeader."Shopify Order Id"); @@ -221,8 +230,10 @@ codeunit 139576 "Shpfy Shipping Charges Test" Shop := CommunicationMgt.GetShopRecord(); // [GIVEN] ShpfyImportOrder.ImportOrder + BindSubscription(OrdersAPISubscriber); ImportOrder.SetShop(Shop.Code); ImportShopifyOrder(Shop, OrderHeader, ImportOrder, false); + UnbindSubscription(OrdersAPISubscriber); // [GIVEN] Order shipping charges are created for the Shopify order CreateOrderShippingCharges(OrderShippingCharges, OrderHeader."Shopify Order Id"); @@ -270,8 +281,10 @@ codeunit 139576 "Shpfy Shipping Charges Test" Shop := CommunicationMgt.GetShopRecord(); // [GIVEN] ShpfyImportOrder.ImportOrder + BindSubscription(OrdersAPISubscriber); ImportOrder.SetShop(Shop.Code); ImportShopifyOrder(Shop, OrderHeader, ImportOrder, false); + UnbindSubscription(OrdersAPISubscriber); // [GIVEN] Order shipping charges are created for the Shopify order CreateOrderShippingCharges(OrderShippingCharges, OrderHeader."Shopify Order Id"); @@ -309,19 +322,17 @@ codeunit 139576 "Shpfy Shipping Charges Test" #region Local Procedures local procedure Initialize() var - OrdersAPISubscriber: Codeunit "Shpfy Orders API Subscriber"; - DateFormula: DateFormula; + ShippingTime: DateFormula; begin if IsInitialized then exit; Codeunit.Run(Codeunit::"Shpfy Initialize Test"); - if BindSubscription(OrdersAPISubscriber) then; - Evaluate(DateFormula, '<1W>'); + Evaluate(ShippingTime, '<1W>'); CreateShipmentMethod(ShipmentMethod); LibraryInventory.CreateShippingAgent(ShippingAgent); - LibraryInventory.CreateShippingAgentService(ShippingAgentServices, ShippingAgent.Code, DateFormula); + LibraryInventory.CreateShippingAgentService(ShippingAgentServices, ShippingAgent.Code, ShippingTime); Commit(); From 33e0e73d3b129717a7497ff8ca61bf55e0280224 Mon Sep 17 00:00:00 2001 From: Piotr Michalak Date: Tue, 12 Nov 2024 12:53:26 +0100 Subject: [PATCH 03/10] make shipping charges account field using newly created gl account --- .../test/Base/ShpfyInitializeTest.Codeunit.al | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/Apps/W1/Shopify/test/Base/ShpfyInitializeTest.Codeunit.al b/Apps/W1/Shopify/test/Base/ShpfyInitializeTest.Codeunit.al index 59a182ba4b..b91973f971 100644 --- a/Apps/W1/Shopify/test/Base/ShpfyInitializeTest.Codeunit.al +++ b/Apps/W1/Shopify/test/Base/ShpfyInitializeTest.Codeunit.al @@ -25,7 +25,6 @@ codeunit 139561 "Shpfy Initialize Test" internal procedure CreateShop(): Record "Shpfy Shop" var - GLAccount: Record "G/L Account"; RefundGLAccount: Record "G/L Account"; Shop: Record "Shpfy Shop"; VATPostingSetup: Record "VAT Posting Setup"; @@ -43,8 +42,6 @@ codeunit 139561 "Shpfy Initialize Test" exit(Shop); Code := Any.AlphabeticText(MaxStrLen(Code)); - GLAccount.SetRange("Direct Posting", true); - GLAccount.FindLast(); LibraryERM.CreateVATPostingSetupWithAccounts(VATPostingSetup, VATPostingSetup."VAT Calculation Type"::"Normal VAT", LibraryRandom.RandDecInDecimalRange(10, 25, 0)); @@ -65,7 +62,7 @@ codeunit 139561 "Shpfy Initialize Test" CreateVATPostingSetup(PostingGroupCode, PostingGroupCode); CreateVATPostingSetup(PostingGroupCode, ''); CreateVATPostingSetup(PostingGroupCode, RefundGLAccount."VAT Prod. Posting Group"); - Shop."Shipping Charges Account" := GLAccount."No."; + Shop."Shipping Charges Account" := CreateShippingChargesGLAcc(VATPostingSetup, GenPostingType); Shop."Customer Posting Group" := PostingGroupCode; Shop."Gen. Bus. Posting Group" := PostingGroupCode; Shop."VAT Bus. Posting Group" := PostingGroupCode; @@ -376,4 +373,14 @@ codeunit 139561 "Shpfy Initialize Test" end; end; + local procedure CreateShippingChargesGLAcc(var VATPostingSetup: Record "VAT Posting Setup"; GenPostingType: Enum "General Posting Type"): Code[20] + var + ShippingChargesGLAccount: Record "G/L Account"; + begin + ShippingChargesGLAccount.Get(LibraryERM.CreateGLAccountWithVATPostingSetup(VATPostingSetup, GenPostingType::Sale)); + ShippingChargesGLAccount."Direct Posting" := true; + ShippingChargesGLAccount.Modify(false); + exit(ShippingChargesGLAccount."No."); + end; + } From 2019b8b94485012bcff4e768e6ac1731c51744a2 Mon Sep 17 00:00:00 2001 From: Piotr Michalak Date: Tue, 12 Nov 2024 13:07:37 +0100 Subject: [PATCH 04/10] fix object id --- Apps/W1/Shopify/test/Base/ShpfyTestShopify.Codeunit.al | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Apps/W1/Shopify/test/Base/ShpfyTestShopify.Codeunit.al b/Apps/W1/Shopify/test/Base/ShpfyTestShopify.Codeunit.al index 62e9d863fa..e2b7a076dd 100644 --- a/Apps/W1/Shopify/test/Base/ShpfyTestShopify.Codeunit.al +++ b/Apps/W1/Shopify/test/Base/ShpfyTestShopify.Codeunit.al @@ -46,11 +46,11 @@ codeunit 139563 "Shpfy Test Shopify" local procedure SetupKeyVaultExpiryDate(ApiVersion: Text) var AzureKeyVaultTestLibrary: Codeunit "Azure Key Vault Test Library"; - MockAzureKeyvaultSecretProvider: DotNet MockAzureKeyVaultSecretProvider; + // MockAzureKeyvaultSecretProvider: DotNet MockAzureKeyVaultSecretProvider; begin - MockAzureKeyvaultSecretProvider := MockAzureKeyvaultSecretProvider.MockAzureKeyVaultSecretProvider(); - MockAzureKeyvaultSecretProvider.AddSecretMapping('AllowedApplicationSecrets', 'ShopifyApiVersionExpiryDate'); - MockAzureKeyvaultSecretProvider.AddSecretMapping('ShopifyApiVersionExpiryDate', '{"' + ApiVersion + '": "' + Format(CurrentDateTime().Date().Year, 0, 9) + '-' + Format(CurrentDateTime().Date().Month, 0, 9) + '-' + Format(CurrentDateTime().Date().Day, 0, 9) + '"}'); - AzureKeyVaultTestLibrary.SetAzureKeyVaultSecretProvider(MockAzureKeyvaultSecretProvider); + // MockAzureKeyvaultSecretProvider := MockAzureKeyvaultSecretProvider.MockAzureKeyVaultSecretProvider(); + // MockAzureKeyvaultSecretProvider.AddSecretMapping('AllowedApplicationSecrets', 'ShopifyApiVersionExpiryDate'); + // MockAzureKeyvaultSecretProvider.AddSecretMapping('ShopifyApiVersionExpiryDate', '{"' + ApiVersion + '": "' + Format(CurrentDateTime().Date().Year, 0, 9) + '-' + Format(CurrentDateTime().Date().Month, 0, 9) + '-' + Format(CurrentDateTime().Date().Day, 0, 9) + '"}'); + // AzureKeyVaultTestLibrary.SetAzureKeyVaultSecretProvider(MockAzureKeyvaultSecretProvider); end; } From d4c12e2cecc57736060cb4576054556850608922 Mon Sep 17 00:00:00 2001 From: Piotr Michalak Date: Tue, 12 Nov 2024 13:14:27 +0100 Subject: [PATCH 05/10] add idRange in test app.json --- Apps/W1/Shopify/test/app.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Apps/W1/Shopify/test/app.json b/Apps/W1/Shopify/test/app.json index ba1deea22a..36c052a276 100644 --- a/Apps/W1/Shopify/test/app.json +++ b/Apps/W1/Shopify/test/app.json @@ -52,6 +52,10 @@ "screenshots": [], "platform": "26.0.0.0", "idRanges": [ + { + "from": 139546, + "to": 139546 + }, { "from": 139560, "to": 139574 From bcd12ca78ea97ad1c3349f6ed2d66a8de9c04a8d Mon Sep 17 00:00:00 2001 From: Piotr Michalak Date: Wed, 13 Nov 2024 09:58:41 +0100 Subject: [PATCH 06/10] fix idRange --- Apps/W1/Shopify/test/app.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Apps/W1/Shopify/test/app.json b/Apps/W1/Shopify/test/app.json index 36c052a276..2ce17eb0fd 100644 --- a/Apps/W1/Shopify/test/app.json +++ b/Apps/W1/Shopify/test/app.json @@ -53,8 +53,8 @@ "platform": "26.0.0.0", "idRanges": [ { - "from": 139546, - "to": 139546 + "from": 139541, + "to": 139549 }, { "from": 139560, From 6ad7ac57774dca715d71159ed12a10e4a8ba3261 Mon Sep 17 00:00:00 2001 From: Jesper Schulz-Wedde Date: Thu, 21 Nov 2024 15:28:08 +0100 Subject: [PATCH 07/10] Comment code back in. --- Apps/W1/Shopify/test/Base/ShpfyTestShopify.Codeunit.al | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Apps/W1/Shopify/test/Base/ShpfyTestShopify.Codeunit.al b/Apps/W1/Shopify/test/Base/ShpfyTestShopify.Codeunit.al index 39f0ed977f..1025f21acd 100644 --- a/Apps/W1/Shopify/test/Base/ShpfyTestShopify.Codeunit.al +++ b/Apps/W1/Shopify/test/Base/ShpfyTestShopify.Codeunit.al @@ -46,7 +46,7 @@ codeunit 139563 "Shpfy Test Shopify" local procedure SetupKeyVaultExpiryDate(ApiVersion: Text) var AzureKeyVaultTestLibrary: Codeunit "Azure Key Vault Test Library"; - // MockAzureKeyvaultSecretProvider: DotNet MockAzureKeyVaultSecretProvider; + MockAzureKeyvaultSecretProvider: DotNet MockAzureKeyVaultSecretProvider; begin MockAzureKeyvaultSecretProvider := MockAzureKeyvaultSecretProvider.MockAzureKeyVaultSecretProvider(); MockAzureKeyvaultSecretProvider.AddSecretMapping('ShopifyApiVersionExpiryDate', '{"' + ApiVersion + '": "' + Format(CurrentDateTime().Date().Year, 0, 9) + '-' + Format(CurrentDateTime().Date().Month, 0, 9) + '-' + Format(CurrentDateTime().Date().Day, 0, 9) + '"}'); From 7e9f8327b3a9b26629e24f9391c1c7511b0bba61 Mon Sep 17 00:00:00 2001 From: Jesper Schulz-Wedde Date: Wed, 27 Nov 2024 14:28:16 +0100 Subject: [PATCH 08/10] Update ID --- .../Shopify/test/Shipping/ShpfyShippingChargesTest.Codeunit.al | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Apps/W1/Shopify/test/Shipping/ShpfyShippingChargesTest.Codeunit.al b/Apps/W1/Shopify/test/Shipping/ShpfyShippingChargesTest.Codeunit.al index 7168676f50..c6f8b86d6c 100644 --- a/Apps/W1/Shopify/test/Shipping/ShpfyShippingChargesTest.Codeunit.al +++ b/Apps/W1/Shopify/test/Shipping/ShpfyShippingChargesTest.Codeunit.al @@ -1,4 +1,4 @@ -codeunit 139576 "Shpfy Shipping Charges Test" +codeunit 139546 "Shpfy Shipping Charges Test" { Subtype = Test; TestPermissions = Disabled; From 302fa7fcd0972a0fb9599af0da6ff25e9bd4a39b Mon Sep 17 00:00:00 2001 From: Piotr Michalak Date: Thu, 28 Nov 2024 09:48:35 +0100 Subject: [PATCH 09/10] change using existing GL account to newly created GL account --- .../ShpfyShippingChargesTest.Codeunit.al | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/Apps/W1/Shopify/test/Shipping/ShpfyShippingChargesTest.Codeunit.al b/Apps/W1/Shopify/test/Shipping/ShpfyShippingChargesTest.Codeunit.al index c6f8b86d6c..4bbcaa67dd 100644 --- a/Apps/W1/Shopify/test/Shipping/ShpfyShippingChargesTest.Codeunit.al +++ b/Apps/W1/Shopify/test/Shipping/ShpfyShippingChargesTest.Codeunit.al @@ -239,7 +239,7 @@ codeunit 139546 "Shpfy Shipping Charges Test" CreateOrderShippingCharges(OrderShippingCharges, OrderHeader."Shopify Order Id"); // [GIVEN] Created shopify shipment method mapping from the shipping charges - GetGLAccount(GLAccount); + CreateGLAccount(GLAccount); CreateShopifyShipmentMethodMapping( ShpfyShipmentMethodMapping, ShippingChargesType::"G/L Account", @@ -399,12 +399,16 @@ codeunit 139546 "Shpfy Shipping Charges Test" OrderShippingCharges.Insert(true); end; - local procedure GetGLAccount(var GLAccount: Record "G/L Account") + local procedure CreateGLAccount(var GLAccount: Record "G/L Account") + var + VATPostingSetup: Record "VAT Posting Setup"; + LibraryERM: Codeunit "Library - ERM"; begin - GLAccount.SetRange("Direct Posting", true); - GLAccount.SetRange("Blocked", false); - GLAccount.SetRange("Account Type", GLAccount."Account Type"::Posting); - GLAccount.FindLast(); + LibraryERM.CreateVATPostingSetupWithAccounts(VATPostingSetup, + VATPostingSetup."VAT Calculation Type"::"Normal VAT", LibraryRandom.RandDecInDecimalRange(10, 25, 0)); + GLAccount.Get(LibraryERM.CreateGLAccountWithVATPostingSetup(VATPostingSetup, Enum::"General Posting Type"::Sale)); + GLAccount."Direct Posting" := true; + GLAccount.Modify(false); end; local procedure AssertSalesLineValues( From 82cdaa69729ca3c03c9d503db41fe38773de9b5e Mon Sep 17 00:00:00 2001 From: Piotr Michalak Date: Fri, 29 Nov 2024 11:13:05 +0100 Subject: [PATCH 10/10] add missing vat posting group creation --- .../W1/Shopify/test/Base/ShpfyInitializeTest.Codeunit.al | 9 ++++++--- .../test/Shipping/ShpfyShippingChargesTest.Codeunit.al | 3 +++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Apps/W1/Shopify/test/Base/ShpfyInitializeTest.Codeunit.al b/Apps/W1/Shopify/test/Base/ShpfyInitializeTest.Codeunit.al index b91973f971..31726db87f 100644 --- a/Apps/W1/Shopify/test/Base/ShpfyInitializeTest.Codeunit.al +++ b/Apps/W1/Shopify/test/Base/ShpfyInitializeTest.Codeunit.al @@ -62,7 +62,7 @@ codeunit 139561 "Shpfy Initialize Test" CreateVATPostingSetup(PostingGroupCode, PostingGroupCode); CreateVATPostingSetup(PostingGroupCode, ''); CreateVATPostingSetup(PostingGroupCode, RefundGLAccount."VAT Prod. Posting Group"); - Shop."Shipping Charges Account" := CreateShippingChargesGLAcc(VATPostingSetup, GenPostingType); + Shop."Shipping Charges Account" := CreateShippingChargesGLAcc(VATPostingSetup, GenPostingType, PostingGroupCode); Shop."Customer Posting Group" := PostingGroupCode; Shop."Gen. Bus. Posting Group" := PostingGroupCode; Shop."VAT Bus. Posting Group" := PostingGroupCode; @@ -350,7 +350,7 @@ codeunit 139561 "Shpfy Initialize Test" LibraryAssert.IsTrue(Values[1] = ShopifyAccessToken, 'invalid access token'); end; - local procedure CreateVATPostingSetup(BusinessPostingGroup: Code[20]; ProductPostingGroup: Code[20]) + internal procedure CreateVATPostingSetup(BusinessPostingGroup: Code[20]; ProductPostingGroup: Code[20]) var GeneralPostingSetup: Record "General Posting Setup"; VatPostingSetup: Record "VAT Posting Setup"; @@ -373,13 +373,16 @@ codeunit 139561 "Shpfy Initialize Test" end; end; - local procedure CreateShippingChargesGLAcc(var VATPostingSetup: Record "VAT Posting Setup"; GenPostingType: Enum "General Posting Type"): Code[20] + local procedure CreateShippingChargesGLAcc(var VATPostingSetup: Record "VAT Posting Setup"; GenPostingType: Enum "General Posting Type"; PostingGroupCode: Code[20]): Code[20] var ShippingChargesGLAccount: Record "G/L Account"; begin ShippingChargesGLAccount.Get(LibraryERM.CreateGLAccountWithVATPostingSetup(VATPostingSetup, GenPostingType::Sale)); ShippingChargesGLAccount."Direct Posting" := true; ShippingChargesGLAccount.Modify(false); + + CreateVATPostingSetup(PostingGroupCode, ShippingChargesGLAccount."VAT Prod. Posting Group"); + exit(ShippingChargesGLAccount."No."); end; diff --git a/Apps/W1/Shopify/test/Shipping/ShpfyShippingChargesTest.Codeunit.al b/Apps/W1/Shopify/test/Shipping/ShpfyShippingChargesTest.Codeunit.al index 4bbcaa67dd..ee10494c3c 100644 --- a/Apps/W1/Shopify/test/Shipping/ShpfyShippingChargesTest.Codeunit.al +++ b/Apps/W1/Shopify/test/Shipping/ShpfyShippingChargesTest.Codeunit.al @@ -408,6 +408,9 @@ codeunit 139546 "Shpfy Shipping Charges Test" VATPostingSetup."VAT Calculation Type"::"Normal VAT", LibraryRandom.RandDecInDecimalRange(10, 25, 0)); GLAccount.Get(LibraryERM.CreateGLAccountWithVATPostingSetup(VATPostingSetup, Enum::"General Posting Type"::Sale)); GLAccount."Direct Posting" := true; + + ShpfyInitializeTest.CreateVATPostingSetup(Shop."VAT Bus. Posting Group", GLAccount."VAT Prod. Posting Group"); + GLAccount.Modify(false); end;