Skip to content

Commit 901af4e

Browse files
committed
Add tests
AI-Session-Id: e0a63942-b7e7-4fb6-a156-db594d222e39 AI-Tool: claude-code AI-Model: unknown
1 parent 94402e0 commit 901af4e

1 file changed

Lines changed: 112 additions & 0 deletions

File tree

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
package com.crapi.service;
2+
3+
import com.crapi.constant.TestUsers;
4+
import com.crapi.entity.User;
5+
import com.crapi.enums.ERole;
6+
import com.crapi.model.SeedUser;
7+
import com.crapi.repository.UserRepository;
8+
import java.time.LocalDate;
9+
import java.util.ArrayList;
10+
import org.junit.Test;
11+
import org.junit.jupiter.api.Assertions;
12+
import org.junit.runner.RunWith;
13+
import org.mockito.InjectMocks;
14+
import org.mockito.Mock;
15+
import org.mockito.Mockito;
16+
import org.mockito.junit.MockitoJUnitRunner;
17+
import org.springframework.security.crypto.password.PasswordEncoder;
18+
19+
@RunWith(MockitoJUnitRunner.class)
20+
public class UserResetJobTest {
21+
22+
private static final LocalDate DEFAULT_PASSWORD_DATE = LocalDate.of(2000, 1, 1);
23+
24+
@InjectMocks private UserResetJob userResetJob;
25+
26+
@Mock private UserRepository userRepository;
27+
28+
@Mock private PasswordEncoder encoder;
29+
30+
@Test
31+
public void resetSkipsWhenPasswordNotChanged() {
32+
ArrayList<SeedUser> testUsers = new TestUsers().getUsers();
33+
for (SeedUser seedUser : testUsers) {
34+
User user = new User(seedUser.getEmail(), seedUser.getNumber(), "encoded", seedUser.getRole());
35+
user.setPasswordUpdatedAt(DEFAULT_PASSWORD_DATE);
36+
Mockito.when(userRepository.findByEmail(seedUser.getEmail())).thenReturn(user);
37+
}
38+
39+
userResetJob.resetTestUserCredsIfChanged();
40+
41+
Mockito.verify(userRepository, Mockito.never()).saveAndFlush(Mockito.any());
42+
}
43+
44+
@Test
45+
public void resetResetsWhenPasswordChanged() {
46+
ArrayList<SeedUser> testUsers = new TestUsers().getUsers();
47+
SeedUser firstUser = testUsers.get(0);
48+
49+
// First user has changed password (non-default date)
50+
User changedUser = new User(firstUser.getEmail(), firstUser.getNumber(), "encoded", firstUser.getRole());
51+
changedUser.setPasswordUpdatedAt(LocalDate.now());
52+
Mockito.when(userRepository.findByEmail(firstUser.getEmail())).thenReturn(changedUser);
53+
Mockito.when(encoder.encode(firstUser.getPassword())).thenReturn("resetEncoded");
54+
Mockito.when(userRepository.saveAndFlush(Mockito.any())).thenReturn(changedUser);
55+
56+
// Remaining users have default date
57+
for (int i = 1; i < testUsers.size(); i++) {
58+
SeedUser seedUser = testUsers.get(i);
59+
User user = new User(seedUser.getEmail(), seedUser.getNumber(), "encoded", seedUser.getRole());
60+
user.setPasswordUpdatedAt(DEFAULT_PASSWORD_DATE);
61+
Mockito.when(userRepository.findByEmail(seedUser.getEmail())).thenReturn(user);
62+
}
63+
64+
userResetJob.resetTestUserCredsIfChanged();
65+
66+
Mockito.verify(userRepository, Mockito.times(1)).saveAndFlush(Mockito.any());
67+
Assertions.assertEquals("resetEncoded", changedUser.getPassword());
68+
Assertions.assertEquals(DEFAULT_PASSWORD_DATE, changedUser.getPasswordUpdatedAt());
69+
}
70+
71+
@Test
72+
public void resetResetsAllWhenAllPasswordsChanged() {
73+
ArrayList<SeedUser> testUsers = new TestUsers().getUsers();
74+
for (SeedUser seedUser : testUsers) {
75+
User user = new User(seedUser.getEmail(), seedUser.getNumber(), "encoded", seedUser.getRole());
76+
user.setPasswordUpdatedAt(LocalDate.now());
77+
Mockito.when(userRepository.findByEmail(seedUser.getEmail())).thenReturn(user);
78+
Mockito.when(userRepository.saveAndFlush(Mockito.any())).thenReturn(user);
79+
}
80+
Mockito.when(encoder.encode(Mockito.anyString())).thenReturn("resetEncoded");
81+
82+
userResetJob.resetTestUserCredsIfChanged();
83+
84+
Mockito.verify(userRepository, Mockito.times(testUsers.size())).saveAndFlush(Mockito.any());
85+
}
86+
87+
@Test
88+
public void resetSkipsNullUser() {
89+
ArrayList<SeedUser> testUsers = new TestUsers().getUsers();
90+
for (SeedUser seedUser : testUsers) {
91+
Mockito.when(userRepository.findByEmail(seedUser.getEmail())).thenReturn(null);
92+
}
93+
94+
userResetJob.resetTestUserCredsIfChanged();
95+
96+
Mockito.verify(userRepository, Mockito.never()).saveAndFlush(Mockito.any());
97+
}
98+
99+
@Test
100+
public void resetSkipsWhenPasswordUpdatedAtNull() {
101+
ArrayList<SeedUser> testUsers = new TestUsers().getUsers();
102+
for (SeedUser seedUser : testUsers) {
103+
User user = new User(seedUser.getEmail(), seedUser.getNumber(), "encoded", seedUser.getRole());
104+
user.setPasswordUpdatedAt(null);
105+
Mockito.when(userRepository.findByEmail(seedUser.getEmail())).thenReturn(user);
106+
}
107+
108+
userResetJob.resetTestUserCredsIfChanged();
109+
110+
Mockito.verify(userRepository, Mockito.never()).saveAndFlush(Mockito.any());
111+
}
112+
}

0 commit comments

Comments
 (0)