Merge branch '103-integr-tests-grant' into 'dev'
Resolve "Реализовать интеграционные автотесты для проверки модулей" See merge request romanov73/ng-tracker!106
This commit is contained in:
commit
624573a47a
@ -25,9 +25,9 @@ import ru.ulstu.user.service.UserService;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static org.springframework.util.ObjectUtils.isEmpty;
|
import static org.springframework.util.ObjectUtils.isEmpty;
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package ru.ulstu.grant.service;
|
package ru.ulstu.grant.service;
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
@ -10,7 +10,6 @@ import org.springframework.web.bind.annotation.PostMapping;
|
|||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
import ru.ulstu.deadline.model.Deadline;
|
import ru.ulstu.deadline.model.Deadline;
|
||||||
import ru.ulstu.grant.model.Grant;
|
|
||||||
import ru.ulstu.grant.model.GrantDto;
|
import ru.ulstu.grant.model.GrantDto;
|
||||||
import ru.ulstu.project.model.Project;
|
import ru.ulstu.project.model.Project;
|
||||||
import ru.ulstu.project.model.ProjectDto;
|
import ru.ulstu.project.model.ProjectDto;
|
||||||
|
@ -12,16 +12,16 @@ import ru.ulstu.grant.model.Grant;
|
|||||||
import ru.ulstu.timeline.model.Event;
|
import ru.ulstu.timeline.model.Event;
|
||||||
import ru.ulstu.user.model.User;
|
import ru.ulstu.user.model.User;
|
||||||
|
|
||||||
|
import javax.persistence.CascadeType;
|
||||||
import javax.persistence.Entity;
|
import javax.persistence.Entity;
|
||||||
import javax.persistence.EnumType;
|
import javax.persistence.EnumType;
|
||||||
import javax.persistence.Enumerated;
|
import javax.persistence.Enumerated;
|
||||||
import javax.persistence.OneToMany;
|
|
||||||
import javax.persistence.CascadeType;
|
|
||||||
import javax.persistence.JoinColumn;
|
|
||||||
import javax.persistence.ManyToOne;
|
|
||||||
import javax.persistence.FetchType;
|
import javax.persistence.FetchType;
|
||||||
import javax.persistence.ManyToMany;
|
import javax.persistence.JoinColumn;
|
||||||
import javax.persistence.JoinTable;
|
import javax.persistence.JoinTable;
|
||||||
|
import javax.persistence.ManyToMany;
|
||||||
|
import javax.persistence.ManyToOne;
|
||||||
|
import javax.persistence.OneToMany;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
@ -6,13 +6,8 @@ import org.hibernate.validator.constraints.NotBlank;
|
|||||||
import ru.ulstu.core.model.BaseEntity;
|
import ru.ulstu.core.model.BaseEntity;
|
||||||
import ru.ulstu.core.model.EventSource;
|
import ru.ulstu.core.model.EventSource;
|
||||||
import ru.ulstu.deadline.model.Deadline;
|
import ru.ulstu.deadline.model.Deadline;
|
||||||
import ru.ulstu.deadline.service.DeadlineService;
|
|
||||||
import ru.ulstu.students.repository.SchedulerRepository;
|
|
||||||
import ru.ulstu.students.repository.TaskRepository;
|
|
||||||
import ru.ulstu.tags.model.Tag;
|
import ru.ulstu.tags.model.Tag;
|
||||||
import ru.ulstu.tags.service.TagService;
|
|
||||||
import ru.ulstu.timeline.model.Event;
|
import ru.ulstu.timeline.model.Event;
|
||||||
import ru.ulstu.timeline.service.EventService;
|
|
||||||
import ru.ulstu.user.model.User;
|
import ru.ulstu.user.model.User;
|
||||||
import ru.ulstu.user.service.UserService;
|
import ru.ulstu.user.service.UserService;
|
||||||
|
|
||||||
|
@ -18,15 +18,15 @@ import ru.ulstu.tags.service.TagService;
|
|||||||
import ru.ulstu.timeline.service.EventService;
|
import ru.ulstu.timeline.service.EventService;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static org.springframework.util.ObjectUtils.isEmpty;
|
import static org.springframework.util.ObjectUtils.isEmpty;
|
||||||
|
@ -18,7 +18,6 @@ import ru.ulstu.timeline.repository.EventRepository;
|
|||||||
import ru.ulstu.user.model.UserDto;
|
import ru.ulstu.user.model.UserDto;
|
||||||
import ru.ulstu.user.service.UserService;
|
import ru.ulstu.user.service.UserService;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -3,7 +3,6 @@ package ru.ulstu.user.controller;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.security.access.annotation.Secured;
|
import org.springframework.security.access.annotation.Secured;
|
||||||
import org.springframework.ui.ModelMap;
|
|
||||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
@ -33,7 +32,6 @@ import ru.ulstu.user.service.UserSessionService;
|
|||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpSession;
|
import javax.servlet.http.HttpSession;
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static ru.ulstu.user.controller.UserController.URL;
|
import static ru.ulstu.user.controller.UserController.URL;
|
||||||
|
@ -9,8 +9,8 @@ import org.springframework.web.bind.annotation.PostMapping;
|
|||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import ru.ulstu.configuration.Constants;
|
import ru.ulstu.configuration.Constants;
|
||||||
import ru.ulstu.odin.controller.OdinController;
|
import ru.ulstu.odin.controller.OdinController;
|
||||||
import ru.ulstu.user.model.UserDto;
|
|
||||||
import ru.ulstu.user.model.User;
|
import ru.ulstu.user.model.User;
|
||||||
|
import ru.ulstu.user.model.UserDto;
|
||||||
import ru.ulstu.user.model.UserListDto;
|
import ru.ulstu.user.model.UserListDto;
|
||||||
import ru.ulstu.user.service.UserService;
|
import ru.ulstu.user.service.UserService;
|
||||||
import ru.ulstu.user.service.UserSessionService;
|
import ru.ulstu.user.service.UserSessionService;
|
||||||
|
@ -252,7 +252,7 @@ public class UserService implements UserDetailsService {
|
|||||||
mailService.sendChangePasswordMail(user);
|
mailService.sendChangePasswordMail(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean requestUserPasswordReset(String email) {
|
public boolean requestUserPasswordReset(String email) {
|
||||||
User user = userRepository.findOneByEmailIgnoreCase(email);
|
User user = userRepository.findOneByEmailIgnoreCase(email);
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
throw new UserNotFoundException(email);
|
throw new UserNotFoundException(email);
|
||||||
|
@ -18,7 +18,7 @@ public class TimetableService {
|
|||||||
private static final String TIMETABLE_URL = "http://timetable.athene.tech/api/1.0/timetable?filter=%s";
|
private static final String TIMETABLE_URL = "http://timetable.athene.tech/api/1.0/timetable?filter=%s";
|
||||||
private SimpleDateFormat lessonTimeFormat = new SimpleDateFormat("hh:mm");
|
private SimpleDateFormat lessonTimeFormat = new SimpleDateFormat("hh:mm");
|
||||||
|
|
||||||
private long[] lessonsStarts = new long[] {
|
private long[] lessonsStarts = new long[]{
|
||||||
lessonTimeFormat.parse("8:00:00").getTime(),
|
lessonTimeFormat.parse("8:00:00").getTime(),
|
||||||
lessonTimeFormat.parse("9:40:00").getTime(),
|
lessonTimeFormat.parse("9:40:00").getTime(),
|
||||||
lessonTimeFormat.parse("11:30:00").getTime(),
|
lessonTimeFormat.parse("11:30:00").getTime(),
|
||||||
@ -58,8 +58,8 @@ public class TimetableService {
|
|||||||
firstJan.set(Calendar.MONTH, 0);
|
firstJan.set(Calendar.MONTH, 0);
|
||||||
firstJan.set(Calendar.DAY_OF_MONTH, 1);
|
firstJan.set(Calendar.DAY_OF_MONTH, 1);
|
||||||
|
|
||||||
return (int) Math.round(Math.ceil((((currentDate.getTime() - firstJan.getTime().getTime()) / 86400000)
|
return (int) Math.round(Math.ceil((((currentDate.getTime() - firstJan.getTime().getTime()) / 86400000)
|
||||||
+ DateUtils.addDays(firstJan.getTime(), 1).getTime() / 7) % 2));
|
+ DateUtils.addDays(firstJan.getTime(), 1).getTime() / 7) % 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
private TimetableResponse getTimetableForUser(String userFIO) throws RestClientException {
|
private TimetableResponse getTimetableForUser(String userFIO) throws RestClientException {
|
||||||
@ -67,7 +67,7 @@ public class TimetableService {
|
|||||||
return restTemplate.getForObject(String.format(TIMETABLE_URL, userFIO), TimetableResponse.class);
|
return restTemplate.getForObject(String.format(TIMETABLE_URL, userFIO), TimetableResponse.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Lesson getCurrentLesson(String userFio) {
|
public Lesson getCurrentLesson(String userFio) {
|
||||||
TimetableResponse response;
|
TimetableResponse response;
|
||||||
try {
|
try {
|
||||||
response = getTimetableForUser(userFio);
|
response = getTimetableForUser(userFio);
|
||||||
|
@ -4,7 +4,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
public class Day {
|
public class Day {
|
||||||
|
|
||||||
private Integer day;
|
private Integer day;
|
||||||
private List<List<Lesson>> lessons = new ArrayList<>();
|
private List<List<Lesson>> lessons = new ArrayList<>();
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package ru.ulstu.utils.timetable.model;
|
package ru.ulstu.utils.timetable.model;
|
||||||
|
|
||||||
public class Lesson {
|
public class Lesson {
|
||||||
private String group;
|
private String group;
|
||||||
private String nameOfLesson;
|
private String nameOfLesson;
|
||||||
private String teacher;
|
private String teacher;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package ru.ulstu.utils.timetable.model;
|
package ru.ulstu.utils.timetable.model;
|
||||||
|
|
||||||
public class TimetableResponse {
|
public class TimetableResponse {
|
||||||
private Response response;
|
private Response response;
|
||||||
private String error;
|
private String error;
|
||||||
|
|
||||||
|
@ -156,14 +156,16 @@
|
|||||||
<a class="paper-name"
|
<a class="paper-name"
|
||||||
th:href="@{'/papers/paper?id=' + *{papers[__${rowStat.index}__].id} + ''}"
|
th:href="@{'/papers/paper?id=' + *{papers[__${rowStat.index}__].id} + ''}"
|
||||||
th:if="*{papers[__${rowStat.index}__].id !=null}">
|
th:if="*{papers[__${rowStat.index}__].id !=null}">
|
||||||
<span th:replace="papers/fragments/paperStatusFragment :: paperStatus(paperStatus=*{papers[__${rowStat.index}__].status})"/>
|
<span th:replace="papers/fragments/paperStatusFragment :: paperStatus(paperStatus=*{papers[__${rowStat.index}__].status},
|
||||||
|
title=*{papers[__${rowStat.index}__].title}, small=false)"/>
|
||||||
<span th:text="*{papers[__${rowStat.index}__].title}">
|
<span th:text="*{papers[__${rowStat.index}__].title}">
|
||||||
Имя статьи
|
Имя статьи
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
<a class="paper-name"
|
<a class="paper-name"
|
||||||
th:unless="*{papers[__${rowStat.index}__].id !=null}">
|
th:unless="*{papers[__${rowStat.index}__].id !=null}">
|
||||||
<span th:replace="papers/fragments/paperStatusFragment :: paperStatus(paperStatus=*{papers[__${rowStat.index}__].status})"/>
|
<span th:replace="papers/fragments/paperStatusFragment :: paperStatus(paperStatus=*{papers[__${rowStat.index}__].status},
|
||||||
|
title=*{papers[__${rowStat.index}__].title}, small=false)"/>
|
||||||
<span th:text="*{papers[__${rowStat.index}__].title}">
|
<span th:text="*{papers[__${rowStat.index}__].title}">
|
||||||
Имя статьи
|
Имя статьи
|
||||||
</span>
|
</span>
|
||||||
|
@ -8,10 +8,16 @@
|
|||||||
<div class="col">
|
<div class="col">
|
||||||
<span th:replace="grants/fragments/grantStatusFragment :: grantStatus(grantStatus=${grant.status})"/>
|
<span th:replace="grants/fragments/grantStatusFragment :: grantStatus(grantStatus=${grant.status})"/>
|
||||||
<a th:href="@{'grant?id='+${grant.id}}">
|
<a th:href="@{'grant?id='+${grant.id}}">
|
||||||
<span class="h6" th:if="${#strings.length(grant.title) > 50}" th:text="${#strings.substring(grant.title, 0, 50)} + '...'" th:title="${grant.title}"/>
|
<span class="h6" th:if="${#strings.length(grant.title) > 50}"
|
||||||
<span class="h6" th:if="${#strings.length(grant.title) le 50}" th:text="${grant.title}" th:title="${grant.title}"/>
|
th:text="${#strings.substring(grant.title, 0, 50)} + '...'" th:title="${grant.title}"/>
|
||||||
|
<span class="h6" th:if="${#strings.length(grant.title) le 50}" th:text="${grant.title}"
|
||||||
|
th:title="${grant.title}"/>
|
||||||
<span class="text-muted" th:text="${grant.authorsString}"/>
|
<span class="text-muted" th:text="${grant.authorsString}"/>
|
||||||
</a>
|
</a>
|
||||||
|
<span th:each="paper, rowStat : *{grant.papers}">
|
||||||
|
<span th:replace="papers/fragments/paperStatusFragment :: paperStatus(paperStatus=${paper.status},
|
||||||
|
title=${paper.title}, small=true)"/>
|
||||||
|
</span>
|
||||||
<input class="id-class" type="hidden" th:value="${grant.id}"/>
|
<input class="id-class" type="hidden" th:value="${grant.id}"/>
|
||||||
<a class="remove-paper pull-right d-none" th:href="@{'/grants/delete/'+${grant.id}}"
|
<a class="remove-paper pull-right d-none" th:href="@{'/grants/delete/'+${grant.id}}"
|
||||||
data-confirm="Удалить грант?">
|
data-confirm="Удалить грант?">
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
<i class="fa fa-circle fa-stack-2x text-failed"></i>
|
<i class="fa fa-circle fa-stack-2x text-failed"></i>
|
||||||
</div>
|
</div>
|
||||||
</th:block>
|
</th:block>
|
||||||
<i class="fa fa-file-text-o fa-stack-1x fa-inverse"></i>
|
<i class="fa fa-clipboard fa-stack-1x fa-inverse"></i>
|
||||||
</span>
|
</span>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
@ -49,7 +49,7 @@
|
|||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Дедлайны показателей:</label>
|
<label>Дедлайны показателей:</label>
|
||||||
<input type="hidden" th:field="*{removedDeadlineIds}"/>
|
<input type="hidden" th:field="*{removedDeadlineIds}"/>
|
||||||
<div class="row" th:each="deadline, rowStat : *{deadlines}">
|
<div class="row" id="deadlines" th:each="deadline, rowStat : *{deadlines}">
|
||||||
<input type="hidden" th:field="*{deadlines[__${rowStat.index}__].id}"/>
|
<input type="hidden" th:field="*{deadlines[__${rowStat.index}__].id}"/>
|
||||||
<div class="col-6 div-deadline-date">
|
<div class="col-6 div-deadline-date">
|
||||||
<input type="date" class="form-control form-deadline-date" name="deadline"
|
<input type="date" class="form-control form-deadline-date" name="deadline"
|
||||||
@ -191,6 +191,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<!--
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div th:if="*{project} == null">
|
<div th:if="*{project} == null">
|
||||||
<input type="submit" name="createProject" class="btn btn-primary"
|
<input type="submit" name="createProject" class="btn btn-primary"
|
||||||
@ -198,6 +199,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<input type = "hidden" th:field="*{project.id}"/>
|
<input type = "hidden" th:field="*{project.id}"/>
|
||||||
</div>
|
</div>
|
||||||
|
-->
|
||||||
</div>
|
</div>
|
||||||
<div class="clearfix"></div>
|
<div class="clearfix"></div>
|
||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
|
@ -7,7 +7,8 @@
|
|||||||
<div th:fragment="paperDashboard (paper)" class="col-12 col-sm-12 col-md-12 col-lg-4 col-xl-3 dashboard-card">
|
<div th:fragment="paperDashboard (paper)" class="col-12 col-sm-12 col-md-12 col-lg-4 col-xl-3 dashboard-card">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-2">
|
<div class="col-2">
|
||||||
<span th:replace="papers/fragments/paperStatusFragment :: paperStatus(paperStatus=${paper.status})"/>
|
<span th:replace="papers/fragments/paperStatusFragment :: paperStatus(paperStatus=${paper.status},
|
||||||
|
title=${paper.title}, small=false)"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="col col-10 text-right">
|
<div class="col col-10 text-right">
|
||||||
<p th:if="${paper.url!=null and paper.url!=''}"><a target="_blank" class="externalLink"
|
<p th:if="${paper.url!=null and paper.url!=''}"><a target="_blank" class="externalLink"
|
||||||
|
@ -6,10 +6,12 @@
|
|||||||
<body>
|
<body>
|
||||||
<div th:fragment="paperLine (paper)" class="row text-left paper-row" style="background-color: white;">
|
<div th:fragment="paperLine (paper)" class="row text-left paper-row" style="background-color: white;">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<span th:replace="papers/fragments/paperStatusFragment :: paperStatus(paperStatus=${paper.status})"/>
|
<span th:replace="papers/fragments/paperStatusFragment :: paperStatus(paperStatus=${paper.status}, title=${paper.title}, small=false)"/>
|
||||||
<a th:href="@{'paper?id='+${paper.id}}">
|
<a th:href="@{'../papers/paper?id='+${paper.id}}">
|
||||||
<span class="h6" th:if="${#strings.length(paper.title)} > 50" th:text="${#strings.substring(paper.title, 0, 50) + '...'}" th:title="${paper.title}"/>
|
<span class="h6" th:if="${#strings.length(paper.title)} > 50"
|
||||||
<span class="h6" th:if="${#strings.length(paper.title) le 50}" th:text="${paper.title}" th:title="${paper.title}"/>
|
th:text="${#strings.substring(paper.title, 0, 50) + '...'}" th:title="${paper.title}"/>
|
||||||
|
<span class="h6" th:if="${#strings.length(paper.title) le 50}" th:text="${paper.title}"
|
||||||
|
th:title="${paper.title}"/>
|
||||||
<span class="text-muted" th:text="${paper.authorsString}"/>
|
<span class="text-muted" th:text="${paper.authorsString}"/>
|
||||||
</a>
|
</a>
|
||||||
<input class="id-class" type="hidden" th:value="${paper.id}"/>
|
<input class="id-class" type="hidden" th:value="${paper.id}"/>
|
||||||
|
@ -4,34 +4,35 @@
|
|||||||
<meta charset="UTF-8"/>
|
<meta charset="UTF-8"/>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<span th:fragment="paperStatus (paperStatus)" class="fa-stack fa-1x">
|
<span th:fragment="paperStatus (paperStatus, title, small)" class="fa-stack fa-1x">
|
||||||
<th:block th:switch="${paperStatus.name()}">
|
<th:block th:switch="${paperStatus.name()}">
|
||||||
<div th:case="'ATTENTION'">
|
<div th:case="'ATTENTION'">
|
||||||
<i class="fa fa-circle fa-stack-2x text-warning"></i>
|
<i class="fa fa-circle text-warning" th:classappend="${small} ? fa-stack-1x : fa-stack-2x"></i>
|
||||||
</div>
|
</div>
|
||||||
<div th:case="'DRAFT'">
|
<div th:case="'DRAFT'">
|
||||||
<i class="fa fa-circle fa-stack-2x text-draft"></i>
|
<i class="fa fa-circle fa-stack-2x text-draft" th:classappend="${small} ? fa-stack-1x : fa-stack-2x"></i>
|
||||||
</div>
|
</div>
|
||||||
<div th:case="'ON_PREPARATION'">
|
<div th:case="'ON_PREPARATION'">
|
||||||
<i class="fa fa-circle fa-stack-2x text-primary"></i>
|
<i class="fa fa-circle fa-stack-2x text-primary" th:classappend="${small} ? fa-stack-1x : fa-stack-2x"></i>
|
||||||
</div>
|
</div>
|
||||||
<div th:case="'ON_REVIEW'">
|
<div th:case="'ON_REVIEW'">
|
||||||
<i class="fa fa-circle fa-stack-2x text-review"></i>
|
<i class="fa fa-circle fa-stack-2x text-review" th:classappend="${small} ? fa-stack-1x : fa-stack-2x"></i>
|
||||||
</div>
|
</div>
|
||||||
<div th:case="'COMPLETED'">
|
<div th:case="'COMPLETED'">
|
||||||
<i class="fa fa-circle fa-stack-2x text-success"></i>
|
<i class="fa fa-circle fa-stack-2x text-success" th:classappend="${small} ? fa-stack-1x : fa-stack-2x"></i>
|
||||||
</div>
|
</div>
|
||||||
<div th:case="'FAILED'">
|
<div th:case="'FAILED'">
|
||||||
<i class="fa fa-circle fa-stack-2x text-failed"></i>
|
<i class="fa fa-circle fa-stack-2x text-failed" th:classappend="${small} ? fa-stack-1x : fa-stack-2x"></i>
|
||||||
</div>
|
</div>
|
||||||
<div th:case="'ACCEPTED'">
|
<div th:case="'ACCEPTED'">
|
||||||
<i class="fa fa-circle fa-stack-2x text-accepted"></i>
|
<i class="fa fa-circle fa-stack-2x text-accepted" th:classappend="${small} ? fa-stack-1x : fa-stack-2x"></i>
|
||||||
</div>
|
</div>
|
||||||
<div th:case="'NOT_ACCEPTED'">
|
<div th:case="'NOT_ACCEPTED'">
|
||||||
<i class="fa fa-circle fa-stack-2x text-not-accepted"></i>
|
<i class="fa fa-circle fa-stack-2x text-not-accepted"
|
||||||
|
th:classappend="${small} ? fa-stack-1x : fa-stack-2x"></i>
|
||||||
</div>
|
</div>
|
||||||
</th:block>
|
</th:block>
|
||||||
<i class="fa fa-file-text-o fa-stack-1x fa-inverse"></i>
|
<i class="fa fa-file-text-o fa-stack-1x fa-inverse" th:title="${title}"></i>
|
||||||
</span>
|
</span>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
@ -530,6 +530,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<script th:inline="javascript">
|
<script th:inline="javascript">
|
||||||
/*<![CDATA[*/
|
/*<![CDATA[*/
|
||||||
|
@ -98,9 +98,11 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-12" style="margin-bottom: 15px;"></div>
|
<div class="col-12" style="margin-bottom: 15px;"></div>
|
||||||
<div class="col-10 div-deadline-executor">
|
<div class="col-10 div-deadline-executor">
|
||||||
<select class="selectpicker form-control" multiple="true" data-live-search="true"
|
<select class="selectpicker form-control" multiple="true"
|
||||||
|
data-live-search="true"
|
||||||
title="-- Выберите исполнителя --" id="executors"
|
title="-- Выберите исполнителя --" id="executors"
|
||||||
th:field="*{deadlines[__${rowStat.index}__].executors}" data-size="5">
|
th:field="*{deadlines[__${rowStat.index}__].executors}"
|
||||||
|
data-size="5">
|
||||||
<option th:each="executors : ${allExecutors}" th:value="${executors.id}"
|
<option th:each="executors : ${allExecutors}" th:value="${executors.id}"
|
||||||
th:text="${executors.lastName}"> Участник
|
th:text="${executors.lastName}"> Участник
|
||||||
</option>
|
</option>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en"
|
<html lang="en"
|
||||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorator="default" xmlns:th="http://www.w3.org/1999/xhtml">
|
layout:decorator="default">
|
||||||
<head>
|
<head>
|
||||||
<script src="/js/users.js"></script>
|
<script src="/js/users.js"></script>
|
||||||
<link rel="stylesheet" href="../css/base.css"/>
|
<link rel="stylesheet" href="../css/base.css"/>
|
||||||
@ -35,7 +35,8 @@
|
|||||||
<input type="text" name="email" id="resetKey" class="form-control"
|
<input type="text" name="email" id="resetKey" class="form-control"
|
||||||
placeholder="Код подтверждения" style="display:none"/>
|
placeholder="Код подтверждения" style="display:none"/>
|
||||||
</div>
|
</div>
|
||||||
<div id="dvloader" class="loader" style="display:none"><img src="../img/main/ajax-loader.gif" /></div>
|
<div id="dvloader" class="loader" style="display:none"><img src="../img/main/ajax-loader.gif"/>
|
||||||
|
</div>
|
||||||
<button id="btnSend" type="button" onclick="requestResetPassword()"
|
<button id="btnSend" type="button" onclick="requestResetPassword()"
|
||||||
class="btn btn-success btn-block">
|
class="btn btn-success btn-block">
|
||||||
Отправить код подтверждения
|
Отправить код подтверждения
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
showFeedbackMessage(error, MessageTypesEnum.WARNING)
|
showFeedbackMessage(error, MessageTypesEnum.WARNING)
|
||||||
});
|
});
|
||||||
/*]]>*/
|
/*]]>*/
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
@ -7,9 +7,13 @@
|
|||||||
<div th:fragment="userDashboard (user)" class="col-12 col-sm-12 col-md-12 col-lg-4 col-xl-3 dashboard-card">
|
<div th:fragment="userDashboard (user)" class="col-12 col-sm-12 col-md-12 col-lg-4 col-xl-3 dashboard-card">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col col-10">
|
<div class="col col-10">
|
||||||
<b><p th:text="${user.user.lastName} + ' ' + ${user.user.firstName} + ' ' + ${user.user.patronymic}"></p></b>
|
<b><p th:text="${user.user.lastName} + ' ' + ${user.user.firstName} + ' ' + ${user.user.patronymic}"></p>
|
||||||
<i><p th:if="${user.conference != null}" th:text="'Сейчас на конференции ' + ${user.conference.title}"></p></i>
|
</b>
|
||||||
<i><p th:if="${user.lesson != null}" th:text="'Сейчас на паре ' + ${user.lesson.nameOfLesson} + ' в аудитории ' + ${user.lesson.room}"></p></i>
|
<i><p th:if="${user.conference != null}" th:text="'Сейчас на конференции ' + ${user.conference.title}"></p>
|
||||||
|
</i>
|
||||||
|
<i><p th:if="${user.lesson != null}"
|
||||||
|
th:text="'Сейчас на паре ' + ${user.lesson.nameOfLesson} + ' в аудитории ' + ${user.lesson.room}"></p>
|
||||||
|
</i>
|
||||||
<p th:if="${user.isOnline()}">Онлайн</p>
|
<p th:if="${user.isOnline()}">Онлайн</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
225
src/test/java/GrantTest.java
Normal file
225
src/test/java/GrantTest.java
Normal file
@ -0,0 +1,225 @@
|
|||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import com.google.common.collect.Iterables;
|
||||||
|
import core.PageObject;
|
||||||
|
import core.TestTemplate;
|
||||||
|
import grant.GrantPage;
|
||||||
|
import grant.GrantsDashboardPage;
|
||||||
|
import grant.GrantsPage;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.FixMethodOrder;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.junit.runners.MethodSorters;
|
||||||
|
import org.openqa.selenium.WebElement;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
import org.springframework.test.context.junit4.SpringRunner;
|
||||||
|
import ru.ulstu.NgTrackerApplication;
|
||||||
|
import ru.ulstu.configuration.ApplicationProperties;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@RunWith(SpringRunner.class)
|
||||||
|
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
||||||
|
@SpringBootTest(classes = NgTrackerApplication.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
|
||||||
|
public class GrantTest extends TestTemplate {
|
||||||
|
private final Map<PageObject, List<String>> navigationHolder = ImmutableMap.of(
|
||||||
|
new GrantsPage(), Arrays.asList("ГРАНТЫ", "/grants/grants"),
|
||||||
|
new GrantPage(), Arrays.asList("РЕДАКТИРОВАНИЕ ГРАНТА", "/grants/grant?id=0"),
|
||||||
|
new GrantsDashboardPage(), Arrays.asList("Гранты", "/grants/dashboard")
|
||||||
|
);
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ApplicationProperties applicationProperties;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void aCreateNewGrant() {
|
||||||
|
Map.Entry<PageObject, List<String>> page = Iterables.get(navigationHolder.entrySet(), 1);
|
||||||
|
getContext().goTo(applicationProperties.getBaseUrl() + page.getValue().get(1));
|
||||||
|
GrantPage grantPage = (GrantPage) getContext().initPage(page.getKey());
|
||||||
|
GrantsPage grantsPage = (GrantsPage) getContext().initPage(Iterables.get(navigationHolder.entrySet(), 0).getKey());
|
||||||
|
|
||||||
|
String newGrantName = "test grant" + (new Date());
|
||||||
|
grantPage.setTitle(newGrantName);
|
||||||
|
String deadlineDate = new Date().toString();
|
||||||
|
String deadlineDescription = "test deadline description";
|
||||||
|
grantPage.setDeadline(deadlineDate, 0, deadlineDescription);
|
||||||
|
grantPage.setLeader();
|
||||||
|
grantPage.saveGrant();
|
||||||
|
|
||||||
|
Assert.assertTrue(grantsPage.findGrantByTitle(newGrantName));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void bCreateBlankGrant() {
|
||||||
|
Map.Entry<PageObject, List<String>> page = Iterables.get(navigationHolder.entrySet(), 1);
|
||||||
|
getContext().goTo(applicationProperties.getBaseUrl() + page.getValue().get(1));
|
||||||
|
GrantPage grantPage = (GrantPage) getContext().initPage(page.getKey());
|
||||||
|
|
||||||
|
grantPage.saveGrant();
|
||||||
|
|
||||||
|
Assert.assertTrue(grantPage.checkBlankFields());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void cUpdateGrantTitle() {
|
||||||
|
Map.Entry<PageObject, List<String>> page = Iterables.get(navigationHolder.entrySet(), 0);
|
||||||
|
getContext().goTo(applicationProperties.getBaseUrl() + page.getValue().get(1));
|
||||||
|
GrantsPage grantsPage = (GrantsPage) getContext().initPage(page.getKey());
|
||||||
|
GrantPage grantPage = (GrantPage) getContext().initPage(Iterables.get(navigationHolder.entrySet(), 1).getKey());
|
||||||
|
|
||||||
|
grantsPage.getFirstGrant();
|
||||||
|
String newGrantTitle = "test " + (new Date());
|
||||||
|
grantPage.setTitle(newGrantTitle);
|
||||||
|
grantPage.saveGrant();
|
||||||
|
|
||||||
|
Assert.assertTrue(grantsPage.findGrantByTitle(newGrantTitle));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void dAttachPaper() {
|
||||||
|
Map.Entry<PageObject, List<String>> page = Iterables.get(navigationHolder.entrySet(), 0);
|
||||||
|
getContext().goTo(applicationProperties.getBaseUrl() + page.getValue().get(1));
|
||||||
|
GrantsPage grantsPage = (GrantsPage) getContext().initPage(page.getKey());
|
||||||
|
GrantPage grantPage = (GrantPage) getContext().initPage(Iterables.get(navigationHolder.entrySet(), 1).getKey());
|
||||||
|
|
||||||
|
grantsPage.getFirstGrant();
|
||||||
|
Integer countPapers = grantPage.getAttachedPapers().size();
|
||||||
|
|
||||||
|
Assert.assertEquals(countPapers + 1, grantPage.attachPaper().size());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void eDeletePaper() {
|
||||||
|
Map.Entry<PageObject, List<String>> page = Iterables.get(navigationHolder.entrySet(), 0);
|
||||||
|
getContext().goTo(applicationProperties.getBaseUrl() + page.getValue().get(1));
|
||||||
|
GrantsPage grantsPage = (GrantsPage) getContext().initPage(page.getKey());
|
||||||
|
GrantPage grantPage = (GrantPage) getContext().initPage(Iterables.get(navigationHolder.entrySet(), 1).getKey());
|
||||||
|
|
||||||
|
grantsPage.getFirstGrant();
|
||||||
|
Integer oldCountPapers = grantPage.getAttachedPapers().size();
|
||||||
|
if (oldCountPapers == 0) {
|
||||||
|
oldCountPapers = grantPage.attachPaper().size();
|
||||||
|
}
|
||||||
|
|
||||||
|
Assert.assertEquals(oldCountPapers - 1, grantPage.deletePaper().size());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void fAddDeadline() {
|
||||||
|
Map.Entry<PageObject, List<String>> page = Iterables.get(navigationHolder.entrySet(), 0);
|
||||||
|
getContext().goTo(applicationProperties.getBaseUrl() + page.getValue().get(1));
|
||||||
|
GrantsPage grantsPage = (GrantsPage) getContext().initPage(page.getKey());
|
||||||
|
GrantPage grantPage = (GrantPage) getContext().initPage(Iterables.get(navigationHolder.entrySet(), 1).getKey());
|
||||||
|
|
||||||
|
grantsPage.getFirstGrant();
|
||||||
|
String grantId = grantPage.getId();
|
||||||
|
Integer deadlineCount = grantPage.getDeadlineCount();
|
||||||
|
|
||||||
|
String description = "deadline test";
|
||||||
|
String date = "08.08.2019";
|
||||||
|
String dateValue = "2019-08-08";
|
||||||
|
grantPage.addDeadline();
|
||||||
|
grantPage.setDeadline(date, deadlineCount, description);
|
||||||
|
grantPage.saveGrant();
|
||||||
|
|
||||||
|
getContext().goTo(applicationProperties.getBaseUrl() + String.format("/grants/grant?id=%s", grantId));
|
||||||
|
|
||||||
|
Assert.assertTrue(grantPage.checkDeadline(description, dateValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void gDeleteDeadline() {
|
||||||
|
Map.Entry<PageObject, List<String>> page = Iterables.get(navigationHolder.entrySet(), 0);
|
||||||
|
getContext().goTo(applicationProperties.getBaseUrl() + page.getValue().get(1));
|
||||||
|
GrantsPage grantsPage = (GrantsPage) getContext().initPage(page.getKey());
|
||||||
|
GrantPage grantPage = (GrantPage) getContext().initPage(Iterables.get(navigationHolder.entrySet(), 1).getKey());
|
||||||
|
|
||||||
|
grantsPage.getFirstGrant();
|
||||||
|
String grantId = grantPage.getId();
|
||||||
|
Integer deadlineCount = grantPage.getDeadlineCount();
|
||||||
|
|
||||||
|
grantPage.deleteDeadline();
|
||||||
|
grantPage.saveGrant();
|
||||||
|
|
||||||
|
getContext().goTo(applicationProperties.getBaseUrl() + String.format("/grants/grant?id=%s", grantId));
|
||||||
|
Integer newDeadlineCount = grantPage.getDeadlineCount();
|
||||||
|
Assert.assertEquals(deadlineCount - 1, (int) newDeadlineCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void hAddAuthor() {
|
||||||
|
Map.Entry<PageObject, List<String>> page = Iterables.get(navigationHolder.entrySet(), 0);
|
||||||
|
getContext().goTo(applicationProperties.getBaseUrl() + page.getValue().get(1));
|
||||||
|
GrantsPage grantsPage = (GrantsPage) getContext().initPage(page.getKey());
|
||||||
|
GrantPage grantPage = (GrantPage) getContext().initPage(Iterables.get(navigationHolder.entrySet(), 1).getKey());
|
||||||
|
|
||||||
|
WebElement grant = grantsPage.getFirstGrantWithoutClick();
|
||||||
|
String grantTitle = grantsPage.getGrantTitle(grant);
|
||||||
|
Integer authorsCount = grantsPage.getAuthorsCount(grant);
|
||||||
|
|
||||||
|
grantsPage.getFirstGrant();
|
||||||
|
grantPage.addAuthor();
|
||||||
|
grantPage.saveGrant();
|
||||||
|
|
||||||
|
grant = grantsPage.getGrantByTitle(grantTitle);
|
||||||
|
Integer newAuthorsCount = grantsPage.getAuthorsCount(grant);
|
||||||
|
|
||||||
|
Assert.assertEquals(authorsCount + 1, (int) newAuthorsCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void iDeleteAuthor() {
|
||||||
|
Map.Entry<PageObject, List<String>> page = Iterables.get(navigationHolder.entrySet(), 0);
|
||||||
|
getContext().goTo(applicationProperties.getBaseUrl() + page.getValue().get(1));
|
||||||
|
GrantsPage grantsPage = (GrantsPage) getContext().initPage(page.getKey());
|
||||||
|
GrantPage grantPage = (GrantPage) getContext().initPage(Iterables.get(navigationHolder.entrySet(), 1).getKey());
|
||||||
|
|
||||||
|
WebElement grant = grantsPage.getFirstGrantWithoutClick();
|
||||||
|
String grantTitle = grantsPage.getGrantTitle(grant);
|
||||||
|
Integer authorsCount = grantsPage.getAuthorsCount(grant);
|
||||||
|
|
||||||
|
grantsPage.getFirstGrant();
|
||||||
|
grantPage.deleteAuthor();
|
||||||
|
grantPage.saveGrant();
|
||||||
|
|
||||||
|
grant = grantsPage.getGrantByTitle(grantTitle);
|
||||||
|
Integer newAuthorsCount = grantsPage.getAuthorsCount(grant);
|
||||||
|
|
||||||
|
authorsCount = (authorsCount == 0) ? 0 : authorsCount - 1;
|
||||||
|
|
||||||
|
Assert.assertEquals((int) authorsCount, (int) newAuthorsCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void jUpdateGrantDescription() {
|
||||||
|
Map.Entry<PageObject, List<String>> page = Iterables.get(navigationHolder.entrySet(), 0);
|
||||||
|
getContext().goTo(applicationProperties.getBaseUrl() + page.getValue().get(1));
|
||||||
|
GrantsPage grantsPage = (GrantsPage) getContext().initPage(page.getKey());
|
||||||
|
GrantPage grantPage = (GrantPage) getContext().initPage(Iterables.get(navigationHolder.entrySet(), 1).getKey());
|
||||||
|
|
||||||
|
String description = "newDescriptionForGrant";
|
||||||
|
grantsPage.getFirstGrant();
|
||||||
|
String grantId = grantPage.getId();
|
||||||
|
grantPage.setDescription(description);
|
||||||
|
grantPage.saveGrant();
|
||||||
|
|
||||||
|
getContext().goTo(applicationProperties.getBaseUrl() + String.format("/grants/grant?id=%s", grantId));
|
||||||
|
|
||||||
|
Assert.assertTrue(description.equals(grantPage.getDescription()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void kDeleteGrant() throws InterruptedException {
|
||||||
|
Map.Entry<PageObject, List<String>> page = Iterables.get(navigationHolder.entrySet(), 0);
|
||||||
|
getContext().goTo(applicationProperties.getBaseUrl() + page.getValue().get(1));
|
||||||
|
GrantsPage grantsPage = (GrantsPage) getContext().initPage(page.getKey());
|
||||||
|
|
||||||
|
Integer size = grantsPage.getGrantsList().size();
|
||||||
|
grantsPage.deleteFirst();
|
||||||
|
Assert.assertEquals(size - 1, grantsPage.getGrantsList().size());
|
||||||
|
}
|
||||||
|
}
|
149
src/test/java/grant/GrantPage.java
Normal file
149
src/test/java/grant/GrantPage.java
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
package grant;
|
||||||
|
|
||||||
|
import core.PageObject;
|
||||||
|
import org.openqa.selenium.By;
|
||||||
|
import org.openqa.selenium.WebElement;
|
||||||
|
import org.openqa.selenium.support.ui.Select;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class GrantPage extends PageObject {
|
||||||
|
@Override
|
||||||
|
public String getSubTitle() {
|
||||||
|
return driver.findElement(By.tagName("h2")).getText();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return driver.findElement(By.id("id")).getAttribute("value");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTitle(String name) {
|
||||||
|
driver.findElement(By.id("title")).clear();
|
||||||
|
driver.findElement(By.id("title")).sendKeys(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return driver.findElement(By.id("title")).getAttribute("value");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDeadline(String date, Integer i, String description) {
|
||||||
|
driver.findElement(By.id(String.format("deadlines%d.date", i))).sendKeys(date);
|
||||||
|
driver.findElement(By.id(String.format("deadlines%d.description", i))).sendKeys(description);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLeader() {
|
||||||
|
WebElement webElement = driver.findElement(By.id("leaderId"));
|
||||||
|
Select selectLeader = new Select(webElement);
|
||||||
|
selectLeader.selectByVisibleText("Романов");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void saveGrant() {
|
||||||
|
driver.findElement(By.id("sendMessageButton")).click();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean checkBlankFields() {
|
||||||
|
return driver.findElements(By.className("alert-danger")).size() > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<WebElement> getAttachedPapers() {
|
||||||
|
try {
|
||||||
|
return driver.findElement(By.className("div-selected-papers")).findElements(By.tagName("div"));
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<WebElement> attachPaper() {
|
||||||
|
WebElement selectPapers = driver.findElement(By.id("allPapers"));
|
||||||
|
Select select = new Select(selectPapers);
|
||||||
|
List<WebElement> selectedOptions = select.getAllSelectedOptions();
|
||||||
|
List<WebElement> allOptions = select.getOptions();
|
||||||
|
if (selectedOptions.size() >= allOptions.size()) {
|
||||||
|
for (int i = 0; i < allOptions.size(); i++) {
|
||||||
|
if (!allOptions.get(i).equals(selectedOptions.get(i))) {
|
||||||
|
select.selectByVisibleText(allOptions.get(i).getText());
|
||||||
|
selectedOptions.add(allOptions.get(i));
|
||||||
|
return selectedOptions;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
select.selectByVisibleText(allOptions.get(0).getText());
|
||||||
|
selectedOptions.add(allOptions.get(0));
|
||||||
|
return selectedOptions;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<WebElement> deletePaper() {
|
||||||
|
WebElement selectPapers = driver.findElement(By.id("allPapers"));
|
||||||
|
Select select = new Select(selectPapers);
|
||||||
|
select.deselectByVisibleText(select.getFirstSelectedOption().getText());
|
||||||
|
return select.getAllSelectedOptions();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<WebElement> getDeadlineList() {
|
||||||
|
return driver.findElements(By.id("deadlines"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getDeadlineCount() {
|
||||||
|
return getDeadlineList().size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addDeadline() {
|
||||||
|
driver.findElement(By.id("addDeadline")).click();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean checkDeadline(String description, String dateValue) {
|
||||||
|
return getDeadlineList()
|
||||||
|
.stream()
|
||||||
|
.anyMatch(webElement -> {
|
||||||
|
return webElement.findElement(By.className("div-deadline-description")).findElement(
|
||||||
|
By.tagName("input")).getAttribute("value").equals(description)
|
||||||
|
&& webElement.findElement(By.className("form-deadline-date")).getAttribute("value").equals(dateValue);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteDeadline() {
|
||||||
|
driver.findElements(By.className("btn-delete-deadline")).get(0).click();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<WebElement> addAuthor() {
|
||||||
|
WebElement selectAuthors = driver.findElement(By.id("authors"));
|
||||||
|
Select select = new Select(selectAuthors);
|
||||||
|
List<WebElement> selectedOptions = select.getAllSelectedOptions();
|
||||||
|
List<WebElement> allOptions = select.getOptions();
|
||||||
|
int i = 0;
|
||||||
|
while (i < selectedOptions.size()) {
|
||||||
|
if (!allOptions.get(i).equals(selectedOptions.get(i))) {
|
||||||
|
select.selectByVisibleText(allOptions.get(i).getText());
|
||||||
|
selectedOptions.add(allOptions.get(i));
|
||||||
|
return selectedOptions;
|
||||||
|
} else {
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (selectedOptions.size() != allOptions.size()) {
|
||||||
|
select.selectByVisibleText(allOptions.get(i).getText());
|
||||||
|
selectedOptions.add(allOptions.get(i));
|
||||||
|
}
|
||||||
|
return selectedOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteAuthor() {
|
||||||
|
WebElement selectAuthors = driver.findElement(By.id("authors"));
|
||||||
|
Select select = new Select(selectAuthors);
|
||||||
|
List<WebElement> selectedOptions = select.getAllSelectedOptions();
|
||||||
|
if (selectedOptions.size() != 0) {
|
||||||
|
select.deselectByVisibleText(selectedOptions.get(0).getText());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDescription(String description) {
|
||||||
|
driver.findElement(By.id("comment")).clear();
|
||||||
|
driver.findElement(By.id("comment")).sendKeys(description);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return driver.findElement(By.id("comment")).getText();
|
||||||
|
}
|
||||||
|
}
|
11
src/test/java/grant/GrantsDashboardPage.java
Normal file
11
src/test/java/grant/GrantsDashboardPage.java
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package grant;
|
||||||
|
|
||||||
|
import core.PageObject;
|
||||||
|
import org.openqa.selenium.By;
|
||||||
|
|
||||||
|
public class GrantsDashboardPage extends PageObject {
|
||||||
|
@Override
|
||||||
|
public String getSubTitle() {
|
||||||
|
return driver.findElement(By.tagName("h2")).getText();
|
||||||
|
}
|
||||||
|
}
|
66
src/test/java/grant/GrantsPage.java
Normal file
66
src/test/java/grant/GrantsPage.java
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
package grant;
|
||||||
|
|
||||||
|
import core.PageObject;
|
||||||
|
import org.openqa.selenium.By;
|
||||||
|
import org.openqa.selenium.WebElement;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class GrantsPage extends PageObject {
|
||||||
|
@Override
|
||||||
|
public String getSubTitle() {
|
||||||
|
return driver.findElement(By.tagName("h2")).getText();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<WebElement> getGrantsList() {
|
||||||
|
return driver.findElements(By.className("grant-row"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean findGrantByTitle(String grantTitle) {
|
||||||
|
return getGrantsList()
|
||||||
|
.stream()
|
||||||
|
.map(el -> el.findElement(By.cssSelector("span.h6")))
|
||||||
|
.anyMatch(webElement -> webElement.getText().equals(grantTitle));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteFirst() throws InterruptedException {
|
||||||
|
WebElement findDeleteButton = driver.findElement(By.xpath("//*[@id=\"grants\"]/div/div[2]/div[1]/div[1]/div"));
|
||||||
|
findDeleteButton.click();
|
||||||
|
Thread.sleep(3000);
|
||||||
|
WebElement grant = driver.findElement(By.xpath("//*[@id=\"grants\"]/div/div[2]/div[1]/div[1]/div/a[2]"));
|
||||||
|
grant.click();
|
||||||
|
WebElement ok = driver.findElement(By.id("dataConfirmOK"));
|
||||||
|
ok.click();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void getFirstGrant() {
|
||||||
|
driver.findElement(By.xpath("//*[@id=\"grants\"]/div/div[2]/div[1]/div[1]/div/a[1]")).click();
|
||||||
|
}
|
||||||
|
|
||||||
|
public WebElement getFirstGrantWithoutClick() {
|
||||||
|
return driver.findElement(By.xpath("//*[@id=\"grants\"]/div/div[2]/div[1]/div[1]"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getGrantTitle(WebElement webElement) {
|
||||||
|
return webElement.findElement(By.cssSelector("span.h6")).getText();
|
||||||
|
}
|
||||||
|
|
||||||
|
public WebElement getGrantByTitle(String title) {
|
||||||
|
List<WebElement> list = getGrantsList();
|
||||||
|
for (int i = 0; i < list.size(); i++) {
|
||||||
|
if (getGrantTitle(list.get(i)).equals(title)) {
|
||||||
|
return list.get(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getAuthorsCount(WebElement webElement) {
|
||||||
|
String authors = webElement.findElement(By.className("text-muted")).getText();
|
||||||
|
if (!authors.equals("")) {
|
||||||
|
String[] mas = authors.split(",");
|
||||||
|
return mas.length;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
@ -20,7 +20,10 @@ import ru.ulstu.user.model.User;
|
|||||||
import ru.ulstu.user.service.UserService;
|
import ru.ulstu.user.service.UserService;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import static junit.framework.TestCase.assertTrue;
|
import static junit.framework.TestCase.assertTrue;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
Loading…
Reference in New Issue
Block a user