@isTest
private class FixtureSetDetailDailyUpdateBatchTest {
    static Product2 pro1;
    static Product2 pro2;
    static Fixture_Set_Detail__c fsd1;
    static void setupData(){
        pro1 = new Product2(Name='name01',IsActive=true,Family='GI',
                Fixture_Model_No__c='SB-MODEL-01',Serial_Lot_No__c='S/N tracing',
                Fixture_Model_No_T__c = 'SB-MODEL-01', Asset_Model_No__c = 'Pro01',
                ProductCode_Ext__c='SB-PRO-CODE-01',Manual_Entry__c=false,
                ProductCode = 'SB-PRO-CODE-01');
        pro2 = new Product2(Name='name02',IsActive=true,Family='GI',
                Fixture_Model_No__c='SB-MODEL-02',Serial_Lot_No__c='Lot tracing',
                Fixture_Model_No_T__c = 'SB-MODEL-02', Asset_Model_No__c = 'Pro02',
                ProductCode_Ext__c='SB-PRO-CODE-02',Manual_Entry__c=false,
                ProductCode = 'SB-PRO-CODE-02');
        insert new Product2[] {pro1, pro2};

        Fixture_Set__c fs = new Fixture_Set__c();
        fs.Name = 'SB-FS-01';
        fs.Fixture_Set_Body_Model_No__c = 'SB-FS-MODEL-01';
        fs.Loaner_name__c = 'SB-FS-1';
        insert fs ;

        fsd1 = new Fixture_Set_Detail__c();
        fsd1.Name = 'SB-FSD-1';
        fsd1.Name_CHN_Created__c = 'SB-中文FSD-1';
        fsd1.Product2__c = pro1.Id;
        fsd1.Fixture_Set__c = fs.Id;
        fsd1.UniqueKey__c = fs.Id + ':' + pro1.Id;
        insert fsd1;
    }
    // 配套明细状态true->false
    static testMethod void testMethod1() {
        setupData();
        List<Product2> proList = [SELECT SFDA_Status__c FROM Product2];
        System.assertEquals('停止',proList[0].SFDA_Status__c);
        System.assertEquals('停止',proList[1].SFDA_Status__c);
        Fixture_Set_Detail__c fsd = [SELECT Product_Status_Flag__c FROM Fixture_Set_Detail__c];
        System.assertEquals(true, fsd.Product_Status_Flag__c);

        Test.startTest();
        Database.executeBatch(new FixtureSetDetailDailyUpdateBatch(), 100);
        Test.stopTest();

        fsd = [SELECT Product_Status_Flag__c FROM Fixture_Set_Detail__c];
        System.assertEquals(true, fsd.Product_Status_Flag__c);
    }
    // 配套明细状态false->true
    static testMethod void testMethod2() {
        setupData();
        pro1.SFDA_Status__c = '有效';
        fsd1.Product_Status_Flag__c = false;
        update pro1;
        update fsd1;
        List<Product2> proList = [SELECT SFDA_Status__c FROM Product2];
        System.assertEquals('有效',proList[0].SFDA_Status__c);
        System.assertEquals('停止',proList[1].SFDA_Status__c);
        Fixture_Set_Detail__c fsd = [SELECT Product_Status_Flag__c FROM Fixture_Set_Detail__c];
        System.assertEquals(false, fsd.Product_Status_Flag__c);

        Test.startTest();
        Database.executeBatch(new FixtureSetDetailDailyUpdateBatch(), 100);
        Test.stopTest();

        fsd = [SELECT Product_Status_Flag__c FROM Fixture_Set_Detail__c];
        System.assertEquals(true, fsd.Product_Status_Flag__c);
    }
    static testMethod void testMethod3() {
        FixtureSetDetailDailyUpdateBatch b = new FixtureSetDetailDailyUpdateBatch();
        b.errorList.add('Test');
        Database.executeBatch(b);
    }
}