Skip to content

Commit ff3ffc1

Browse files
Update Sync Suite servlet
Add db changelog
1 parent 85e6968 commit ff3ffc1

File tree

4 files changed

+103
-33
lines changed

4 files changed

+103
-33
lines changed

src/main/java/main/controllers/Project/SuiteController.java

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -91,21 +91,16 @@ private List<TestSuiteDto> fillTestSuites(List<TestSuiteDto> testSuites, boolean
9191
return testSuites;
9292
}
9393

94-
public void syncLegacyTests(TestSuiteDto template, Integer notExecutedFor, boolean removeNotExecutedResults) throws AqualityException {
95-
if(baseUser.isManager() || baseUser.getProjectUserBySuiteId(template.getId()).isManager()){
96-
TestRunDto testRunTemplate = new TestRunDto();
97-
testRunTemplate.setTest_suite_id(template.getId());
98-
testRunTemplate.setLimit(notExecutedFor);
99-
List<TestRunDto> testRuns = testRunDao.searchAll(testRunTemplate);
100-
List<TestDto> legacyTests = getLegacyTests(testRuns, template.getId());
94+
public void syncLegacyTests(List<TestDto> legacyTests, Integer suiteId, boolean removeNotExecutedResults) throws AqualityException {
95+
if(baseUser.isManager() || baseUser.getProjectUserBySuiteId(suiteId).isManager()){
10196
legacyTests.forEach(test -> {
10297
Test2SuiteDto test2Suite = new Test2SuiteDto();
10398
test2Suite.setTest_id(test.getId());
104-
test2Suite.setSuite_id(template.getId());
99+
test2Suite.setSuite_id(suiteId);
105100
try {
106101
test2SuiteDao.delete(test2Suite);
107102
if(removeNotExecutedResults) {
108-
removePendingResultsForTest(test);
103+
removePendingResultsForTest(suiteId, test.getId());
109104
}
110105
} catch (AqualityException e) {
111106
e.printStackTrace();
@@ -116,12 +111,8 @@ public void syncLegacyTests(TestSuiteDto template, Integer notExecutedFor, boole
116111
}
117112
}
118113

119-
private void removePendingResultsForTest(TestDto test) throws AqualityException {
120-
TestResultDto testResultTemplate = new TestResultDto();
121-
testResultTemplate.setTest_id(test.getId());
122-
testResultTemplate.setFinal_result_id(3);
123-
testResultTemplate.setTest_resolution_id(1);
124-
List<TestResultDto> testResults = testResultDao.searchAll(testResultTemplate);
114+
private void removePendingResultsForTest(Integer suiteId, Integer testId) throws AqualityException {
115+
List<TestResultDto> testResults = testResultDao.selectSuiteLegacyResults(suiteId, testId);
125116
testResults.forEach(testResult -> {
126117
try {
127118
testResultDao.delete(testResult);
@@ -131,20 +122,28 @@ private void removePendingResultsForTest(TestDto test) throws AqualityException
131122
});
132123
}
133124

134-
private List<TestDto> getLegacyTests(List<TestRunDto> testRuns, Integer suiteId) throws AqualityException {
135-
TestDto testTemplate = new TestDto();
136-
testTemplate.setTest_suite_id(suiteId);
137-
List<TestDto> tests = testController.get(testTemplate);
138-
for (TestRunDto testRun : testRuns) {
139-
TestResultDto testResultTemplate = new TestResultDto();
140-
testResultTemplate.setTest_run_id(testRun.getId());
141-
List<TestResultDto> testResults = testResultDao.searchAll(testResultTemplate);
142-
tests = tests.stream().filter(test -> {
143-
TestResultDto currentResult = testResults.stream().filter(result -> result.getTest_id().equals(test.getId())).findFirst().orElse(null);
144-
return currentResult == null || currentResult.getFinal_result_id() == 3;
145-
}).collect(Collectors.toList());
146-
}
125+
public List<TestDto> findLegacyTests(Integer suiteId, Integer notExecutedFor) throws AqualityException {
126+
if (baseUser.isManager() || baseUser.getProjectUserBySuiteId(suiteId).isManager()) {
127+
TestRunDto testRunTemplate = new TestRunDto();
128+
testRunTemplate.setTest_suite_id(suiteId);
129+
testRunTemplate.setLimit(notExecutedFor);
130+
List<TestRunDto> testRuns = testRunDao.searchAll(testRunTemplate);
131+
TestDto testTemplate = new TestDto();
132+
testTemplate.setTest_suite_id(suiteId);
133+
List<TestDto> tests = testController.get(testTemplate);
134+
for (TestRunDto testRun : testRuns) {
135+
TestResultDto testResultTemplate = new TestResultDto();
136+
testResultTemplate.setTest_run_id(testRun.getId());
137+
List<TestResultDto> testResults = testResultDao.searchAll(testResultTemplate);
138+
tests = tests.stream().filter(test -> {
139+
TestResultDto currentResult = testResults.stream().filter(result -> result.getTest_id().equals(test.getId())).findFirst().orElse(null);
140+
return currentResult == null || currentResult.getFinal_result_id() == 3;
141+
}).collect(Collectors.toList());
142+
}
147143

148-
return tests;
144+
return tests;
145+
} else {
146+
throw new AqualityPermissionsException("Account is not allowed to Sync Test Suite", baseUser);
147+
}
149148
}
150149
}

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
package main.model.db.dao.project;
22

3+
import com.mysql.cj.core.conf.url.ConnectionUrlParser;
4+
import main.exceptions.AqualityException;
35
import main.model.db.dao.DAO;
46
import main.model.dto.TestResultDto;
7+
import org.jetbrains.annotations.NotNull;
8+
9+
import java.util.ArrayList;
10+
import java.util.List;
511

612
public class TestResultDao extends DAO<TestResultDto> {
713
public TestResultDao() {
@@ -10,4 +16,20 @@ public TestResultDao() {
1016
insert = "{call INSERT_TEST_RESULT(?,?,?,?,?,?,?,?,?,?,?,?,?,?)}";
1117
remove = "{call REMOVE_TEST_RESULT(?)}";
1218
}
19+
20+
21+
private String syncSuiteQuery = "{call SELECT_LEGACY_RESULTS(?,?)}";
22+
23+
/**
24+
* @param suiteId suite id for search
25+
* @param testId test id for search
26+
* @return all not executed results till first executed
27+
* @throws AqualityException
28+
*/
29+
public List<TestResultDto> selectSuiteLegacyResults(@NotNull Integer suiteId, @NotNull Integer testId) throws AqualityException {
30+
List<ConnectionUrlParser.Pair<String, String>> parameters = new ArrayList<>();
31+
parameters.add(new ConnectionUrlParser.Pair<>("request_test_suite_id", suiteId.toString()));
32+
parameters.add(new ConnectionUrlParser.Pair<>("request_test_id", testId.toString()));
33+
return dtoMapper.mapObjects(CallStoredProcedure(syncSuiteQuery, parameters).toString());
34+
}
1335
}

src/main/java/main/view/Project/SyncSuiteServlet.java

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
import main.Session;
55
import main.exceptions.AqualityException;
6+
import main.model.dto.TestDto;
7+
import main.model.dto.TestRunDto;
68
import main.model.dto.TestSuiteDto;
79
import main.view.BaseServlet;
810
import main.view.IDelete;
@@ -15,7 +17,7 @@
1517
import java.util.List;
1618

1719
@WebServlet("/suite/sync")
18-
public class SyncSuiteServlet extends BaseServlet implements IGet {
20+
public class SyncSuiteServlet extends BaseServlet implements IGet, IPost {
1921

2022
@Override
2123
public void doGet(HttpServletRequest req, HttpServletResponse resp) {
@@ -24,16 +26,34 @@ public void doGet(HttpServletRequest req, HttpServletResponse resp) {
2426

2527
try {
2628
Integer notExecutedFor;
27-
boolean removeNotExecutedResults;
2829
Session session = createSession(req);
2930
if(!req.getParameterMap().containsKey("notExecutedFor")){
3031
throw new AqualityException("notExecutedFor is required parameter for Sync Suite");
3132
}
3233
notExecutedFor = getIntegerQueryParameter(req,"notExecutedFor");
33-
removeNotExecutedResults = getBooleanQueryParameter(req, "removeNotExecutedResults");
34+
Integer suiteId = getIntegerQueryParameter(req, "suiteId");
3435
TestSuiteDto testSuite = new TestSuiteDto();
3536
testSuite.getSearchTemplateFromRequestParameters(req);
36-
session.controllerFactory.getHandler(testSuite).syncLegacyTests(testSuite, notExecutedFor, removeNotExecutedResults);
37+
List<TestDto> legacyTests = session.controllerFactory.getHandler(testSuite).findLegacyTests(suiteId, notExecutedFor);
38+
setJSONContentType(resp);
39+
resp.getWriter().write(mapper.serialize(legacyTests));
40+
}catch (Exception e) {
41+
handleException(resp, e);
42+
}
43+
}
44+
45+
@Override
46+
public void doPost(HttpServletRequest req, HttpServletResponse resp) {
47+
setPostResponseHeaders(resp);
48+
setEncoding(resp);
49+
50+
try {
51+
Session session = createSession(req);
52+
String requestedJson = getRequestJson(req);
53+
boolean removeNotExecutedResults = getBooleanQueryParameter(req, "removeNotExecutedResults");
54+
Integer suiteId = getIntegerQueryParameter(req, "suiteId");
55+
List<TestDto> legacyTests = mapper.mapObjects(TestDto.class, requestedJson);
56+
session.controllerFactory.getHandler(new TestSuiteDto()).syncLegacyTests(legacyTests, suiteId, removeNotExecutedResults);
3757
setJSONContentType(resp);
3858
}catch (Exception e) {
3959
handleException(resp, e);

src/main/resources/db_changelog/db.changelog-0.3.4.xml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,4 +360,33 @@
360360
</rollback>
361361
</changeSet>
362362

363+
<changeSet id="create SELECT_LEGACY_RESULTS" author="v.kostyukevich">
364+
<sql endDelimiter="#">
365+
366+
DROP procedure IF EXISTS `SELECT_LEGACY_RESULTS`;
367+
368+
#
369+
370+
CREATE PROCEDURE `SELECT_LEGACY_RESULTS`(
371+
IN request_test_suite_id VARCHAR(11),
372+
IN request_test_id VARCHAR(11)
373+
)
374+
BEGIN
375+
SELECT results.* FROM test_results as results
376+
left join test_runs on test_run_id = test_runs.id
377+
378+
where test_suite_id = request_test_suite_id AND final_result_id = 3 AND test_id = request_test_id
379+
AND finish_time > COALESCE(
380+
(SELECT MAX(finish_time) FROM test_results
381+
left join test_runs on test_run_id = test_runs.id
382+
where test_suite_id = request_test_suite_id AND final_result_id != 3 AND test_id = request_test_id), TIMESTAMP('0001-01-01 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
383+
)
384+
;
385+
END
386+
</sql>
387+
<rollback>
388+
DROP procedure IF EXISTS `SELECT_LEGACY_RESULTS`;
389+
</rollback>
390+
</changeSet>
391+
363392
</databaseChangeLog>

0 commit comments

Comments
 (0)