aboutsummaryrefslogblamecommitdiff
path: root/juick-rss/src/test/java/com/juick/rss/tests/RSSTests.java
blob: 7c35677153b0cfdb3b243f69e6e2190e9e48ad16 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17















                                                                           



                            



                                                       
                                                     






                                                            













                                                                                      
                                                                                  







                                       
                                                                           
































                                                                  
                                                                                                                     



                                                                                  
                                                                                














































                                                                                          
                                                    





                                                                       
                                                                                                     
     
/*
 * Copyright (C) 2008-2017, Juick
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program 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 Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package com.juick.rss.tests;

import com.juick.Message;
import com.juick.Tag;
import com.juick.User;
import com.juick.rss.configuration.RssAppConfiguration;
import com.juick.rss.configuration.RssMvcConfiguration;
import com.juick.service.MessagesService;
import com.juick.service.TagService;
import com.juick.service.UserService;
import org.apache.commons.text.RandomStringGenerator;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.Primary;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

import javax.inject.Inject;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;

/**
 * Created by vitalyster on 13.12.2016.
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@WebAppConfiguration
public class RSSTests {
    @Configuration
    @Import(value = {RssMvcConfiguration.class, RssAppConfiguration.class})
    static class Config {
        @Bean
        @Primary
        MessagesService messagesService() {
            return Mockito.mock(MessagesService.class);
        }

        @Bean
        @Primary
        UserService userService() {
            return Mockito.mock(UserService.class);
        }

        @Bean
        @Primary
        TagService tagService() {
            return Mockito.mock(TagService.class);
        }
    }

    private MockMvc mockMvc;
    @Inject
    private WebApplicationContext webApplicationContext;

    @Inject
    private MessagesService messagesService;
    @Inject
    private UserService userService;
    @Inject
    private TagService tagService;

    private User ugnich, freefd;
    String ugnichName, ugnichPassword, freefdName, freefdPassword;

    final static RandomStringGenerator generator = new RandomStringGenerator.Builder().withinRange('a', 'z').build();

    private static Message getMessage(final User user, final String messageText) {
        Message msg = new Message();

        msg.setMid(1);
        msg.setUser(user);
        msg.setText(messageText == null ? generator.generate(24) : messageText);
        msg.setTags(Collections.singletonList(new Tag(generator.generate(4))));

        return msg;
    }

    private static User getUser(final int uid, final String name, final String password) {
        User user = new User();

        user.setName(name);
        user.setUid(uid);
        user.setCredentials(password);
        user.setBanned(false);

        return user;
    }

    @Before
    public void setUp() {
        mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
                .dispatchOptions(true)
                .build();
        ugnichName = "ugnich";
        ugnichPassword = "MyPassw0rd!";
        freefdName = "freefd";
        freefdPassword = "MyPassw0rd!";

        ugnich = getUser(1, ugnichName, ugnichPassword);
        freefd = getUser(2, freefdName, freefdPassword);

        List<String> users = new ArrayList<>(2);
        users.add(ugnichName);
        users.add(freefdName);

        when(userService.getUsersByName(users))
                .thenReturn(Arrays.asList(ugnich, freefd));
        when(userService.getUserByName(ugnichName))
                .thenReturn(ugnich);
        when(userService.getFullyUserByName(ugnichName))
                .thenReturn(ugnich);
        when(userService.getUserByName(null))
                .thenReturn(new User());
    }

    @Test
    public void lastMessagesTest() throws Exception {
        String msgText = "Привет, я - Угнич";

        Message msg = getMessage(ugnich, msgText);

        when(messagesService.getMyFeed(1, 0, false))
                .thenReturn(Collections.singletonList(1));
        when(messagesService.getMessages(Collections.singletonList(1)))
                .thenReturn(Collections.singletonList(msg));

        mockMvc.perform(
                get("/"))
                .andExpect(status().isOk())
                .andExpect(content().contentType("application/rss+xml"))
                .andExpect(xpath("/rss/channel/description").string("The latest messages at Juick"));
    }
}