高章伟
2022-02-18 8b5f4c6c281cfa548f92de52c8021e37aa81901e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
@isTest
private class SSOpportunityBatchTest {
 
    private static Product2 product = null;
    private static Id pricebookId = ControllerUtil.getStandardPricebook().Id;
 
    static {
        product = new Product2( Name='テスト商品');
        insert product;
    }
 
    private static PricebookEntry buildPB(String input) {
        PricebookEntry entry = new PricebookEntry(Pricebook2Id=pricebookId, Product2Id=product.Id);
        entry.UnitPrice = 0;
        entry.IsActive = true;
        entry.UseStandardPrice = false;
        entry.CurrencyIsoCode = input;
        insert entry;
        return entry;
    }
 
    @isTest(SeeAllData=true)
    static void makeSqlTest() {
        // データを作って、データ移行の項目をテスト
        // テストデータ insertSSTest と同じするする
        Opportunity opp1 = new Opportunity(Name='aiueo1', StageName='出荷', CurrencyIsoCode='USD', CloseDate=Date.today(),Trade__c = '外貿');
        Opportunity opp2 = new Opportunity(Name='aiueo2', StageName='出荷', CurrencyIsoCode='CNY', CloseDate=Date.today(),Trade__c = '内貿');
        insert new Opportunity[] {opp1, opp2};
//        PricebookEntry entryUSD = buildPB('USD');       // opp1用
        PricebookEntry entryCNY = buildPB('CNY');       // opp2用
        OpportunityLineItem oli21 = new OpportunityLineItem(OpportunityId=opp2.Id, Name__c='oli21', Quantity=21, UnitPrice=100, PricebookEntryId=entryCNY.Id);
        OpportunityLineItem oli22 = new OpportunityLineItem(OpportunityId=opp2.Id, Name__c='oli22', Quantity=22, UnitPrice=200, PricebookEntryId=entryCNY.Id);
        insert new OpportunityLineItem[] {oli21, oli22};
        Statu_Achievements__c sta11 = new Statu_Achievements__c(Opportunity__c=opp1.Id, ContractNO__c='sta11', DeliveryStatus__c = '未交付',ContractAmount__c = 11);
        Statu_Achievements__c sta12 = new Statu_Achievements__c(Opportunity__c=opp1.Id, ContractNO__c='sta12', DeliveryStatus__c = '部分交货',ContractAmount__c = 11);
        insert new Statu_Achievements__c[] {sta11, sta12};
        Id execBTId = Database.executeBatch(new SSOpportunityBatch(new Id[] {opp1.Id}), 1);
        execBTId = Database.executeBatch(new SSBackorderBatch(new Id[] {sta11.Id}), 1);
        // ExceptionがなければOK
 
        // 念のため、再度 select sql の確認
        SS_Batch_Column_Mapping__c setting = SS_Batch_Column_Mapping__c.getValues('Opportunity');
        //for (SS_Batch_Column_Mapping__c setting : settingList) {
            String soql = SSOpportunityBatch.makeSql(setting, new Set<String>());
            soql += ' limit 1';
            Database.query(soql);
            // ExceptionがなければOK
        //}
    }
 
    @isTest
    static void updateOppTest() {
        // カスタム設定を定義
        SS_Batch_Column_Mapping__c oppMapping = new SS_Batch_Column_Mapping__c(Name = 'Opportunity', SS_TableName__c='SS_Prospect_5days_list__c');
        oppMapping.From_Column_001__c = 'Id';
        oppMapping.SS_Column_001__c = 'Opportunity.Name';
        oppMapping.From_Column_002__c = 'Id';                           // 重複してもエラーにはならない
        oppMapping.SS_Column_002__c = 'Opportunity.Name';
        SS_Batch_Column_Mapping__c oliMapping = new SS_Batch_Column_Mapping__c(Name = 'OpportunityLineItem', SS_TableName__c='SS_Prospect_detail_product__c');
        SS_Batch_Column_Mapping__c staMapping = new SS_Batch_Column_Mapping__c(Name = 'Statu_Achievements__c', SS_TableName__c='SS_backorder_list__c');
        staMapping.From_Column_001__c = 'Id';
        staMapping.SS_Column_001__c = 'Statu_Achievements__c.Name';
        insert new SS_Batch_Column_Mapping__c[] {oppMapping, oliMapping, staMapping};
        // テストデータ
        Opportunity opp1 = new Opportunity(Name='aiueo1', StageName='引合', CloseDate=Date.today());
        Opportunity opp2 = new Opportunity(Name='aiueo2', StageName='引合', CloseDate=Date.today());
        insert new Opportunity[] {opp1, opp2};
        Statu_Achievements__c st1 = new Statu_Achievements__c(Name='st1', Opportunity__c=opp1.Id,ContractAmount__c = 11);
        Statu_Achievements__c st2 = new Statu_Achievements__c(Name='st2', Opportunity__c=opp2.Id,ContractAmount__c = 11);
        insert new Statu_Achievements__c[] {st1, st2};
 
        System.Test.StartTest();
        Id execBTId = Database.executeBatch(new SSOpportunityBatch(null), 5);
        execBTId = Database.executeBatch(new SSBackorderBatch(null), 5);
        System.Test.StopTest();
        
        opp1 = [Select Id, Name from Opportunity where Id = :opp1.Id];
        opp2 = [Select Id, Name from Opportunity where Id = :opp2.Id];
        System.assertEquals('::' + opp1.Id, opp1.Name);
        System.assertEquals('::' + opp2.Id, opp2.Name);
        st1 = [Select Id, Name from Statu_Achievements__c where Id = :st1.Id];
        st2 = [Select Id, Name from Statu_Achievements__c where Id = :st2.Id];
        System.assertEquals(st1.Id, st1.Name);
        System.assertEquals(st2.Id, st2.Name);
        
        // TODO 预测发货日必须大于预测OCM签约日 の テスト
 
        //wangweipeng 测试SSBackorderBatch的reuseUpdate方法    start
        SSBackorderBatch ssba = new SSBackorderBatch(null);
        List<Statu_Achievements__c> reuseUpdateList = new List<Statu_Achievements__c>();
        reuseUpdateList.add(new Statu_Achievements__c(Name='st1', Opportunity__c=opp1.Id,ContractAmount__c = 11));
        ssba.reuseUpdate(reuseUpdateList,1);
        //wangweipeng 测试SSBackorderBatch的reuseUpdate方法    end
    }
 
