Skip to content

Commit dec354e

Browse files
Merge pull request #34 from aquality-automation/feature/synk_lagacy_tests
Feature/synk lagacy tests
2 parents bc45bea + c848e47 commit dec354e

File tree

7 files changed

+187
-9
lines changed

7 files changed

+187
-9
lines changed

CHANGELOG.md

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

55
Features:
66
- Remove Customers Feature -> [View Issue](https://github.com/aquality-automation/aquality-tracking/issues/25)
7+
- Add possibility to sync testsuites according to Not Executed results -> [View Issue](https://github.com/aquality-automation/aquality-tracking/issues/32)
78

89
Bugfixes:
910
- It should not be possible to delete Customer that assigned to the projects -> [View Issue](https://github.com/aquality-automation/aquality-tracking/issues/9)

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

Lines changed: 66 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,28 @@
33
import main.controllers.BaseController;
44
import main.exceptions.AqualityException;
55
import main.exceptions.AqualityPermissionsException;
6-
import main.model.db.dao.project.SuiteStatisticDao;
7-
import main.model.db.dao.project.TestSuiteDao;
8-
import main.model.dto.SuiteStatisticDto;
9-
import main.model.dto.TestDto;
10-
import main.model.dto.TestSuiteDto;
11-
import main.model.dto.UserDto;
6+
import main.model.db.dao.project.*;
7+
import main.model.dto.*;
8+
import main.view.Project.TestResult;
129

1310
import java.util.List;
11+
import java.util.stream.Collectors;
1412

1513
public class SuiteController extends BaseController<TestSuiteDto> {
1614
private TestSuiteDao testSuiteDao;
15+
private TestRunDao testRunDao;
16+
private Test2SuiteDao test2SuiteDao;
17+
private TestResultDao testResultDao;
1718
private SuiteStatisticDao suiteStatisticDao;
1819
private TestController testController;
1920

2021
public SuiteController(UserDto user) {
2122
super(user);
2223
testSuiteDao = new TestSuiteDao();
24+
testRunDao = new TestRunDao();
25+
testResultDao = new TestResultDao();
2326
suiteStatisticDao = new SuiteStatisticDao();
27+
test2SuiteDao = new Test2SuiteDao();
2428
testController = new TestController(user);
2529
}
2630

@@ -74,6 +78,51 @@ public List<SuiteStatisticDto> get(SuiteStatisticDto template) throws AqualityEx
7478
}
7579
}
7680

81+
public List<TestDto> findLegacyTests(Integer suiteId, Integer notExecutedFor) throws AqualityException {
82+
if (baseUser.isManager() || baseUser.getProjectUserBySuiteId(suiteId).isEditor()) {
83+
TestRunDto testRunTemplate = new TestRunDto();
84+
testRunTemplate.setTest_suite_id(suiteId);
85+
testRunTemplate.setLimit(notExecutedFor);
86+
List<TestRunDto> testRuns = testRunDao.searchAll(testRunTemplate);
87+
TestDto testTemplate = new TestDto();
88+
testTemplate.setTest_suite_id(suiteId);
89+
List<TestDto> tests = testController.get(testTemplate);
90+
for (TestRunDto testRun : testRuns) {
91+
TestResultDto testResultTemplate = new TestResultDto();
92+
testResultTemplate.setTest_run_id(testRun.getId());
93+
List<TestResultDto> testResults = testResultDao.searchAll(testResultTemplate);
94+
tests = tests.stream().filter(test -> {
95+
TestResultDto currentResult = testResults.stream().filter(result -> result.getTest_id().equals(test.getId())).findFirst().orElse(null);
96+
return currentResult == null || currentResult.getFinal_result_id() == 3;
97+
}).collect(Collectors.toList());
98+
}
99+
100+
return tests;
101+
} else {
102+
throw new AqualityPermissionsException("Account is not allowed to Sync Test Suite", baseUser);
103+
}
104+
}
105+
106+
public void syncLegacyTests(List<TestDto> legacyTests, Integer suiteId, boolean removeNotExecutedResults) throws AqualityException {
107+
if(baseUser.isManager() || baseUser.getProjectUserBySuiteId(suiteId).isEditor()){
108+
legacyTests.forEach(test -> {
109+
Test2SuiteDto test2Suite = new Test2SuiteDto();
110+
test2Suite.setTest_id(test.getId());
111+
test2Suite.setSuite_id(suiteId);
112+
try {
113+
test2SuiteDao.delete(test2Suite);
114+
if(removeNotExecutedResults) {
115+
removePendingResultsForTest(suiteId, test.getId());
116+
}
117+
} catch (AqualityException e) {
118+
e.printStackTrace();
119+
}
120+
});
121+
}else{
122+
throw new AqualityPermissionsException("Account is not allowed to Sync Test Suite", baseUser);
123+
}
124+
}
125+
77126
private List<TestSuiteDto> fillTestSuites(List<TestSuiteDto> testSuites, boolean withChildren) throws AqualityException {
78127
if(withChildren){
79128
for (TestSuiteDto suite: testSuites){
@@ -86,4 +135,15 @@ private List<TestSuiteDto> fillTestSuites(List<TestSuiteDto> testSuites, boolean
86135
}
87136
return testSuites;
88137
}
138+
139+
private void removePendingResultsForTest(Integer suiteId, Integer testId) throws AqualityException {
140+
List<TestResultDto> testResults = testResultDao.selectSuiteLegacyResults(suiteId, testId);
141+
testResults.forEach(testResult -> {
142+
try {
143+
testResultDao.delete(testResult);
144+
} catch (AqualityException e) {
145+
e.printStackTrace();
146+
}
147+
});
148+
}
89149
}

src/main/java/main/controllers/Project/Test2SuiteController.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,7 @@ public List<Test2SuiteDto> get(Test2SuiteDto template) throws AqualityException
4343
return test2SuiteDao.searchAll(template);
4444
}
4545

46-
//TODO Refactoring
47-
public List<TestSuiteDto> convertToSuites(List<Test2SuiteDto> test2Suites, List<TestSuiteDto> suites) throws AqualityException {
46+
List<TestSuiteDto> convertToSuites(List<Test2SuiteDto> test2Suites, List<TestSuiteDto> suites) {
4847
return test2Suites.stream().map(test2suite
4948
-> suites.stream().filter(x -> x.getId().equals(test2suite.getSuite_id())).findFirst().orElse(null)).collect(Collectors.toList());
5049
}

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/model/dto/BaseDto.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public List<Pair<String, String>> getSearchParameters() throws AqualityException
4343
if(nameAnnotation != null && searchAnnotation != null){
4444
field.setAccessible(true);
4545
String value = getStringValue(field.get(this));
46-
if(nameAnnotation.name().equals("request_limit") && value.equals("0")){
46+
if(nameAnnotation.name().equals("request_limit") && (value.equals("0") || value.equals(""))){
4747
value = "100000";
4848
}
4949
Pair<String, String> pair = new Pair<>(nameAnnotation.name(), value);
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package main.view.Project;
2+
3+
4+
import main.Session;
5+
import main.exceptions.AqualityException;
6+
import main.model.dto.TestDto;
7+
import main.model.dto.TestRunDto;
8+
import main.model.dto.TestSuiteDto;
9+
import main.view.BaseServlet;
10+
import main.view.IDelete;
11+
import main.view.IGet;
12+
import main.view.IPost;
13+
14+
import javax.servlet.annotation.WebServlet;
15+
import javax.servlet.http.HttpServletRequest;
16+
import javax.servlet.http.HttpServletResponse;
17+
import java.util.List;
18+
19+
@WebServlet("/suite/sync")
20+
public class SyncSuiteServlet extends BaseServlet implements IGet, IPost {
21+
22+
@Override
23+
public void doGet(HttpServletRequest req, HttpServletResponse resp) {
24+
setPostResponseHeaders(resp);
25+
setEncoding(resp);
26+
27+
try {
28+
Integer notExecutedFor;
29+
Session session = createSession(req);
30+
if(!req.getParameterMap().containsKey("notExecutedFor")){
31+
throw new AqualityException("notExecutedFor is required parameter for Sync Suite");
32+
}
33+
notExecutedFor = getIntegerQueryParameter(req,"notExecutedFor");
34+
Integer suiteId = getIntegerQueryParameter(req, "suiteId");
35+
TestSuiteDto testSuite = new TestSuiteDto();
36+
testSuite.getSearchTemplateFromRequestParameters(req);
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);
57+
setJSONContentType(resp);
58+
}catch (Exception e) {
59+
handleException(resp, e);
60+
}
61+
}
62+
63+
@Override
64+
public void doOptions(HttpServletRequest req, HttpServletResponse resp) {
65+
setOptionsResponseHeaders(resp);
66+
}
67+
}

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)