/*
* Copyright (c) JForum Team. All rights reserved.
*
* The software in this package is published under the terms of the LGPL
* license a copy of which has been included with this distribution in the
* license.txt file.
*
* The JForum Project
* http://www.jforum.net
*/
package net.jforum.services;
import static org.mockito.Matchers.*;
import static org.mockito.Mockito.*;
import java.util.Arrays;
import net.jforum.core.exceptions.ValidationException;
import net.jforum.entities.Category;
import net.jforum.entities.Forum;
import net.jforum.repository.ForumRepository;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
/**
* @author Rafael Steil, Jonatan Cloutier
*/
@RunWith(MockitoJUnitRunner.class)
public class ForumServiceTestCase {
@Mock private ForumRepository repository;
@InjectMocks private ForumService service;
@Test
public void deleteUsingNullIdsShouldIgnore() {
service.delete(null);
verifyZeroInteractions(repository);
}
@Test
public void delete() {
when(repository.get(1)).thenReturn(new Forum());
when(repository.get(2)).thenReturn(new Forum());
service.delete(1, 2);
verify(repository, times(2)).remove(notNull(Forum.class));
}
@Test(expected = NullPointerException.class)
public void updateUsingNullForumExpectsNPE() {
service.update(null);
}
@Test(expected = ValidationException.class)
public void updateUsingForumIdZeroExpectsValidationException() {
Forum f = new Forum();
f.setName("f1");
Category category = new Category();
category.setId(1);
f.setCategory(category);
f.setId(0);
service.update(f);
}
@Test(expected = ValidationException.class)
public void updateUsingCategoryNullExpectsValidationException() {
Forum f = new Forum();
f.setName("f1");
f.setId(1);
f.setCategory(null);
service.update(f);
}
@Test(expected = ValidationException.class)
public void updateUsingCategoryWithIdZeroExpectsValidationException() {
Forum f = new Forum();
f.setName("f1");
f.setId(1);
Category category = new Category();
category.setId(0);
f.setCategory(category);
service.update(f);
}
@Test(expected = ValidationException.class)
public void updateUsingEmptyNameExpectsValidationException() {
Forum f = new Forum();
f.setName("");
f.setId(1);
Category category = new Category();
category.setId(1);
f.setCategory(category);
service.update(f);
}
@Test(expected = ValidationException.class)
public void updateUsingNullNameExpectsValidationException() {
Forum f = new Forum();
f.setName(null);
f.setId(1);
Category category = new Category();
category.setId(1);
f.setCategory(category);
service.update(f);
}
@Test
public void addExpectSuccess() {
final Forum f = new Forum();
f.setName("f1");
Category category = new Category();
category.setId(1);
f.setCategory(category);
service.add(f);
verify(repository).add(f);
}
@Test(expected = ValidationException.class)
public void addUsingForumIdBiggerThanZeroExpectValidationException() {
Forum f = new Forum();
Category category = new Category();
category.setId(1);
f.setCategory(category);
f.setName("f1");
f.setId(1);
service.add(f);
}
@Test(expected = NullPointerException.class)
public void addNullForumExpectNPE() {
service.add(null);
}
@Test(expected = ValidationException.class)
public void addForumWithoutNameExpectValidationException() {
Forum f = new Forum();
f.setName(null);
Category category = new Category();
category.setId(1);
f.setCategory(category);
service.add(f);
}
@Test(expected = ValidationException.class)
public void addForumWithEmptyNameExpectValidationException() {
Forum f = new Forum();
f.setName("");
Category category = new Category();
category.setId(1);
f.setCategory(category);
service.add(f);
}
@Test(expected = ValidationException.class)
public void addForumWithNullCategoryExpectValidationException() {
Forum f = new Forum();
f.setName("f1");
f.setCategory(null);
service.add(f);
}
@Test(expected = ValidationException.class)
public void addForumUsingCategoryWithoutIdExpectValidationException() {
Forum f = new Forum();
f.setName("f1");
Category category = new Category();
category.setId(0);
f.setCategory(category);
service.add(f);
}
@Test
public void upCategoryOrderExpectToBeInFirstPosition() {
final Forum forumToChange = newForumWithOrder(1, 2, newForumWithOrder(2, 1), newForumWithOrder(1, 2));
when(repository.get(1)).thenReturn(forumToChange);
service.upForumOrder(1);
verify(repository, times(2)).update(notNull(Forum.class));
Assert.assertEquals(1, forumToChange.getDisplayOrder());
}
@Test
public void downCategoryOrderExpectToBeInLastPosition() {
final Forum forumToChange = newForumWithOrder(1, 1, newForumWithOrder(1, 1), newForumWithOrder(2, 2));
when(repository.get(1)).thenReturn(forumToChange);
service.downForumOrder(1);
verify(repository, times(2)).update(notNull(Forum.class));
Assert.assertEquals(2, forumToChange.getDisplayOrder());
}
@Test
public void upCategoryOrderCategoryAlreadyFistShouldIgnore() {
final Forum forumToChange = newForumWithOrder(1, 1, newForumWithOrder(1, 1), newForumWithOrder(2, 2));
when(repository.get(1)).thenReturn(forumToChange);
service.upForumOrder(1);
verify(repository, never()).update(notNull(Forum.class));
}
@Test
public void downCategoryOrderCategoryAlredyLastShouldIgnore() {
final Forum categoryToChange = newForumWithOrder(2, 2, newForumWithOrder(1, 1), newForumWithOrder(2, 2));
when(repository.get(2)).thenReturn(categoryToChange);
service.downForumOrder(2);
verify(repository, never()).update(notNull(Forum.class));
}
private Forum newForumWithOrder(int forumId, int order, final Forum... categoryForums) {
Forum f = new Forum();
f.setId(forumId);
f.setDisplayOrder(order);
Category category = mock(Category.class);
when(category.getForums()).thenReturn(Arrays.asList(categoryForums));
f.setCategory(category);
return f;
}
}