Skip to content

Commit c8d70a6

Browse files
Merge pull request #38 from aquality-automation/feature/milestone_feature
Feature/milestone feature
2 parents a2eaaad + bb4b526 commit c8d70a6

File tree

8 files changed

+118
-9
lines changed

8 files changed

+118
-9
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ Features:
77

88
Bugfixes:
99
- Add ALLOW_UNQUOTED_CONTROL_CHARS for mapper -> [View Issue](https://github.com/aquality-automation/aquality-tracking/issues/45)
10+
- Milestone View: Add functionality that displays the latest results of the tests from the test runs -> [View Issue](https://github.com/aquality-automation/aquality-tracking/issues/11)
1011

1112
## 0.3.4 (2019-12-10)
1213

src/main/java/main/controllers/Project/MilestoneController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public List<MilestoneDto> get(MilestoneDto template) throws AqualityException {
3737

3838
@Override
3939
public boolean delete(MilestoneDto template) throws AqualityException {
40-
if(baseUser.isManager() || baseUser.getProjectUser(template.getProject_id()).isEditor()){
40+
if(baseUser.isManager() || baseUser.getProjectUserByMilestoneId(template.getId()).isEditor()){
4141
return milestoneDao.delete(template);
4242
}else{
4343
throw new AqualityPermissionsException("Account is not allowed to delete Milestones", baseUser);

src/main/java/main/controllers/Project/ResultController.java

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,14 @@ public boolean delete(TestResultDto template) throws AqualityException {
6969
}
7070
}
7171

72+
public List<TestResultDto> getLatestResultsByMilestone(Integer milestoneId) throws AqualityException {
73+
if(baseUser.isFromGlobalManagement() || baseUser.getProjectUserByMilestoneId(milestoneId).isViewer()){
74+
return fillResults(testResultDao.selectLatestResultsByMilestone(milestoneId));
75+
}else{
76+
throw new AqualityPermissionsException("Account is not allowed to view Test Results", baseUser);
77+
}
78+
}
79+
7280
public boolean updateMultipleTestResults(List<TestResultDto> entities) throws AqualityException {
7381
if(entities.size() > 0 && (baseUser.isManager() || baseUser.getProjectUser(entities.get(0).getProject_id()).isEditor())){
7482
return testResultDao.updateMultiply(entities);
@@ -107,27 +115,32 @@ private List<TestResultDto> fillResults(List<TestResultDto> results) throws Aqua
107115
if(results.size() > 0){
108116
List<FinalResultDto> finalResults = finalResultController.get(new FinalResultDto());
109117
List<ResultResolutionDto> resolutions = resultResolutionController.get(new ResultResolutionDto());
118+
110119
TestDto testTemplate = new TestDto();
111120
testTemplate.setProject_id(results.get(0).getProject_id());
112121
List<TestDto> tests = testDao.searchAll(testTemplate);
113122

123+
ProjectUserDto projectUserDto = new ProjectUserDto();
124+
projectUserDto.setProject_id(results.get(0).getProject_id());
125+
List<ProjectUserDto> projectUsers = projectUserController.get(projectUserDto);
126+
114127
for (TestResultDto result: results){
115-
fillResult(result, finalResults, resolutions, tests);
128+
fillResult(result, finalResults, resolutions, tests, projectUsers);
116129
}
117130
}
118131

119132
return results;
120133
}
121134

122-
private void fillResult(TestResultDto result, List<FinalResultDto> finalResults, List<ResultResolutionDto> resolutions, List<TestDto> tests) throws AqualityException {
135+
private void fillResult(TestResultDto result, List<FinalResultDto> finalResults, List<ResultResolutionDto> resolutions, List<TestDto> tests, List<ProjectUserDto> projectUsers) throws AqualityException {
123136
if (projectController.isStepsEnabled(result.getProject_id())) {
124137
fillResultSteps(result);
125138
}
126139

127140
result.setFinal_result(finalResults.stream().filter(x -> x.getId().equals(result.getFinal_result_id())).findFirst().orElse(null));
128141
result.setTest(tests.stream().filter(x -> x.getId().equals(result.getTest_id())).findFirst().orElse(null));
129142
result.setTest_resolution(resolutions.stream().filter(x -> x.getId().equals(result.getTest_resolution_id())).findFirst().orElse(null));
130-
fillResultAssignee(result);
143+
fillResultAssignee(result, projectUsers);
131144
}
132145

133146
private void fillResultSteps(TestResultDto result) throws AqualityException {
@@ -137,12 +150,10 @@ private void fillResultSteps(TestResultDto result) throws AqualityException {
137150
result.setSteps(stepResultController.get(stepResultTemplate));
138151
}
139152

140-
private void fillResultAssignee(TestResultDto result) throws AqualityException {
153+
private void fillResultAssignee(TestResultDto result, List<ProjectUserDto> projectUsers) throws AqualityException {
141154
if (result.getAssignee() != null) {
142-
ProjectUserDto projectUserDto = new ProjectUserDto();
143-
projectUserDto.setUser_id(result.getAssignee());
144-
projectUserDto.setProject_id(result.getProject_id());
145-
result.setAssigned_user(projectUserController.get(projectUserDto).get(0));
155+
ProjectUserDto projectUser = projectUsers.stream().filter(user -> user.getUser_id().equals(result.getAssignee())).findFirst().orElse(null);
156+
result.setAssigned_user(projectUser);
146157
}
147158
}
148159

src/main/java/main/model/db/dao/project/TestResultDao.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public TestResultDao() {
1919

2020

2121
private String syncSuiteQuery = "{call SELECT_LEGACY_RESULTS(?,?)}";
22+
private String latestResultsByMilestone = "{call SELECT_LATEST_RESULTS_BY_MILESTONE(?)}";
2223

2324
/**
2425
* @param suiteId suite id for search
@@ -32,4 +33,10 @@ public List<TestResultDto> selectSuiteLegacyResults(@NotNull Integer suiteId, @N
3233
parameters.add(new ConnectionUrlParser.Pair<>("request_test_id", testId.toString()));
3334
return dtoMapper.mapObjects(CallStoredProcedure(syncSuiteQuery, parameters).toString());
3435
}
36+
37+
public List<TestResultDto> selectLatestResultsByMilestone(@NotNull Integer milestoneId) throws AqualityException {
38+
List<ConnectionUrlParser.Pair<String, String>> parameters = new ArrayList<>();
39+
parameters.add(new ConnectionUrlParser.Pair<>("request_milestone_id", milestoneId.toString()));
40+
return dtoMapper.mapObjects(CallStoredProcedure(latestResultsByMilestone, parameters).toString());
41+
}
3542
}

src/main/java/main/model/dto/UserDto.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import main.annotations.DataBaseName;
77
import main.annotations.DataBaseSearchable;
88
import main.exceptions.AqualityException;
9+
import main.model.db.dao.project.MilestoneDao;
910
import main.model.db.dao.project.TestSuiteDao;
1011
import main.utils.BooleanUtil;
1112

@@ -112,6 +113,14 @@ public ProjectUserDto getProjectUserBySuiteId(Integer suite_id) throws AqualityE
112113
return getProjectUser(template.getProject_id());
113114
}
114115

116+
public ProjectUserDto getProjectUserByMilestoneId(Integer milestone_id) throws AqualityException {
117+
MilestoneDao milestoneDao = new MilestoneDao();
118+
MilestoneDto template = new MilestoneDto();
119+
template.setId(milestone_id);
120+
template = milestoneDao.searchAll(template).get(0);
121+
return getProjectUser(template.getProject_id());
122+
}
123+
115124
public UserDto toPublic(){
116125
this.setPassword("");
117126
this.setSession_code("");
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package main.view.Project;
2+
3+
4+
import main.Session;
5+
import main.model.dto.TestResultDto;
6+
import main.model.dto.TestSuiteDto;
7+
import main.view.BaseServlet;
8+
import main.view.IDelete;
9+
import main.view.IGet;
10+
import main.view.IPost;
11+
12+
import javax.servlet.annotation.WebServlet;
13+
import javax.servlet.http.HttpServletRequest;
14+
import javax.servlet.http.HttpServletResponse;
15+
import java.util.List;
16+
17+
@WebServlet("/milestone/results")
18+
public class MilestoneTestResultsServlet extends BaseServlet implements IGet{
19+
20+
@Override
21+
public void doGet(HttpServletRequest req, HttpServletResponse resp){
22+
setPostResponseHeaders(resp);
23+
setEncoding(resp);
24+
25+
try {
26+
Session session = createSession(req);
27+
Integer milestoneId = getIntegerQueryParameter(req, "milestoneId");
28+
List<TestResultDto> testResults = session.controllerFactory.getHandler(new TestResultDto()).getLatestResultsByMilestone(milestoneId);
29+
setJSONContentType(resp);
30+
resp.getWriter().write(mapper.serialize(testResults));
31+
}catch (Exception e) {
32+
handleException(resp, e);
33+
}
34+
}
35+
36+
@Override
37+
public void doOptions(HttpServletRequest req, HttpServletResponse resp) {
38+
setOptionsResponseHeaders(resp);
39+
}
40+
}

src/main/resources/db_changelog/changelog.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,5 @@
2727
<include file="db.changelog-0.3.1.xml" relativeToChangelogFile="true"/>
2828
<include file="db.changelog-0.3.3.xml" relativeToChangelogFile="true"/>
2929
<include file="db.changelog-0.3.4.xml" relativeToChangelogFile="true"/>
30+
<include file="db.changelog-0.3.5.xml" relativeToChangelogFile="true"/>
3031
</databaseChangeLog>
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<databaseChangeLog
3+
xmlns="http://www.liquibase.org/xml/ns/dbchangelog/1.9"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog/1.9
6+
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.9.xsd">
7+
8+
<changeSet id="create SELECT_LATEST_RESULTS_BY_MILESTONE" author="v.kostyukevich">
9+
<sql endDelimiter="#">
10+
11+
DROP procedure IF EXISTS `SELECT_LATEST_RESULTS_BY_MILESTONE`;
12+
13+
#
14+
15+
CREATE PROCEDURE `SELECT_LATEST_RESULTS_BY_MILESTONE`(
16+
IN request_milestone_id VARCHAR(11)
17+
)
18+
BEGIN
19+
SELECT *
20+
FROM test_results
21+
JOIN
22+
(
23+
SELECT res.test_id, MAX(res.finish_date) AS finish_date, test_suite_id
24+
FROM
25+
(
26+
SELECT test_results.*, test_runs.test_suite_id FROM test_results
27+
RIGHT JOIN test_runs ON test_results.test_run_id = test_runs.id
28+
WHERE milestone_id = request_milestone_id AND test_runs.debug = 0
29+
) AS res
30+
GROUP BY res.test_id, res.test_suite_id
31+
) AS tests
32+
ON test_results.test_id = tests.test_id AND test_results.finish_date = tests.finish_date;
33+
END
34+
</sql>
35+
<rollback>
36+
DROP procedure IF EXISTS `SELECT_LATEST_RESULTS_BY_MILESTONE`;
37+
</rollback>
38+
</changeSet>
39+
40+
</databaseChangeLog>

0 commit comments

Comments
 (0)