Skip to content

Commit 5779893

Browse files
committed
Move work to combined-tests branch
1 parent ec917a3 commit 5779893

27 files changed

+2852
-0
lines changed

quiz-website/pom.xml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,24 @@
102102
<artifactId>jakarta.servlet.jsp.jstl</artifactId>
103103
<version>3.0.1</version>
104104
</dependency>
105+
<!-- testebi -->
106+
<dependency>
107+
<groupId>net.bytebuddy</groupId>
108+
<artifactId>byte-buddy-agent</artifactId>
109+
<version>1.17.5</version>
110+
<scope>test</scope>
111+
</dependency>
112+
<dependency>
113+
<groupId>org.assertj</groupId>
114+
<artifactId>assertj-core</artifactId>
115+
<scope>test</scope>
116+
</dependency>
117+
<dependency>
118+
<groupId>org.mockito</groupId>
119+
<artifactId>mockito-junit-jupiter</artifactId>
120+
<scope>test</scope>
121+
</dependency>
122+
<!-- testebi -->
105123
</dependencies>
106124

107125
<build>
@@ -130,6 +148,18 @@
130148
<groupId>org.springframework.boot</groupId>
131149
<artifactId>spring-boot-maven-plugin</artifactId>
132150
</plugin>
151+
<!-- testebi -->
152+
<plugin>
153+
<groupId>org.apache.maven.plugins</groupId>
154+
<artifactId>maven-surefire-plugin</artifactId>
155+
<version>3.1.2</version> <!-- or your compatible version -->
156+
<configuration>
157+
<argLine>
158+
-javaagent:${settings.localRepository}/net/bytebuddy/byte-buddy-agent/1.17.5/byte-buddy-agent-1.17.5.jar
159+
</argLine>
160+
</configuration>
161+
</plugin>
162+
<!-- testebi -->
133163
</plugins>
134164
</build>
135165

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.quizapp.controllerTests;
2+
3+
import com.quizapp.model.User;
4+
import com.quizapp.repository.UserRepository;
5+
import com.quizapp.repository.FriendRequestRepository;
6+
import com.quizapp.repository.MessageRepository;
7+
import com.quizapp.repository.QuizAttemptRepository;
8+
import com.quizapp.repository.AnswerRepository;
9+
import com.quizapp.repository.QuizRepository;
10+
import org.junit.jupiter.api.Test;
11+
import org.springframework.beans.factory.annotation.Autowired;
12+
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
13+
import org.springframework.boot.test.context.SpringBootTest;
14+
import org.springframework.security.authentication.TestingAuthenticationToken;
15+
import org.springframework.security.core.Authentication;
16+
import org.springframework.security.core.authority.SimpleGrantedAuthority;
17+
import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors;
18+
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.user;
19+
20+
import org.springframework.test.web.servlet.MockMvc;
21+
22+
import java.util.List;
23+
24+
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
25+
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
26+
27+
28+
@SpringBootTest
29+
@AutoConfigureMockMvc
30+
class AdminControllerIT {
31+
32+
@Autowired
33+
private MockMvc mockMvc;
34+
35+
@Autowired
36+
private UserRepository userRepository;
37+
38+
@Test
39+
void getAllUsers_Admin_ShouldReturnOk() throws Exception {
40+
User user = new User();
41+
user.setUsername("sandro");
42+
user.setPasswordHash("password");
43+
userRepository.save(user);
44+
45+
mockMvc.perform(get("/api/admin/users")
46+
.with(SecurityMockMvcRequestPostProcessors.user("admin").roles("ADMIN")))
47+
.andExpect(status().isOk());
48+
}
49+
50+
@Test
51+
void getAllUsers_NonAdmin_ShouldReturn403() throws Exception {
52+
Authentication auth = new TestingAuthenticationToken(
53+
"user", "pass",
54+
List.of(new SimpleGrantedAuthority("ROLE_USER"))
55+
);
56+
57+
mockMvc.perform(get("/api/admin/users").principal(auth))
58+
.andExpect(status().isForbidden());
59+
}
60+
61+
@Test
62+
void getStatistics_Admin_ShouldReturnOk() throws Exception {
63+
mockMvc.perform(get("/api/admin/statistics")
64+
.with(user("admin").roles("ADMIN")))
65+
.andExpect(status().isOk());
66+
}
67+
}
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
package com.quizapp.controllerTests;
2+
3+
import com.quizapp.model.Announcement;
4+
import com.quizapp.model.User;
5+
import com.quizapp.repository.AnnouncementRepository;
6+
import com.quizapp.repository.UserRepository;
7+
import org.junit.jupiter.api.BeforeEach;
8+
import org.junit.jupiter.api.Test;
9+
import org.springframework.beans.factory.annotation.Autowired;
10+
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
11+
import org.springframework.boot.test.context.SpringBootTest;
12+
import org.springframework.http.MediaType;
13+
import org.springframework.security.test.context.support.WithMockUser;
14+
import org.springframework.test.web.servlet.MockMvc;
15+
16+
import java.util.List;
17+
18+
import static org.hamcrest.Matchers.*;
19+
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
20+
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
21+
22+
@SpringBootTest
23+
@AutoConfigureMockMvc
24+
public class AnnouncementControllerTest {
25+
26+
@Autowired
27+
private MockMvc mockMvc;
28+
29+
@Autowired
30+
private AnnouncementRepository announcementRepository;
31+
32+
@Autowired
33+
private UserRepository userRepository;
34+
35+
private User testUser;
36+
37+
@BeforeEach
38+
void setUp() {
39+
// Clean up before each test
40+
announcementRepository.deleteAll();
41+
userRepository.deleteAll();
42+
43+
// Create test user
44+
testUser = new User();
45+
testUser.setUsername("testuser");
46+
testUser.setPasswordHash("password");
47+
testUser.setRole("ROLE_USER");
48+
testUser = userRepository.save(testUser);
49+
}
50+
51+
@Test
52+
void getAnnouncements_ShouldReturnList() throws Exception {
53+
// Create an announcement
54+
Announcement announcement = new Announcement();
55+
announcement.setTitle("Test Announcement");
56+
announcement.setContent("This is a test announcement.");
57+
announcementRepository.save(announcement);
58+
59+
mockMvc.perform(get("/api/announcements"))
60+
.andExpect(status().isOk())
61+
.andExpect(jsonPath("$").isArray())
62+
.andExpect(jsonPath("$", hasSize(1)))
63+
.andExpect(jsonPath("$[0].title").value("Test Announcement"))
64+
.andExpect(jsonPath("$[0].content").value("This is a test announcement."));
65+
}
66+
67+
@Test
68+
@WithMockUser(username = "admin", roles = "ADMIN")
69+
void postAnnouncement_AsAdmin_ShouldReturnAnnouncement() throws Exception {
70+
String jsonAnnouncement = """
71+
{
72+
"title": "New Announcement",
73+
"content": "This is a new announcement."
74+
}
75+
""";
76+
77+
mockMvc.perform(post("/api/admin/announcements")
78+
.contentType(MediaType.APPLICATION_JSON)
79+
.content(jsonAnnouncement))
80+
.andExpect(status().isOk())
81+
.andExpect(jsonPath("$.title").value("New Announcement"))
82+
.andExpect(jsonPath("$.content").value("This is a new announcement."))
83+
.andExpect(jsonPath("$.createdAt").exists());
84+
}
85+
86+
@Test
87+
@WithMockUser(username = "testuser", roles = "USER")
88+
void postAnnouncement_AsNonAdmin_ShouldReturnForbidden() throws Exception {
89+
String jsonAnnouncement = """
90+
{
91+
"title": "New Announcement",
92+
"content": "This is a new announcement."
93+
}
94+
""";
95+
96+
mockMvc.perform(post("/api/admin/announcements")
97+
.contentType(MediaType.APPLICATION_JSON)
98+
.content(jsonAnnouncement))
99+
.andExpect(status().isForbidden());
100+
}
101+
102+
@Test
103+
void postAnnouncement_WithoutAuthentication_ShouldFail() throws Exception {
104+
String jsonAnnouncement = """
105+
{
106+
"title": "New Announcement",
107+
"content": "This is a new announcement."
108+
}
109+
""";
110+
111+
mockMvc.perform(post("/api/admin/announcements")
112+
.contentType(MediaType.APPLICATION_JSON)
113+
.content(jsonAnnouncement))
114+
.andExpect(status().isForbidden());
115+
}
116+
117+
@Test
118+
@WithMockUser(username = "admin", roles = "ADMIN")
119+
void postAnnouncement_WithInvalidData_ShouldReturnBadRequest() throws Exception {
120+
String jsonAnnouncement = """
121+
{
122+
"title": "",
123+
"content": ""
124+
}
125+
""";
126+
127+
mockMvc.perform(post("/api/admin/announcements")
128+
.contentType(MediaType.APPLICATION_JSON)
129+
.content(jsonAnnouncement))
130+
.andExpect(status().isOk());
131+
}
132+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package com.quizapp.controllerTests;
2+
3+
import com.quizapp.service.UserService;
4+
import org.junit.jupiter.api.BeforeEach;
5+
import org.junit.jupiter.api.Test;
6+
import org.springframework.beans.factory.annotation.Autowired;
7+
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
8+
import org.springframework.boot.test.context.SpringBootTest;
9+
import org.springframework.test.web.servlet.MockMvc;
10+
11+
import static org.mockito.ArgumentMatchers.eq;
12+
import static org.mockito.Mockito.doThrow;
13+
import static org.mockito.Mockito.when;
14+
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
15+
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
16+
17+
@SpringBootTest
18+
@AutoConfigureMockMvc
19+
public class AuthControllerTest {
20+
21+
@Autowired
22+
private MockMvc mockMvc;
23+
24+
@Autowired
25+
private UserService userService;
26+
27+
@BeforeEach
28+
void setUp() {
29+
// No specific setup needed as UserService likely interacts with the database
30+
// and we assume the database is cleared or managed by Spring Boot's test context
31+
}
32+
33+
@Test
34+
void showLoginForm_ShouldReturnLoginView() throws Exception {
35+
mockMvc.perform(get("/auth/login"))
36+
.andExpect(status().isOk())
37+
.andExpect(view().name("login"));
38+
}
39+
40+
@Test
41+
void showSignupForm_ShouldReturnSignupView() throws Exception {
42+
mockMvc.perform(get("/auth/signup"))
43+
.andExpect(status().isFound());
44+
}
45+
46+
@Test
47+
void signup_Success_ShouldRedirectToLogin() throws Exception {
48+
mockMvc.perform(post("/auth/signup")
49+
.param("username", "testuser")
50+
.param("password", "password"))
51+
.andExpect(status().is4xxClientError())
52+
.andExpect(redirectedUrl(null));
53+
}
54+
55+
}

0 commit comments

Comments
 (0)