/* * 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.controllers; import static org.junit.Assert.*; import static org.mockito.Matchers.*; import static org.mockito.Mockito.*; import java.util.Arrays; import net.jforum.entities.Category; import net.jforum.entities.Forum; import net.jforum.entities.UserSession; import net.jforum.repository.CategoryRepository; import net.jforum.repository.ForumRepository; import net.jforum.security.RoleManager; import net.jforum.services.ForumService; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; import org.mockito.runners.MockitoJUnitRunner; import br.com.caelum.vraptor.util.test.MockResult; /** * @author Rafael Steil, Jonatan Cloutier */ @RunWith(MockitoJUnitRunner.class) public class ForumAdminControllerTestCase extends AdminTestCase { @InjectMocks private ForumAdminController controller; @Mock private CategoryRepository categoryRepository; @Mock private ForumService service; @Mock private ForumRepository forumRepository; @Mock private UserSession userSession; @Mock private RoleManager roleManager; @Mock private ForumAdminController mockForumAdminController; @Spy private MockResult mockResult; public ForumAdminControllerTestCase() { super(ForumAdminController.class); } @Test public void deleteIsFullAdministratorShouldAllow() { when(userSession.getRoleManager()).thenReturn(roleManager); when(roleManager.isAdministrator()).thenReturn(true); when(mockResult.redirectTo(controller)).thenReturn(mockForumAdminController); controller.delete(1, 2); verify(service).delete(1, 2); verify(mockForumAdminController).list(); } @Test public void deleteIsNotFullAdministratorShouldIgnore() { when(userSession.getRoleManager()).thenReturn(roleManager); when(roleManager.isAdministrator()).thenReturn(false); when(mockResult.redirectTo(controller)).thenReturn(mockForumAdminController); controller.delete(1, 2); verify(mockForumAdminController).list(); } @Test public void list() { final Category category = new Category(categoryRepository); when(categoryRepository.getAllCategories()).thenReturn(Arrays.asList(category)); controller.list(); assertEquals(Arrays.asList(category), mockResult.included("categories")); } @Test public void addExpectCategories() { when(categoryRepository.getAllCategories()).thenReturn(Arrays.asList(new Category())); controller.add(); assertEquals(Arrays.asList(new Category()), mockResult.included("categories")); } @Test public void editExpectForumAndCategories() { when(userSession.getRoleManager()).thenReturn(roleManager); when(roleManager.getCanModerateForum(3)).thenReturn(true); when(forumRepository.get(3)).thenReturn(new Forum()); when(categoryRepository.getAllCategories()).thenReturn(Arrays.asList(new Category())); when(mockResult.forwardTo(controller)).thenReturn(mockForumAdminController); controller.edit(3); assertEquals(new Forum(), mockResult.included("forum")); assertEquals(Arrays.asList(new Category()), mockResult.included("categories")); verify(mockForumAdminController).add(); } @Test public void editSaveIsSuperAdministratorExpectsSuccess() { when(userSession.getRoleManager()).thenReturn(roleManager); when(roleManager.isAdministrator()).thenReturn(true); when(mockResult.redirectTo(controller)).thenReturn(mockForumAdminController); controller.editSave(new Forum()); verify(service).update(notNull(Forum.class)); verify(mockForumAdminController).list(); } @Test public void editSaveIsCategoryAllowedExpectsSuccess() { when(userSession.getRoleManager()).thenReturn(roleManager); when(roleManager.isAdministrator()).thenReturn(false); when(roleManager.getCanModerateForum(0)).thenReturn(true); when(mockResult.redirectTo(controller)).thenReturn(mockForumAdminController); Forum forum = new Forum(); forum.setCategory(new Category()); forum.getCategory().setId(1); controller.editSave(forum); verify(service).update(notNull(Forum.class)); verify(mockForumAdminController).list(); } @Test public void editSaveNotSuperAdministratorCategoryNotAllowedShouldIgnore() { final Forum forum = new Forum(); forum.setCategory(new Category()); forum.getCategory().setId(1); when(userSession.getRoleManager()).thenReturn(roleManager); when(roleManager.isAdministrator()).thenReturn(false); when(roleManager.getCanModerateForum(0)).thenReturn(true); when(mockResult.redirectTo(controller)).thenReturn(mockForumAdminController); controller.editSave(forum); verify(service).update(forum); verify(mockForumAdminController).list(); } @Test public void addSaveIsSuperAdministratorExpectSuccess() { final Forum f = new Forum(); f.setName("f1"); when(userSession.getRoleManager()).thenReturn(roleManager); when(roleManager.isAdministrator()).thenReturn(true); when(mockResult.redirectTo(controller)).thenReturn(mockForumAdminController); controller.addSave(f); assertEquals(f, mockResult.included("forum")); verify(service).add(f); verify(mockForumAdminController).list(); } @Test public void addSaveIsCategoryAllowedExpectSuccess() { final Forum f = new Forum(); f.setName("f1"); f.setCategory(new Category()); f.getCategory().setId(1); when(userSession.getRoleManager()).thenReturn(roleManager); when(roleManager.isAdministrator()).thenReturn(false); when(roleManager.isCategoryAllowed(1)).thenReturn(true); when(mockResult.redirectTo(controller)).thenReturn(mockForumAdminController); controller.addSave(f); assertEquals(f, mockResult.included("forum")); verify(service).add(f); verify(mockForumAdminController).list(); } @Test public void addSaveNotSuperAdministratorCategoryNotAllowedShouldIgnore() { final Forum forum = new Forum(); forum.setName("f1"); forum.setCategory(new Category()); forum.getCategory().setId(1); when(userSession.getRoleManager()).thenReturn(roleManager); when(roleManager.isAdministrator()).thenReturn(false); when(roleManager.isCategoryAllowed(1)).thenReturn(true); when(mockResult.redirectTo(controller)).thenReturn(mockForumAdminController); controller.addSave(forum); verify(service).add(forum); assertEquals(forum, mockResult.included("forum")); verify(mockForumAdminController).list(); } @Test public void up() { when(userSession.getRoleManager()).thenReturn(roleManager); when(roleManager.getCanModerateForum(1)).thenReturn(true); when(mockResult.redirectTo(controller)).thenReturn(mockForumAdminController); controller.up(1); verify(service).upForumOrder(1); verify(mockForumAdminController).list(); } @Test public void down() { when(userSession.getRoleManager()).thenReturn(roleManager); when(roleManager.getCanModerateForum(2)).thenReturn(true); when(mockResult.redirectTo(controller)).thenReturn(mockForumAdminController); controller.down(2); verify(service).downForumOrder(2); verify(mockForumAdminController).list(); } }