    @isTest
    static void insertSSTest() {
        // カスタム設定を定義
        SS_Batch_Column_Mapping__c oppMapping = new SS_Batch_Column_Mapping__c(Name = 'Opportunity', SS_TableName__c='SS_Prospect_5days_list__c');
        oppMapping.From_Column_001__c = 'Name';
        oppMapping.SS_Column_001__c = 'Opportunity_Name__c';
        oppMapping.From_Column_002__c = 'Owner.Alias';
        oppMapping.SS_Column_002__c = 'Account_Name__c';
        SS_Batch_Column_Mapping__c oliMapping = new SS_Batch_Column_Mapping__c(Name = 'OpportunityLineItem', SS_TableName__c='SS_Prospect_detail_product__c');
        oliMapping.From_Column_001__c = 'Name__c';
        oliMapping.SS_Column_001__c = 'Product_name__c';
        oliMapping.From_Column_002__c = 'Quantity';
        oliMapping.SS_Column_002__c = 'Number__c';
        SS_Batch_Column_Mapping__c staMapping = new SS_Batch_Column_Mapping__c(Name = 'Statu_Achievements__c', SS_TableName__c='SS_backorder_list__c');
        staMapping.From_Column_001__c = 'ContractNO__c';
        staMapping.From_Column_002__c = 'Id';
        staMapping.SS_Column_001__c = 'ContractNO__c';
        staMapping.SS_Column_002__c = 'BackorderID__c';
        insert new SS_Batch_Column_Mapping__c[] {oppMapping, oliMapping, staMapping};
 
        // テストデータ
        Opportunity opp1 = new Opportunity(Name='aiueo1', StageName='引合', CurrencyIsoCode='USD', CloseDate=Date.today());
        Opportunity opp2 = new Opportunity(Name='aiueo2', StageName='引合', CurrencyIsoCode='CNY', CloseDate=Date.today());
        insert new Opportunity[] {opp1, opp2};
//        PricebookEntry entryUSD = buildPB('USD');       // opp1用
        PricebookEntry entryCNY = buildPB('CNY');       // opp2用
        OpportunityLineItem oli21 = new OpportunityLineItem(OpportunityId=opp2.Id, Name__c='oli21', Quantity=21, UnitPrice=100, PricebookEntryId=entryCNY.Id);
        OpportunityLineItem oli22 = new OpportunityLineItem(OpportunityId=opp2.Id, Name__c='oli22', Quantity=22, UnitPrice=200, PricebookEntryId=entryCNY.Id);
        insert new OpportunityLineItem[] {oli21, oli22};
        Statu_Achievements__c sta11 = new Statu_Achievements__c(Opportunity__c=opp1.Id, ContractNO__c='sta11', DeliveryStatus__c = '未交付',ContractAmount__c = 11);
        Statu_Achievements__c sta12 = new Statu_Achievements__c(Opportunity__c=opp1.Id, ContractNO__c='sta12', DeliveryStatus__c = '部分交货',ContractAmount__c = 11);
        insert new Statu_Achievements__c[] {sta11, sta12};
 
        System.Test.StartTest();
        Id execBTId = Database.executeBatch(new SSOpportunityBatch(null), 5);
        execBTId = Database.executeBatch(new SSBackorderBatch(null), 5);
        System.Test.StopTest();
        
        // assert
        opp1 = [Select Id, Name from Opportunity where Id = :opp1.Id];
        opp2 = [Select Id, Name from Opportunity where Id = :opp2.Id];
        List<SS_Prospect_5days_list__c> ssOppList = [Select Id, Opportunity_Name__c from SS_Prospect_5days_list__c order by Name];
        System.assertEquals(2, ssOppList.size());
        System.assertEquals(opp1.Name, ssOppList[0].Opportunity_Name__c);
        System.assertEquals(opp2.Name, ssOppList[1].Opportunity_Name__c);
        List<SS_Prospect_detail_product__c> ssOliList = [Select Id, Product_name__c from SS_Prospect_detail_product__c order by number__c];
        System.assertEquals(2, ssOliList.size());
        System.assertEquals(oli21.Name__c, ssOliList[0].Product_name__c);
        System.assertEquals(oli22.Name__c, ssOliList[1].Product_name__c);
        List<SS_backorder_list__c> ssStaList = [Select Id, ContractNO__c from SS_backorder_list__c order by ContractNO__c];
        System.assertEquals(2, ssStaList.size());
        System.assertEquals(sta11.ContractNO__c, ssStaList[0].ContractNO__c);
        System.assertEquals(sta12.ContractNO__c, ssStaList[1].ContractNO__c);
        
        sta11 = [select SS_backorderID__c from Statu_Achievements__c where Id = :sta11.Id];
        System.assertEquals(ssStaList[0].Id, sta11.SS_backorderID__c);
        sta12 = [select SS_backorderID__c from Statu_Achievements__c where Id = :sta12.Id];
        System.assertEquals(ssStaList[1].Id, sta12.SS_backorderID__c);
    }
}