Skip to content

Commit d681fe9

Browse files
Issue View
1 parent aacec8e commit d681fe9

File tree

5 files changed

+156
-19
lines changed

5 files changed

+156
-19
lines changed

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

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ public List<IssueDto> get(IssueDto entity) throws AqualityException {
4242
@Override
4343
public IssueDto create(IssueDto entity) throws AqualityException {
4444
if (baseUser.isManager() || baseUser.getProjectUser(entity.getProject_id()).isEditor()) {
45-
return issueDao.create(entity);
45+
List<IssueDto> issues = new ArrayList<>();
46+
issues.add(issueDao.create(entity));
47+
return fillIssues(issues).get(0);
4648
} else {
4749
throw new AqualityPermissionsException("Account is not allowed to create Issues", baseUser);
4850
}
@@ -84,19 +86,24 @@ private List<IssueDto> fillIssues(List<IssueDto> issues) throws AqualityExceptio
8486
List<ResultResolutionDto> resultResolutions = resultResolutionController.get(resultResolution);
8587

8688
for (IssueDto issue : issues) {
87-
UserDto assignee = users.stream().filter(x -> x.getId().equals(issue.getAssignee_id())).findFirst().orElse(null);
88-
UserDto creator = users.stream().filter(x -> x.getId().equals(issue.getCreator_id())).findFirst().orElse(null);
89-
if(assignee != null) {
90-
issue.setAssignee(assignee.toPublic());
91-
}
92-
if(creator != null) {
93-
issue.setCreator(creator.toPublic());
94-
}
95-
issue.setStatus(issueStatuses.stream().filter(x -> x.getId().equals(issue.getStatus_id())).findFirst().orElse(null));
96-
issue.setResolution(resultResolutions.stream().filter(x -> x.getId().equals(issue.getResolution_id())).findFirst().orElse(null));
97-
filledIssues.add(issue);
89+
filledIssues.add(fillIssue(issue, users, issueStatuses, resultResolutions));
9890
}
9991

10092
return filledIssues;
10193
}
94+
95+
private IssueDto fillIssue(IssueDto issue, List<UserDto> users, List<IssueStatusDto> issueStatuses, List<ResultResolutionDto> resultResolutions){
96+
UserDto assignee = users.stream().filter(x -> x.getId().equals(issue.getAssignee_id())).findFirst().orElse(null);
97+
UserDto creator = users.stream().filter(x -> x.getId().equals(issue.getCreator_id())).findFirst().orElse(null);
98+
if (assignee != null) {
99+
issue.setAssignee(assignee.toPublic());
100+
}
101+
if (creator != null) {
102+
issue.setCreator(creator.toPublic());
103+
}
104+
issue.setStatus(issueStatuses.stream().filter(x -> x.getId().equals(issue.getStatus_id())).findFirst().orElse(null));
105+
issue.setResolution(resultResolutions.stream().filter(x -> x.getId().equals(issue.getResolution_id())).findFirst().orElse(null));
106+
107+
return issue;
108+
}
102109
}

src/main/java/main/controllers/Project/TestController.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,15 @@ public List<TestDto> get(TestDto template) throws AqualityException {
8080
}
8181
}
8282

