Skip to content

Commit 2bddf03

Browse files
Merge pull request #27 from aquality-automation/feature/regexp_for_failures
Add possibility to add search regexp
2 parents 26ee5f6 + 4951d2b commit 2bddf03

File tree

6 files changed

+170
-2
lines changed

6 files changed

+170
-2
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
Features:
66
- Rename Import Token to API Token -> [View Issue](https://github.com/aquality-automation/aquality-tracking-ui/issues/23)
77
- Steps Feature -> [View Issue](https://github.com/aquality-automation/aquality-tracking-ui/issues/46)
8+
- Regex Search by Errors for Import -> [View Issue](https://github.com/aquality-automation/aquality-tracking/issues/17)
89

910
Bugfixes:
1011
- Local Manager can see Local Permissions page -> [View Issue](https://github.com/aquality-automation/aquality-tracking-ui/issues/22)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ public class ProjectDao extends DAO<ProjectDto> {
77
public ProjectDao(){
88
super(ProjectDto.class);
99
select = "{call SELECT_PROJECT(?,?,?,?)}";
10-
insert = "{call INSERT_PROJECT(?,?,?,?)}";
10+
insert = "{call INSERT_PROJECT(?,?,?,?,?)}";
1111
remove = "{call REMOVE_PROJECT(?)}";
1212
}
1313
}

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

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
import main.controllers.ControllerFactory;
44
import main.exceptions.AqualityException;
55
import main.model.db.dao.project.ImportDao;
6+
import main.model.db.dao.project.ProjectDao;
67
import main.model.db.dao.project.TestDao;
78
import main.model.db.dao.project.TestResultDao;
89
import main.model.dto.*;
10+
import main.utils.RegexpUtil;
911

1012
import java.io.File;
1113
import java.util.*;
@@ -24,6 +26,7 @@ class BaseImporter {
2426
}
2527

2628
private List<TestResultDto> existingResults = new ArrayList<>();
29+
private ProjectDao projectDao = new ProjectDao();
2730
private TestResultDao testResultDao = new TestResultDao();
2831
private TestDao testDao = new TestDao();
2932
protected int projectId;
@@ -201,13 +204,23 @@ private void createResult(TestResultDto result, boolean update) throws AqualityE
201204

202205
private TestResultDto updateResultWithSimilarError(TestResultDto result) throws AqualityException {
203206
try{
207+
ProjectDto project = new ProjectDto();
208+
project.setId(result.getProject_id());
209+
project = projectDao.getEntityById(project);
210+
204211
TestResultDto testResultTemplate = new TestResultDto();
205212
testResultTemplate.setProject_id(result.getProject_id());
206213
testResultTemplate.setTest_id(result.getTest().getId());
207214
testResultTemplate.setLimit(10000);
208215
List<TestResultDto> testResults = testResultDao.searchAll(testResultTemplate);
209216
if(testResults.size() > 0){
210-
TestResultDto similarResult = testResults.stream().filter(x -> x.getFail_reason() != null && x.getFail_reason().equals(result.getFail_reason())).findFirst().orElse(null);
217+
TestResultDto similarResult = null;
218+
if(project.getCompare_result_pattern() != null) {
219+
similarResult = compareByRegexp(result, testResults, project.getCompare_result_pattern());
220+
}
221+
if(similarResult == null){
222+
similarResult = testResults.stream().filter(x -> x.getFail_reason() != null && x.getFail_reason().equals(result.getFail_reason())).findFirst().orElse(null);
223+
}
211224
if(similarResult != null){
212225
result.setComment(similarResult.getComment());
213226
result.setTest_resolution_id(similarResult.getTest_resolution_id());
@@ -221,6 +234,17 @@ private TestResultDto updateResultWithSimilarError(TestResultDto result) throws
221234
}
222235
}
223236

237+
private TestResultDto compareByRegexp(TestResultDto result, List<TestResultDto> oldResults, String expression) {
238+
for (TestResultDto oldResult : oldResults) {
239+
if(oldResult.getFail_reason() != null){
240+
if(RegexpUtil.compareByRegexpGroups(result.getFail_reason(), oldResult.getFail_reason(), expression)){
241+
return oldResult;
242+
}
243+
}
244+
}
245+
return null;
246+
}
247+
224248
private TestDto getTestByPatternOrName(List<TestDto> tests, TestDto importTest) throws AqualityException {
225249
Pattern pattern = Pattern.compile(this.pattern);
226250
Matcher matcher = pattern.matcher(importTest.getBody());

src/main/java/main/model/dto/ProjectDto.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,7 @@ public class ProjectDto extends BaseDto{
3131
@DataBaseName(name = "request_steps")
3232
@DataBaseInsert
3333
private Integer steps;
34+
@DataBaseName(name = "request_compare_result_pattern")
35+
@DataBaseInsert
36+
private String compare_result_pattern;
3437
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package main.utils;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
import java.util.regex.Matcher;
6+
import java.util.regex.Pattern;
7+
8+
public class RegexpUtil {
9+
10+
public static boolean compareByRegexpGroups(String actual, String expected, String expression){
11+
Pattern pattern = Pattern.compile(expression, Pattern.DOTALL);
12+
List<String> actualGroups = getGroups(pattern.matcher(actual));
13+
List<String> expectedGroups = getGroups(pattern.matcher(expected));
14+
15+
boolean result = actualGroups.size() == expectedGroups.size() && actualGroups.size() > 0;
16+
17+
if(result) {
18+
for (int i = 0; i < actualGroups.size(); i++) {
19+
result = actualGroups.get(i).equals(expectedGroups.get(i));
20+
if(!result) {
21+
break;
22+
}
23+
}
24+
}
25+
26+
return result;
27+
}
28+
29+
private static List<String> getGroups(Matcher matcher) {
30+
List<String> groups = new ArrayList<>();
31+
while (matcher.find()) {
32+
for (int i = 1; i <= matcher.groupCount(); i++) {
33+
groups.add(matcher.group(i));
34+
}
35+
}
36+
return groups;
37+
}
38+
}

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

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -656,5 +656,107 @@
656656
</rollback>
657657
</changeSet>
658658

659+
<changeSet id="add regexp search field to project" author="v.kostyukevich">
660+
<sql endDelimiter="#">
661+
ALTER TABLE `projects`
662+
ADD COLUMN `compare_result_pattern` VARCHAR(500) NULL AFTER `steps`;
663+
</sql>
664+
<rollback>
665+
ALTER TABLE `projects`
666+
DROP COLUMN `compare_result_pattern`;
667+
</rollback>
668+
</changeSet>
669+
670+
<changeSet id="stored procedure INSERT_PROJECT add request_compare_result_pattern" author="v.kostyukevich">
671+
<sql endDelimiter="#">
672+
673+
DROP procedure IF EXISTS `INSERT_PROJECT`;
674+
675+
#
676+
677+
CREATE PROCEDURE `INSERT_PROJECT`(
678+
IN request_id varchar(10),
679+
IN request_name VARCHAR(100),
680+
IN request_customer_id VARCHAR(11),
681+
IN request_steps VARCHAR(1),
682+
IN request_compare_result_pattern VARCHAR(500)
683+
)
684+
BEGIN
685+
IF(request_id != '' AND request_steps != '')
686+
THEN
687+
IF NOT EXISTS(SELECT * from projects WHERE id = request_id AND steps = request_steps)
688+
THEN
689+
IF(request_steps = '1')
690+
THEN
691+
CALL CREATE_STEP_TABLE(request_id);
692+
CALL CREATE_STEP_RESULTS_TABLE(request_id);
693+
CALL CREATE_STEP_TO_TEST_TABLE(request_id);
694+
ELSE
695+
CALL DROP_STEPS(request_id);
696+
END IF;
697+
END IF;
698+
END IF;
699+
700+
INSERT INTO projects (id, name, customer_id, steps, compare_result_pattern)
701+
VALUES (
702+
IF(request_id='',null,request_id),
703+
request_name,
704+
IF(request_customer_id='', 0, request_customer_id),
705+
IF(request_steps='', 0, request_steps),
706+
IF(request_compare_result_pattern='', null, request_compare_result_pattern)
707+
)
708+
ON DUPLICATE KEY UPDATE
709+
name = IF(request_name='',name, request_name),
710+
customer_id=IF(request_customer_id='', customer_id, request_customer_id),
711+
steps=IF(request_steps='', steps, request_steps),
712+
compare_result_pattern=IF(request_compare_result_pattern='', compare_result_pattern, request_compare_result_pattern);
713+
714+
SELECT * from projects where id = request_id || name = request_name;
715+
END
716+
</sql>
717+
<rollback>
718+
DROP procedure IF EXISTS `INSERT_PROJECT`;
719+
720+
#
721+
722+
CREATE PROCEDURE `INSERT_PROJECT`(
723+
IN request_id varchar(10),
724+
IN request_name VARCHAR(100),
725+
IN request_customer_id VARCHAR(11),
726+
IN request_steps VARCHAR(1)
727+
)
728+
BEGIN
729+
IF(request_id != '' AND request_steps != '')
730+
THEN
731+
IF NOT EXISTS(SELECT * from projects WHERE id = request_id AND steps = request_steps)
732+
THEN
733+
IF(request_steps = '1')
734+
THEN
735+
CALL CREATE_STEP_TABLE(request_id);
736+
CALL CREATE_STEP_RESULTS_TABLE(request_id);
737+
CALL CREATE_STEP_TO_TEST_TABLE(request_id);
738+
ELSE
739+
CALL DROP_STEPS(request_id);
740+
END IF;
741+
END IF;
742+
END IF;
743+
744+
INSERT INTO projects (id, name, customer_id, steps, compare_result_pattern)
745+
VALUES (
746+
IF(request_id='',null,request_id),
747+
request_name,
748+
IF(request_customer_id='', 0, request_customer_id),
749+
IF(request_steps='', 0, request_steps)
750+
)
751+
ON DUPLICATE KEY UPDATE
752+
name = IF(request_name='',name, request_name),
753+
customer_id=IF(request_customer_id='', customer_id, request_customer_id),
754+
steps=IF(request_steps='', steps, request_steps);
755+
756+
SELECT * from projects where id = request_id || name = request_name;
757+
END
758+
</rollback>
759+
</changeSet>
760+
659761
</databaseChangeLog>
660762

0 commit comments

Comments
 (0)