@isTest public with sharing class FetchAccounts_Test { @isTest public static void test1ForFetchAccounts(){ List ConList = new List(); HIC_ShopifySync__HIC_Configuration__c con = new HIC_ShopifySync__HIC_Configuration__c(); con.name = 'Default'; con.HIC_ShopifySync__Private_Key_Password__c = '0000000000000000True'; 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 = false; con.HIC_ShopifySync__Account_Contact__c = false; con.HIC_ShopifySync__Person_Account__c = true; con.HIC_ShopifySync__Default_Account__c = false; Con.HIC_ShopifySync__Number_of_pages_for_Account__c = 2; Con.HIC_ShopifySync__Store__c = '123'; ConList.add(con); insert ConList; List fmListToCreate = new List(); HIC_ShopifySync__HIC_Field_Mapping__c fieldMapping = new HIC_ShopifySync__HIC_Field_Mapping__c(); fieldMapping.Name = 'Order'+'-'+'Pricebook2Id'; fieldMapping.HIC_ShopifySync__Object_Name__c = 'Account'; fieldMapping.HIC_ShopifySync__SF_Field__c = 'Pricebook2Id'; fieldMapping.HIC_ShopifySync__Shopify_Fields__c = '01s6F00000GftN3QAJ'; fieldMapping.HIC_ShopifySync__Nested__c = 'default'; fieldMapping.HIC_ShopifySync__Default_Value__c = True; fieldMapping.HIC_ShopifySync__IsSFID__c = True; fieldMapping.HIC_ShopifySync__External_ID__c = 'Order'+'-'+'Pricebook2Id'; fieldMapping.HIC_ShopifySync__Store__c = '123'; fmListToCreate.add(fieldMapping); HIC_ShopifySync__HIC_Field_Mapping__c fieldMapping2 = new HIC_ShopifySync__HIC_Field_Mapping__c(); fieldMapping2.Name = 'Contact'+'-'+'Test'; fieldMapping2.HIC_ShopifySync__Object_Name__c = 'Contact'; fieldMapping2.HIC_ShopifySync__SF_Field__c = 'Email'; fieldMapping2.HIC_ShopifySync__Shopify_Fields__c = 'email'; fieldMapping2.HIC_ShopifySync__Nested__c = ''; fieldMapping2.HIC_ShopifySync__Default_Value__c = false; fieldMapping2.HIC_ShopifySync__IsSFID__c = false; fieldMapping2.HIC_ShopifySync__External_ID__c = 'Contact'+'-'+'Test'; fieldMapping.HIC_ShopifySync__Store__c = '123'; fmListToCreate.add(fieldMapping2); insert fmListToCreate; Test.startTest(); FetchAccounts obj = new FetchAccounts('' , false, '123'); Database.executeBatch(obj); Test.stopTest(); system.assert(con.Opportunity__c == true); } @isTest public static void testFetchAccountsWithAccountContact() { List ConList = new List(); HIC_ShopifySync__HIC_Configuration__c con = new HIC_ShopifySync__HIC_Configuration__c(); con.name = 'Default'; con.HIC_ShopifySync__Private_Key_Password__c = '0000000000000000True'; con.HIC_ShopifySync__Opportunity__c = false; con.HIC_ShopifySync__Order__c = false; con.HIC_ShopifySync__Opportunity_Line_Item__c = false; con.HIC_ShopifySync__Order_Line_Item__c = false; con.HIC_ShopifySync__Account_Contact__c = true; con.HIC_ShopifySync__Person_Account__c = false; con.HIC_ShopifySync__Default_Account__c = false; Con.HIC_ShopifySync__Number_of_pages_for_Account__c = 2; Con.HIC_ShopifySync__Store__c = '123'; ConList.add(con); insert ConList; List fmListToCreate = new List(); HIC_ShopifySync__HIC_Field_Mapping__c fieldMapping = new HIC_ShopifySync__HIC_Field_Mapping__c(); fieldMapping.Name = 'Order'+'-'+'Pricebook2Id'; fieldMapping.HIC_ShopifySync__Object_Name__c = 'Order'; fieldMapping.HIC_ShopifySync__SF_Field__c = 'Pricebook2Id'; fieldMapping.HIC_ShopifySync__Shopify_Fields__c = '01s6F00000GftN3QAJ'; fieldMapping.HIC_ShopifySync__Nested__c = 'default'; fieldMapping.HIC_ShopifySync__Default_Value__c = True; fieldMapping.HIC_ShopifySync__IsSFID__c = True; fieldMapping.HIC_ShopifySync__External_ID__c = 'Order'+'-'+'Pricebook2Id'; fieldMapping.HIC_ShopifySync__Store__c = '123'; fmListToCreate.add(fieldMapping); insert fmListToCreate; Test.startTest(); FetchAccounts obj = new FetchAccounts('' , false, '123'); Database.executeBatch(obj); Test.stopTest(); system.assert(con.Opportunity__c == false); } @isTest public static void testFetchAccounts() { List ConList = new List(); HIC_ShopifySync__HIC_Configuration__c con = new HIC_ShopifySync__HIC_Configuration__c(); con.name = 'Default'; con.HIC_ShopifySync__Private_Key_Password__c = '0000000000000000True'; con.HIC_ShopifySync__Opportunity__c = false; con.HIC_ShopifySync__Order__c = false; con.HIC_ShopifySync__Opportunity_Line_Item__c = false; con.HIC_ShopifySync__Order_Line_Item__c = false; con.HIC_ShopifySync__Account_Contact__c = true; con.HIC_ShopifySync__Person_Account__c = true; con.HIC_ShopifySync__Default_Account__c = false; Con.HIC_ShopifySync__Number_of_pages_for_Account__c = 2; Con.HIC_ShopifySync__Store__c = '123'; ConList.add(con); insert ConList; List fmListToCreate = new List(); HIC_ShopifySync__HIC_Field_Mapping__c fieldMapping = new HIC_ShopifySync__HIC_Field_Mapping__c(); fieldMapping.Name = 'Order'+'-'+'Pricebook2Id'; fieldMapping.HIC_ShopifySync__Object_Name__c = 'Order'; fieldMapping.HIC_ShopifySync__SF_Field__c = 'Pricebook2Id'; fieldMapping.HIC_ShopifySync__Shopify_Fields__c = '01s6F00000GftN3QAJ'; fieldMapping.HIC_ShopifySync__Nested__c = 'default'; fieldMapping.HIC_ShopifySync__Default_Value__c = True; fieldMapping.HIC_ShopifySync__IsSFID__c = True; fieldMapping.HIC_ShopifySync__External_ID__c = 'Order'+'-'+'Pricebook2Id'; fieldMapping.HIC_ShopifySync__Store__c = '123'; fmListToCreate.add(fieldMapping); insert fmListToCreate; Test.startTest(); FetchAccounts obj = new FetchAccounts('' , false, '123'); Database.executeBatch(obj); Test.stopTest(); system.assert(con.Opportunity__c == false); } @isTest public static void testFetchAccounts1() { Account ac = new Account(); ac.name = 'Test'; ac.HIC_ShopifySync__Shopify_Id__c = '952507760711'; insert ac; List ConList = new List(); HIC_ShopifySync__HIC_Configuration__c con = new HIC_ShopifySync__HIC_Configuration__c(); con.name = 'Default'; con.HIC_ShopifySync__Private_Key_Password__c = '0000000000000000True'; con.HIC_ShopifySync__Opportunity__c = false; con.HIC_ShopifySync__Order__c = false; con.HIC_ShopifySync__Opportunity_Line_Item__c = false; con.HIC_ShopifySync__Order_Line_Item__c = false; con.HIC_ShopifySync__Account_Contact__c = true; con.HIC_ShopifySync__Person_Account__c = false; con.HIC_ShopifySync__Default_Account__c = true; Con.HIC_ShopifySync__Number_of_pages_for_Account__c = 1; Con.HIC_ShopifySync__Store__c = '123'; ConList.add(con); insert ConList; Test.startTest(); FetchAccounts obj = new FetchAccounts('' , false, '123'); Database.executeBatch(obj, 1); Test.stopTest(); system.assert(con.HIC_ShopifySync__Opportunity__c == false); } @isTest public static void testFetchAccounts2() { Account ac = new Account(); ac.name = 'Test'; ac.HIC_ShopifySync__Shopify_Id__c = '952507760711'; insert ac; List ConList = new List(); HIC_ShopifySync__HIC_Configuration__c con = new HIC_ShopifySync__HIC_Configuration__c(); con.name = 'Default'; con.HIC_ShopifySync__Private_Key_Password__c = '0000000000000000True'; con.HIC_ShopifySync__Opportunity__c = false; con.HIC_ShopifySync__Order__c = false; con.HIC_ShopifySync__Opportunity_Line_Item__c = false; con.HIC_ShopifySync__Order_Line_Item__c = false; con.HIC_ShopifySync__Account_Contact__c = true; con.HIC_ShopifySync__Person_Account__c = false; con.HIC_ShopifySync__Default_Account__c = true; Con.HIC_ShopifySync__Number_of_pages_for_Account__c = 1; Con.HIC_ShopifySync__Inventory_Location__c = true; Con.HIC_ShopifySync__Store__c = '123'; ConList.add(con); insert ConList; Test.startTest(); FetchAccounts obj = new FetchAccounts('' , false, '123'); Database.executeBatch(obj,1); Test.stopTest(); system.assert(con.HIC_ShopifySync__Opportunity__c == false); } @isTest public static void testFetchAccounts4() { Account ac = new Account(); ac.name = 'Test'; ac.HIC_ShopifySync__Shopify_Id__c = '952507760711'; insert ac; List ConList = new List(); HIC_ShopifySync__HIC_Configuration__c con = new HIC_ShopifySync__HIC_Configuration__c(); con.name = 'Default'; con.HIC_ShopifySync__Private_Key_Password__c = '0000000000000000True'; con.HIC_ShopifySync__Opportunity__c = false; con.HIC_ShopifySync__Order__c = false; con.HIC_ShopifySync__Opportunity_Line_Item__c = false; con.HIC_ShopifySync__Order_Line_Item__c = false; con.HIC_ShopifySync__Account_Contact__c = true; con.HIC_ShopifySync__Person_Account__c = false; con.HIC_ShopifySync__Default_Account__c = true; Con.HIC_ShopifySync__Number_of_pages_for_Account__c = 1; con.HIC_ShopifySync__Collection__c = true; con.HIC_ShopifySync__Inventory_Location__c = true; Con.HIC_ShopifySync__Store__c = '123'; ConList.add(con); insert ConList; Test.startTest(); FetchAccounts obj = new FetchAccounts('' , false, '123'); Database.executeBatch(obj,1); Test.stopTest(); system.assert(con.HIC_ShopifySync__Opportunity__c == false); } @isTest static void testCreateLead() { HIC_ShopifySync__HIC_Configuration__c config = new HIC_ShopifySync__HIC_Configuration__c( HIC_ShopifySync__Store__c = 'TestStore', HIC_ShopifySync__Enable_Lead__c = true ); insert config; HIC_ShopifySync__HIC_Field_Mapping__c fieldMapping = new HIC_ShopifySync__HIC_Field_Mapping__c( HIC_ShopifySync__Object_Name__c = 'Lead', HIC_ShopifySync__Store__c = 'TestStore', HIC_ShopifySync__SF_Field__c = 'Company', HIC_ShopifySync__Shopify_Fields__c = 'default_address.company' ); insert fieldMapping; String customerResponse = '{"orders_count":0,"default_address":{"first_name":"John","last_name":"Doe","company":"TestCompany"},"first_name":"John","last_name":"Doe"}'; String store = 'TestStore'; Test.startTest(); FetchAccounts.createLead(customerResponse, store); Test.stopTest(); } @isTest static void testCreateLead2() { HIC_ShopifySync__HIC_Configuration__c config = new HIC_ShopifySync__HIC_Configuration__c( HIC_ShopifySync__Store__c = 'TestStore', HIC_ShopifySync__Enable_Lead__c = true ); insert config; HIC_ShopifySync__HIC_Field_Mapping__c fieldMapping = new HIC_ShopifySync__HIC_Field_Mapping__c( HIC_ShopifySync__Object_Name__c = 'Lead', HIC_ShopifySync__Store__c = 'TestStore', HIC_ShopifySync__SF_Field__c = 'Company', HIC_ShopifySync__Shopify_Fields__c = 'default_address.company' ); insert fieldMapping; String customerResponse = '{"orders_count":0,"first_name":"John","last_name":"Doe"}'; String store = 'TestStore'; Test.startTest(); FetchAccounts.createLead(customerResponse, store); Test.stopTest(); } @isTest public static void testFetchAccounts5() { Account ac = new Account(); ac.name = 'Test'; ac.HIC_ShopifySync__Shopify_Id__c = '952507760711'; insert ac; List ConList = new List(); HIC_ShopifySync__HIC_Configuration__c con = new HIC_ShopifySync__HIC_Configuration__c(); con.name = 'Default'; con.HIC_ShopifySync__Private_Key_Password__c = '0000000000000000True'; con.HIC_ShopifySync__Opportunity__c = false; con.HIC_ShopifySync__Order__c = false; con.HIC_ShopifySync__Opportunity_Line_Item__c = false; con.HIC_ShopifySync__Order_Line_Item__c = false; con.HIC_ShopifySync__Account_Contact__c = true; con.HIC_ShopifySync__Person_Account__c = false; con.HIC_ShopifySync__Default_Account__c = true; Con.HIC_ShopifySync__Number_of_pages_for_Account__c = 1; con.HIC_ShopifySync__Collection__c = false; con.HIC_ShopifySync__Inventory_Location__c = false; con.HIC_ShopifySync__Enable_Draft_Order__c = true; Con.HIC_ShopifySync__Store__c = '123'; ConList.add(con); insert ConList; Test.startTest(); FetchAccounts obj = new FetchAccounts('' , false, '123'); Database.executeBatch(obj,1); FetchAccounts obj1 = new FetchAccounts('' , false, 'Store',' ',' '); Database.executeBatch(obj,1); FetchAccounts obj2 = new FetchAccounts('' , true, 'store'); Database.executeBatch(obj,1); Test.stopTest(); system.assert(con.HIC_ShopifySync__Opportunity__c == false); } @isTest public static void deleteJob(){ List ConList = new List(); HIC_ShopifySync__HIC_Configuration__c con = new HIC_ShopifySync__HIC_Configuration__c(); con.name = 'Default'; con.HIC_ShopifySync__Private_Key_Password__c = '0000000000000000True'; con.HIC_ShopifySync__Opportunity__c = false; con.HIC_ShopifySync__Order__c = false; con.HIC_ShopifySync__Opportunity_Line_Item__c = false; con.HIC_ShopifySync__Order_Line_Item__c = false; con.HIC_ShopifySync__Account_Contact__c = true; con.HIC_ShopifySync__Person_Account__c = true; con.HIC_ShopifySync__Default_Account__c = false; Con.HIC_ShopifySync__Number_of_pages_for_Account__c = 2; Con.HIC_ShopifySync__Store__c = '123'; ConList.add(con); insert ConList; FetchAccounts_Schedule reminder = new FetchAccounts_Schedule(); reminder.execute(null); String sch = '20 30 8 10 2 ?'; String jobID = System.schedule('Fetch Account', sch, reminder); CronTrigger ct = [SELECT Id, CronExpression, TimesTriggered, NextFireTime FROM CronTrigger WHERE id = :jobId limit 1]; DeleteScheduledJobs.deleteJob('Fetch Account'); DeleteScheduledJobs.deleteJob(''); System.assertEquals(sch, ct.CronExpression); System.assertEquals(0, ct.TimesTriggered); } // ─── NEW TESTS BELOW ──────────────────────────────────────────────────────── /** * Tests Execute with Enable_Lead__c = true and orders_count = 0 (create Lead path) * No email match → createLead is called */ @isTest static void testExecuteEnableLeadCreateLeadPath() { HIC_ShopifySync__HIC_Configuration__c cfg = new HIC_ShopifySync__HIC_Configuration__c( Name = 'Default', HIC_ShopifySync__Store__c = '123', HIC_ShopifySync__Enable_Lead__c = true, HIC_ShopifySync__Upsert_Customer_basis_on_Email__c = false, HIC_ShopifySync__Account_Contact__c = false, HIC_ShopifySync__Person_Account__c = false, HIC_ShopifySync__Default_Account__c = false, HIC_ShopifySync__Opportunity__c = false, HIC_ShopifySync__Order__c = false, HIC_ShopifySync__Order_Line_Item__c = false, HIC_ShopifySync__Opportunity_Line_Item__c = false, HIC_ShopifySync__Collection__c = false, HIC_ShopifySync__Inventory_Location__c = false, HIC_ShopifySync__Draft_Order_Sync__c = false ); insert cfg; HIC_ShopifySync__HIC_Field_Mapping__c fm = new HIC_ShopifySync__HIC_Field_Mapping__c( HIC_ShopifySync__Object_Name__c = 'Lead', HIC_ShopifySync__Store__c = '123', HIC_ShopifySync__SF_Field__c = 'Company', HIC_ShopifySync__Shopify_Fields__c = 'default_address.company', HIC_ShopifySync__Default_Value__c = false, HIC_ShopifySync__IsSFID__c = false ); insert fm; Test.startTest(); FetchAccounts obj = new FetchAccounts('', true, '123'); Database.executeBatch(obj, 1); Test.stopTest(); system.assertNotEquals(null, obj); } /** * Tests Execute with Enable_Lead__c = true, Upsert_Customer_basis_on_Email__c = true, * and a Contact already exists for the customer email → createLead = false (Account path) */ @isTest static void testExecuteEnableLeadEmailMatchContact() { Account ac = new Account(Name = 'Existing Account'); insert ac; // Contact with same email as the test customer JSON (uv@gmail.com is not in our // test JSON – the test JSON customer email is blank, so use a fresh email) Contact existingContact = new Contact( LastName = 'Test', AccountId = ac.Id, Email = 'uv@gmail.com' ); insert existingContact; HIC_ShopifySync__HIC_Configuration__c cfg = new HIC_ShopifySync__HIC_Configuration__c( Name = 'Default', HIC_ShopifySync__Store__c = '123', HIC_ShopifySync__Enable_Lead__c = true, HIC_ShopifySync__Upsert_Customer_basis_on_Email__c = true, HIC_ShopifySync__Account_Contact__c = true, HIC_ShopifySync__Person_Account__c = false, HIC_ShopifySync__Default_Account__c = false, HIC_ShopifySync__Opportunity__c = false, HIC_ShopifySync__Order__c = false, HIC_ShopifySync__Order_Line_Item__c = false, HIC_ShopifySync__Opportunity_Line_Item__c = false, HIC_ShopifySync__Collection__c = false, HIC_ShopifySync__Inventory_Location__c = false, HIC_ShopifySync__Draft_Order_Sync__c = false ); insert cfg; Test.startTest(); FetchAccounts obj = new FetchAccounts('', true, '123'); Database.executeBatch(obj, 1); Test.stopTest(); system.assertNotEquals(null, obj); } /** * Tests Execute with Enable_Lead__c = true, Upsert_Customer_basis_on_Email__c = true, * and NO Contact exists → createLead = true path */ @isTest static void testExecuteEnableLeadEmailNoContactMatch() { HIC_ShopifySync__HIC_Configuration__c cfg = new HIC_ShopifySync__HIC_Configuration__c( Name = 'Default', HIC_ShopifySync__Store__c = '123', HIC_ShopifySync__Enable_Lead__c = true, HIC_ShopifySync__Upsert_Customer_basis_on_Email__c = true, HIC_ShopifySync__Account_Contact__c = false, HIC_ShopifySync__Person_Account__c = false, HIC_ShopifySync__Default_Account__c = false, HIC_ShopifySync__Opportunity__c = false, HIC_ShopifySync__Order__c = false, HIC_ShopifySync__Order_Line_Item__c = false, HIC_ShopifySync__Opportunity_Line_Item__c = false, HIC_ShopifySync__Collection__c = false, HIC_ShopifySync__Inventory_Location__c = false, HIC_ShopifySync__Draft_Order_Sync__c = false ); insert cfg; HIC_ShopifySync__HIC_Field_Mapping__c fm = new HIC_ShopifySync__HIC_Field_Mapping__c( HIC_ShopifySync__Object_Name__c = 'Lead', HIC_ShopifySync__Store__c = '123', HIC_ShopifySync__SF_Field__c = 'Company', HIC_ShopifySync__Shopify_Fields__c = 'default_address.company', HIC_ShopifySync__Default_Value__c = false, HIC_ShopifySync__IsSFID__c = false ); insert fm; Test.startTest(); FetchAccounts obj = new FetchAccounts('', true, '123'); Database.executeBatch(obj, 1); Test.stopTest(); system.assertNotEquals(null, obj); } /** * Tests the lead conversion path (orders_count >= 1 and open Lead exists for email) * Covers convertLeadAndStampIds with Person_Account__c = false (Business prefix) */ @isTest static void testExecuteLeadConversionBusinessPath() { // Create Account and Contact to attach the converted lead to Account ac = new Account(Name = 'Business testdomain'); insert ac; // Create an open Lead with a Shopify ID that will be matched Lead openLead = new Lead( FirstName = 'firstname1', LastName = 'lastname1', Company = 'Test Company', Email = 'uv@gmail.com', HIC_ShopifySync__Shopify_ID__c = '926016995392', Status = 'Open - Not Contacted' ); insert openLead; HIC_ShopifySync__HIC_Configuration__c cfg = new HIC_ShopifySync__HIC_Configuration__c( Name = 'Default', HIC_ShopifySync__Store__c = '123', HIC_ShopifySync__Enable_Lead__c = true, HIC_ShopifySync__Upsert_Customer_basis_on_Email__c = true, HIC_ShopifySync__Account_Contact__c = true, HIC_ShopifySync__Person_Account__c = false, HIC_ShopifySync__Default_Account__c = false, HIC_ShopifySync__Opportunity__c = false, HIC_ShopifySync__Order__c = false, HIC_ShopifySync__Order_Line_Item__c = false, HIC_ShopifySync__Opportunity_Line_Item__c = false, HIC_ShopifySync__Collection__c = false, HIC_ShopifySync__Inventory_Location__c = false, HIC_ShopifySync__Draft_Order_Sync__c = false ); insert cfg; Test.startTest(); // The mock JSON in start() has orders_count=5 and email=uv@gmail.com // which will match the Lead we inserted above FetchAccounts obj = new FetchAccounts('', true, '123'); Database.executeBatch(obj, 1); Test.stopTest(); system.assertNotEquals(null, obj); } /** * Tests convertLeadAndStampIds with existing Account and Contact by Shopify ID * so that setAccountId and setContactId are called on LeadConvert */ @isTest static void testLeadConversionWithExistingAccountAndContact() { // Pre-create Account with Shopify ID matching prefix pattern Account existingAcc = new Account( Name = 'Existing Business', HIC_ShopifySync__Shopify_ID__c = 'Business 926016995392' ); insert existingAcc; // Pre-create Contact with same Shopify ID Contact existingCon = new Contact( LastName = 'ExistingContact', AccountId = existingAcc.Id, HIC_ShopifySync__Shopify_ID__c = 'Business 926016995392' ); insert existingCon; // Open Lead with matching email Lead openLead = new Lead( FirstName = 'firstname1', LastName = 'lastname1', Company = 'Test Company', Email = 'uv@gmail.com', HIC_ShopifySync__Shopify_ID__c = '926016995392', Status = 'Open - Not Contacted' ); insert openLead; HIC_ShopifySync__HIC_Configuration__c cfg = new HIC_ShopifySync__HIC_Configuration__c( Name = 'Default', HIC_ShopifySync__Store__c = '123', HIC_ShopifySync__Enable_Lead__c = true, HIC_ShopifySync__Upsert_Customer_basis_on_Email__c = true, HIC_ShopifySync__Account_Contact__c = true, HIC_ShopifySync__Person_Account__c = false, HIC_ShopifySync__Default_Account__c = false, HIC_ShopifySync__Opportunity__c = false, HIC_ShopifySync__Order__c = false, HIC_ShopifySync__Order_Line_Item__c = false, HIC_ShopifySync__Opportunity_Line_Item__c = false, HIC_ShopifySync__Collection__c = false, HIC_ShopifySync__Inventory_Location__c = false, HIC_ShopifySync__Draft_Order_Sync__c = false ); insert cfg; Test.startTest(); FetchAccounts obj = new FetchAccounts('', true, '123'); Database.executeBatch(obj, 1); Test.stopTest(); system.assertNotEquals(null, obj); } /** * Tests convertLeadAndStampIds B2B path (Customer_Email_Domain__c = true) * Covers domain account lookup, existing contact lookup, and LeadConvert */ @isTest static void testLeadConversionB2BPath() { // Pre-create domain account ('gmail' extracted from uv@gmail.com) Account domainAcc = new Account(Name = 'gmail'); insert domainAcc; // Pre-create Contact with B2B Shopify ID Contact existingCon = new Contact( LastName = 'B2BContact', AccountId = domainAcc.Id, HIC_ShopifySync__Shopify_Id__c = 'Business 926016995392' ); insert existingCon; // Open Lead with matching email Lead openLead = new Lead( FirstName = 'firstname1', LastName = 'lastname1', Company = 'Test Company', Email = 'uv@gmail.com', HIC_ShopifySync__Shopify_ID__c = '926016995392', Status = 'Open - Not Contacted' ); insert openLead; HIC_ShopifySync__HIC_Configuration__c cfg = new HIC_ShopifySync__HIC_Configuration__c( Name = 'Default', HIC_ShopifySync__Store__c = '123', HIC_ShopifySync__Enable_Lead__c = true, HIC_ShopifySync__Upsert_Customer_basis_on_Email__c = true, HIC_ShopifySync__Customer_Email_Domain__c = true, // B2B path HIC_ShopifySync__Account_Contact__c = false, HIC_ShopifySync__Person_Account__c = false, HIC_ShopifySync__Default_Account__c = false, HIC_ShopifySync__Opportunity__c = false, HIC_ShopifySync__Order__c = false, HIC_ShopifySync__Order_Line_Item__c = false, HIC_ShopifySync__Opportunity_Line_Item__c = false, HIC_ShopifySync__Collection__c = false, HIC_ShopifySync__Inventory_Location__c = false, HIC_ShopifySync__Draft_Order_Sync__c = false ); insert cfg; Test.startTest(); FetchAccounts obj = new FetchAccounts('', true, '123'); Database.executeBatch(obj, 1); Test.stopTest(); system.assertNotEquals(null, obj); } /** * Tests createAccountContact B2B path (Customer_Email_Domain__c = true) * Covers existing-account lookup and Contact upsert with AccountId override */ @isTest static void testCreateAccountContactB2BExistingAccount() { // Pre-create domain account Account domainAcc = new Account(Name = 'gmail'); insert domainAcc; HIC_ShopifySync__HIC_Configuration__c cfg = new HIC_ShopifySync__HIC_Configuration__c( Name = 'Default', HIC_ShopifySync__Store__c = '123', HIC_ShopifySync__Customer_Email_Domain__c = true, HIC_ShopifySync__Account_Contact__c = false, HIC_ShopifySync__Person_Account__c = false, HIC_ShopifySync__Default_Account__c = false, HIC_ShopifySync__Enable_Lead__c = false, HIC_ShopifySync__Opportunity__c = false, HIC_ShopifySync__Order__c = false, HIC_ShopifySync__Order_Line_Item__c = false, HIC_ShopifySync__Opportunity_Line_Item__c = false, HIC_ShopifySync__Collection__c = false, HIC_ShopifySync__Inventory_Location__c = false, HIC_ShopifySync__Draft_Order_Sync__c = false ); insert cfg; HIC_ShopifySync__HIC_Field_Mapping__c fm = new HIC_ShopifySync__HIC_Field_Mapping__c( HIC_ShopifySync__Object_Name__c = 'Contact', HIC_ShopifySync__Store__c = '123', HIC_ShopifySync__SF_Field__c = 'Email', HIC_ShopifySync__Shopify_Fields__c = 'email', HIC_ShopifySync__Default_Value__c = false, HIC_ShopifySync__IsSFID__c = false ); insert fm; // Call createAccountContact directly with a customer JSON that has an email String customerJson = '{"id":1073387929664,"email":"uv@gmail.com","first_name":"firstname1","last_name":"lastname1","orders_count":0,"phone":"9717626066"}'; Test.startTest(); FetchAccounts.createAccountContact(customerJson, '123'); Test.stopTest(); List gmailAccounts = [SELECT Id FROM Account WHERE Name = 'gmail']; system.assert(!gmailAccounts.isEmpty(), 'Domain account should exist'); } /** * Tests createAccountContact B2B path where NO domain account exists * → new Account is inserted inside createAccountContact */ @isTest static void testCreateAccountContactB2BNewAccount() { // Do NOT pre-create domain account HIC_ShopifySync__HIC_Configuration__c cfg = new HIC_ShopifySync__HIC_Configuration__c( Name = 'Default', HIC_ShopifySync__Store__c = '123', HIC_ShopifySync__Customer_Email_Domain__c = true, HIC_ShopifySync__Account_Contact__c = false, HIC_ShopifySync__Person_Account__c = false, HIC_ShopifySync__Default_Account__c = false, HIC_ShopifySync__Enable_Lead__c = false, HIC_ShopifySync__Opportunity__c = false, HIC_ShopifySync__Order__c = false, HIC_ShopifySync__Order_Line_Item__c = false, HIC_ShopifySync__Opportunity_Line_Item__c = false, HIC_ShopifySync__Collection__c = false, HIC_ShopifySync__Inventory_Location__c = false, HIC_ShopifySync__Draft_Order_Sync__c = false ); insert cfg; HIC_ShopifySync__HIC_Field_Mapping__c fm = new HIC_ShopifySync__HIC_Field_Mapping__c( HIC_ShopifySync__Object_Name__c = 'Contact', HIC_ShopifySync__Store__c = '123', HIC_ShopifySync__SF_Field__c = 'Email', HIC_ShopifySync__Shopify_Fields__c = 'email', HIC_ShopifySync__Default_Value__c = false, HIC_ShopifySync__IsSFID__c = false ); insert fm; String customerJson = '{"id":1073387929664,"email":"newuser@newdomain.com","first_name":"New","last_name":"User","orders_count":0}'; Test.startTest(); FetchAccounts.createAccountContact(customerJson, '123'); Test.stopTest(); List newAccounts = [SELECT Id FROM Account WHERE Name = 'newdomain']; system.assert(!newAccounts.isEmpty(), 'New domain account should have been created'); } /** * Tests createAccountContact B2B path where email is blank * → no account creation, method returns early */ @isTest static void testCreateAccountContactB2BBlankEmail() { HIC_ShopifySync__HIC_Configuration__c cfg = new HIC_ShopifySync__HIC_Configuration__c( Name = 'Default', HIC_ShopifySync__Store__c = '123', HIC_ShopifySync__Customer_Email_Domain__c = true, HIC_ShopifySync__Account_Contact__c = false, HIC_ShopifySync__Person_Account__c = false, HIC_ShopifySync__Default_Account__c = false, HIC_ShopifySync__Enable_Lead__c = false, HIC_ShopifySync__Opportunity__c = false, HIC_ShopifySync__Order__c = false, HIC_ShopifySync__Order_Line_Item__c = false, HIC_ShopifySync__Opportunity_Line_Item__c = false, HIC_ShopifySync__Collection__c = false, HIC_ShopifySync__Inventory_Location__c = false, HIC_ShopifySync__Draft_Order_Sync__c = false ); insert cfg; // No email field in JSON → should return without creating account String customerJson = '{"id":1073387929664,"first_name":"No","last_name":"Email","orders_count":0}'; Test.startTest(); FetchAccounts.createAccountContact(customerJson, '123'); Test.stopTest(); // No domain accounts should have been created List accounts = [SELECT Id FROM Account]; system.assert(accounts.isEmpty(), 'No account should be created when email is blank'); } /** * Tests finish() → Collection branch (Collection__c = true, no Order/Opportunity) */ @isTest static void testFinishCollectionBranch() { List ConList = new List(); HIC_ShopifySync__HIC_Configuration__c con = new HIC_ShopifySync__HIC_Configuration__c(); con.name = 'Default'; con.HIC_ShopifySync__Private_Key_Password__c = '0000000000000000True'; con.HIC_ShopifySync__Opportunity__c = false; con.HIC_ShopifySync__Order__c = false; con.HIC_ShopifySync__Order_Line_Item__c = false; con.HIC_ShopifySync__Opportunity_Line_Item__c = false; con.HIC_ShopifySync__Account_Contact__c = false; con.HIC_ShopifySync__Person_Account__c = false; con.HIC_ShopifySync__Default_Account__c = false; con.HIC_ShopifySync__Collection__c = true; // Collection branch con.HIC_ShopifySync__Inventory_Location__c = false; con.HIC_ShopifySync__Draft_Order_Sync__c = false; con.HIC_ShopifySync__Enable_Lead__c = false; Con.HIC_ShopifySync__Store__c = '123'; ConList.add(con); insert ConList; Test.startTest(); FetchAccounts obj = new FetchAccounts('', true, '123'); Database.executeBatch(obj, 1); Test.stopTest(); List updated = [ SELECT HIC_ShopifySync__AccountContactBatchCompleted__c FROM HIC_ShopifySync__HIC_Configuration__c WHERE HIC_ShopifySync__Store__c = '123' ]; system.assert(!updated.isEmpty()); } /** * Tests finish() → Draft Order Sync branch */ @isTest static void testFinishDraftOrderSyncBranch() { List ConList = new List(); HIC_ShopifySync__HIC_Configuration__c con = new HIC_ShopifySync__HIC_Configuration__c(); con.name = 'Default'; con.HIC_ShopifySync__Private_Key_Password__c = '0000000000000000True'; con.HIC_ShopifySync__Opportunity__c = false; con.HIC_ShopifySync__Order__c = false; con.HIC_ShopifySync__Order_Line_Item__c = false; con.HIC_ShopifySync__Opportunity_Line_Item__c = false; con.HIC_ShopifySync__Account_Contact__c = false; con.HIC_ShopifySync__Person_Account__c = false; con.HIC_ShopifySync__Default_Account__c = false; con.HIC_ShopifySync__Collection__c = false; con.HIC_ShopifySync__Inventory_Location__c = false; con.HIC_ShopifySync__Draft_Order_Sync__c = true; // Draft Order branch con.HIC_ShopifySync__Enable_Lead__c = false; Con.HIC_ShopifySync__Store__c = '123'; ConList.add(con); insert ConList; Test.startTest(); FetchAccounts obj = new FetchAccounts('', true, '123'); Database.executeBatch(obj, 1); Test.stopTest(); List updated = [ SELECT HIC_ShopifySync__AccountContactBatchCompleted__c FROM HIC_ShopifySync__HIC_Configuration__c WHERE HIC_ShopifySync__Store__c = '123' ]; system.assert(!updated.isEmpty()); } /** * Tests finish() → no-next-batch final else branch * (all flags false → sets AccountContactBatchCompleted, Batch_Is_Processing = false) */ @isTest static void testFinishFinalElseBranch() { List ConList = new List(); HIC_ShopifySync__HIC_Configuration__c con = new HIC_ShopifySync__HIC_Configuration__c(); con.name = 'Default'; con.HIC_ShopifySync__Private_Key_Password__c = '0000000000000000True'; con.HIC_ShopifySync__Opportunity__c = false; con.HIC_ShopifySync__Order__c = false; con.HIC_ShopifySync__Order_Line_Item__c = false; con.HIC_ShopifySync__Opportunity_Line_Item__c = false; con.HIC_ShopifySync__Account_Contact__c = false; con.HIC_ShopifySync__Person_Account__c = false; con.HIC_ShopifySync__Default_Account__c = false; con.HIC_ShopifySync__Collection__c = false; con.HIC_ShopifySync__Inventory_Location__c = false; con.HIC_ShopifySync__Draft_Order_Sync__c = false; con.HIC_ShopifySync__Enable_Lead__c = false; con.HIC_ShopifySync__IsCurrencyChanged__c = true; Con.HIC_ShopifySync__Store__c = '123'; ConList.add(con); insert ConList; Test.startTest(); FetchAccounts obj = new FetchAccounts('', true, '123'); Database.executeBatch(obj, 1); Test.stopTest(); List updated = [ SELECT HIC_ShopifySync__AccountContactBatchCompleted__c, HIC_ShopifySync__Batch_Is_Processing__c, HIC_ShopifySync__IsCurrencyChanged__c FROM HIC_ShopifySync__HIC_Configuration__c WHERE HIC_ShopifySync__Store__c = '123' ]; system.assert(!updated.isEmpty()); system.assertEquals(true, updated[0].HIC_ShopifySync__AccountContactBatchCompleted__c); system.assertEquals(false, updated[0].HIC_ShopifySync__Batch_Is_Processing__c); system.assertEquals(false, updated[0].HIC_ShopifySync__IsCurrencyChanged__c); } /** * Tests the updated_at_min/max constructor (5-param constructor) * with both Order and Opportunity enabled → finish() hits fetchOrderAndOpportunity branch */ @isTest static void testUpdatedAtMinMaxConstructorWithOrderBranch() { List ConList = new List(); HIC_ShopifySync__HIC_Configuration__c con = new HIC_ShopifySync__HIC_Configuration__c(); con.name = 'Default'; con.HIC_ShopifySync__Private_Key_Password__c = '0000000000000000True'; con.HIC_ShopifySync__Opportunity__c = true; con.HIC_ShopifySync__Order__c = true; con.HIC_ShopifySync__Order_Line_Item__c = false; con.HIC_ShopifySync__Opportunity_Line_Item__c = false; con.HIC_ShopifySync__Account_Contact__c = false; con.HIC_ShopifySync__Person_Account__c = false; con.HIC_ShopifySync__Default_Account__c = false; con.HIC_ShopifySync__Collection__c = false; con.HIC_ShopifySync__Inventory_Location__c = false; con.HIC_ShopifySync__Draft_Order_Sync__c = false; con.HIC_ShopifySync__Enable_Lead__c = false; Con.HIC_ShopifySync__Store__c = '123'; ConList.add(con); insert ConList; Test.startTest(); // Use the 5-param constructor with date range strings FetchAccounts obj = new FetchAccounts('', true, '123', '2024-01-01T00:00:00Z', '2024-12-31T23:59:59Z'); Database.executeBatch(obj, 1); Test.stopTest(); List updated = [ SELECT HIC_ShopifySync__AccountContactBatchCompleted__c FROM HIC_ShopifySync__HIC_Configuration__c WHERE HIC_ShopifySync__Store__c = '123' ]; system.assert(!updated.isEmpty()); system.assertEquals(true, updated[0].HIC_ShopifySync__AccountContactBatchCompleted__c); } }