@istest public with sharing class FetchOrders_test { @istest public static void bothforOppandOrd (){ Account ac = new Account(); ac.name = 'test'; insert ac; Opportunity Opp = new Opportunity(); Opp.name = 'Test'; Opp.AccountId = ac.id; Opp.StageName = 'Closed Won'; Opp.CloseDate = system.today(); Opp.Shopify_Id__c = '618960158784'; insert Opp; Order ord = new Order(); Ord.EffectiveDate = system.today(); Ord.AccountId = ac.id; Ord.Shopify_Id__c = '618960158784'; ord.Status = 'Draft'; insert Ord; List configuration = New List(); HIC_ShopifySync__HIC_Configuration__c shopifyConfiguration = New HIC_ShopifySync__HIC_Configuration__c(); shopifyConfiguration.Name = 'Default'; shopifyConfiguration.HIC_ShopifySync__Account_Contact__c = true; shopifyConfiguration.HIC_ShopifySync__Person_Account__c = false; shopifyConfiguration.HIC_ShopifySync__Default_Account__c = false; shopifyConfiguration.HIC_ShopifySync__Shopify_URL__c = '123@gmail.com'; shopifyConfiguration.HIC_ShopifySync__API_Key__c = 'test'; shopifyConfiguration.HIC_ShopifySync__Private_Key_Password__c = 'Test'; shopifyConfiguration.HIC_ShopifySync__Opportunity__c = true; shopifyConfiguration.HIC_ShopifySync__Order__c = true; shopifyConfiguration.HIC_ShopifySync__Opportunity_Line_Item__c = true; shopifyConfiguration.HIC_ShopifySync__Order_Line_Item__c = true; shopifyConfiguration.HIC_ShopifySync__Account_Record_Type__c = ac.Id; shopifyConfiguration.HIC_ShopifySync__IsCurrencyChanged__c = true; shopifyConfiguration.HIC_ShopifySync__Store__c = '123'; configuration.add(shopifyConfiguration); insert configuration; Test.startTest(); FetchOrders obj = new FetchOrders('test',false,true,configuration,'123'); DataBase.executeBatch(obj); FetchOrders obj1 = new FetchOrders('test',true,false,configuration,'123'); DataBase.executeBatch(obj1); Test.stopTest(); system.assert(shopifyConfiguration.Opportunity__c); } @istest public static void bothforOppandOrd1 (){ Account ac = new Account(); ac.name = 'test'; insert ac; Opportunity Opp = new Opportunity(); Opp.name = 'Test'; Opp.AccountId = ac.id; Opp.StageName = 'Closed Won'; Opp.CloseDate = system.today(); Opp.Shopify_Id__c = '618960158784'; insert Opp; Order ord = new Order(); Ord.EffectiveDate = system.today(); Ord.AccountId = ac.id; Ord.Shopify_Id__c = '618960158784'; ord.Status = 'Draft'; insert Ord; List configuration = New List(); HIC_ShopifySync__HIC_Configuration__c shopifyConfiguration = New HIC_ShopifySync__HIC_Configuration__c(); shopifyConfiguration.Name = 'Default'; shopifyConfiguration.HIC_ShopifySync__Account_Contact__c = true; shopifyConfiguration.HIC_ShopifySync__Person_Account__c = true; shopifyConfiguration.HIC_ShopifySync__Default_Account__c = false; shopifyConfiguration.HIC_ShopifySync__Shopify_URL__c = '123@gmail.com'; shopifyConfiguration.HIC_ShopifySync__API_Key__c = 'test'; shopifyConfiguration.HIC_ShopifySync__Private_Key_Password__c = 'Test'; shopifyConfiguration.HIC_ShopifySync__Opportunity__c = true; shopifyConfiguration.HIC_ShopifySync__Order__c = true; shopifyConfiguration.HIC_ShopifySync__Opportunity_Line_Item__c = true; shopifyConfiguration.HIC_ShopifySync__Order_Line_Item__c = true; shopifyConfiguration.HIC_ShopifySync__Account_Record_Type__c = ac.Id; shopifyConfiguration.HIC_ShopifySync__Store__c = '123'; configuration.add(shopifyConfiguration); insert configuration; Test.startTest(); FetchOrders obj = new FetchOrders('test' ,true,true,configuration,'123'); DataBase.executeBatch(obj); Test.stopTest(); system.assert(shopifyConfiguration.Opportunity__c); } @istest public static void bothforOppandOrd2 (){ Account ac = new Account(); ac.name = 'test'; insert ac; Opportunity Opp = new Opportunity(); Opp.name = 'Test'; Opp.AccountId = ac.id; Opp.StageName = 'Closed Won'; Opp.CloseDate = system.today(); Opp.Shopify_Id__c = '618960158784'; insert Opp; Order ord = new Order(); Ord.EffectiveDate = system.today(); Ord.AccountId = ac.id; Ord.Shopify_Id__c = '618960158784'; ord.Status = 'Draft'; insert Ord; List configuration = New List(); HIC_ShopifySync__HIC_Configuration__c shopifyConfiguration = New HIC_ShopifySync__HIC_Configuration__c(); shopifyConfiguration.Name = 'Default'; shopifyConfiguration.HIC_ShopifySync__Account_Contact__c = true; shopifyConfiguration.HIC_ShopifySync__Person_Account__c = true; shopifyConfiguration.HIC_ShopifySync__Default_Account__c = false; shopifyConfiguration.HIC_ShopifySync__Shopify_URL__c = '123@gmail.com'; shopifyConfiguration.HIC_ShopifySync__API_Key__c = 'test'; shopifyConfiguration.HIC_ShopifySync__Private_Key_Password__c = 'Test'; shopifyConfiguration.HIC_ShopifySync__Opportunity__c = true; shopifyConfiguration.HIC_ShopifySync__Order__c = true; shopifyConfiguration.HIC_ShopifySync__Opportunity_Line_Item__c = true; shopifyConfiguration.HIC_ShopifySync__Order_Line_Item__c = true; shopifyConfiguration.HIC_ShopifySync__Account_Record_Type__c = ac.Id; shopifyConfiguration.HIC_ShopifySync__Collection__c = false; shopifyConfiguration.HIC_ShopifySync__Store__c = '123'; configuration.add(shopifyConfiguration); insert configuration; Test.startTest(); FetchOrders obj = new FetchOrders('test' , true ,true,configuration,'123'); DataBase.executeBatch(obj); Test.stopTest(); system.assert(shopifyConfiguration.Opportunity__c); } @istest public static void bothforOppandOrd3(){ Account ac = new Account(); ac.name = 'test'; insert ac; Opportunity Opp = new Opportunity(); Opp.name = 'Test'; Opp.AccountId = ac.id; Opp.StageName = 'Closed Won'; Opp.CloseDate = system.today(); Opp.Shopify_Id__c = '618960158784'; insert Opp; Order ord = new Order(); Ord.EffectiveDate = system.today(); Ord.AccountId = ac.id; Ord.Shopify_Id__c = '618960158784'; ord.Status = 'Draft'; insert Ord; List configuration = New List(); HIC_ShopifySync__HIC_Configuration__c shopifyConfiguration = New HIC_ShopifySync__HIC_Configuration__c(); shopifyConfiguration.Name = 'Default'; shopifyConfiguration.HIC_ShopifySync__Account_Contact__c = true; shopifyConfiguration.HIC_ShopifySync__Person_Account__c = true; shopifyConfiguration.HIC_ShopifySync__Default_Account__c = false; shopifyConfiguration.HIC_ShopifySync__Shopify_URL__c = '123@gmail.com'; shopifyConfiguration.HIC_ShopifySync__API_Key__c = 'test'; shopifyConfiguration.HIC_ShopifySync__Private_Key_Password__c = 'Test'; shopifyConfiguration.HIC_ShopifySync__Opportunity__c = true; shopifyConfiguration.HIC_ShopifySync__Order__c = true; shopifyConfiguration.HIC_ShopifySync__Opportunity_Line_Item__c = true; shopifyConfiguration.HIC_ShopifySync__Order_Line_Item__c = true; shopifyConfiguration.HIC_ShopifySync__Account_Record_Type__c = ac.Id; shopifyConfiguration.HIC_ShopifySync__Inventory_Location__c = true; shopifyConfiguration.HIC_ShopifySync__Store__c = '123'; configuration.add(shopifyConfiguration); insert configuration; Test.startTest(); FetchOrders obj = new FetchOrders('test', true,true,configuration,'123'); DataBase.executeBatch(obj); Test.stopTest(); system.assert(shopifyConfiguration.Opportunity__c); } @istest public static void bothforOppandOrd4(){ Account ac = new Account(); ac.name = 'test'; insert ac; Opportunity Opp = new Opportunity(); Opp.name = 'Test'; Opp.AccountId = ac.id; Opp.StageName = 'Closed Won'; Opp.CloseDate = system.today(); Opp.Shopify_Id__c = '618960158784'; insert Opp; Order ord = new Order(); Ord.EffectiveDate = system.today(); Ord.AccountId = ac.id; Ord.Shopify_Id__c = '618960158784'; ord.Status = 'Draft'; insert Ord; List configuration = New List(); HIC_ShopifySync__HIC_Configuration__c shopifyConfiguration = New HIC_ShopifySync__HIC_Configuration__c(); shopifyConfiguration.Name = 'Default'; shopifyConfiguration.HIC_ShopifySync__Account_Contact__c = true; shopifyConfiguration.HIC_ShopifySync__Person_Account__c = true; shopifyConfiguration.HIC_ShopifySync__Default_Account__c = false; shopifyConfiguration.HIC_ShopifySync__Shopify_URL__c = '123@gmail.com'; shopifyConfiguration.HIC_ShopifySync__API_Key__c = 'test'; shopifyConfiguration.HIC_ShopifySync__Private_Key_Password__c = 'Test'; shopifyConfiguration.HIC_ShopifySync__Opportunity__c = true; shopifyConfiguration.HIC_ShopifySync__Order__c = true; shopifyConfiguration.HIC_ShopifySync__Opportunity_Line_Item__c = true; shopifyConfiguration.HIC_ShopifySync__Order_Line_Item__c = true; shopifyConfiguration.HIC_ShopifySync__Account_Record_Type__c = ac.Id; shopifyConfiguration.HIC_ShopifySync__Enable_Draft_Order__c = true; shopifyConfiguration.HIC_ShopifySync__Store__c = '123'; configuration.add(shopifyConfiguration); insert configuration; Test.startTest(); FetchOrders obj = new FetchOrders('test' ,true,true,configuration,'123'); DataBase.executeBatch(obj); Test.stopTest(); system.assert(shopifyConfiguration.Opportunity__c); } @isTest public static void FetchOrderTest1(){ Test.setMock(HttpCalloutMock.class, new MockHttpResponseHIC_ShopifyUtility()); HttpResponse res = CalloutClassforHIC_ShopifyUtility.getInfoFromExternalService(); List fieldMapList = new List(); Id priceBookId = Test.getStandardPricebookId(); if(priceBookId != null){ fieldMapList.add(CustomSettingRecordInsert.processFieldMappingSobjectWithAllFields('Order','Pricebook2Id',string.valueOf(priceBookId),'',true,false,'REFERENCE','Reference',string.valueOf(priceBookId))); Boolean multiCurrencyEnabled = Schema.getGlobalDescribe().containsKey('CurrencyType'); if(multiCurrencyEnabled){ fieldMapList.add(CustomSettingRecordInsert.processFieldMappingSobjectWithAllFields('Order','CurrencyISOCODE','USD','',true,false,'PICKLIST','string','')); } } insert fieldMapList; system.assertEquals(200, res.getStatusCode()); List ConList = new List(); HIC_ShopifySync__HIC_Configuration__c con = new HIC_ShopifySync__HIC_Configuration__c(); con.name = 'Default'; con.HIC_ShopifySync__Opportunity__c = false; con.HIC_ShopifySync__Order__c = true; con.HIC_ShopifySync__Opportunity_Line_Item__c = false; con.HIC_ShopifySync__Order_Line_Item__c = true; con.HIC_ShopifySync__Enable_Draft_Order__c = true; con.HIC_ShopifySync__Store__c = '123'; ConList.add(con); insert ConList; Test.startTest(); HIC_ShopifyUtility.fetchDraftOrders(ConList,'123'); Test.stopTest(); } @isTest public static void FetchOrderTest2(){ Test.setMock(HttpCalloutMock.class, new MockHttpResponseHIC_ShopifyUtility()); HttpResponse res = CalloutClassforHIC_ShopifyUtility.getInfoFromExternalService(); List fieldMapList = new List(); Id priceBookId = Test.getStandardPricebookId(); if(priceBookId != null){ fieldMapList.add(CustomSettingRecordInsert.processFieldMappingSobjectWithAllFields('Order','Pricebook2Id',string.valueOf(priceBookId),'',true,false,'REFERENCE','Reference',string.valueOf(priceBookId))); Boolean multiCurrencyEnabled = Schema.getGlobalDescribe().containsKey('CurrencyType'); if(multiCurrencyEnabled){ fieldMapList.add(CustomSettingRecordInsert.processFieldMappingSobjectWithAllFields('Order','CurrencyISOCODE','USD','',true,false,'PICKLIST','string','')); } } insert fieldMapList; system.assertEquals(200, res.getStatusCode()); List ConList = new List(); HIC_ShopifySync__HIC_Configuration__c con = new HIC_ShopifySync__HIC_Configuration__c(); con.name = 'Default'; con.HIC_ShopifySync__Opportunity__c = false; con.HIC_ShopifySync__Order__c = true; con.HIC_ShopifySync__Opportunity_Line_Item__c = false; con.HIC_ShopifySync__Order_Line_Item__c = True; con.HIC_ShopifySync__Store__c = '123'; ConList.add(con); insert ConList; Test.startTest(); HIC_ShopifyUtility.fetchDraftOrders(ConList,'123'); Test.stopTest(); } @isTest public static void FetchOrderTest3(){ Test.setMock(HttpCalloutMock.class, new MockHttpResponseHIC_ShopifyUtility()); HttpResponse res = CalloutClassforHIC_ShopifyUtility.getInfoFromExternalService(); List fieldMapList = new List(); Id priceBookId = Test.getStandardPricebookId(); if(priceBookId != null){ fieldMapList.add(CustomSettingRecordInsert.processFieldMappingSobjectWithAllFields('Order','Pricebook2Id',string.valueOf(priceBookId),'',true,false,'REFERENCE','Reference',string.valueOf(priceBookId))); Boolean multiCurrencyEnabled = Schema.getGlobalDescribe().containsKey('CurrencyType'); if(multiCurrencyEnabled){ fieldMapList.add(CustomSettingRecordInsert.processFieldMappingSobjectWithAllFields('Order','CurrencyISOCODE','USD','',true,false,'PICKLIST','string','')); } } insert fieldMapList; system.assertEquals(200, res.getStatusCode()); List ConList = new List(); HIC_ShopifySync__HIC_Configuration__c con = new HIC_ShopifySync__HIC_Configuration__c(); con.name = 'Default'; con.HIC_ShopifySync__Opportunity__c = true; con.HIC_ShopifySync__Order__c = false; con.HIC_ShopifySync__Opportunity_Line_Item__c = false; con.HIC_ShopifySync__Order_Line_Item__c = True; con.HIC_ShopifySync__Store__c = '123'; ConList.add(con); insert ConList; Test.startTest(); HIC_ShopifyUtility.fetchDraftOrders(ConList,'123'); Test.stopTest(); } @isTest public static void FetchOrderTest4(){ Test.setMock(HttpCalloutMock.class, new MockHttpResponseHIC_ShopifyUtility()); HttpResponse res = CalloutClassforHIC_ShopifyUtility.getInfoFromExternalService(); List fieldMapList = new List(); Id priceBookId = Test.getStandardPricebookId(); if(priceBookId != null){ fieldMapList.add(CustomSettingRecordInsert.processFieldMappingSobjectWithAllFields('Order','Pricebook2Id',string.valueOf(priceBookId),'',true,false,'REFERENCE','Reference',string.valueOf(priceBookId))); Boolean multiCurrencyEnabled = Schema.getGlobalDescribe().containsKey('CurrencyType'); if(multiCurrencyEnabled){ fieldMapList.add(CustomSettingRecordInsert.processFieldMappingSobjectWithAllFields('Order','CurrencyISOCODE','USD','',true,false,'PICKLIST','string','')); } } insert fieldMapList; system.assertEquals(200, res.getStatusCode()); List ConList = new List(); HIC_ShopifySync__HIC_Configuration__c con = new HIC_ShopifySync__HIC_Configuration__c(); con.name = 'Default'; con.HIC_ShopifySync__Opportunity__c = true; con.HIC_ShopifySync__Order__c = true; con.HIC_ShopifySync__Opportunity_Line_Item__c = false; con.HIC_ShopifySync__Order_Line_Item__c = True; con.HIC_ShopifySync__Store__c = '123'; ConList.add(con); insert ConList; Test.startTest(); HIC_ShopifyUtility.fetchDraftOrders(ConList,'123'); Test.stopTest(); } @isTest public static void FetchOrderTest5(){ Test.setMock(HttpCalloutMock.class, new MockHttpResponseHIC_ShopifyUtility()); HttpResponse res = CalloutClassforHIC_ShopifyUtility.getInfoFromExternalService(); List fieldMapList = new List(); Id priceBookId = Test.getStandardPricebookId(); if(priceBookId != null){ fieldMapList.add(CustomSettingRecordInsert.processFieldMappingSobjectWithAllFields('Order','Pricebook2Id',string.valueOf(priceBookId),'',true,false,'REFERENCE','Reference',string.valueOf(priceBookId))); Boolean multiCurrencyEnabled = Schema.getGlobalDescribe().containsKey('CurrencyType'); if(multiCurrencyEnabled){ fieldMapList.add(CustomSettingRecordInsert.processFieldMappingSobjectWithAllFields('Order','CurrencyISOCODE','USD','',true,false,'PICKLIST','string','')); } } insert fieldMapList; CustomSettingRecordInsert.InsertingWebhook(); system.assertEquals(200, res.getStatusCode()); List ConList = new List(); HIC_ShopifySync__HIC_Configuration__c con = new HIC_ShopifySync__HIC_Configuration__c(); con.name = 'Default'; con.HIC_ShopifySync__Opportunity__c = false; con.HIC_ShopifySync__Order__c = true; con.HIC_ShopifySync__Opportunity_Line_Item__c = true; con.HIC_ShopifySync__Order_Line_Item__c = True; con.HIC_ShopifySync__Store__c = '123'; ConList.add(con); insert ConList; Test.startTest(); HIC_ShopifyUtility.fetchDraftOrders(ConList,'123'); Test.stopTest(); } @isTest static void FetchOrdersTest() { List configurationList = new List{ new HIC_ShopifySync__HIC_Configuration__c( HIC_ShopifySync__API_Key__c = 'Test-AB', HIC_ShopifySync__Private_Key_Password__c = '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', HIC_ShopifySync__Shopify_URL__c = 'https://staging-jacuzzi-hot-tubs-ontario.myshopify.com/', HIC_ShopifySync__Store__c = 'staging-jacuzzi-hot-tubs-ontario', Name = 'staging-jacuzzi-hot-tubs-ontario') }; insert configurationList; Test.startTest(); FetchOrders batch0 = new FetchOrders('', false, true, configurationList, 'staging-jacuzzi-hot-tubs-ontario'); FetchOrders batch1 = new FetchOrders('', false, true, configurationList, 'staging-jacuzzi-hot-tubs-ontario','',''); FetchOrders batch2 = new FetchOrders('', false, true, configurationList, 'staging-jacuzzi-hot-tubs-ontario','','',false); ID batchJobId = Database.executeBatch(batch1, 1); Test.stopTest(); } // ─── NEW TESTS BELOW ──────────────────────────────────────────────────────── /** * Tests the shopifyResourceName constructor (4th constructor) * and covers the shopifyResourceName != null path in start() and finish() */ @isTest static void testShopifyResourceNameConstructor() { Account ac = new Account(Name = 'test'); insert ac; List configuration = new List(); HIC_ShopifySync__HIC_Configuration__c cfg = new HIC_ShopifySync__HIC_Configuration__c(); cfg.Name = 'Default'; cfg.HIC_ShopifySync__Store__c = '123'; cfg.HIC_ShopifySync__Shopify_URL__c = 'https://test.myshopify.com/'; cfg.HIC_ShopifySync__API_Key__c = 'testkey'; cfg.HIC_ShopifySync__Private_Key_Password__c = 'testpass'; cfg.HIC_ShopifySync__Opportunity__c = false; cfg.HIC_ShopifySync__Order__c = true; cfg.HIC_ShopifySync__Order_Line_Item__c = false; cfg.HIC_ShopifySync__Opportunity_Line_Item__c = false; cfg.HIC_ShopifySync__Enable_Draft_Order__c = true; cfg.HIC_ShopifySync__Draft_Order_Sync__c = false; cfg.HIC_ShopifySync__Collection__c = false; cfg.HIC_ShopifySync__Inventory_Location__c = false; configuration.add(cfg); insert configuration; Test.startTest(); // 4th constructor: shopifyResourceName variant FetchOrders batch = new FetchOrders('', true, 'draft_orders', configuration, '123', '', ''); Database.executeBatch(batch, 1); Test.stopTest(); system.assertNotEquals(null, batch); } /** * Tests orderBypassFlag = true path */ @isTest static void testOrderBypassFlagTrue() { Account ac = new Account(Name = 'test'); insert ac; Order ord = new Order(); ord.EffectiveDate = system.today(); ord.AccountId = ac.id; ord.Shopify_Id__c = '618960158784'; ord.Status = 'Draft'; insert ord; List configuration = new List(); HIC_ShopifySync__HIC_Configuration__c cfg = new HIC_ShopifySync__HIC_Configuration__c(); cfg.Name = 'Default'; cfg.HIC_ShopifySync__Store__c = '123'; cfg.HIC_ShopifySync__Shopify_URL__c = 'https://test.myshopify.com/'; cfg.HIC_ShopifySync__API_Key__c = 'testkey'; cfg.HIC_ShopifySync__Private_Key_Password__c = 'testpass'; cfg.HIC_ShopifySync__Opportunity__c = false; cfg.HIC_ShopifySync__Order__c = false; cfg.HIC_ShopifySync__Order_Line_Item__c = true; cfg.HIC_ShopifySync__Opportunity_Line_Item__c = false; cfg.HIC_ShopifySync__Enable_Draft_Order__c = false; cfg.HIC_ShopifySync__Draft_Order_Sync__c = false; cfg.HIC_ShopifySync__Collection__c = false; cfg.HIC_ShopifySync__Inventory_Location__c = false; cfg.HIC_ShopifySync__IsCurrencyChanged__c = true; cfg.HIC_ShopifySync__Person_Account__c = false; configuration.add(cfg); insert configuration; Test.startTest(); // orderBypassFlag = true → forces OrderIntoOrder path even when Order__c = false FetchOrders batch = new FetchOrders('', true, true, configuration, '123', '', '', true); Database.executeBatch(batch, 1); Test.stopTest(); system.assertNotEquals(null, batch); } /** * Tests updated_at_min and updated_at_max parameters (5-param constructor) */ @isTest static void testUpdatedAtMinMax() { Account ac = new Account(Name = 'test'); insert ac; List configuration = new List(); HIC_ShopifySync__HIC_Configuration__c cfg = new HIC_ShopifySync__HIC_Configuration__c(); cfg.Name = 'Default'; cfg.HIC_ShopifySync__Store__c = '123'; cfg.HIC_ShopifySync__Shopify_URL__c = 'https://test.myshopify.com/'; cfg.HIC_ShopifySync__API_Key__c = 'testkey'; cfg.HIC_ShopifySync__Private_Key_Password__c = 'testpass'; cfg.HIC_ShopifySync__Opportunity__c = true; cfg.HIC_ShopifySync__Order__c = true; cfg.HIC_ShopifySync__Order_Line_Item__c = true; cfg.HIC_ShopifySync__Opportunity_Line_Item__c = true; cfg.HIC_ShopifySync__Enable_Draft_Order__c = false; cfg.HIC_ShopifySync__Draft_Order_Sync__c = false; cfg.HIC_ShopifySync__Collection__c = false; cfg.HIC_ShopifySync__Inventory_Location__c = false; cfg.HIC_ShopifySync__Person_Account__c = false; configuration.add(cfg); insert configuration; Test.startTest(); // Order with date range filters FetchOrders batchOrder = new FetchOrders('', true, true, configuration, '123', '2024-01-01T00:00:00Z', '2024-12-31T23:59:59Z'); Database.executeBatch(batchOrder, 1); // Draft Order with date range filters FetchOrders batchDraft = new FetchOrders('', true, false, configuration, '123', '2024-01-01T00:00:00Z', '2024-12-31T23:59:59Z'); Database.executeBatch(batchDraft, 1); Test.stopTest(); system.assertNotEquals(null, batchOrder); system.assertNotEquals(null, batchDraft); } /** * Tests B2B path: HIC_ShopifySync__Customer_Email_Domain__c = true * Covers b2bOrderIdToAccountId / b2bOrderIdToContactId population, * existing account lookup, new account creation, and contact lookup. */ @isTest static void testB2BPath() { // Pre-create an account matching expected email domain ('gmail') Account domainAccount = new Account(Name = 'gmail'); insert domainAccount; // Pre-create a Contact with a Shopify ID so b2bOrderIdToContactId path is hit Contact existingContact = new Contact( LastName = 'TestContact', AccountId = domainAccount.Id, HIC_ShopifySync__Shopify_Id__c = 'Business 926016995392' ); insert existingContact; List configuration = new List(); HIC_ShopifySync__HIC_Configuration__c cfg = new HIC_ShopifySync__HIC_Configuration__c(); cfg.Name = 'Default'; cfg.HIC_ShopifySync__Store__c = '123'; cfg.HIC_ShopifySync__Shopify_URL__c = 'https://test.myshopify.com/'; cfg.HIC_ShopifySync__API_Key__c = 'testkey'; cfg.HIC_ShopifySync__Private_Key_Password__c = 'testpass'; cfg.HIC_ShopifySync__Opportunity__c = true; cfg.HIC_ShopifySync__Order__c = true; cfg.HIC_ShopifySync__Order_Line_Item__c = true; cfg.HIC_ShopifySync__Opportunity_Line_Item__c = true; cfg.HIC_ShopifySync__Enable_Draft_Order__c = false; cfg.HIC_ShopifySync__Enable_Opportunity_for_SDO__c = false; cfg.HIC_ShopifySync__Draft_Order_Sync__c = false; cfg.HIC_ShopifySync__Collection__c = false; cfg.HIC_ShopifySync__Inventory_Location__c = false; cfg.HIC_ShopifySync__Person_Account__c = false; cfg.HIC_ShopifySync__Customer_Email_Domain__c = true; // Enable B2B path configuration.add(cfg); insert configuration; Test.startTest(); // Run for Orders (check = true) via B2B path FetchOrders batchOrder = new FetchOrders('', true, true, configuration, '123', '', ''); Database.executeBatch(batchOrder, 1); // Run for Draft Orders (check = false) via B2B path FetchOrders batchDraft = new FetchOrders('', true, false, configuration, '123', '', ''); Database.executeBatch(batchDraft, 1); Test.stopTest(); // B2B account created or found for domain 'gmail' List accounts = [SELECT Id, Name FROM Account WHERE Name = 'gmail']; system.assert(!accounts.isEmpty(), 'B2B domain account should exist'); } /** * Tests B2B path where no existing account exists for the domain, * forcing account creation inside the batch. */ @isTest static void testB2BPathNewAccountCreation() { // Do NOT pre-create an account for domain 'gmail' — batch should create it List configuration = new List(); HIC_ShopifySync__HIC_Configuration__c cfg = new HIC_ShopifySync__HIC_Configuration__c(); cfg.Name = 'Default'; cfg.HIC_ShopifySync__Store__c = '123'; cfg.HIC_ShopifySync__Shopify_URL__c = 'https://test.myshopify.com/'; cfg.HIC_ShopifySync__API_Key__c = 'testkey'; cfg.HIC_ShopifySync__Private_Key_Password__c = 'testpass'; cfg.HIC_ShopifySync__Opportunity__c = true; cfg.HIC_ShopifySync__Order__c = true; cfg.HIC_ShopifySync__Order_Line_Item__c = false; cfg.HIC_ShopifySync__Opportunity_Line_Item__c = false; cfg.HIC_ShopifySync__Enable_Draft_Order__c = false; cfg.HIC_ShopifySync__Enable_Opportunity_for_SDO__c = false; cfg.HIC_ShopifySync__Draft_Order_Sync__c = false; cfg.HIC_ShopifySync__Collection__c = false; cfg.HIC_ShopifySync__Inventory_Location__c = false; cfg.HIC_ShopifySync__Person_Account__c = false; cfg.HIC_ShopifySync__Customer_Email_Domain__c = true; configuration.add(cfg); insert configuration; Test.startTest(); FetchOrders batch = new FetchOrders('', true, true, configuration, '123', '', ''); Database.executeBatch(batch, 1); Test.stopTest(); List createdAccounts = [SELECT Id, Name FROM Account WHERE Name = 'gmail']; system.assert(!createdAccounts.isEmpty(), 'Batch should have created B2B domain account'); } /** * Tests the finish() → Draft Order Sync branch * (check=false, Draft_Order_Sync__c=true) */ @isTest static void testFinishDraftOrderSyncBranch() { Account ac = new Account(Name = 'test'); insert ac; List configuration = new List(); HIC_ShopifySync__HIC_Configuration__c cfg = new HIC_ShopifySync__HIC_Configuration__c(); cfg.Name = 'Default'; cfg.HIC_ShopifySync__Store__c = '123'; cfg.HIC_ShopifySync__Shopify_URL__c = 'https://test.myshopify.com/'; cfg.HIC_ShopifySync__API_Key__c = 'testkey'; cfg.HIC_ShopifySync__Private_Key_Password__c = 'testpass'; cfg.HIC_ShopifySync__Opportunity__c = false; cfg.HIC_ShopifySync__Order__c = false; cfg.HIC_ShopifySync__Order_Line_Item__c = false; cfg.HIC_ShopifySync__Opportunity_Line_Item__c = false; cfg.HIC_ShopifySync__Enable_Draft_Order__c = true; cfg.HIC_ShopifySync__Enable_Opportunity_for_SDO__c = false; cfg.HIC_ShopifySync__Draft_Order_Sync__c = true; // finish → DraftOrder completed branch cfg.HIC_ShopifySync__Collection__c = false; cfg.HIC_ShopifySync__Inventory_Location__c = false; cfg.HIC_ShopifySync__Person_Account__c = false; configuration.add(cfg); insert configuration; Test.startTest(); FetchOrders batch = new FetchOrders('', true, false, configuration, '123', '', ''); Database.executeBatch(batch, 1); Test.stopTest(); List updated = [ SELECT HIC_ShopifySync__DraftOrderBatchCompleted__c FROM HIC_ShopifySync__HIC_Configuration__c WHERE HIC_ShopifySync__Store__c = '123' ]; system.assert(!updated.isEmpty()); } /** * Tests the finish() → no draft/collection/inventory branch * (all flags false, check=true → OrderBatchCompleted set true) */ @isTest static void testFinishNoDraftNoCollectionNoInventory() { Account ac = new Account(Name = 'test'); insert ac; List configuration = new List(); HIC_ShopifySync__HIC_Configuration__c cfg = new HIC_ShopifySync__HIC_Configuration__c(); cfg.Name = 'Default'; cfg.HIC_ShopifySync__Store__c = '123'; cfg.HIC_ShopifySync__Shopify_URL__c = 'https://test.myshopify.com/'; cfg.HIC_ShopifySync__API_Key__c = 'testkey'; cfg.HIC_ShopifySync__Private_Key_Password__c = 'testpass'; cfg.HIC_ShopifySync__Opportunity__c = false; cfg.HIC_ShopifySync__Order__c = true; cfg.HIC_ShopifySync__Order_Line_Item__c = false; cfg.HIC_ShopifySync__Opportunity_Line_Item__c = false; cfg.HIC_ShopifySync__Enable_Draft_Order__c = false; cfg.HIC_ShopifySync__Enable_Opportunity_for_SDO__c = false; cfg.HIC_ShopifySync__Draft_Order_Sync__c = false; cfg.HIC_ShopifySync__Collection__c = false; cfg.HIC_ShopifySync__Inventory_Location__c = false; cfg.HIC_ShopifySync__Person_Account__c = false; cfg.HIC_ShopifySync__IsCurrencyChanged__c = false; configuration.add(cfg); insert configuration; Test.startTest(); FetchOrders batch = new FetchOrders('', true, true, configuration, '123', '', ''); Database.executeBatch(batch, 1); Test.stopTest(); List updated = [ SELECT HIC_ShopifySync__OrderBatchCompleted__c, HIC_ShopifySync__Batch_Is_Processing__c FROM HIC_ShopifySync__HIC_Configuration__c WHERE HIC_ShopifySync__Store__c = '123' ]; system.assert(!updated.isEmpty()); } /** * Tests Order Fulfillment path (Order_Fulfillment__c = true, check = true) */ @isTest static void testOrderFulfillmentPath() { Account ac = new Account(Name = 'test'); insert ac; List configuration = new List(); HIC_ShopifySync__HIC_Configuration__c cfg = new HIC_ShopifySync__HIC_Configuration__c(); cfg.Name = 'Default'; cfg.HIC_ShopifySync__Store__c = '123'; cfg.HIC_ShopifySync__Shopify_URL__c = 'https://test.myshopify.com/'; cfg.HIC_ShopifySync__API_Key__c = 'testkey'; cfg.HIC_ShopifySync__Private_Key_Password__c = 'testpass'; cfg.HIC_ShopifySync__Opportunity__c = false; cfg.HIC_ShopifySync__Order__c = true; cfg.HIC_ShopifySync__Order_Line_Item__c = false; cfg.HIC_ShopifySync__Opportunity_Line_Item__c = false; cfg.HIC_ShopifySync__Order_Fulfillment__c = true; // Fulfillment path cfg.HIC_ShopifySync__Enable_Draft_Order__c = false; cfg.HIC_ShopifySync__Draft_Order_Sync__c = false; cfg.HIC_ShopifySync__Collection__c = false; cfg.HIC_ShopifySync__Inventory_Location__c = false; cfg.HIC_ShopifySync__Person_Account__c = false; configuration.add(cfg); insert configuration; Test.startTest(); FetchOrders batch = new FetchOrders('', true, true, configuration, '123', '', ''); Database.executeBatch(batch, 1); Test.stopTest(); system.assertNotEquals(null, batch); } /** * Tests Order_Status_Activated_To_Draft__c = false path * (activates orders after upsert) */ @isTest static void testOrderStatusActivatedToDraftFalse() { Account ac = new Account(Name = 'test'); insert ac; List configuration = new List(); HIC_ShopifySync__HIC_Configuration__c cfg = new HIC_ShopifySync__HIC_Configuration__c(); cfg.Name = 'Default'; cfg.HIC_ShopifySync__Store__c = '123'; cfg.HIC_ShopifySync__Shopify_URL__c = 'https://test.myshopify.com/'; cfg.HIC_ShopifySync__API_Key__c = 'testkey'; cfg.HIC_ShopifySync__Private_Key_Password__c = 'testpass'; cfg.HIC_ShopifySync__Opportunity__c = false; cfg.HIC_ShopifySync__Order__c = true; cfg.HIC_ShopifySync__Order_Line_Item__c = true; cfg.HIC_ShopifySync__Opportunity_Line_Item__c = false; cfg.HIC_ShopifySync__Order_Fulfillment__c = false; cfg.HIC_ShopifySync__Order_Status_Activated_To_Draft__c = false; // triggers Activated status set cfg.HIC_ShopifySync__Enable_Draft_Order__c = false; cfg.HIC_ShopifySync__Draft_Order_Sync__c = false; cfg.HIC_ShopifySync__Collection__c = false; cfg.HIC_ShopifySync__Inventory_Location__c = false; cfg.HIC_ShopifySync__Person_Account__c = false; configuration.add(cfg); insert configuration; Test.startTest(); FetchOrders batch = new FetchOrders('', true, true, configuration, '123', '', ''); Database.executeBatch(batch, 1); Test.stopTest(); system.assertNotEquals(null, batch); } /** * Tests Enable_Opportunity_for_SDO__c path (Draft Order → Opportunity) */ @isTest static void testEnableOpportunityForSDO() { Account ac = new Account(Name = 'test'); insert ac; List configuration = new List(); HIC_ShopifySync__HIC_Configuration__c cfg = new HIC_ShopifySync__HIC_Configuration__c(); cfg.Name = 'Default'; cfg.HIC_ShopifySync__Store__c = '123'; cfg.HIC_ShopifySync__Shopify_URL__c = 'https://test.myshopify.com/'; cfg.HIC_ShopifySync__API_Key__c = 'testkey'; cfg.HIC_ShopifySync__Private_Key_Password__c = 'testpass'; cfg.HIC_ShopifySync__Opportunity__c = false; cfg.HIC_ShopifySync__Order__c = false; cfg.HIC_ShopifySync__Order_Line_Item__c = false; cfg.HIC_ShopifySync__Opportunity_Line_Item__c = false; cfg.HIC_ShopifySync__Enable_Draft_Order__c = false; cfg.HIC_ShopifySync__Enable_Opportunity_for_SDO__c = true; // Draft Order → Opportunity cfg.HIC_ShopifySync__Draft_Order_Sync__c = false; cfg.HIC_ShopifySync__Collection__c = false; cfg.HIC_ShopifySync__Inventory_Location__c = false; cfg.HIC_ShopifySync__Person_Account__c = false; configuration.add(cfg); insert configuration; Test.startTest(); FetchOrders batch = new FetchOrders('', true, false, configuration, '123', '', ''); Database.executeBatch(batch, 1); Test.stopTest(); system.assertNotEquals(null, batch); } /** * Tests Person Account path (Person_Account__c = true) * with a Shopify customer that does NOT already have a 'Person' prefix. */ @isTest static void testPersonAccountPath() { Account ac = new Account(Name = 'test'); insert ac; List configuration = new List(); HIC_ShopifySync__HIC_Configuration__c cfg = new HIC_ShopifySync__HIC_Configuration__c(); cfg.Name = 'Default'; cfg.HIC_ShopifySync__Store__c = '123'; cfg.HIC_ShopifySync__Shopify_URL__c = 'https://test.myshopify.com/'; cfg.HIC_ShopifySync__API_Key__c = 'testkey'; cfg.HIC_ShopifySync__Private_Key_Password__c = 'testpass'; cfg.HIC_ShopifySync__Opportunity__c = true; cfg.HIC_ShopifySync__Order__c = true; cfg.HIC_ShopifySync__Order_Line_Item__c = false; cfg.HIC_ShopifySync__Opportunity_Line_Item__c = false; cfg.HIC_ShopifySync__Enable_Draft_Order__c = false; cfg.HIC_ShopifySync__Enable_Opportunity_for_SDO__c = false; cfg.HIC_ShopifySync__Draft_Order_Sync__c = false; cfg.HIC_ShopifySync__Collection__c = false; cfg.HIC_ShopifySync__Inventory_Location__c = false; cfg.HIC_ShopifySync__Person_Account__c = true; // Person Account path configuration.add(cfg); insert configuration; Test.startTest(); FetchOrders batch = new FetchOrders('', true, true, configuration, '123', '', ''); Database.executeBatch(batch, 1); Test.stopTest(); system.assertNotEquals(null, batch); } }