Skip to content

Commit 3388e22

Browse files
Save work
1 parent 9b98450 commit 3388e22

File tree

8 files changed

+159
-50
lines changed

8 files changed

+159
-50
lines changed

src/main/java/main/controllers/Project/IssueController.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,29 @@
55
import main.exceptions.AqualityPermissionsException;
66
import main.model.db.dao.project.IssueDao;
77
import main.model.db.dao.project.IssueStatusDao;
8+
import main.model.db.dao.project.TestResultDao;
89
import main.model.db.dao.project.UserDao;
9-
import main.model.dto.project.IssueDto;
10-
import main.model.dto.project.IssueStatusDto;
11-
import main.model.dto.project.ResultResolutionDto;
10+
import main.model.dto.project.*;
1211
import main.model.dto.settings.UserDto;
12+
import main.utils.RegexpUtil;
1313

1414
import java.util.ArrayList;
1515
import java.util.List;
16-
import java.util.Objects;
16+
import java.util.stream.Collectors;
1717

1818
public class IssueController extends BaseController<IssueDto> {
1919
private IssueDao issueDao;
2020
private IssueStatusDao issueStatusDao;
2121
private UserDao userDao;
22+
private TestResultDao testResultDao;
2223
private ResultResolutionController resultResolutionController;
2324

2425
public IssueController(UserDto user) {
2526
super(user);
2627
issueDao = new IssueDao();
2728
issueStatusDao = new IssueStatusDao();
2829
userDao = new UserDao();
30+
testResultDao = new TestResultDao();
2931
resultResolutionController = new ResultResolutionController(user);
3032
}
3133
@Override
@@ -55,6 +57,19 @@ public List<IssueStatusDto> get(IssueStatusDto status) throws AqualityException
5557
return issueStatusDao.searchAll(status);
5658
}
5759

