Testcases (and failing test fixes) of TaskgroupService
Some checks failed
Java CI with Maven / build (push) Failing after 39s
Some checks failed
Java CI with Maven / build (push) Failing after 39s
This commit is contained in:
parent
2b9e821cf2
commit
542e04659b
@ -4,10 +4,12 @@
|
||||
<option name="autoReloadType" value="SELECTIVE" />
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="3a869f59-290a-4ab2-b036-a878ce801bc4" name="Changes" comment="Initialize Testing of Testservice">
|
||||
<change afterPath="$PROJECT_DIR$/src/test/resources/userRepisotoryTestEntries.sql" afterDir="false" />
|
||||
<list default="true" id="3a869f59-290a-4ab2-b036-a878ce801bc4" name="Changes" comment="Use @Sql instead of persit()">
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/test/java/core/users/UserRepositoryTests.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/test/java/core/users/UserRepositoryTests.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/main/java/core/api/models/timemanager/taskgroup/TaskgroupFieldInfo.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/core/api/models/timemanager/taskgroup/TaskgroupFieldInfo.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/main/java/core/entities/timemanager/Taskgroup.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/core/entities/timemanager/Taskgroup.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/main/java/core/services/TaskgroupService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/core/services/TaskgroupService.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/test/java/core/taskgroups/TaskgroupServiceTest.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/test/java/core/taskgroups/TaskgroupServiceTest.java" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
@ -86,82 +88,82 @@
|
||||
<recent name="$PROJECT_DIR$/src/test/java/core/taskgroups" />
|
||||
</key>
|
||||
</component>
|
||||
<component name="RunManager" selected="JUnit.UserRepositoryTests.test_countUsers">
|
||||
<configuration name="UserRepositoryTests.test_countUsers" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
||||
<component name="RunManager" selected="JUnit.TaskgroupServiceTest.deleteTaskgroupByUser">
|
||||
<configuration name="TaskgroupServiceTest.addTaskgroup" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
||||
<module name="demo" />
|
||||
<extension name="coverage">
|
||||
<pattern>
|
||||
<option name="PATTERN" value="core.users.*" />
|
||||
<option name="PATTERN" value="core.taskgroups.*" />
|
||||
<option name="ENABLED" value="true" />
|
||||
</pattern>
|
||||
</extension>
|
||||
<option name="PACKAGE_NAME" value="core.users" />
|
||||
<option name="MAIN_CLASS_NAME" value="core.users.UserRepositoryTests" />
|
||||
<option name="METHOD_NAME" value="test_countUsers" />
|
||||
<option name="PACKAGE_NAME" value="core.taskgroups" />
|
||||
<option name="MAIN_CLASS_NAME" value="core.taskgroups.TaskgroupServiceTest" />
|
||||
<option name="METHOD_NAME" value="addTaskgroup" />
|
||||
<option name="TEST_OBJECT" value="method" />
|
||||
<method v="2">
|
||||
<option name="Make" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="UserRepositoryTests.test_deleteUserByName" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
||||
<configuration name="TaskgroupServiceTest.deleteTaskgroup" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
||||
<module name="demo" />
|
||||
<extension name="coverage">
|
||||
<pattern>
|
||||
<option name="PATTERN" value="core.users.*" />
|
||||
<option name="PATTERN" value="core.taskgroups.*" />
|
||||
<option name="ENABLED" value="true" />
|
||||
</pattern>
|
||||
</extension>
|
||||
<option name="PACKAGE_NAME" value="core.users" />
|
||||
<option name="MAIN_CLASS_NAME" value="core.users.UserRepositoryTests" />
|
||||
<option name="METHOD_NAME" value="test_deleteUserByName" />
|
||||
<option name="PACKAGE_NAME" value="core.taskgroups" />
|
||||
<option name="MAIN_CLASS_NAME" value="core.taskgroups.TaskgroupServiceTest" />
|
||||
<option name="METHOD_NAME" value="deleteTaskgroup" />
|
||||
<option name="TEST_OBJECT" value="method" />
|
||||
<method v="2">
|
||||
<option name="Make" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="UserRepositoryTests.test_existsByMail" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
||||
<configuration name="TaskgroupServiceTest.deleteTaskgroupByUser" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
||||
<module name="demo" />
|
||||
<extension name="coverage">
|
||||
<pattern>
|
||||
<option name="PATTERN" value="core.users.*" />
|
||||
<option name="PATTERN" value="core.taskgroups.*" />
|
||||
<option name="ENABLED" value="true" />
|
||||
</pattern>
|
||||
</extension>
|
||||
<option name="PACKAGE_NAME" value="core.users" />
|
||||
<option name="MAIN_CLASS_NAME" value="core.users.UserRepositoryTests" />
|
||||
<option name="METHOD_NAME" value="test_existsByMail" />
|
||||
<option name="PACKAGE_NAME" value="core.taskgroups" />
|
||||
<option name="MAIN_CLASS_NAME" value="core.taskgroups.TaskgroupServiceTest" />
|
||||
<option name="METHOD_NAME" value="deleteTaskgroupByUser" />
|
||||
<option name="TEST_OBJECT" value="method" />
|
||||
<method v="2">
|
||||
<option name="Make" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="UserRepositoryTests.test_existsByUsername" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
||||
<configuration name="TaskgroupServiceTest.editTaskgroup" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
||||
<module name="demo" />
|
||||
<extension name="coverage">
|
||||
<pattern>
|
||||
<option name="PATTERN" value="core.users.*" />
|
||||
<option name="PATTERN" value="core.taskgroups.*" />
|
||||
<option name="ENABLED" value="true" />
|
||||
</pattern>
|
||||
</extension>
|
||||
<option name="PACKAGE_NAME" value="core.users" />
|
||||
<option name="MAIN_CLASS_NAME" value="core.users.UserRepositoryTests" />
|
||||
<option name="METHOD_NAME" value="test_existsByUsername" />
|
||||
<option name="PACKAGE_NAME" value="core.taskgroups" />
|
||||
<option name="MAIN_CLASS_NAME" value="core.taskgroups.TaskgroupServiceTest" />
|
||||
<option name="METHOD_NAME" value="editTaskgroup" />
|
||||
<option name="TEST_OBJECT" value="method" />
|
||||
<method v="2">
|
||||
<option name="Make" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
<configuration name="UserRepositoryTests.test_findByUsername" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
||||
<configuration name="TaskgroupServiceTest.getTopTaskgroupsByUser" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
|
||||
<module name="demo" />
|
||||
<extension name="coverage">
|
||||
<pattern>
|
||||
<option name="PATTERN" value="core.users.*" />
|
||||
<option name="PATTERN" value="core.taskgroups.*" />
|
||||
<option name="ENABLED" value="true" />
|
||||
</pattern>
|
||||
</extension>
|
||||
<option name="PACKAGE_NAME" value="core.users" />
|
||||
<option name="MAIN_CLASS_NAME" value="core.users.UserRepositoryTests" />
|
||||
<option name="METHOD_NAME" value="test_findByUsername" />
|
||||
<option name="PACKAGE_NAME" value="core.taskgroups" />
|
||||
<option name="MAIN_CLASS_NAME" value="core.taskgroups.TaskgroupServiceTest" />
|
||||
<option name="METHOD_NAME" value="getTopTaskgroupsByUser" />
|
||||
<option name="TEST_OBJECT" value="method" />
|
||||
<method v="2">
|
||||
<option name="Make" enabled="true" />
|
||||
@ -176,11 +178,11 @@
|
||||
</configuration>
|
||||
<recent_temporary>
|
||||
<list>
|
||||
<item itemvalue="JUnit.UserRepositoryTests.test_countUsers" />
|
||||
<item itemvalue="JUnit.UserRepositoryTests.test_deleteUserByName" />
|
||||
<item itemvalue="JUnit.UserRepositoryTests.test_existsByUsername" />
|
||||
<item itemvalue="JUnit.UserRepositoryTests.test_existsByMail" />
|
||||
<item itemvalue="JUnit.UserRepositoryTests.test_findByUsername" />
|
||||
<item itemvalue="JUnit.TaskgroupServiceTest.deleteTaskgroupByUser" />
|
||||
<item itemvalue="JUnit.TaskgroupServiceTest.getTopTaskgroupsByUser" />
|
||||
<item itemvalue="JUnit.TaskgroupServiceTest.deleteTaskgroup" />
|
||||
<item itemvalue="JUnit.TaskgroupServiceTest.editTaskgroup" />
|
||||
<item itemvalue="JUnit.TaskgroupServiceTest.addTaskgroup" />
|
||||
</list>
|
||||
</recent_temporary>
|
||||
</component>
|
||||
@ -217,7 +219,8 @@
|
||||
<workItem from="1699460935890" duration="5000" />
|
||||
<workItem from="1699466564154" duration="6646000" />
|
||||
<workItem from="1699473376129" duration="1423000" />
|
||||
<workItem from="1699639316405" duration="6148000" />
|
||||
<workItem from="1699639316405" duration="9267000" />
|
||||
<workItem from="1699684493731" duration="1121000" />
|
||||
</task>
|
||||
<task id="LOCAL-00001" summary="Structure Taskgroups in Hierarchies">
|
||||
<option name="closed" value="true" />
|
||||
@ -443,14 +446,21 @@
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1699645467388</updated>
|
||||
</task>
|
||||
<option name="localTasksCounter" value="29" />
|
||||
<task id="LOCAL-00029" summary="Use @Sql instead of persit()">
|
||||
<option name="closed" value="true" />
|
||||
<created>1699646291964</created>
|
||||
<option name="number" value="00029" />
|
||||
<option name="presentableId" value="LOCAL-00029" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1699646291964</updated>
|
||||
</task>
|
||||
<option name="localTasksCounter" value="30" />
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TypeScriptGeneratedFilesManager">
|
||||
<option name="version" value="3" />
|
||||
</component>
|
||||
<component name="VcsManagerConfiguration">
|
||||
<MESSAGE value="Delete and clear Tasks" />
|
||||
<MESSAGE value="Delete and clear Tasks (Frontend)" />
|
||||
<MESSAGE value="Define Entity BasicTaskSchedule and Taskcontroller" />
|
||||
<MESSAGE value="Delete Schedules" />
|
||||
@ -475,16 +485,12 @@
|
||||
<MESSAGE value="FindAlltasksByUser Test" />
|
||||
<MESSAGE value="Test TaskRepository" />
|
||||
<MESSAGE value="Initialize Testing of Testservice" />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="Initialize Testing of Testservice" />
|
||||
<MESSAGE value="Use @Sql instead of persit()" />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="Use @Sql instead of persit()" />
|
||||
</component>
|
||||
<component name="XDebuggerManager">
|
||||
<breakpoint-manager>
|
||||
<breakpoints>
|
||||
<line-breakpoint enabled="true" type="java-line">
|
||||
<url>file://$PROJECT_DIR$/src/main/java/core/services/TaskgroupService.java</url>
|
||||
<line>52</line>
|
||||
<option name="timeStamp" value="1" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="java-line">
|
||||
<url>file://$PROJECT_DIR$/src/main/java/core/services/TaskScheduleService.java</url>
|
||||
<line>87</line>
|
||||
|
@ -15,6 +15,14 @@ public class TaskgroupFieldInfo {
|
||||
|
||||
private long parentID;
|
||||
|
||||
public TaskgroupFieldInfo(String name, long parentID) {
|
||||
this.name = name;
|
||||
this.parentID = parentID;
|
||||
}
|
||||
|
||||
public TaskgroupFieldInfo() {
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
@ -11,7 +11,7 @@ import java.util.*;
|
||||
public class Taskgroup {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private long taskgroupID;
|
||||
|
||||
@NotBlank
|
||||
|
@ -80,10 +80,6 @@ public class TaskgroupService {
|
||||
taskgroupRepository.delete(taskgroup);
|
||||
}
|
||||
|
||||
public List<Taskgroup> getTaskgroupsByUser(String username) {
|
||||
return taskgroupRepository.findAllByUser(username);
|
||||
}
|
||||
|
||||
public List<Taskgroup> getTopTaskgroupsByUser(String username) {
|
||||
return taskgroupRepository.findAllTopTaskgroupsByUser(username);
|
||||
}
|
||||
|
@ -1,11 +1,14 @@
|
||||
package core.taskgroups;
|
||||
|
||||
import core.api.models.timemanager.taskgroup.TaskgroupFieldInfo;
|
||||
import core.entities.User;
|
||||
import core.entities.timemanager.Task;
|
||||
import core.entities.timemanager.Taskgroup;
|
||||
import core.repositories.UserRepository;
|
||||
import core.repositories.timemanager.TaskgroupRepository;
|
||||
import core.services.PermissionResult;
|
||||
import core.services.ServiceExitCode;
|
||||
import core.services.ServiceResult;
|
||||
import core.services.TaskgroupService;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@ -23,6 +26,9 @@ import org.springframework.test.context.jdbc.Sql;
|
||||
import org.springframework.test.context.jdbc.SqlGroup;
|
||||
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
import java.util.List;
|
||||
import java.util.NoSuchElementException;
|
||||
import java.util.Optional;
|
||||
|
||||
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
|
||||
@ -35,8 +41,11 @@ public class TaskgroupServiceTest {
|
||||
private TaskgroupRepository taskgroupRepository;
|
||||
@Autowired
|
||||
private TaskgroupService taskgroupService;
|
||||
@Autowired
|
||||
private EntityManager entityManager;
|
||||
|
||||
private static final String username = "Testuser1";
|
||||
private static final String username2 = "Testuser2";
|
||||
@Test
|
||||
@SqlGroup({
|
||||
@Sql("classpath:taskgroupRepositoryTestEntries.sql"),
|
||||
@ -65,4 +74,126 @@ public class TaskgroupServiceTest {
|
||||
assertFalse(invalid_user.isHasPermissions());
|
||||
}
|
||||
|
||||
@Test
|
||||
@SqlGroup({
|
||||
@Sql("classpath:taskgroupRepositoryTestEntries.sql"),
|
||||
@Sql("classpath:taskRepositoryEntries.sql")
|
||||
})
|
||||
void addTaskgroup() {
|
||||
TaskgroupFieldInfo taskgroupFieldInfo = new TaskgroupFieldInfo("Taskgroup", -1);
|
||||
//Situation 1: No such user
|
||||
assertThrows(NoSuchElementException.class, () -> taskgroupService.addTaskgroup(taskgroupFieldInfo, "Rotzbakke"));
|
||||
|
||||
//Situation 2: Taskgroup already exists
|
||||
Taskgroup taskgroup = taskgroupRepository.findById(1L).get();
|
||||
ServiceResult<Taskgroup> creationResult = taskgroupService.addTaskgroup(new TaskgroupFieldInfo(taskgroup.getTaskgroupName(), -1), username);
|
||||
assertEquals(ServiceExitCode.ENTITY_ALREADY_EXIST, creationResult.getExitCode());
|
||||
assertThat(creationResult.getResult()).isNull();
|
||||
|
||||
//Situation 3: Taskgroup does not exist, no parent
|
||||
ServiceResult<Taskgroup> creationResult_3 = taskgroupService.addTaskgroup(taskgroupFieldInfo, username);
|
||||
assertEquals(ServiceExitCode.OK, creationResult_3.getExitCode());
|
||||
assertTrue(taskgroupRepository.existsById(creationResult_3.getResult().getTaskgroupID()));
|
||||
|
||||
//Situation 4: Taskgroup does not exist, with parent; invalid parent (no existent)
|
||||
ServiceResult<Taskgroup> creationResult_4 = taskgroupService.addTaskgroup(new TaskgroupFieldInfo("Situation 4", 100L), username);
|
||||
assertEquals(ServiceExitCode.MISSING_ENTITY, creationResult_4.getExitCode());
|
||||
|
||||
//Situation 5: Taskgroup does not exist, parent exist
|
||||
ServiceResult<Taskgroup> creationResult_5 = taskgroupService.addTaskgroup(new TaskgroupFieldInfo("Situation 5", 2L), username);
|
||||
assertEquals(ServiceExitCode.OK, creationResult_5.getExitCode());
|
||||
assertTrue(taskgroupRepository.existsById(creationResult_5.getResult().getTaskgroupID()));
|
||||
|
||||
//Situation 6: taskgroup exist on another user
|
||||
ServiceResult<Taskgroup> creationResult_6 = taskgroupService.addTaskgroup(new TaskgroupFieldInfo(taskgroup.getTaskgroupName(), -1), username2);
|
||||
assertEquals(ServiceExitCode.OK, creationResult_6.getExitCode());
|
||||
assertTrue(taskgroupRepository.existsById(creationResult_6.getResult().getTaskgroupID()));
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@SqlGroup({
|
||||
@Sql("classpath:taskgroupRepositoryTestEntries.sql"),
|
||||
@Sql("classpath:taskRepositoryEntries.sql")
|
||||
})
|
||||
void editTaskgroup() {
|
||||
Taskgroup taskgroup = taskgroupRepository.findById(1L).get();
|
||||
//Situation 1: Nothing changed
|
||||
ServiceExitCode exitCode_1 = taskgroupService.editTaskgroup(taskgroup, new TaskgroupFieldInfo(taskgroup.getTaskgroupName(),-1));
|
||||
assertEquals(ServiceExitCode.OK, exitCode_1);
|
||||
|
||||
//Situation 2: Name is already taken
|
||||
ServiceExitCode exitCode_2 = taskgroupService.editTaskgroup(taskgroup, new TaskgroupFieldInfo("Taskgroup 1", -1));
|
||||
assertEquals(ServiceExitCode.ENTITY_ALREADY_EXIST, exitCode_2);
|
||||
|
||||
//Situation 3: All fine
|
||||
ServiceExitCode exitCode_3 = taskgroupService.editTaskgroup(taskgroup, new TaskgroupFieldInfo("Situation 3", -1));
|
||||
assertEquals(ServiceExitCode.OK, exitCode_3);
|
||||
}
|
||||
|
||||
@Test
|
||||
@SqlGroup({
|
||||
@Sql("classpath:taskgroupRepositoryTestEntries.sql"),
|
||||
@Sql("classpath:taskRepositoryEntries.sql")
|
||||
})
|
||||
void deleteTaskgroup() {
|
||||
taskgroupService.deleteTaskgroup(entityManager.find(Taskgroup.class, 1L));
|
||||
assertThat(entityManager.find(Taskgroup.class, 1L)).isNull();
|
||||
|
||||
taskgroupService.deleteTaskgroup(entityManager.find(Taskgroup.class, 2L));
|
||||
assertThat(entityManager.find(Taskgroup.class, 2L)).isNull();
|
||||
assertThat(entityManager.find(Taskgroup.class, 3L)).isNull();
|
||||
for(long i=1; i<=14; i++) {
|
||||
assertThat(entityManager.find(Task.class, i)).isNull();
|
||||
}
|
||||
|
||||
taskgroupService.deleteTaskgroup(entityManager.find(Taskgroup.class, 5L));
|
||||
assertThat(entityManager.find(Taskgroup.class, 5L)).isNull();
|
||||
assertThat(entityManager.find(Taskgroup.class, 6L)).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
@SqlGroup({
|
||||
@Sql("classpath:taskgroupRepositoryTestEntries.sql"),
|
||||
@Sql("classpath:taskRepositoryEntries.sql")
|
||||
})
|
||||
void getTopTaskgroupsByUser() {
|
||||
//Situation 1: User without taskgroups
|
||||
List<Taskgroup> taskgroups_user2 = taskgroupService.getTopTaskgroupsByUser(username2);
|
||||
assertEquals(0, taskgroups_user2.size());
|
||||
|
||||
|
||||
//Situation 2: user with taskgroups
|
||||
List<Taskgroup> taskgroups_user1 = taskgroupService.getTopTaskgroupsByUser(username);
|
||||
assertEquals(3, taskgroups_user1.size());
|
||||
assertTrue(taskgroups_user1.contains(entityManager.find(Taskgroup.class, 1L)));
|
||||
assertTrue(taskgroups_user1.contains(entityManager.find(Taskgroup.class, 2L)));
|
||||
assertTrue(taskgroups_user1.contains(entityManager.find(Taskgroup.class, 5L)));
|
||||
|
||||
//Situation 3: No existent username
|
||||
assertEquals(0, taskgroupService.getTopTaskgroupsByUser("Rotzbakke").size());
|
||||
}
|
||||
@Test
|
||||
@SqlGroup({
|
||||
@Sql("classpath:taskgroupRepositoryTestEntries.sql"),
|
||||
@Sql("classpath:taskRepositoryEntries.sql")
|
||||
})
|
||||
void deleteTaskgroupByUser() {
|
||||
User referenceUser1 = entityManager.find(User.class, 1L);
|
||||
User referenceUser2 = entityManager.find(User.class, 2L);
|
||||
|
||||
taskgroupService.deleteTaskgroupByUser(referenceUser2);
|
||||
for(long i=1; i<=8; i++) {
|
||||
assertThat(entityManager.find(Taskgroup.class, i)).isNotNull();
|
||||
}
|
||||
|
||||
taskgroupService.deleteTaskgroupByUser(referenceUser1);
|
||||
for(long i=1; i<=8; i++) {
|
||||
assertThat(entityManager.find(Taskgroup.class, i)).isNull();
|
||||
}
|
||||
for(long i=1; i<=14; i++) {
|
||||
assertThat(entityManager.find(Task.class, i)).isNull();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user