/*
* Copyright 2016 Studentmediene i Trondheim AS
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package no.dusken.momus.service;
import no.dusken.momus.model.*;
import no.dusken.momus.service.repository.*;
import no.dusken.momus.service.search.ArticleSearchParams;
import no.dusken.momus.test.AbstractTestRunner;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@Transactional
public class ArticleServiceTest extends AbstractTestRunner {
@Autowired
PersonRepository personRepository;
@Autowired
ArticleRepository articleRepository;
@Autowired
PublicationRepository publicationRepository;
@Autowired
ArticleStatusRepository articleStatusRepository;
@Autowired
ArticleTypeRepository articleTypeRepository;
@Autowired
ArticleRevisionRepository articleRevisionRepository;
@Autowired
ArticleReviewRepository articleReviewRepository;
@Autowired
ArticleService articleService;
private Article article1;
private Article article2;
private Article article3;
private Article article4;
@Before
public void setUp() throws Exception {
Person person1 = new Person(1L, "mts", "Mats", "Matsessen", "", "", true);
Person person2 = new Person(2L, "aaa", "Kåre", "Kåressen", "", "", true);
Person person3 = new Person(3L, "bbb", "Flaks", "Flaksesen", "", "", true);
person1 = personRepository.save(person1);
person2 = personRepository.save(person2);
person3 = personRepository.save(person3);
Publication publication1 = new Publication(1L);
publication1.setName("Pub1");
Publication publication2 = new Publication(2L);
publication2.setName("Pub2");
publication1 = publicationRepository.save(publication1);
publication2 = publicationRepository.save(publication2);
ArticleStatus articleStatus1 = new ArticleStatus();
articleStatus1.setName("Skrives");
articleStatusRepository.save(articleStatus1);
ArticleReview articleReview1 = new ArticleReview();
articleReview1.setName("Ukjent");
articleReviewRepository.save(articleReview1);
// TODO: add section as well
article1 = new Article();
article1.setName("Artikkel 1");
article1.setContent("Testinnhold for artikkel 1 yay");
Set<Person> article1journalists = new HashSet<>();
article1journalists.add(person1);
article1journalists.add(person2);
article1.setJournalists(article1journalists);
article1.setPhotographers(new HashSet<Person>());
article1.setPublication(publication1);
articleService.createRawContent(article1);
article1 = articleRepository.saveAndFlush(article1);
article2 = new Article();
article2.setName("Artikkel 2");
article2.setContent("Masse kult innhold, kan du søke i dette kanskje??");
Set<Person> article2journalists = new HashSet<>();
Set<Person> article2photographers = new HashSet<>();
article2journalists.add(person2);
article2photographers.add(person3);
article2.setJournalists(article2journalists);
article2.setPhotographers(article2photographers);
article2.setPublication(publication1);
articleService.createRawContent(article2);
article2 = articleRepository.save(article2);
article3 = new Article();
article3.setName("Artikkel 3");
article3.setContent("Hei på deg, flott du leser testene! :)");
Set<Person> article3journalists = new HashSet<>();
Set<Person> article3photographers = new HashSet<>();
article3journalists.add(person1);
article3photographers.add(person2);
article3.setJournalists(article3journalists);
article3.setPhotographers(article3photographers);
article3.setPublication(publication1);
articleService.createRawContent(article3);
article3 = articleRepository.save(article3);
article4 = new Article();
article4.setName("Artikkel 4");
article4.setContent("Its not about how hard you can hit, its about hard you can GET hit - and keep on moving");
Set<Person> article4journalists = new HashSet<>();
Set<Person> article4photographers = new HashSet<>();
article4photographers.add(person1);
article4photographers.add(person2);
article4.setJournalists(article4journalists);
article4.setPhotographers(article4photographers);
article4.setPublication(publication2);
article4.setStatus(articleStatus1);
articleService.createRawContent(article4);
article4 = articleRepository.save(article4);
article4.setReview(articleReview1);
}
@Test
public void testSaveArticleUpdates() throws Exception {
// Todo: Mock user and date
}
@Test
public void testSaveArticleMetadata() throws Exception {
Article article = new Article(article1.getId());
ArticleStatus articleStatus1 = articleStatusRepository.save(new ArticleStatus("Desk", ""));
ArticleType articleType1 = articleTypeRepository.save(new ArticleType("KulturRaport", ""));
Publication publication1 = new Publication();
publication1.setName("testpublication");
publication1.setReleaseDate(new Date(114, 5, 5));
publication1 = publicationRepository.save(publication1);
Set<Person> journalists = new HashSet<>();
Set<Person> photographers = new HashSet<>();
photographers.add(personRepository.findOne(3L));
article.setName("Updated name");
article.setJournalists(journalists);
article.setPhotographers(photographers);
article.setContent("NEW CONTENT, SHOULD NOT BE CHANGED!");
article.setComment("my cool comment");
article.setStatus(articleStatus1);
article.setType(articleType1);
article.setPublication(publication1);
article = articleService.saveMetadata(article);
assertEquals("Updated name", article.getName());
assertEquals(0, article.getJournalists().size());
assertEquals(1, article.getPhotographers().size());
assertEquals("my cool comment", article.getComment());
assertEquals(articleStatus1.getName(), article.getStatus().getName());
assertEquals(articleType1.getName(), article.getType().getName());
assertEquals(publication1.getName(), article.getPublication().getName());
assertEquals("Testinnhold for artikkel 1 yay", article.getContent());
}
@Test
public void testSaveArticleContentsGeneratesARevision() throws Exception {
Article article = new Article(article1.getId());
article.setContent("NEW CONTENT for article 1");
Article updated = articleService.saveNewContent(article);
assertEquals("NEW CONTENT for article 1", updated.getContent());
// Fetch the revision
List<ArticleRevision> revisions = articleRevisionRepository.findByArticleIdOrderBySavedDateDesc(updated.getId());
assertEquals(1, revisions.size());
ArticleRevision rev = revisions.get(0);
assertEquals("NEW CONTENT for article 1", rev.getContent());
}
@Test
public void testEmptyArticleSearchReturnsAll() {
ArticleSearchParams params = new ArticleSearchParams("", null, Collections.<Long>emptyList(),null, null, null, 20, 1, false);
List<Article> expected = new ArrayList<>();
expected.add(article1);
expected.add(article2);
expected.add(article3);
expected.add(article4);
List<Article> articles = articleService.searchForArticles(params);
assertEquals(expected, articles);
// just a check to see if the joins actually work, so that relations are populated
assertTrue(articles.get(0).getJournalists().contains(new Person(1L)));
assertTrue(articles.get(0).getJournalists().contains(new Person(2L)));
assertEquals(2, articles.get(0).getJournalists().size());
}
@Test
public void testSearchingForContent() {
ArticleSearchParams params = new ArticleSearchParams("søkE dette KÅre", null, Collections.<Long>emptyList(),null, null, null, 0, 0, false);
List<Article> expected = new ArrayList<>();
expected.add(article2);
assertEquals(expected, articleService.searchForArticles(params));
}
@Test
public void testSearchingForPublication() {
ArticleSearchParams params = new ArticleSearchParams("", null, Collections.<Long>emptyList(), null,null, article4.getPublication().getId(), 0, 0, false);
List<Article> expected = new ArrayList<>();
expected.add(article4);
List<Article> articles = articleService.searchForArticles(params);
assertEquals(expected, articles);
}
@Test
public void testSearchingForPerson() {
ArticleSearchParams params1 = new ArticleSearchParams("", null, Arrays.asList(2L), null,null, null, 20, 1, false);
ArticleSearchParams params2 = new ArticleSearchParams(null, null, Arrays.asList(1L,2L),null, null, null, 20, 1, false);
ArticleSearchParams params3 = new ArticleSearchParams("", null, Arrays.asList(1L,2L,3L),null, null, null, 20, 1, false);
List<Article> expected1 = new ArrayList<>();
List<Article> expected2 = new ArrayList<>();
List<Article> expected3 = new ArrayList<>();
expected1.add(article1);
expected1.add(article2);
expected1.add(article3);
expected1.add(article4);
expected2.add(article1);
expected2.add(article3);
expected2.add(article4);
List<Article> articles1 = articleService.searchForArticles(params1);
List<Article> articles2 = articleService.searchForArticles(params2);
assertEquals(expected1, articles1);
assertEquals(expected2, articles2);
assertEquals(expected3, articleService.searchForArticles(params3));
}
@Test
public void testSearchingForBothPersonAndContent() {
ArticleSearchParams params = new ArticleSearchParams("its about hard you can GET hit", null, Arrays.asList(1L, 2L), null,null,null, 20, 1, false);
ArticleSearchParams params2 = new ArticleSearchParams("du", null, Arrays.asList(2L), null, null, null, 20, 1, false);
List<Article> expected = new ArrayList<>();
List<Article> expected2 = new ArrayList<>();
expected.add(article4);
expected2.add(article2);
expected2.add(article3);
List<Article> articles = articleService.searchForArticles(params);
List<Article> articles2 = articleService.searchForArticles(params2);
assertEquals(expected, articles);
assertEquals(expected2, articles2);
}
@Test
public void testSearchingForStatus() {
ArticleSearchParams params = new ArticleSearchParams("",article4.getStatus().getId(),Collections.<Long>emptyList(),null,null,null, 0, 0, false);
List<Article> expected = new ArrayList<>();
expected.add(article4);
List<Article> articles = articleService.searchForArticles(params);
assertEquals(expected, articles);
}
@Test
public void testSearchingForReview() {
ArticleSearchParams params = new ArticleSearchParams("",null,Collections.<Long>emptyList(),article4.getReview().getId(),null,null, 0, 0, false);
List<Article> expected = new ArrayList<>();
expected.add(article4);
List<Article> articles = articleService.searchForArticles(params);
assertEquals(expected, articles);
}
@Test
public void testSearchingForContentAndPersonAndStatusAndPublication() {
ArticleSearchParams params = new ArticleSearchParams("moving",article4.getStatus().getId(),Arrays.asList(1L, 2L),null,null,article4.getPublication().getId(), 0, 0, false);
List<Article> expected = new ArrayList<>();
expected.add(article4);
List<Article> articles = articleService.searchForArticles(params);
assertEquals(expected, articles);
}
//Trololololol, hilsen Petter Asla :-) Lykke til videre!
}