Package org.jtalks.jcommune.service.transactional

Source Code of org.jtalks.jcommune.service.transactional.TransactionalSectionServiceTest

/**
* Copyright (C) 2011  JTalks.org Team
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/
package org.jtalks.jcommune.service.transactional;

import org.jtalks.common.model.entity.Branch;
import org.jtalks.common.model.entity.Section;
import org.jtalks.jcommune.model.dao.PostDao;
import org.jtalks.jcommune.model.dao.SectionDao;
import org.jtalks.jcommune.model.dao.TopicDao;
import org.jtalks.jcommune.model.entity.*;
import org.jtalks.jcommune.service.BranchService;
import org.jtalks.jcommune.service.SectionService;
import org.jtalks.jcommune.service.UserService;
import org.jtalks.jcommune.plugin.api.exceptions.NotFoundException;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.springframework.security.access.AccessDeniedException;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import static org.mockito.Mockito.*;
import static org.mockito.MockitoAnnotations.initMocks;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;

/**
* This test class is intended to test all topic-related forum branch facilities
*
* @author Max Malakhov
*/
public class TransactionalSectionServiceTest {
    final long SECTION_ID = 1L;
    final long TOPIC_ID = 1L;
    final String SECTION_NAME = "section name";
    final String USER_NAME = "user name";
    final String USER_PASSWORD = "password";
    final String EMAIL = "test@email.test";

    private SectionDao sectionDao;
    private BranchService branchService;
    private UserService userService;
    private SectionService sectionService;
    private TopicDao topicDao;

    @Mock
    private PostDao postDao;

    @BeforeMethod
    public void setUp() throws Exception {
        initMocks(this);
        sectionDao = mock(SectionDao.class);
        branchService = mock(BranchService.class);
        userService = mock(UserService.class);
        topicDao = mock(TopicDao.class);

        sectionService = new TransactionalSectionService(sectionDao, branchService, userService, topicDao, postDao);
    }

    @Test
    public void testGet() throws NotFoundException {
        Section expectedSection = new Section(SECTION_NAME);
        when(sectionDao.isExist(SECTION_ID)).thenReturn(true);
        when(sectionDao.get(SECTION_ID)).thenReturn(expectedSection);

        Section section = sectionService.get(SECTION_ID);

        assertEquals(section, expectedSection, "Sections aren't equals");
        verify(sectionDao).isExist(SECTION_ID);
        verify(sectionDao).get(SECTION_ID);
    }

    @Test(expectedExceptions = {NotFoundException.class})
    public void testGetIncorrectId() throws NotFoundException {
        when(sectionDao.isExist(SECTION_ID)).thenReturn(false);

        sectionService.get(SECTION_ID);
    }

    @Test
    public void testGetAll() {
        List<Section> expectedSectionList = new ArrayList<>();
        expectedSectionList.add(new Section(SECTION_NAME));
        when(sectionDao.getAll()).thenReturn(expectedSectionList);

        List<Section> actualSectionList = sectionService.getAll();

        assertEquals(actualSectionList, expectedSectionList);
        verify(sectionDao).getAll();
    }

    @Test
    public void getAllAvailableSections() {
        JCUser user = ObjectsFactory.getDefaultUser();
        Topic topic = ObjectsFactory.getTopic(user, 1);
        org.jtalks.jcommune.model.entity.Branch topicBranch = ObjectsFactory.getDefaultBranchWithTopic(100L, topic);
        Section sectionWithAvaliableBranches = ObjectsFactory.getDefaultSectionWithBranches();

        List<Section> allSections = new ArrayList<>();
        allSections.add(ObjectsFactory.getDefaultSection());
        allSections.add(ObjectsFactory.getDefaultSectionWithBranch(topicBranch));
        allSections.add(sectionWithAvaliableBranches);

        List<Section> expectedSections = new ArrayList<>();
        expectedSections.add(sectionWithAvaliableBranches);

        when(sectionDao.getAll()).thenReturn(allSections);
        when(topicDao.get(TOPIC_ID)).thenReturn(topic);
        when(userService.getCurrentUser()).thenReturn(user);
        when(sectionDao.getCountAvailableBranches(user, new ArrayList<Branch>())).thenReturn(0L);
        when(sectionDao.getCountAvailableBranches(user, sectionWithAvaliableBranches.getBranches())).thenReturn(3L);

        List<Section> actualSectionList = sectionService.getAllAvailableSections(TOPIC_ID);
        assertEquals(actualSectionList, expectedSections, "Should return all available sections.");
    }
   
    @Test
    public void testPrepareSectionsForView() {
        List<Section> sections = Arrays.asList(new Section(SECTION_NAME), new Section(SECTION_NAME));
        int sectionSize = sections.size();
       
        sectionService.prepareSectionsForView(sections);

        verify(branchService, Mockito.times(sectionSize))
            .fillStatisticInfo(Mockito.anyListOf(Branch.class));
    }
   
    @Test
    public void testDeleteAllBranches() throws NotFoundException {
        Section expectedSection = new Section(SECTION_NAME);
        expectedSection.addOrUpdateBranch(new Branch(null, null));
        expectedSection.addOrUpdateBranch(new Branch(null, null));
       
        when(sectionDao.isExist(SECTION_ID)).thenReturn(true);
        when(sectionDao.get(SECTION_ID)).thenReturn(expectedSection);
       
        Section actualSection = sectionService.deleteAllTopicsInSection(SECTION_ID);
       
        assertEquals(actualSection, expectedSection, "Sections aren't equals");
        verify(sectionDao).isExist(SECTION_ID);
        verify(sectionDao).get(SECTION_ID);
    }
   