60+
public void updateResultsWithIssue(IssueDto issue) throws AqualityException {
61+
TestResultDto resultSearchTemplate = new TestResultDto();
62+
resultSearchTemplate.setProject_id(issue.getProject_id());
63+
List<TestResultDto> results = testResultDao.searchAll(resultSearchTemplate);
64+
results = results.stream().filter(x -> x.getFinal_result_id() != 2 && x.getFail_reason() != null && x.getIssue_id() == null).collect(Collectors.toList());
65+
for (TestResultDto result : results) {
66+
if (RegexpUtil.match(result.getFail_reason(), issue.getExpression())) {
67+
result.setIssue_id(issue.getId());
68+
testResultDao.create(result);
69+
}
70+
}
71+
}
72+
5873
private List<IssueDto> fillIssues(List<IssueDto> issues) throws AqualityException {
5974
if(issues.isEmpty()) {
6075
return issues;

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

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,22 @@ public class ResultController extends BaseController<TestResultDto> {
1414
private TestResultDao testResultDao;
1515
private TestResultStatDao testResultStatDao;
1616
private TestController testController;
17-
private ProjectUserController projectUserController;
18-
private ResultResolutionController resultResolutionController;
1917
private FinalResultController finalResultController;
2018
private ProjectController projectController;
2119
private StepController stepController;
2220
private StepResultController stepResultController;
21+
private IssueController issueController;
2322

2423
public ResultController(UserDto user) {
2524
super(user);
2625
testResultDao = new TestResultDao();
2726
testResultStatDao = new TestResultStatDao();
28-
projectUserController = new ProjectUserController(user);
2927
testController = new TestController(user);
30-
resultResolutionController = new ResultResolutionController(user);
3128
finalResultController = new FinalResultController(user);
3229
projectController = new ProjectController(user);
3330
stepController = new StepController(user);
3431
stepResultController = new StepResultController(user);
32+
issueController = new IssueController(user);
3533
}
3634

3735
@Override
@@ -50,9 +48,6 @@ public TestResultDto create(TestResultDto template) throws AqualityException {
5048
@Override
5149
public List<TestResultDto> get(TestResultDto template) throws AqualityException {
5250
if (baseUser.isFromGlobalManagement() || baseUser.getProjectUser(template.getProject_id()).isViewer()) {
53-
if (template.getLimit() == null) {
54-
template.setLimit(0);
55-
}
5651
return fillResults(testResultDao.searchAll(template));
5752
} else {
5853
throw new AqualityPermissionsException("Account is not allowed to view Test Results", baseUser);
@@ -114,33 +109,35 @@ private List<TestResultDto> fillResults(List<TestResultDto> results) throws Aqua
114109

115110
if (results.size() > 0) {
116111
List<FinalResultDto> finalResults = finalResultController.get(new FinalResultDto());
117-
List<ResultResolutionDto> resolutions = resultResolutionController.get(new ResultResolutionDto());
112+
IssueDto issueDto = new IssueDto();
113+
issueDto.setProject_id(results.get(0).getProject_id());
114+
List<IssueDto> issues = issueController.get(issueDto);
118115

119116
TestDto testTemplate = new TestDto();
120117
testTemplate.setProject_id(results.get(0).getProject_id());
121118
List<TestDto> tests = testController.get(testTemplate);
122119

123120
ProjectUserDto projectUserDto = new ProjectUserDto();
124121
projectUserDto.setProject_id(results.get(0).getProject_id());
125-
List<ProjectUserDto> projectUsers = projectUserController.get(projectUserDto);
126122

127123
for (TestResultDto result : results) {
128-
fillResult(result, finalResults, resolutions, tests, projectUsers);
124+
fillResult(result, finalResults, tests, issues);
129125
}
130126
}
131127

132128
return results;
133129
}
134130

135-
private void fillResult(TestResultDto result, List<FinalResultDto> finalResults, List<ResultResolutionDto> resolutions, List<TestDto> tests, List<ProjectUserDto> projectUsers) throws AqualityException {
131+
private void fillResult(TestResultDto result, List<FinalResultDto> finalResults, List<TestDto> tests, List<IssueDto> issues) throws AqualityException {
136132
if (projectController.isStepsEnabled(result.getProject_id())) {
137133
fillResultSteps(result);
138134
}
139135

140136
result.setFinal_result(finalResults.stream().filter(x -> x.getId().equals(result.getFinal_result_id())).findFirst().orElse(null));
141137
result.setTest(tests.stream().filter(x -> x.getId().equals(result.getTest_id())).findFirst().orElse(null));
142-
result.setTest_resolution(resolutions.stream().filter(x -> x.getId().equals(result.getTest_resolution_id())).findFirst().orElse(null));
143-
fillResultAssignee(result, projectUsers);
138+
if(result.getIssue_id() != null) {
139+
result.setIssue(issues.stream().filter(x -> x.getId().equals(result.getIssue_id())).findFirst().orElse(null));
140+
}
144141
}
145142

146143
private void fillResultSteps(TestResultDto result) throws AqualityException {
@@ -150,11 +147,4 @@ private void fillResultSteps(TestResultDto result) throws AqualityException {
150147
result.setSteps(stepResultController.get(stepResultTemplate));
151148
}
152149

153-
private void fillResultAssignee(TestResultDto result, List<ProjectUserDto> projectUsers) throws AqualityException {
154-
if (result.getAssignee() != null) {
155-
ProjectUserDto projectUser = projectUsers.stream().filter(user -> user.getUser_id().equals(result.getAssignee())).findFirst().orElse(null);
156-
result.setAssigned_user(projectUser);
157-
}
158-
}
159-
160150
}

src/main/java/main/exceptions/AqualitySQLException.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@ public AqualitySQLException(SQLException exception) {
1212

1313
private static String getErrorMessage(SQLException exception){
1414
switch (exception.getSQLState()){
15-
case "23516":
1615
case "45000":
16+
return exception.getMessage();
17+
case "23516":
1718
case "23505":
1819
return "You are trying to create duplicate entity.";
1920
case "42000":

src/main/java/main/model/db/imports/BaseImporter.java

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,15 @@ class BaseImporter {
1919
private ControllerFactory controllerFactory;
2020
private String pattern;
2121
protected File file;
22-
private List<PredefinedResolutionDto> predefinedResolutions;
22+
private List<IssueDto> issues;
2323

2424
BaseImporter(int projectId, String pattern, UserDto user) throws AqualityException {
2525
this.projectId = projectId;
2626
this.pattern = pattern;
2727
controllerFactory = new ControllerFactory(user);
28-
PredefinedResolutionDto predefinedResolutionTemplate = new PredefinedResolutionDto();
29-
predefinedResolutionTemplate.setProject_id(this.projectId);
30-
predefinedResolutions = controllerFactory.getHandler(predefinedResolutionTemplate).get(predefinedResolutionTemplate);
28+
IssueDto issueTemplate = new IssueDto();
29+
issueTemplate.setProject_id(this.projectId);
30+
issues = controllerFactory.getHandler(issueTemplate).get(issueTemplate);
3131
}
3232

3333
private List<TestResultDto> existingResults = new ArrayList<>();
@@ -215,7 +215,7 @@ private void createResult(TestResultDto result, boolean update) throws AqualityE
215215
}
216216

217217
private void predictResultResolution(TestResultDto result) throws AqualityException {
218-
if(!tryFillByPredefinedResolution(result, predefinedResolutions)) {
218+
if(!tryFillByIssue(result, issues)) {
219219
updateResultWithSimilarError(result);
220220
}
221221
}
@@ -261,13 +261,11 @@ private TestResultDto compareByRegexp(TestResultDto result, List<TestResultDto>
261261
return null;
262262
}
263263

264-
private boolean tryFillByPredefinedResolution(TestResultDto result, List<PredefinedResolutionDto> predefinedResolutions) {
264+
private boolean tryFillByIssue(TestResultDto result, List<IssueDto> issues) {
265265
if (result.getFail_reason() != null) {
266-
for (PredefinedResolutionDto predefinedResolution : predefinedResolutions) {
267-
if (RegexpUtil.match(result.getFail_reason(), predefinedResolution.getExpression())) {
268-
result.setTest_resolution_id(predefinedResolution.getResolution_id());
269-
result.setComment(predefinedResolution.getComment());
270-
result.setAssignee(predefinedResolution.getAssignee());
266+
for (IssueDto issue : issues) {
267+
if (RegexpUtil.match(result.getFail_reason(), issue.getExpression())) {
268+
result.setIssue_id(issue.getId());
271269
return true;
272270
}
273271
}

src/main/java/main/model/dto/BaseDto.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public List<Pair<String, String>> getSearchParameters() throws AqualityException
4444
field.setAccessible(true);
4545
String value = getStringValue(field.get(this));
4646
if(nameAnnotation.name().equals("request_limit") && (value.equals("0") || value.equals(""))){
47-
value = "100000";
47+
value = "";
4848
}
4949
Pair<String, String> pair = new Pair<>(nameAnnotation.name(), value);
5050
list.add(pair);
@@ -94,7 +94,7 @@ public List<Pair<String, String>> getIdAndProjectIdSearchParameters() throws Aqu
9494
value = getStringValue(field.get(this));
9595
}
9696
if (nameAnnotation.name().equals("request_limit") && (value.equals("0") || value.equals(""))) {
97-
value = "100000";
97+
value = "";
9898
}
9999
Pair<String, String> pair = new Pair<>(nameAnnotation.name(), value);
100100
list.add(pair);
@@ -127,7 +127,7 @@ public List<Pair<String, String>> getIdSearchParameters(Integer id) throws Aqual
127127
value = id.toString();
128128
}
129129
if(nameAnnotation.name().equals("request_limit") && (value.equals("0") || value.equals(""))){
130-
value = "100000";
130+
value = "";
131131
}
132132
Pair<String, String> pair = new Pair<>(nameAnnotation.name(), value);
133133
list.add(pair);

src/main/java/main/model/dto/project/TestResultDto.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,5 @@ public class TestResultDto extends BaseDto {
8585
@DataBaseSearchable
8686
@DataBaseInsert
8787
private Integer issue_id;
88+
private IssueDto issue;
8889
}

src/main/java/main/view/Project/IssueServlet.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,12 @@ public void doPost(HttpServletRequest req, HttpServletResponse resp) {
3737
try {
3838
Session session = createSession(req);
3939
String requestedJson = getRequestJson(req);
40+
Boolean update = getBooleanQueryParameter(req, "assign");
4041
IssueDto issue = mapper.mapObject(IssueDto.class, requestedJson);
4142
issue = session.controllerFactory.getHandler(issue).create(issue);
43+
if(update){
44+
session.controllerFactory.getHandler(issue).updateResultsWithIssue(issue);
45+
}
4246
setJSONContentType(resp);
4347
resp.getWriter().write(mapper.serialize(issue));
4448
}catch (Exception e) {

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

Lines changed: 111 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -488,31 +488,35 @@
488488
IN request_fail_reason VARCHAR(150),
489489
IN request_fail_reason_regex VARCHAR(500),
490490
IN request_issue_id VARCHAR(11),
491-
In request_limit INT(10)
491+
In request_limit VARCHAR(11)
492492
)
493493
BEGIN
494+
declare valid_limit int;
495+
SET valid_limit = get_valid_limit(request_limit);
496+
494497
IF(request_fail_reason_regex = '') THEN SET request_fail_reason_regex = '.*';
495498
END IF;
496499

497500
SELECT * FROM test_results as res
498-
WHERE empty_or_equal(request_id, id)
499-
AND empty_or_equal(request_project_id, project_id)
500-
AND empty_or_equal(request_test_id, test_id)
501-
AND empty_or_equal(request_final_result_id, final_result_id)
502-
AND empty_or_equal(request_test_run_id, test_run_id)
503-
AND empty_or_equal(request_test_resolution_id, test_resolution_id)
504-
AND empty_or_equal(request_debug, debug)
505-
AND (request_fail_reason = '' OR INSTR(fail_reason, request_fail_reason) > 0)
501+
WHERE (request_id='' OR request_id=id)
502+
AND (request_project_id='' OR request_project_id=project_id)
503+
AND (request_test_id='' OR request_test_id=test_id)
504+
AND (request_final_result_id='' OR request_final_result_id=final_result_id)
505+
AND (request_test_run_id='' OR request_test_run_id=test_run_id)
506+
AND (request_test_resolution_id='' OR request_test_resolution_id=test_resolution_id)
507+
AND (request_debug='' OR request_debug=debug)
508+
AND (request_fail_reason='' OR INSTR(fail_reason, request_fail_reason) > 0)
506509
AND IFNULL(fail_reason, '') REGEXP request_fail_reason_regex
507-
AND empty_or_equal(request_issue_id, issue_id)
510+
AND (request_issue_id='' OR request_issue_id=issue_id)
508511
ORDER BY start_date DESC
509-
LIMIT request_limit
512+
LIMIT valid_limit
510513
;
511514
END
512515
</sql>
513516
<rollback>
514517
</rollback>
515518
</changeSet>
519+
516520
<changeSet id="create SELECT_ISSUE_STATUS" author="v.kostyukevich">
517521
<sql endDelimiter="#">
518522

@@ -531,6 +535,102 @@
531535
</rollback>
532536
</changeSet>
533537

538+
<changeSet id="create issues_BEFORE_INSERT" author="v.kostyukevich">
539+
<sql endDelimiter="#">
540+
541+
DROP TRIGGER IF EXISTS `issues_BEFORE_INSERT`;
542+
543+
#
544+
CREATE TRIGGER `issues_BEFORE_INSERT` BEFORE INSERT ON `issues` FOR EACH ROW
545+
BEGIN
546+
IF EXISTS (SELECT * FROM issues WHERE title = NEW.title AND project_id = NEW.project_id)
547+
THEN SIGNAL SQLSTATE '45000'
548+
SET MESSAGE_TEXT = 'Issue with this title already exists in this Project!';
549+
END IF;
550+
551+
IF EXISTS (SELECT * FROM issues WHERE expression = NEW.expression AND project_id = NEW.project_id)
552+
THEN SIGNAL SQLSTATE '45000'
553+
SET MESSAGE_TEXT = 'Issue with this expression already exists in this Project!';
554+
END IF;
555+
END
556+
557+
</sql>
558+
<rollback>
559+
</rollback>
560+
</changeSet>
561+
562+
<changeSet id="create issues_BEFORE_UPDATE" author="v.kostyukevich">
563+
<sql endDelimiter="#">
564+
565+
DROP TRIGGER IF EXISTS `issues_BEFORE_UPDATE`;
566+
567+
#
568+
CREATE TRIGGER `issues_BEFORE_UPDATE` BEFORE UPDATE ON `issues` FOR EACH ROW
569+
BEGIN
570+
IF EXISTS (SELECT * FROM issues WHERE title = NEW.title AND project_id = NEW.project_id AND id != NEW.id)
571+
THEN SIGNAL SQLSTATE '45000'
572+
SET MESSAGE_TEXT = 'Issue with this title already exists in this Project!';
573+
END IF;
574+
575+
IF EXISTS (SELECT * FROM issues WHERE expression = NEW.expression AND project_id = NEW.project_id AND id != NEW.id)
576+
THEN SIGNAL SQLSTATE '45000'
577+
SET MESSAGE_TEXT = 'Issue with this expression already exists in this Project!';
578+
END IF;
579+
END
580+
581+
</sql>
582+
<rollback>
583+
</rollback>
584+
</changeSet>
585+
586+
<changeSet id="update SELECT_TEST_RUN with limit function" author="v.kostyukevich">
587+
<sql endDelimiter="#">
588+
589+
DROP PROCEDURE IF EXISTS `SELECT_TEST_RUN`;
590+
591+
#
592+
CREATE PROCEDURE `SELECT_TEST_RUN`(
593+
IN request_id VARCHAR(10),
594+
IN request_build_name VARCHAR(500),
595+
IN request_milestone_id VARCHAR(10),
596+
IN request_test_suite_id VARCHAR(10),
597+
IN request_project_id VARCHAR(10),
598+
IN request_execution_environment VARCHAR(500),
599+
IN request_debug VARCHAR(1),
600+
IN request_label_id VARCHAR(11),
601+
IN request_limit VARCHAR(11)
602+
)
603+
BEGIN
604+
declare valid_limit int;
605+
SET valid_limit = get_valid_limit(request_limit);
606+
607+
SELECT
608+
runs.*,
609+
mil.name as milestone_name,
610+
suite.name as testsuite_name
611+
612+
FROM union_reporting.test_runs as runs
613+
LEFT JOIN union_reporting.milestones as mil ON runs.milestone_id = mil.id
614+
LEFT JOIN union_reporting.test_suites as suite ON runs.test_suite_id = suite.id
615+
616+
WHERE (request_id= '' OR runs.id=request_id)
617+
AND (request_build_name = '' OR build_name=request_build_name)
618+
AND (request_milestone_id = '' OR milestone_id=request_milestone_id OR IF(request_milestone_id=0, milestone_id IS NULL, request_milestone_id = ''))
619+
AND (request_test_suite_id = '' OR test_suite_id=request_test_suite_id)
620+
AND (request_project_id = '' OR runs.project_id=request_project_id)
621+
AND (request_execution_environment = '' OR execution_environment=request_execution_environment)
622+
AND (request_debug = '' OR runs.debug=request_debug)
623+
AND (request_label_id = '' OR runs.label_id=request_label_id)
624+
ORDER BY finish_time DESC
625+
LIMIT valid_limit
626+
;
627+
END
628+
629+
</sql>
630+
<rollback>
631+
</rollback>
632+
</changeSet>
633+
534634

535635

536636
</databaseChangeLog>

0 commit comments

Comments
 (0)