summaryrefslogtreecommitdiffhomepage
path: root/backend/src/test/java/com/blog/web/services/ArticleServiceTests.java
blob: d55516a43fda5fb9b4e637347788ffadf5eaba7b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package com.blog.web.services;

import com.blog.web.dto.ArticleDto;
import com.blog.web.models.Article;
import com.blog.web.models.UserEntity;
import com.blog.web.repository.ArticleRepository;
import com.blog.web.repository.UserRepository;
import com.blog.web.security.SecurityUtil;
import com.blog.web.services.impl.ArticleServiceImpl;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.boot.jdbc.EmbeddedDatabaseConnection;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.security.test.context.support.WithMockUser;

import java.time.LocalDateTime;
import java.util.Optional;

import static org.mockito.AdditionalAnswers.returnsFirstArg;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.when;

//@SpringBootTest
@AutoConfigureTestDatabase(connection = EmbeddedDatabaseConnection.H2)
@ExtendWith(MockitoExtension.class)
public class ArticleServiceTests {

    @Mock
    private ArticleRepository articleRepository;
    @Mock
    private UserRepository userRepository;
    @InjectMocks
    private ArticleServiceImpl articleService;

    @Test
    @WithMockUser(username="test", password="blah")
    public void ArticleService_SaveArticle_ReturnsArticle() {
        //RegistrationDto userDto = new RegistrationDto(
        //        "test",
        //        "[email protected]",
        //        "blah"
        //);
        //userService.saveUser(userDto);
        UserEntity user = new UserEntity();
        user.setUsername("test");
        user.setEmail("[email protected]");
        user.setPassword("blah");
        //UserEntity user = userService.findByUsername("test");
        final ArticleDto articleDto = new ArticleDto(
                1,
                "Title",
                "https://duckduckgo.com",
                "Content",
                user,
                LocalDateTime.now(),
                LocalDateTime.now()
        );

        when(userRepository.findByUsername(anyString())).thenReturn(Optional.of(user));
        when(articleRepository.save(any(Article.class))).then(returnsFirstArg());
        //when(SecurityUtil.getSessionUser()).thenReturn(user.getUsername());
        try(MockedStatic<SecurityUtil> utilities = Mockito.mockStatic(SecurityUtil.class)) {
            utilities.when(SecurityUtil::getSessionUser).thenReturn(user.getUsername());
            Assertions.assertEquals(user.getUsername(), SecurityUtil.getSessionUser());
            Article article = articleService.saveArticle(articleDto).orElse(null);

            Assertions.assertNotNull(article);
        }
    }
}