SyncMadeEasy/force-app/main/default/classes/FetchAccounts_Test.cls

921 lines
41 KiB
OpenEdge ABL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@isTest
public with sharing class FetchAccounts_Test {
@isTest
public static void test1ForFetchAccounts(){
List<HIC_ShopifySync__HIC_Configuration__c> ConList = new List<HIC_ShopifySync__HIC_Configuration__c>();
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<HIC_ShopifySync__HIC_Field_Mapping__c> fmListToCreate = new List<HIC_ShopifySync__HIC_Field_Mapping__c>();
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<HIC_ShopifySync__HIC_Configuration__c> ConList = new List<HIC_ShopifySync__HIC_Configuration__c>();
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<HIC_ShopifySync__HIC_Field_Mapping__c> fmListToCreate = new List<HIC_ShopifySync__HIC_Field_Mapping__c>();
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<HIC_ShopifySync__HIC_Configuration__c> ConList = new List<HIC_ShopifySync__HIC_Configuration__c>();
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<HIC_ShopifySync__HIC_Field_Mapping__c> fmListToCreate = new List<HIC_ShopifySync__HIC_Field_Mapping__c>();
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<HIC_ShopifySync__HIC_Configuration__c> ConList = new List<HIC_ShopifySync__HIC_Configuration__c>();
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<HIC_ShopifySync__HIC_Configuration__c> ConList = new List<HIC_ShopifySync__HIC_Configuration__c>();
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<HIC_ShopifySync__HIC_Configuration__c> ConList = new List<HIC_ShopifySync__HIC_Configuration__c>();
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<HIC_ShopifySync__HIC_Configuration__c> ConList = new List<HIC_ShopifySync__HIC_Configuration__c>();
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<HIC_ShopifySync__HIC_Configuration__c> ConList = new List<HIC_ShopifySync__HIC_Configuration__c>();
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<Account> 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<Account> 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<Account> 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<HIC_ShopifySync__HIC_Configuration__c> ConList = new List<HIC_ShopifySync__HIC_Configuration__c>();
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<HIC_ShopifySync__HIC_Configuration__c> 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<HIC_ShopifySync__HIC_Configuration__c> ConList = new List<HIC_ShopifySync__HIC_Configuration__c>();
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<HIC_ShopifySync__HIC_Configuration__c> 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<HIC_ShopifySync__HIC_Configuration__c> ConList = new List<HIC_ShopifySync__HIC_Configuration__c>();
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<HIC_ShopifySync__HIC_Configuration__c> 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<HIC_ShopifySync__HIC_Configuration__c> ConList = new List<HIC_ShopifySync__HIC_Configuration__c>();
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<HIC_ShopifySync__HIC_Configuration__c> 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);
}
}