package pl.com.bottega.documentmanagement.infrastructure; import com.google.common.collect.Lists; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.jdbc.Sql; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.transaction.annotation.Transactional; import pl.com.bottega.documentmanagement.api.DocumentCriteria; import pl.com.bottega.documentmanagement.api.DocumentDto; import pl.com.bottega.documentmanagement.api.DocumentSearchResults; import pl.com.bottega.documentmanagement.api.DocumentsCatalog; import pl.com.bottega.documentmanagement.domain.*; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import java.text.DateFormat; import java.text.ParseException; import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; /** * Created by maciuch on 31.07.16. */ @RunWith(SpringRunner.class) @ContextConfiguration({"/application.xml", "/mock-auth-context.xml"}) @TestPropertySource({"/jdbc-test.properties", "/hibernate-test.properties"}) @WebAppConfiguration public class JPADocumentCatalogTest { @Autowired private DocumentsCatalog jpaDocumentsCatalog; @PersistenceContext private EntityManager entityManager; @Autowired private PrintCostCalculator printCostCalculator; @Test @Transactional public void shouldFindDocumentByStatus() { //given Employee employee = new Employee("test", "test", new EmployeeId(10L)); Document documentDraft = new Document(new DocumentNumber("1"), "draft", "draft", employee, printCostCalculator); Document documentVerified = new Document(new DocumentNumber("2"), "verified", "verified", employee, printCostCalculator); entityManager.persist(employee); entityManager.persist(documentDraft); documentVerified.verify(employee); entityManager.persist(documentVerified); //when DocumentCriteria documentCriteria = new DocumentCriteria(); documentCriteria.setPageNumber(1L); documentCriteria.setPerPage(25L); documentCriteria.setStatus(DocumentStatus.DRAFT); DocumentSearchResults results = jpaDocumentsCatalog.find(documentCriteria); //then assertEquals(new Long(1), results.getTotalPages()); List<DocumentDto> documents = Lists.newArrayList(results.getDocuments()); assertEquals(1, documents.size()); DocumentDto document = documents.get(0); assertEquals("draft", document.getContent()); assertEquals("DRAFT", document.getStatus()); } @Sql("/fixtures/documents.sql") @Test @Transactional public void shouldFindDocumentByDraftStatusSQLSetup() { //given //when DocumentCriteria documentCriteria = new DocumentCriteria(); documentCriteria.setPageNumber(1l); documentCriteria.setPerPage(25l); documentCriteria.setStatus(DocumentStatus.DRAFT); DocumentSearchResults results = jpaDocumentsCatalog.find(documentCriteria); //then assertEquals(new Long(1), results.getTotalPages()); List<DocumentDto> documents = Lists.newArrayList(results.getDocuments()); assertEquals(3, documents.size()); DocumentDto document = documents.get(0); assertEquals("draft content", document.getContent()); assertEquals("DRAFT", document.getStatus()); document = documents.get(1); assertEquals("second draft content", document.getContent()); assertEquals("DRAFT", document.getStatus()); document = documents.get(2); assertEquals("third draft content", document.getContent()); assertEquals("DRAFT", document.getStatus()); } @Sql("/fixtures/documents.sql") @Test @Transactional public void shouldFindDocumentByVerifiedStatusSQLSetup() { //given //when DocumentCriteria documentCriteria = new DocumentCriteria(); documentCriteria.setPageNumber(1l); documentCriteria.setPerPage(25l); documentCriteria.setStatus(DocumentStatus.VERIFIED); DocumentSearchResults results = jpaDocumentsCatalog.find(documentCriteria); //then assertEquals(new Long(1), results.getTotalPages()); List<DocumentDto> documents = Lists.newArrayList(results.getDocuments()); assertEquals(2, documents.size()); DocumentDto document = documents.get(0); assertEquals("verified content", document.getContent()); assertEquals("VERIFIED", document.getStatus()); document = documents.get(1); assertEquals("second verified content", document.getContent()); assertEquals("VERIFIED", document.getStatus()); } @Sql("/fixtures/documents.sql") @Test @Transactional public void shouldFindDocumentByCreateFromDateSQLSetup() throws ParseException { //given DateFormat dateFormat = DateFormat.getDateInstance(); //when DocumentCriteria documentCriteria = new DocumentCriteria(); documentCriteria.setPageNumber(1l); documentCriteria.setPerPage(25l); documentCriteria.setCreatedFrom(dateFormat.parse("2016-02-01")); DocumentSearchResults results = jpaDocumentsCatalog.find(documentCriteria); //then assertEquals(new Long(1), results.getTotalPages()); List<DocumentDto> documents = Lists.newArrayList(results.getDocuments()); assertEquals(3, documents.size()); DocumentDto document = documents.get(0); assertEquals("second draft content", document.getContent()); document = documents.get(1); assertEquals("second verified content", document.getContent()); document = documents.get(2); assertEquals("third draft content", document.getContent()); } @Sql("/fixtures/documents.sql") @Test @Transactional public void shouldFindDocumentByCreateUntilDateSQLSetup() throws ParseException { //given DateFormat dateFormat = DateFormat.getDateInstance(); //when DocumentCriteria documentCriteria = new DocumentCriteria(); documentCriteria.setPageNumber(1l); documentCriteria.setPerPage(25l); documentCriteria.setCreatedUntil(dateFormat.parse("2016-02-01")); DocumentSearchResults results = jpaDocumentsCatalog.find(documentCriteria); //then assertEquals(new Long(1), results.getTotalPages()); List<DocumentDto> documents = Lists.newArrayList(results.getDocuments()); assertEquals(2, documents.size()); DocumentDto document = documents.get(0); assertEquals("draft content", document.getContent()); document = documents.get(1); assertEquals("verified content", document.getContent()); } @Sql("/fixtures/documents.sql") @Test @Transactional public void shouldFindDocumentByCreateDatesDateSQLSetup() throws ParseException { //given DateFormat dateFormat = DateFormat.getDateInstance(); //when DocumentCriteria documentCriteria = new DocumentCriteria(); documentCriteria.setPageNumber(1l); documentCriteria.setPerPage(25l); documentCriteria.setCreatedFrom(dateFormat.parse("2016-02-01")); documentCriteria.setCreatedUntil(dateFormat.parse("2016-03-01")); DocumentSearchResults results = jpaDocumentsCatalog.find(documentCriteria); //then assertEquals(new Long(1), results.getTotalPages()); List<DocumentDto> documents = Lists.newArrayList(results.getDocuments()); assertEquals(3, documents.size()); DocumentDto document = documents.get(0); assertEquals("second draft content", document.getContent()); document = documents.get(1); assertEquals("second verified content", document.getContent()); document = documents.get(2); assertEquals("third draft content", document.getContent()); } @Sql("/fixtures/documents.sql") @Test @Transactional public void shouldFindDocumentByVerifiedFromDateSQLSetup() throws ParseException { //given DateFormat dateFormat = DateFormat.getDateInstance(); //when DocumentCriteria documentCriteria = new DocumentCriteria(); documentCriteria.setPageNumber(1l); documentCriteria.setPerPage(25l); documentCriteria.setVerifiedFrom(dateFormat.parse("2016-02-01")); DocumentSearchResults results = jpaDocumentsCatalog.find(documentCriteria); //then assertEquals(new Long(1), results.getTotalPages()); List<DocumentDto> documents = Lists.newArrayList(results.getDocuments()); assertEquals(1, documents.size()); DocumentDto document = documents.get(0); assertEquals("second verified content", document.getContent()); } @Sql("/fixtures/documents.sql") @Test @Transactional public void shouldFindDocumentByVerifiedUntilDateSQLSetup() throws ParseException { //given DateFormat dateFormat = DateFormat.getDateInstance(); //when DocumentCriteria documentCriteria = new DocumentCriteria(); documentCriteria.setPageNumber(1l); documentCriteria.setPerPage(25l); documentCriteria.setVerifiedUntil(dateFormat.parse("2016-02-01")); DocumentSearchResults results = jpaDocumentsCatalog.find(documentCriteria); //then assertEquals(new Long(1), results.getTotalPages()); List<DocumentDto> documents = Lists.newArrayList(results.getDocuments()); assertEquals(1, documents.size()); DocumentDto document = documents.get(0); assertEquals("verified content", document.getContent()); } @Sql("/fixtures/documents.sql") @Test @Transactional public void shouldFindDocumentByVerifyDatesSQLSetup() throws ParseException { //given DateFormat dateFormat = DateFormat.getDateInstance(); //when DocumentCriteria documentCriteria = new DocumentCriteria(); documentCriteria.setPageNumber(1l); documentCriteria.setPerPage(25l); documentCriteria.setVerifiedFrom(dateFormat.parse("2016-01-01")); documentCriteria.setVerifiedUntil(dateFormat.parse("2016-01-04")); DocumentSearchResults results = jpaDocumentsCatalog.find(documentCriteria); //then assertEquals(new Long(1), results.getTotalPages()); List<DocumentDto> documents = Lists.newArrayList(results.getDocuments()); assertEquals(1, documents.size()); DocumentDto document = documents.get(0); assertEquals("verified content", document.getContent()); } @Sql("/fixtures/documents.sql") @Test @Transactional public void shouldFindDocumentCreatedBydSQLSetup() { //given //when DocumentCriteria documentCriteria = new DocumentCriteria(); documentCriteria.setPageNumber(1l); documentCriteria.setPerPage(25l); documentCriteria.setCreatedBy(100l); DocumentSearchResults results = jpaDocumentsCatalog.find(documentCriteria); //then assertEquals(new Long(1), results.getTotalPages()); List<DocumentDto> documents = Lists.newArrayList(results.getDocuments()); assertEquals(2, documents.size()); DocumentDto document = documents.get(0); assertEquals("draft content", document.getContent()); document = documents.get(1); assertEquals("second verified content", document.getContent()); } @Sql("/fixtures/documents.sql") @Test @Transactional public void shouldFindDocumentVerifiedBydSQLSetup() { //given //when DocumentCriteria documentCriteria = new DocumentCriteria(); documentCriteria.setPageNumber(1l); documentCriteria.setPerPage(25l); documentCriteria.setVerifiedBy(200l); DocumentSearchResults results = jpaDocumentsCatalog.find(documentCriteria); //then assertEquals(new Long(1), results.getTotalPages()); List<DocumentDto> documents = Lists.newArrayList(results.getDocuments()); assertEquals(1, documents.size()); DocumentDto document = documents.get(0); assertEquals("verified content", document.getContent()); assertEquals("VERIFIED", document.getStatus()); } @Sql("/fixtures/documents.sql") @Test @Transactional public void shouldFindDocumentByQuerySQLSetup() { //given //when DocumentCriteria documentCriteria = new DocumentCriteria(); documentCriteria.setPageNumber(1l); documentCriteria.setPerPage(25l); documentCriteria.setQuery("second"); DocumentSearchResults results = jpaDocumentsCatalog.find(documentCriteria); //then assertEquals(new Long(1), results.getTotalPages()); List<DocumentDto> documents = Lists.newArrayList(results.getDocuments()); assertEquals(2, documents.size()); DocumentDto document = documents.get(0); assertEquals("second draft content", document.getContent()); document = documents.get(1); assertEquals("second verified content", document.getContent()); } @Sql("/fixtures/documents.sql") @Test @Transactional public void shouldFindDocumentByPartialQuerySQLSetup() { //given //when DocumentCriteria documentCriteria = new DocumentCriteria(); documentCriteria.setPageNumber(1l); documentCriteria.setPerPage(25l); documentCriteria.setQuery("draf"); DocumentSearchResults results = jpaDocumentsCatalog.find(documentCriteria); //then assertEquals(new Long(1), results.getTotalPages()); List<DocumentDto> documents = Lists.newArrayList(results.getDocuments()); assertEquals(3, documents.size()); DocumentDto document = documents.get(0); assertEquals("draft content", document.getContent()); document = documents.get(1); assertEquals("second draft content", document.getContent()); document = documents.get(2); assertEquals("third draft content", document.getContent()); } @Sql("/fixtures/documents.sql") @Test @Transactional public void shouldGetDocumentSQLSetup() { //given //when DocumentDto document = jpaDocumentsCatalog.get(new DocumentNumber("13A")); //then assertNotNull(document); assertEquals("verified content", document.getContent()); assertEquals("VERIFIED", document.getStatus()); } }