Skip to content

Commit eeece06

Browse files
Merge pull request #53 from aquality-automation/feature/milestone_due_date
Feature/milestone due date
2 parents 54318f7 + fa6a8cf commit eeece06

File tree

7 files changed

+431
-5
lines changed

7 files changed

+431
-5
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
Features:
66
- Improve Test Run and Test List page performance -> [View Issue](https://github.com/aquality-automation/aquality-tracking/issues/71)
77
- Exclude Debug results from last results column -> [View Issue](https://github.com/aquality-automation/aquality-tracking/issues/70)
8+
- Milestone: Add selected Suites to milestone -> [View Issue](https://github.com/aquality-automation/aquality-tracking/issues/63)
9+
- Milestone: Add Due Date to Milestone. -> [View Issue](https://github.com/aquality-automation/aquality-tracking/issues/61)
10+
- Milestone: Add possibility to Close Milestone. -> [View Issue](https://github.com/aquality-automation/aquality-tracking/issues/62)
811

912
Bugfixes:
1013

src/main/java/main/controllers/Project/MilestoneController.java

Lines changed: 68 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,31 @@
44
import main.exceptions.AqualityException;
55
import main.exceptions.AqualityPermissionsException;
66
import main.model.db.dao.project.MilestoneDao;
7+
import main.model.db.dao.project.Suite2MilestoneDao;
78
import main.model.dto.MilestoneDto;
9+
import main.model.dto.Suite2MilestoneDto;
10+
import main.model.dto.TestSuiteDto;
811
import main.model.dto.UserDto;
912

1013
import java.util.List;
14+
import java.util.Objects;
1115

1216
public class MilestoneController extends BaseController<MilestoneDto> {
1317
private MilestoneDao milestoneDao;
18+
private Suite2MilestoneDao milestoneSuitesDao;
1419

1520
public MilestoneController(UserDto user) {
1621
super(user);
1722
milestoneDao = new MilestoneDao();
23+
milestoneSuitesDao = new Suite2MilestoneDao();
1824
}
1925

2026
@Override
2127
public MilestoneDto create(MilestoneDto template) throws AqualityException {
2228
if (baseUser.isManager() || baseUser.getProjectUser(template.getProject_id()).isEditor()) {
23-
return milestoneDao.create(template);
29+
MilestoneDto milestone = milestoneDao.create(template);
30+
template.setId(milestone.getId());
31+
return updateSuites(template);
2432
} else {
2533
throw new AqualityPermissionsException("Account is not allowed to create Milestones", baseUser);
2634
}
@@ -29,7 +37,8 @@ public MilestoneDto create(MilestoneDto template) throws AqualityException {
2937
@Override
3038
public List<MilestoneDto> get(MilestoneDto template) throws AqualityException {
3139
if (baseUser.isFromGlobalManagement() || baseUser.getProjectUser(template.getProject_id()).isViewer()) {
32-
return milestoneDao.searchAll(template);
40+
List<MilestoneDto> milestones = milestoneDao.searchAll(template);
41+
return fillMilestones(milestones);
3342
} else {
3443
throw new AqualityPermissionsException("Account is not allowed to view Milestones", baseUser);
3544
}
@@ -43,4 +52,61 @@ public boolean delete(MilestoneDto template) throws AqualityException {
4352
throw new AqualityPermissionsException("Account is not allowed to delete Milestones", baseUser);
4453
}
4554
}
55+
56+
private List<MilestoneDto> fillMilestones(List<MilestoneDto> milestones) throws AqualityException {
57+
for (MilestoneDto milestone : milestones) {
58+
milestone.setSuites(getSuites(milestone.getId()));
59+
}
60+
61+
return milestones;
62+
}
63+
64+
private List<TestSuiteDto> getSuites(Integer milestoneId) throws AqualityException {
65+
Suite2MilestoneDto suite2Milestone = new Suite2MilestoneDto();
66+
suite2Milestone.setMilestone_id(milestoneId);
67+
return milestoneSuitesDao.getSuites(suite2Milestone);
68+
}
69+
70+
private MilestoneDto updateSuites(MilestoneDto template) throws AqualityException {
71+
Suite2MilestoneDto suite2Milestone = new Suite2MilestoneDto();
72+
suite2Milestone.setMilestone_id(template.getId());
73+
List<TestSuiteDto> oldSuites = milestoneSuitesDao.getSuites(suite2Milestone);
74+
75+
addNewSuites(oldSuites, template);
76+
removeSuites(oldSuites, template.getId());
77+
78+
List<MilestoneDto> milestones = get(template);
79+
if(!milestones.isEmpty()) {
80+
return milestones.get(0);
81+
}
82+
83+
throw new AqualityException("Cannot get Milestone after Suites Update!");
84+
}
85+
86+
private void addNewSuites(List<TestSuiteDto> oldSuites, MilestoneDto milestone) throws AqualityException {
87+
if (milestone.getSuites() != null && milestone.getSuites().size() > 0) {
88+
for (TestSuiteDto newSuite : milestone.getSuites()) {
89+
TestSuiteDto alreadyExists = oldSuites.stream().filter(x -> Objects.equals(x.getId(), newSuite.getId())).findAny().orElse(null);
90+
if (alreadyExists != null) {
91+
oldSuites.removeIf(x -> Objects.equals(x.getId(), alreadyExists.getId()));
92+
} else {
93+
Suite2MilestoneDto newSuite2MilestoneDto = new Suite2MilestoneDto();
94+
newSuite2MilestoneDto.setSuite_id(newSuite.getId());
95+
newSuite2MilestoneDto.setMilestone_id(milestone.getId());
96+
milestoneSuitesDao.addSuite(newSuite2MilestoneDto);
97+
}
98+
}
99+
}
100+
}
101+
102+
private void removeSuites(List<TestSuiteDto> oldSuites, Integer milestone_id) throws AqualityException {
103+
if (!oldSuites.isEmpty()) {
104+
for (TestSuiteDto oldSuite : oldSuites) {
105+
Suite2MilestoneDto toRemove = new Suite2MilestoneDto();
106+
toRemove.setSuite_id(oldSuite.getId());
107+
toRemove.setMilestone_id(milestone_id);
108+
milestoneSuitesDao.delete(toRemove);
109+
}
110+
}
111+
}
46112
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ public class MilestoneDao extends DAO<MilestoneDto> {
77

88
public MilestoneDao(){
99
super(MilestoneDto.class);
10-
select = "{call SELECT_MILESTONE(?,?,?)}";
11-
insert = "{call INSERT_MILESTONE(?,?,?)}";
10+
select = "{call SELECT_MILESTONE(?,?,?,?)}";
11+
insert = "{call INSERT_MILESTONE(?,?,?,?,?)}";
1212
remove = "{call REMOVE_MILESTONE(?)}";
1313
}
1414
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package main.model.db.dao.project;
2+
3+
import com.mysql.cj.core.conf.url.ConnectionUrlParser;
4+
import main.exceptions.AqualityException;
5+
import main.exceptions.AqualitySQLException;
6+
import main.model.db.dao.DAO;
7+
import main.model.dto.DtoMapper;
8+
import main.model.dto.Suite2MilestoneDto;
9+
import main.model.dto.TestSuiteDto;
10+
import java.util.List;
11+
12+
public class Suite2MilestoneDao extends DAO<Suite2MilestoneDto> {
13+
public Suite2MilestoneDao() {
14+
super(Suite2MilestoneDto.class);
15+
remove = "{call REMOVE_SUITE_FROM_MILESTONE(?,?)}";
16+
}
17+
18+
public void addSuite(Suite2MilestoneDto entity) throws AqualityException {
19+
String sql = "{call INSERT_SUITE_TO_MILESTONE(?,?)}";
20+
List<ConnectionUrlParser.Pair<String, String>> parameters = entity.getParameters();
21+
CallStoredProcedure(sql, parameters);
22+
}
23+
24+
public List<TestSuiteDto> getSuites(Suite2MilestoneDto entity) throws AqualityException {
25+
List<ConnectionUrlParser.Pair<String, String>> parameters = entity.getSearchParameters();
26+
DtoMapper<TestSuiteDto> suiteMapper = new DtoMapper<>(TestSuiteDto.class);
27+
28+
String sql = "{call SELECT_MILESTONE_SUITES(?)}";
29+
return suiteMapper.mapObjects(CallStoredProcedure(sql, parameters).toString());
30+
}
31+
}

src/main/java/main/model/dto/MilestoneDto.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
package main.model.dto;
22

3+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
34
import lombok.Data; import lombok.EqualsAndHashCode;
45
import main.annotations.*;
6+
import main.utils.CustomerDateAndTimeDeserialize;
7+
8+
import java.util.Date;
9+
import java.util.List;
510

611

712
@Data @EqualsAndHashCode(callSuper = true)
@@ -18,4 +23,13 @@ public class MilestoneDto extends BaseDto{
1823
@DataBaseName(name = "request_project_id")
1924
@DataBaseInsert
2025
private Integer project_id;
26+
@DataBaseSearchable
27+
@DataBaseName(name = "request_active")
28+
@DataBaseInsert
29+
private Integer active;
30+
@DataBaseName(name = "request_due_date")
31+
@DataBaseInsert
32+
@JsonDeserialize(using= CustomerDateAndTimeDeserialize.class)
33+
private Date due_date;
34+
private List<TestSuiteDto> suites;
2135
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package main.model.dto;
2+
3+
import lombok.Data;
4+
import lombok.EqualsAndHashCode;
5+
import main.annotations.DataBaseID;
6+
import main.annotations.DataBaseInsert;
7+
import main.annotations.DataBaseName;
8+
import main.annotations.DataBaseSearchable;
9+
10+
11+
@Data @EqualsAndHashCode(callSuper = true)
12+
public class Suite2MilestoneDto extends BaseDto {
13+
@DataBaseName(name="request_milestone_id")
14+
@DataBaseID
15+
@DataBaseInsert
16+
@DataBaseSearchable
17+
private Integer milestone_id;
18+
@DataBaseName(name="request_suite_id")
19+
@DataBaseID
20+
@DataBaseInsert
21+
private Integer suite_id;
22+
}

0 commit comments

Comments
 (0)