    @Test
    public void testDeleteAllBranchesInEmptySection() throws NotFoundException {
        Section expectedSection = new Section(SECTION_NAME);
       
        when(sectionDao.isExist(SECTION_ID)).thenReturn(true);
        when(sectionDao.get(SECTION_ID)).thenReturn(expectedSection);
       
        Section actualSection = sectionService.deleteAllTopicsInSection(SECTION_ID);
       
        assertEquals(actualSection, expectedSection, "Sections aren't equals");
        verify(sectionDao).isExist(SECTION_ID);
        verify(sectionDao).get(SECTION_ID);
    }
   
    @Test(expectedExceptions=NotFoundException.class)
    public void testDeleteAllBranchesWithIncorrectId() throws NotFoundException {
        when(sectionDao.isExist(SECTION_ID)).thenReturn(false);

        sectionService.deleteAllTopicsInSection(SECTION_ID);
        assertTrue(false);
    }

    @Test
    public void testDeleteAllTopics() throws NotFoundException {
        Section expectedSection = new Section(SECTION_NAME);
        expectedSection.setId(SECTION_ID);
        when(sectionDao.getAll()).thenReturn(Collections.singletonList(expectedSection));
        when(sectionDao.isExist(SECTION_ID)).thenReturn(true);
        when(sectionDao.get(SECTION_ID)).thenReturn(expectedSection);

        sectionService.deleteAllTopicsInForum();

        verify(sectionDao).isExist(SECTION_ID);
        verify(sectionDao).get(SECTION_ID);
    }

    @Test(expectedExceptions=NotFoundException.class)
    public void testDeleteAllTopicsWithIncorrectId() throws NotFoundException {
        Section section = new Section(SECTION_NAME);
        section.setId(SECTION_ID);
        when(sectionDao.isExist(SECTION_ID)).thenReturn(false);
        when(sectionDao.getAll()).thenReturn(Collections.singletonList(section));

        sectionService.deleteAllTopicsInForum();
    }

    @Test(expectedExceptions = AccessDeniedException.class)
    public void testCheckAccessForVisibleException()throws AccessDeniedException{
        JCUser user = new JCUser(USER_NAME, EMAIL, USER_PASSWORD);
        List<Branch> branches = new ArrayList<>();
        Section section = new Section(SECTION_NAME);
        when(userService.getCurrentUser()).thenReturn(user);
        when(sectionDao.getCountAvailableBranches(user,branches)).thenReturn(0L);

        sectionService.ifSectionIsVisible(section);
    }

    @Test
    public void testCheckAccessForVisibleNoException()throws AccessDeniedException{
        JCUser user = new JCUser(USER_NAME, EMAIL, USER_PASSWORD);
        List<Branch> branches = new ArrayList<>();
        Section section = new Section(SECTION_NAME);
        when(userService.getCurrentUser()).thenReturn(user);
        when(sectionDao.getCountAvailableBranches(user,branches)).thenReturn(1L);

        sectionService.ifSectionIsVisible(section);
    }

    @Test
    public void getLastPostsForSectionShouldReturnEmptyListWhenThereIsNoPostsInTheSection() {
        final int count = 42;
        JCUser user = new JCUser(USER_NAME, EMAIL, USER_PASSWORD);
        Section section = new Section(SECTION_NAME);
        when(userService.getCurrentUser()).thenReturn(user);
        when(sectionDao.getAvailableBranchIds(eq(user), anyList())).thenReturn(Collections.<Long>emptyList());
        when(postDao.getLastPostsFor(anyList(), eq(count))).thenReturn(Collections.<Post>emptyList());

        List<Post> posts = sectionService.getLastPostsForSection(section, count);

        assertEquals(posts.size(), 0);
    }

    @Test
    public void getLastPostsForSectionShouldReturnListOfTheLatestPosts() {
        final int count = 42;
        JCUser user = new JCUser(USER_NAME, EMAIL, USER_PASSWORD);
        Section section = new Section(SECTION_NAME);
        Branch branch1 = new Branch("my branch", "1");
        branch1.setId(42);
        Branch branch2 = new Branch("my branch2", "2");
        branch2.setId(43);
        section.addOrUpdateBranch(branch1);
        section.addOrUpdateBranch(branch2);
        when(userService.getCurrentUser()).thenReturn(user);
        List<Long> branchIds = Arrays.asList(branch1.getId());
        when(sectionDao.getAvailableBranchIds(user, section.getBranches())).thenReturn(branchIds);

        List<Post> posts = new ArrayList<>();
        posts.add(new Post(user, "post1"));
        posts.add(new Post(user, "post2"));

        when(postDao.getLastPostsFor(branchIds, count)).thenReturn(posts);
        List<Post> actualPosts = sectionService.getLastPostsForSection(section, count);

        assertEquals(actualPosts.size(), posts.size());
    }
}
TOP

Related Classes of org.jtalks.jcommune.service.transactional.TransactionalSectionServiceTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.