in component-test/src/main/java/org/apache/fineract/cn/customer/TestDocuments.java [80:201]
public void shouldUploadEditThenCompleteDocument() throws InterruptedException, IOException {
logger.info("Prepare test");
final Customer customer = CustomerGenerator.createRandomCustomer();
customerManager.createCustomer(customer);
Assert.assertTrue(eventRecorder.wait(CustomerEventConstants.POST_CUSTOMER, customer.getIdentifier()));
logger.info("Check that document \"stub\" can be created");
final CustomerDocument customerDocument = CustomerDocumentGenerator.createRandomCustomerDocument();
customerDocumentsManager.createDocument(customer.getIdentifier(), customerDocument.getIdentifier(), customerDocument);
Assert.assertTrue(eventRecorder.wait(CustomerEventConstants.POST_DOCUMENT,
new DocumentEvent(customer.getIdentifier(), customerDocument.getIdentifier())));
final CustomerDocument createdCustomerDocument = customerDocumentsManager.getDocument(
customer.getIdentifier(), customerDocument.getIdentifier());
Assert.assertEquals(customerDocument, createdCustomerDocument);
logger.info("Check that pages can be created");
for (int i = 0; i < 10; i++) {
createDocumentPage(customer.getIdentifier(), customerDocument.getIdentifier(), i);
}
List<Integer> pageNumbers = customerDocumentsManager.getDocumentPageNumbers(
customer.getIdentifier(), customerDocument.getIdentifier());
final List<Integer> expectedPageNumbers = IntStream.range(0, 10).boxed().collect(Collectors.toList());
Assert.assertEquals(expectedPageNumbers, pageNumbers);
logger.info("Check that a page can be deleted");
customerDocumentsManager.deleteDocumentPage(customer.getIdentifier(), customerDocument.getIdentifier(), 9);
Assert.assertTrue(eventRecorder.wait(CustomerEventConstants.DELETE_DOCUMENT_PAGE,
new DocumentPageEvent(customer.getIdentifier(), customerDocument.getIdentifier(), 9)));
final List<Integer> changedPageNumbers = customerDocumentsManager.getDocumentPageNumbers(
customer.getIdentifier(), customerDocument.getIdentifier());
final List<Integer> changedExpectedPageNumbers = IntStream.range(0, 9).boxed().collect(Collectors.toList());
Assert.assertEquals(changedExpectedPageNumbers, changedPageNumbers);
try {
customerDocumentsManager.getDocumentPage(customer.getIdentifier(), customerDocument.getIdentifier(), 9);
Assert.fail("Getting the 9th document page should throw a NotFoundException after the 9th page was removed.");
}
catch (final NotFoundException ignored) {}
logger.info("Check that a document which is missing pages cannot be completed");
customerDocumentsManager.deleteDocumentPage(customer.getIdentifier(), customerDocument.getIdentifier(), 2);
Assert.assertTrue(eventRecorder.wait(CustomerEventConstants.DELETE_DOCUMENT_PAGE,
new DocumentPageEvent(customer.getIdentifier(), customerDocument.getIdentifier(), 2)));
try {
customerDocumentsManager.completeDocument(customer.getIdentifier(), customerDocument.getIdentifier(), true);
Assert.fail("It shouldn't be possible to complete a document with missing pages.");
}
catch (final DocumentValidationException ignored) {}
createDocumentPage(customer.getIdentifier(), customerDocument.getIdentifier(), 2);
logger.info("Check that a document's description can be changed.");
customerDocument.setDescription("new description");
customerDocumentsManager.changeDocument(customer.getIdentifier(), customerDocument.getIdentifier(), customerDocument);
Assert.assertTrue(eventRecorder.wait(CustomerEventConstants.PUT_DOCUMENT,
new DocumentEvent(customer.getIdentifier(), customerDocument.getIdentifier())));
{
final CustomerDocument changedCustomerDocument = customerDocumentsManager.getDocument(customer.getIdentifier(), customerDocument.getIdentifier());
Assert.assertEquals(customerDocument, changedCustomerDocument);
}
logger.info("Check that a valid document can be completed");
final TimeStampChecker timeStampChecker = TimeStampChecker.roughlyNow();
customerDocumentsManager.completeDocument(customer.getIdentifier(), customerDocument.getIdentifier(), true);
Assert.assertTrue(eventRecorder.wait(CustomerEventConstants.POST_DOCUMENT_COMPLETE,
new DocumentEvent(customer.getIdentifier(), customerDocument.getIdentifier())));
final CustomerDocument completedDocument = customerDocumentsManager.getDocument(
customer.getIdentifier(), customerDocument.getIdentifier());
Assert.assertEquals(true, completedDocument.isCompleted());
timeStampChecker.assertCorrect(completedDocument.getCreatedOn());
logger.info("Check that document can't be changed or removed after completion");
try {
createDocumentPage(customer.getIdentifier(), customerDocument.getIdentifier(), 9);
Assert.fail("Adding another page after the document is completed shouldn't be possible.");
}
catch (final CompletedDocumentCannotBeChangedException ignored) {}
try {
customerDocumentsManager.deleteDocumentPage(customer.getIdentifier(), customerDocument.getIdentifier(), 8);
Assert.fail("Deleting a page after the document is completed shouldn't be possible.");
}
catch (final CompletedDocumentCannotBeChangedException ignored) {}
try {
customerDocumentsManager.changeDocument(customer.getIdentifier(), customerDocument.getIdentifier(), customerDocument);
Assert.fail("Changing a document after it is completed shouldn't be possible.");
}
catch (final CompletedDocumentCannotBeChangedException ignored) {}
try {
customerDocumentsManager.deleteDocument(customer.getIdentifier(), customerDocument.getIdentifier());
Assert.fail("Changing a document after it is completed shouldn't be possible.");
}
catch (final CompletedDocumentCannotBeChangedException ignored) {}
logger.info("Check that document can't be uncompleted");
try {
customerDocumentsManager.completeDocument(customer.getIdentifier(), customerDocument.getIdentifier(), false);
Assert.fail("It shouldn't be possible to change a document from completed to uncompleted.");
}
catch (final CompletedDocumentCannotBeChangedException ignored) {}
logger.info("Check that document is in the list");
final List<CustomerDocument> documents = customerDocumentsManager.getDocuments(customer.getIdentifier());
final boolean documentIsInList = documents.stream().anyMatch(x ->
(x.getIdentifier().equals(customerDocument.getIdentifier())) &&
(x.isCompleted()));
Assert.assertTrue("The document we just completed should be in the list", documentIsInList);
}