View Javadoc
1   /*
2    * The Kuali Financial System, a comprehensive financial management system for higher education.
3    * 
4    * Copyright 2005-2014 The Kuali Foundation
5    * 
6    * This program is free software: you can redistribute it and/or modify
7    * it under the terms of the GNU Affero General Public License as
8    * published by the Free Software Foundation, either version 3 of the
9    * License, or (at your option) any later version.
10   * 
11   * This program is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU Affero General Public License for more details.
15   * 
16   * You should have received a copy of the GNU Affero General Public License
17   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18   */
19  package org.kuali.kfs.module.purap.document;
20  
21  import static org.kuali.kfs.sys.fixture.UserNameFixture.appleton;
22  import junit.framework.Assert;
23  
24  import org.kuali.kfs.module.purap.businessobject.ElectronicInvoiceLoadSummary;
25  import org.kuali.kfs.module.purap.fixture.ElectronicInvoiceLoadSummaryFixture;
26  import org.kuali.kfs.module.purap.fixture.ElectronicInvoiceRejectDocumentFixture;
27  import org.kuali.kfs.module.purap.fixture.PurchaseOrderDocumentFixture;
28  import org.kuali.kfs.sys.ConfigureContext;
29  import org.kuali.kfs.sys.context.KualiTestBase;
30  import org.kuali.kfs.sys.context.SpringContext;
31  import org.kuali.kfs.sys.document.AccountingDocumentTestUtils;
32  import org.kuali.kfs.sys.document.workflow.WorkflowTestUtils;
33  import org.kuali.rice.kew.api.document.DocumentStatus;
34  import org.kuali.rice.kew.api.exception.WorkflowException;
35  import org.kuali.rice.krad.document.Document;
36  import org.kuali.rice.krad.exception.ValidationException;
37  import org.kuali.rice.krad.service.BusinessObjectService;
38  import org.kuali.rice.krad.service.DocumentService;
39  import org.kuali.rice.krad.util.GlobalVariables;
40  
41  /**
42   * Used to create and test populated Requisition Documents of various kinds.
43   */
44  @ConfigureContext(session = appleton)
45  public class ElectronicInvoiceRejectDocumentTest extends KualiTestBase {
46      public static final Class<ElectronicInvoiceRejectDocument> DOCUMENT_CLASS = ElectronicInvoiceRejectDocument.class;
47  
48      private ElectronicInvoiceRejectDocument eirDoc = null;
49  
50      @Override
51      protected void setUp() throws Exception {
52          super.setUp();
53      }
54  
55      @Override
56      protected void tearDown() throws Exception {
57          eirDoc = null;
58          super.tearDown();
59      }
60  
61      @ConfigureContext(session = appleton, shouldCommitTransactions = true)
62      public final void testSaveDocument() throws Exception {
63          ElectronicInvoiceLoadSummary eils = ElectronicInvoiceLoadSummaryFixture.EILS_BASIC.createElectronicInvoiceLoadSummary();
64          BusinessObjectService boService = SpringContext.getBean(BusinessObjectService.class);
65          boService.save(eils);
66  
67          GlobalVariables.getUserSession().setBackdoorUser( "kfs" );
68          eirDoc = ElectronicInvoiceRejectDocumentFixture.EIR_ONLY_REQUIRED_FIELDS.createElectronicInvoiceRejectDocument(eils);
69          eirDoc.prepareForSave();
70          DocumentService documentService = SpringContext.getBean(DocumentService.class);
71          assertFalse(DocumentStatus.ENROUTE.equals(eirDoc.getDocumentHeader().getWorkflowDocument().getStatus()));
72          saveDocument(eirDoc, "saving copy source document", documentService);
73          GlobalVariables.getUserSession().clearBackdoorUser();
74  
75          Document document = documentService.getByDocumentHeaderId(eirDoc.getDocumentNumber());
76          assertTrue("Document should  be saved.", document.getDocumentHeader().getWorkflowDocument().isSaved());
77          Document result = documentService.getByDocumentHeaderId(eirDoc.getDocumentNumber());
78          assertMatch(eirDoc, result);
79      }
80  
81      @ConfigureContext(session = appleton, shouldCommitTransactions = true)
82      public final void testSaveDocumentWithNonMatchingPO() throws Exception {
83          ElectronicInvoiceLoadSummary eils = ElectronicInvoiceLoadSummaryFixture.EILS_BASIC.createElectronicInvoiceLoadSummary();
84          BusinessObjectService boService =  SpringContext.getBean(BusinessObjectService.class);
85          boService.save(eils);
86  
87          GlobalVariables.getUserSession().setBackdoorUser( "parke" );
88          Integer poId = routePO();
89  
90          GlobalVariables.getUserSession().setBackdoorUser( "kfs" );
91          eirDoc = ElectronicInvoiceRejectDocumentFixture.EIR_ONLY_REQUIRED_FIELDS.createElectronicInvoiceRejectDocument(eils);
92          eirDoc.setPurchaseOrderIdentifier(poId);
93          eirDoc.setInvoicePurchaseOrderNumber(poId.toString());
94          eirDoc.prepareForSave();
95          DocumentService documentService = SpringContext.getBean(DocumentService.class);
96          assertFalse(DocumentStatus.ENROUTE.equals(eirDoc.getDocumentHeader().getWorkflowDocument().getStatus()));
97          saveDocument(eirDoc, "saving copy source document", documentService);
98          GlobalVariables.getUserSession().clearBackdoorUser();
99  
100         Document document = documentService.getByDocumentHeaderId(eirDoc.getDocumentNumber());
101         assertTrue("Document should  be saved.", document.getDocumentHeader().getWorkflowDocument().isSaved());
102         Document result = documentService.getByDocumentHeaderId(eirDoc.getDocumentNumber());
103         assertMatch(eirDoc, result);
104     }
105 
106     @ConfigureContext(session = appleton, shouldCommitTransactions = true)
107     public final void testSaveDocumentWithMatchingPO() throws Exception {
108         ElectronicInvoiceLoadSummary eils = ElectronicInvoiceLoadSummaryFixture.EILS_MATCHING.createElectronicInvoiceLoadSummary();
109         BusinessObjectService boService =  SpringContext.getBean(BusinessObjectService.class);
110         boService.save(eils);
111 
112         GlobalVariables.getUserSession().setBackdoorUser( "parke" );
113         Integer poId = routeMatchingPO();
114 
115         GlobalVariables.getUserSession().setBackdoorUser( "kfs" );
116         eirDoc = ElectronicInvoiceRejectDocumentFixture.EIR_MATCHING.createElectronicInvoiceRejectDocument(eils);
117         eirDoc.setPurchaseOrderIdentifier(poId);
118         eirDoc.setInvoicePurchaseOrderNumber(poId.toString());
119         eirDoc.prepareForSave();
120         DocumentService documentService = SpringContext.getBean(DocumentService.class);
121         assertFalse(DocumentStatus.ENROUTE.equals(eirDoc.getDocumentHeader().getWorkflowDocument().getStatus()));
122         saveDocument(eirDoc, "saving copy source document", documentService);
123         GlobalVariables.getUserSession().clearBackdoorUser();
124 
125         Document document = documentService.getByDocumentHeaderId(eirDoc.getDocumentNumber());
126         assertTrue("Document should  be saved.", document.getDocumentHeader().getWorkflowDocument().isSaved());
127         Document result = documentService.getByDocumentHeaderId(eirDoc.getDocumentNumber());
128         assertMatch(eirDoc, result);
129 
130     }
131 
132     @ConfigureContext(session = appleton, shouldCommitTransactions = false)
133     public final void testRouteDocument() throws Exception {
134 //        ElectronicInvoiceLoadSummary eils = ElectronicInvoiceLoadSummaryFixture.EILS_BASIC.createElectronicInvoiceLoadSummary();
135 //        BusinessObjectService boService =  SpringContext.getBean(BusinessObjectService.class);
136 //        boService.save(eils);
137 //
138 //        eirDoc = ElectronicInvoiceRejectDocumentFixture.EIR_ONLY_REQUIRED_FIELDS.createElectronicInvoiceRejectDocument(eils);
139 //        eirDoc.prepareForSave();
140 //
141 //        DocumentService documentService = SpringContext.getBean(DocumentService.class);
142 //        assertFalse(DocumentStatus.ENROUTE.equals(eirDoc.getDocumentHeader().getWorkflowDocument().getStatus()));
143 //        routeDocument(eirDoc, "saving copy source document", documentService);
144 //        WorkflowTestUtils.waitForStatusChange(eirDoc.getDocumentHeader().getWorkflowDocument(), KewApiConstants.ROUTE_HEADER_FINAL_CD);
145 //        Document result = documentService.getByDocumentHeaderId(eirDoc.getDocumentNumber());
146 //        assertTrue("Document should  be final.", result.getDocumentHeader().getWorkflowDocument().isFinal());
147     }
148 
149     @ConfigureContext(session = appleton, shouldCommitTransactions = false)
150     public final void testRouteDocumentToFinal() throws Exception {
151 //        eirDoc = ElectronicInvoiceRejectDocumentFixture.EIR_ONLY_REQUIRED_FIELDS.createElectronicInvoiceRejectDocument();
152 
153 //        final String docId = requisitionDocument.getDocumentNumber();
154 //        AccountingDocumentTestUtils.routeDocument(requisitionDocument, SpringContext.getBean(DocumentService.class));
155 //        WorkflowTestUtils.waitForNodeChange(requisitionDocument.getDocumentHeader().getWorkflowDocument(), ACCOUNT_REVIEW);
156 //
157 //        // the document should now be routed to vputman as Fiscal Officer
158 //        changeCurrentUser(rorenfro);
159 //        requisitionDocument = (RequisitionDocument) SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(docId);
160 //        assertTrue("At incorrect node.", WorkflowTestUtils.isAtNode(requisitionDocument, ACCOUNT_REVIEW));
161 //        assertTrue("Document should be enroute.", requisitionDocument.getDocumentHeader().getWorkflowDocument().isEnroute());
162 //        assertTrue("rorenfro should have an approve request.", requisitionDocument.getDocumentHeader().getWorkflowDocument().isApprovalRequested());
163 //        SpringContext.getBean(DocumentService.class).approveDocument(requisitionDocument, "Test approving as rorenfro", null);
164 //
165 //        WorkflowTestUtils.waitForStatusChange(requisitionDocument.getDocumentHeader().getWorkflowDocument(), EdenConstants.ROUTE_HEADER_FINAL_CD);
166 //
167 //        changeCurrentUser(khuntley);
168 //        requisitionDocument = (RequisitionDocument) SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(docId);
169 //        assertTrue("Document should now be final.", requisitionDocument.getDocumentHeader().getWorkflowDocument().isFinal());
170     }
171 
172 
173     /**
174      * Helper method to route the document.
175      *
176      * @param document                 The assign contract manager document to be routed.
177      * @param annotation               The annotation String.
178      * @param documentService          The service to use to route the document.
179      * @throws WorkflowException
180      */
181     private void routeDocument(Document document, String annotation, DocumentService documentService) throws WorkflowException {
182         try {
183             documentService.routeDocument(document, annotation, null);
184         }
185         catch (ValidationException e) {
186             // If the business rule evaluation fails then give us more info for debugging this test.
187             fail(e.getMessage() + ", " + GlobalVariables.getMessageMap());
188         }
189     }
190 
191     /**
192      * Helper method to route the document.
193      *
194      * @param document                 The assign contract manager document to be routed.
195      * @param annotation               The annotation String.
196      * @param documentService          The service to use to route the document.
197      * @throws WorkflowException
198      */
199     private void saveDocument(Document document, String annotation, DocumentService documentService) throws WorkflowException {
200         try {
201             documentService.saveDocument(document);
202         }
203         catch (ValidationException e) {
204             // If the business rule evaluation fails then give us more info for debugging this test.
205             fail(e.getMessage() + ", " + GlobalVariables.getMessageMap());
206         }
207     }
208 
209     public static <T extends Document> void assertMatch(T document1, T document2) {
210         Assert.assertEquals(document1.getDocumentNumber(), document2.getDocumentNumber());
211         Assert.assertEquals(document1.getDocumentHeader().getWorkflowDocument().getDocumentTypeName(), document2.getDocumentHeader().getWorkflowDocument().getDocumentTypeName());
212 
213 
214         ElectronicInvoiceRejectDocument d1 = (ElectronicInvoiceRejectDocument) document1;
215         ElectronicInvoiceRejectDocument d2 = (ElectronicInvoiceRejectDocument) document2;
216         Assert.assertEquals(d1.getInvoiceFileName(), d2.getInvoiceFileName());
217         Assert.assertEquals(d1.getVendorDunsNumber(), d2.getVendorDunsNumber());
218         Assert.assertEquals(d1.getInvoiceRejectItems().size(), d2.getInvoiceRejectItems().size());
219         Assert.assertEquals(d1.getInvoiceRejectReasons().size(), d2.getInvoiceRejectReasons().size());
220 
221 //        for (int i = 0; i < d1.getInvoiceRejectItems().size(); i++) {
222 //            d1.getInvoiceRejectItem(i).isLike(d2.getInvoiceRejectItem(i));
223 //        }
224 //        for (int i = 0; i < d1.getInvoiceRejectReasons().size(); i++) {
225 //            d1.getInvoiceRejectReason(i).isLike(d2.getInvoiceRejectReason(i));
226 //        }
227     }
228 
229     private Integer routePO() {
230         PurchaseOrderDocumentTest purchaseOrderDocumentTest = new PurchaseOrderDocumentTest();
231         PurchaseOrderDocument poDocument;
232         try {
233             poDocument = PurchaseOrderDocumentFixture.PO_ONLY_REQUIRED_FIELDS.createPurchaseOrderDocument();
234             DocumentService documentService = SpringContext.getBean(DocumentService.class);
235             poDocument.prepareForSave();
236             AccountingDocumentTestUtils.routeDocument(poDocument, "saving copy source document", null, documentService);
237             WorkflowTestUtils.waitForDocumentApproval(poDocument.getDocumentNumber());
238             return poDocument.getPurapDocumentIdentifier();
239         }
240         catch (Exception e) {
241             // TODO Auto-generated catch block
242             e.printStackTrace();
243             return null;
244         }
245     }
246 
247     private Integer routeMatchingPO() {
248         PurchaseOrderDocumentTest purchaseOrderDocumentTest = new PurchaseOrderDocumentTest();
249         PurchaseOrderDocument poDocument;
250         try {
251             poDocument = PurchaseOrderDocumentFixture.EINVOICE_PO.createPurchaseOrderDocument();
252             DocumentService documentService = SpringContext.getBean(DocumentService.class);
253             poDocument.prepareForSave();
254             AccountingDocumentTestUtils.routeDocument(poDocument, "saving copy source document", null, documentService);
255             WorkflowTestUtils.waitForDocumentApproval(poDocument.getDocumentNumber());
256             return poDocument.getPurapDocumentIdentifier();
257         }
258         catch (Exception e) {
259             // TODO Auto-generated catch block
260             e.printStackTrace();
261             return null;
262         }
263     }
264 
265 }
266