83+
public List<TestDto> get(Integer issueId, Integer projectId) throws AqualityException {
84+
if (baseUser.isFromGlobalManagement() || baseUser.getProjectUser(projectId).isViewer()) {
85+
return fillTests(testDao.getTestsAffectedByIssue(issueId));
86+
} else {
87+
throw new AqualityPermissionsException("Account is not allowed to view Tests", baseUser);
88+
}
89+
}
90+
91+
8392
@Override
8493
public boolean delete(TestDto template) throws AqualityException {
8594
if (baseUser.isManager() || baseUser.getProjectUser(template.getProject_id()).isEditor()) {
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,25 @@
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.project.TestDto;
57

8+
import java.util.ArrayList;
9+
import java.util.List;
10+
611
public class TestDao extends DAO<TestDto> {
712
public TestDao() {
813
super(TestDto.class);
914
select = "{call SELECT_TEST(?,?,?,?,?,?)}";
1015
insert = "{call INSERT_TEST(?,?,?,?,?,?)}";
1116
remove = "{call REMOVE_TEST(?)}";
1217
}
18+
private String testsAffectedByIssueQuery = "{call SELECT_ISSUE_TESTS(?)}";
19+
20+
public List<TestDto> getTestsAffectedByIssue(Integer issueId) throws AqualityException {
21+
List<ConnectionUrlParser.Pair<String, String>> parameters = new ArrayList<>();
22+
parameters.add(new ConnectionUrlParser.Pair<>("request_issue_id", issueId.toString()));
23+
return dtoMapper.mapObjects(CallStoredProcedure(testsAffectedByIssueQuery, parameters).toString());
24+
}
1325
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package main.view.Project;
2+
3+
import main.Session;
4+
import main.exceptions.AqualityParametersException;
5+
import main.model.dto.project.TestDto;
6+
import main.model.dto.project.TestRunDto;
7+
import main.view.BaseServlet;
8+
import main.view.IDelete;
9+
import main.view.IGet;
10+
11+
import javax.servlet.annotation.WebServlet;
12+
import javax.servlet.http.HttpServletRequest;
13+
import javax.servlet.http.HttpServletResponse;
14+
import java.util.List;
15+
16+
@WebServlet("/test/issue")
17+
public class TestIssueServlet extends BaseServlet implements IGet {
18+
19+
@Override
20+
public void doGet(HttpServletRequest req, HttpServletResponse resp) {
21+
setPostResponseHeaders(resp);
22+
setEncoding(resp);
23+
try {
24+
25+
Session session = createSession(req);
26+
Integer issueId = getIntegerQueryParameter(req, "issueId");
27+
Integer projectId = getIntegerQueryParameter(req, "issueId");
28+
validateGet(issueId, projectId);
29+
List<TestDto> tests = session.controllerFactory.getHandler(new TestDto()).get(issueId, projectId);
30+
setResponseBody(resp, tests);
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+
41+
private void validateGet(Integer issueId, Integer projectId) throws AqualityParametersException {
42+
if(projectId == null) {
43+
throw new AqualityParametersException("You should specify 'projectId'!");
44+
}
45+
46+
if(issueId == null) {
47+
throw new AqualityParametersException("You should specify 'issueId'!");
48+
}
49+
}
50+
}

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

Lines changed: 66 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -543,14 +543,14 @@
543543
#
544544
CREATE TRIGGER `issues_BEFORE_INSERT` BEFORE INSERT ON `issues` FOR EACH ROW
545545
BEGIN
546-
IF EXISTS (SELECT * FROM issues WHERE title = NEW.title AND project_id = NEW.project_id)
546+
IF EXISTS (SELECT * FROM issues WHERE title = NEW.title AND project_id = NEW.project_id AND id != NEW.id)
547547
THEN SIGNAL SQLSTATE '45000'
548-
SET MESSAGE_TEXT = 'Issue with this title already exists in this Project!';
548+
SET MESSAGE_TEXT = 'Cannot create! Issue with this title already exists in this Project!';
549549
END IF;
550550

551-
IF EXISTS (SELECT * FROM issues WHERE expression = NEW.expression AND project_id = NEW.project_id)
551+
IF EXISTS (SELECT * FROM issues WHERE expression = NEW.expression AND project_id = NEW.project_id AND id != NEW.id)
552552
THEN SIGNAL SQLSTATE '45000'
553-
SET MESSAGE_TEXT = 'Issue with this expression already exists in this Project!';
553+
SET MESSAGE_TEXT = 'Cannot create! Issue with this expression already exists in this Project!';
554554
END IF;
555555
END
556556

@@ -569,12 +569,12 @@
569569
BEGIN
570570
IF EXISTS (SELECT * FROM issues WHERE title = NEW.title AND project_id = NEW.project_id AND id != NEW.id)
571571
THEN SIGNAL SQLSTATE '45000'
572-
SET MESSAGE_TEXT = 'Issue with this title already exists in this Project!';
572+
SET MESSAGE_TEXT = 'Cannot Update! Issue with this title already exists in this Project!';
573573
END IF;
574574

575575
IF EXISTS (SELECT * FROM issues WHERE expression = NEW.expression AND project_id = NEW.project_id AND id != NEW.id)
576576
THEN SIGNAL SQLSTATE '45000'
577-
SET MESSAGE_TEXT = 'Issue with this expression already exists in this Project!';
577+
SET MESSAGE_TEXT = 'Cannot Update! Issue with this expression already exists in this Project!';
578578
END IF;
579579
END
580580

@@ -820,7 +820,7 @@
820820
GROUP_CONCAT(results SEPARATOR ',') as result_colors,
821821
GROUP_CONCAT(result_id SEPARATOR ',') as result_ids
822822
FROM (
823-
select request_test_id, result_resolution.color as resolutions, final_results.color as results, test_results.id as result_id
823+
select request_test_id, CASE WHEN result_resolution.color is NULL THEN 3 ELSE result_resolution.color END as resolutions, final_results.color as results, test_results.id as result_id
824824
from test_results
825825
left join issues on issue_id=issues.id
826826
left join result_resolution on issues.resolution_id = result_resolution.id
@@ -836,4 +836,63 @@
836836
</rollback>
837837
</changeSet>
838838

839+
<changeSet id="update imports_AFTER_INSERT with UPDATE_TEST_RUN_STATS" author="v.kostyukevich">
840+
<sql endDelimiter="#">
841+
842+
DROP TRIGGER IF EXISTS `imports_AFTER_INSERT`;
843+
844+
#
845+
CREATE TRIGGER imports_AFTER_INSERT AFTER INSERT ON imports FOR EACH ROW
846+
BEGIN
847+
IF (NEW.finish_status = 1 AND new.testrun_id IS NOT NULL)
848+
THEN
849+
850+
CALL UPDATE_TEST_RUN_STATS(NEW.testrun_id);
851+
852+
END IF;
853+
END
854+
</sql>
855+
<rollback>
856+
</rollback>
857+
</changeSet>
858+
859+
<changeSet id="update imports_AFTER_UPDATE with UPDATE_TEST_RUN_STATS" author="v.kostyukevich">
860+
<sql endDelimiter="#">
861+
862+
DROP TRIGGER IF EXISTS `imports_AFTER_UPDATE`;
863+
864+
#
865+
CREATE TRIGGER imports_AFTER_UPDATE AFTER UPDATE ON imports FOR EACH ROW
866+
BEGIN
867+
IF (NEW.finish_status = 1 AND new.testrun_id IS NOT NULL)
868+
THEN
869+
870+
CALL UPDATE_TEST_RUN_STATS(NEW.testrun_id);
871+
872+
END IF;
873+
END
874+
</sql>
875+
<rollback>
876+
</rollback>
877+
</changeSet>
878+
879+
<changeSet id="create SELECT_ISSUE_TESTS" author="v.kostyukevich">
880+
<sql endDelimiter="#">
881+
882+
DROP PROCEDURE IF EXISTS `SELECT_ISSUE_TESTS`;
883+
884+
#
885+
CREATE PROCEDURE `SELECT_ISSUE_TESTS`(
886+
IN request_issue_id VARCHAR(10)
887+
)
888+
BEGIN
889+
SELECT DISTINCT tests.*, last_test_results.* FROM test_results
890+
LEFT JOIN tests ON test_results.test_id = tests.id
891+
LEFT JOIN last_test_results on tests.id = last_test_results.test_id
892+
WHERE issue_id = request_issue_id;
893+
END
894+
</sql>
895+
<rollback>
896+
</rollback>
897+
</changeSet>
839898
</databaseChangeLog>

0 commit comments

Comments
 (0)