/**
 * This class contains unit tests for validating the behavior of Apex classes
 * and triggers.
 *
 * Unit tests are class methods that verify whether a particular piece
 * of code is working properly. Unit test methods take no arguments,
 * commit no data to the database, and are flagged with the testMethod
 * keyword in the method definition.
 *
 * All test methods in an organization are executed whenever Apex code is deployed
 * to a production organization to confirm correctness, ensure code
 * coverage, and prevent regressions. All Apex classes are
 * required to have at least 75% code coverage in order to be deployed
 * to a production organization. In addition, all triggers must have some code coverage.
 * 
 * The @isTest class annotation indicates this class only contains test
 * methods. Classes defined with the @isTest annotation do not count against
 * the organization size limit for all Apex scripts.
 *
 * See the Apex Language Reference for more information about Testing and Code Coverage.
 */
@isTest
private class ReportCPileUpTriggerTest {

    static testMethod void myUnitTest() {
        Opportunity opp1 = new Opportunity(Name = 'opp1', StageName = '询价', CloseDate = Date.today());
        Opportunity opp2 = new Opportunity(Name = 'opp2', StageName = '询价', CloseDate = Date.today());
        insert new Opportunity[] {opp1, opp2};
        
        RecordType opd = [select Id from RecordType where IsActive = true and DeveloperName = 'OPD' and SObjectType = 'Report__c'];
        
        Report__c rpt = new Report__c(
            RecordTypeId = opd.Id,
            Manual_Name__c = 'test hp',
            Opportunity1__c = opp1.Id,
            Opportunity2__c = opp1.Id,
            Opportunity3__c = opp1.Id,
            Opportunity4__c = opp1.Id,
            Opportunity5__c = opp1.Id,
            OPD_ProductCategory1__c ='3D System',
            OPD_ProductCategory2__c ='OR Imaging Products'
        );
        insert rpt;
        
        opp1 = [select Num_Of_OPD__c from Opportunity where Id = :opp1.Id];
        System.assertEquals(5, opp1.Num_Of_OPD__c);
        
        rpt.Opportunity1__c = opp2.Id;
        rpt.Opportunity2__c = opp2.Id;
        rpt.Opportunity3__c = opp2.Id;
        rpt.Opportunity4__c = opp2.Id;
        rpt.Opportunity5__c = opp2.Id;
        update rpt;
        
        opp1 = [select Num_Of_OPD__c from Opportunity where Id = :opp1.Id];
        opp2 = [select Num_Of_OPD__c from Opportunity where Id = :opp2.Id];
        System.assertEquals(0, opp1.Num_Of_OPD__c);
        System.assertEquals(5, opp2.Num_Of_OPD__c);
        
        delete rpt;
        opp2 = [select Num_Of_OPD__c from Opportunity where Id = :opp2.Id];
        System.assertEquals(0, opp2.Num_Of_OPD__c);
    }
}