package no.dusken.aranea.service;
import no.dusken.aranea.model.ExtendedPage;
import no.dusken.aranea.model.Page;
import no.dusken.aranea.model.Section;
import no.dusken.aranea.model.SectionPage;
import org.junit.Before;
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.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;
import java.util.GregorianCalendar;
import java.util.LinkedList;
import java.util.List;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
/**
* @author Marvin B. Lillehaug <lillehau@underdusken.no>
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"/META-INF/integrationTest.xml"})
@TransactionConfiguration(transactionManager="transactionManager", defaultRollback=true)
@Transactional
public class TestSectionPageServiceImpl {
@Autowired
private PageService pageService;
@Autowired
private SectionService sectionService;
private Section s;
private Page page;
@Autowired
private SectionPageService sectionPageService;
@Before
public void onSetup(){
s = new Section();
s.setName("Section");
s = sectionService.saveOrUpdate(s);
Section sub = new Section();
sub.setParent(s);
sub.setName("Subsection");
sub.setUrl("sub");
sub = sectionService.saveOrUpdate(sub);
Page p1 = new ExtendedPage();
p1.setTitle("tittel1");
p1.setPublished(true);
p1.setSummary("ingress");
p1.setParent(s);
p1.setVisibleFrom(new GregorianCalendar(1900, 1, 1));
p1.setVisibleTo(new GregorianCalendar(3900, 1, 1));
p1 = pageService.saveOrUpdate(p1);
assertNotNull(p1);
Page p2 = new ExtendedPage();
p2.setTitle("tittel2");
p2.setPublished(true);
p2.setSummary("ingress");
p2.setParent(s);
p2.setVisibleFrom(new GregorianCalendar(1900, 1, 1));
p2.setVisibleTo(new GregorianCalendar(3900, 1, 1));
p2 = pageService.saveOrUpdate(p2);
assertNotNull(p2);
Page p3 = new ExtendedPage();
p3.setTitle("tittel3");
p3.setPublished(true);
p3.setSummary("ingress");
p3.setParent(sub);
p3.setVisibleFrom(new GregorianCalendar(1900, 1, 1));
p3.setVisibleTo(new GregorianCalendar(3900, 1, 1));
p3 = pageService.saveOrUpdate(p3);
assertNotNull(p3);
Page p4 = new ExtendedPage();
p4.setTitle("tittel4");
p4.setPublished(false);
p4.setSummary("ingress");
p4.setParent(s);
p4.setVisibleFrom(new GregorianCalendar(1900, 1, 1));
p4.setVisibleTo(new GregorianCalendar(3900, 1, 1));
p4 = pageService.saveOrUpdate(p4);
assertNotNull(p4);
Page p5 = new ExtendedPage();
p5.setTitle("tittel5");
p5.setPublished(false);
p5.setSummary("ingress");
p5.setParent(sub);
p5.setVisibleFrom(new GregorianCalendar(1900, 1, 1));
p5.setVisibleTo(new GregorianCalendar(3900, 1, 1));
p5 = pageService.saveOrUpdate(p5);
assertNotNull(p5);
page = p1;
SectionPage sp1 = new SectionPage(s, p1, 1, "");
SectionPage sp2 = new SectionPage(s, p2, 2, "");
SectionPage sp3 = new SectionPage(s, p4, 3, "");
SectionPage sp4 = new SectionPage(s, p3, 4, "");
SectionPage sp5 = new SectionPage(s, p5, 5, "");
List<SectionPage> pages = new LinkedList<SectionPage>();
pages.add(sp1);
pages.add(sp2);
pages.add(sp3);
pages.add(sp4);
pages.add(sp5);
s.setPages(pages);
sectionService.saveOrUpdate(s);
Section k = sectionService.getEntity(s.getID());
assertEquals("Wrong number of pages", 5, k.getPages().size());
List<Page> sectionpages = pageService.getSectionPagePublished(5, s);
assertEquals("Wrong number of sectionpages returned", 3, sectionpages.size());
assertEquals("Wrong page as number one", "tittel1", sectionpages.get(0).getTitle());
assertEquals("Wrong page as number two", "tittel2", sectionpages.get(1).getTitle());
assertEquals("Wrong page as number three", "tittel3", sectionpages.get(2).getTitle());
SectionPage spsub1 = new SectionPage(sub, page, 1, "");
sectionPageService.saveOrUpdate(spsub1);
}
@Test
public void testChangeOrdering(){
List<SectionPage> sectionPages = sectionPageService.getSectionPageByOwner(s);
assertEquals("Wrong page as number one", "tittel1", sectionPages.get(0).getPage().getTitle());
assertEquals("Wrong page as number two", "tittel2", sectionPages.get(1).getPage().getTitle());
assertEquals("Wrong page as number three", "tittel4", sectionPages.get(2).getPage().getTitle());
assertEquals("Wrong page as number four", "tittel3", sectionPages.get(3).getPage().getTitle());
assertEquals("Wrong page as number five", "tittel5", sectionPages.get(4).getPage().getTitle());
List<Page> pages = pageService.getSectionPagePublished(5, s);
assertEquals("Wrong page as number one", "tittel1", pages.get(0).getTitle());
assertEquals("Wrong page as number two", "tittel2", pages.get(1).getTitle());
assertEquals("Wrong page as number two", "tittel3", pages.get(2).getTitle());
sectionPages.get(0).setOrdering(2);
sectionPages.get(1).setOrdering(1);
sectionPageService.saveOrUpdateSectionPages(sectionPages);
pages = pageService.getSectionPagePublished(5, s);
assertEquals("Wrong page as number one", "tittel2", pages.get(0).getTitle());
assertEquals("Wrong page as number two", "tittel1", pages.get(1).getTitle());
assertEquals("Wrong page as number two", "tittel3", pages.get(2).getTitle());
}
@Test
public void testGetBySection(){
List<SectionPage> sectionPages = sectionPageService.getSectionPageByOwner(s);
assertEquals("Wrong number returned", 5, sectionPages.size());
}
@Test
public void testGetBySectionAndOrdering(){
SectionPage sp = sectionPageService.getSectionPageBySectionAndOrdering(s, 2);
assertEquals("Wrong sectionPage", "tittel2", sp.getPage().getTitle());
}
@Test
public void testGetBySectionAndPage(){
SectionPage sp = sectionPageService.getSectionPageBySectionAndPage(s, page);
assertNotNull("SectionPage was null", sp);
assertEquals("Wrong sectionPage", "tittel1", sp.getPage().getTitle());
}
@Test
public void testGetSectionPagesForPage(){
List<SectionPage> sectionPages = sectionPageService.getSectionPagesByPage(page);
assertEquals("Wrong size", 2, sectionPages.size());
}
}