Skip to content

Commit 5965b36

Browse files
Merge pull request #69 from aquality-automation/develop
Develop
2 parents 4d0eab1 + 7d111ee commit 5965b36

21 files changed

+127
-88
lines changed

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
# CHANGELOG
22

3+
## 0.3.10 (unreleased)
4+
5+
Features:
6+
- Update Tests to use Admin API to create preconditions -> [View Issue](https://github.com/aquality-automation/aquality-tracking/issues/100)
7+
8+
Bugfixes:
9+
- Test run View Page performance is bad -> [View Issue](https://github.com/aquality-automation/aquality-tracking/issues/99)
10+
- Change Title on swagger page -> [View Issue](https://github.com/aquality-automation/aquality-tracking/issues/98)
11+
- Swagger: Authorization is impossible due to localhost Servers selection -> [View Issue](https://github.com/aquality-automation/aquality-tracking/issues/85)
12+
313
## 0.3.9 (2020-04-21)
414

515
Features:

pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<groupId>unifi_reporting_api</groupId>
77
<artifactId>api</artifactId>
88
<packaging>war</packaging>
9-
<version>0.3.9</version>
9+
<version>0.3.10</version>
1010

1111
<properties>
1212
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -197,12 +197,12 @@
197197
<dependency>
198198
<groupId>org.jetbrains</groupId>
199199
<artifactId>annotations</artifactId>
200-
<version>RELEASE</version>
200+
<version>19.0.0</version>
201201
</dependency>
202202
<dependency>
203203
<groupId>junit</groupId>
204204
<artifactId>junit</artifactId>
205-
<version>RELEASE</version>
205+
<version>4.13</version>
206206
<scope>test</scope>
207207
</dependency>
208208
<dependency>

src/main/java/main/Session.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -40,20 +40,6 @@ public Session(UserDto user) throws AqualityException {
4040
controllerFactory = new ControllerFactory(this.user);
4141
}
4242

43-
@Deprecated
44-
public Session(String apiToken, int projectId) throws AqualityException {
45-
user = new UserDto();
46-
controllerFactory = new ControllerFactory(user);
47-
if(controllerFactory.getHandler(new APITokenDto()).isTokenValid(apiToken, projectId)){
48-
ProjectUserDto projectUser = new ProjectUserDto();
49-
projectUser.setProject_id(projectId);
50-
projectUser.setEngineer(1);
51-
projectUser.setViewer(1);
52-
user.setProjectUsers(Collections.singletonList(projectUser));
53-
controllerFactory = new ControllerFactory(user);
54-
}
55-
}
56-
5743
public List<ProjectUserDto> getProjectPermissions(){
5844
return user.getProjectUsers();
5945
}

src/main/java/main/controllers/Administration/UserController.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@
2525
import java.util.UUID;
2626

2727
public class UserController extends BaseController<UserDto> {
28-
private UserDao userDao;
29-
private PasswordDao passwordDao;
30-
private UserSessionDao userSessionDao;
28+
private final UserDao userDao;
29+
private final PasswordDao passwordDao;
30+
private final UserSessionDao userSessionDao;
3131

3232
public UserController(UserDto user) {
3333
super(user);
@@ -42,7 +42,7 @@ public UserDto create(UserDto template) throws AqualityException {
4242
if (template.getPassword() != null) {
4343
template.setPassword(saltPassword(template, template.getPassword()));
4444
}
45-
return userDao.create(template);
45+
return toPublicUser(userDao.create(template));
4646
} else {
4747
throw new AqualityPermissionsException("Account is not allowed to create User", baseUser);
4848
}
@@ -104,14 +104,18 @@ UserDto auth(String authString, boolean ldap) throws AqualityException {
104104
}
105105

106106
private List<UserDto> toPublicUsers(List<UserDto> users) {
107-
for (UserDto user :
108-
users) {
109-
user.setPassword("");
110-
user.setSession_code("");
107+
for (UserDto user : users) {
108+
toPublicUser(user);
111109
}
112110
return users;
113111
}
114112

113+
private UserDto toPublicUser(UserDto user) {
114+
user.setPassword("");
115+
user.setSession_code("");
116+
return user;
117+
}
118+
115119
private String generateSessionCode(UserDto user) {
116120
Base64 base64 = new Base64();
117121
DateUtils dates = new DateUtils();

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public IssueController(UserDto user) {
3232
}
3333
@Override
3434
public List<IssueDto> get(IssueDto entity) throws AqualityException {
35-
if (baseUser.isManager() || baseUser.getProjectUser(entity.getProject_id()).isViewer()) {
35+
if (baseUser.isManager() || baseUser.isAuditAdmin() || baseUser.isAuditor() || baseUser.getProjectUser(entity.getProject_id()).isViewer()) {
3636
return fillIssues(issueDao.searchAll(entity));
3737
} else {
3838
throw new AqualityPermissionsException("Account is not allowed to view Issues", baseUser);

src/main/java/main/controllers/Project/ProjectUserController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public ProjectUserDto create(ProjectUserDto template) throws AqualityException {
3232
@Override
3333
public List<ProjectUserDto> get(ProjectUserDto template) throws AqualityException {
3434
boolean isViewer = template.getProject_id() != null && baseUser.getProjectUser(template.getProject_id()).isViewer();
35-
if (baseUser.isFromGlobalManagement() || isViewer || template.getUser_id() != null) {
35+
if (baseUser.isAdmin() || baseUser.isFromGlobalManagement() || isViewer || template.getUser_id() != null) {
3636
return fillProjectUsers(projectUserDao.searchAll(template));
3737
} else {
3838
throw new AqualityPermissionsException("Account is not allowed to view Project Users", baseUser);

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

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -108,28 +108,31 @@ private void createPendingStepResults(TestResultDto template) throws AqualityExc
108108
private List<TestResultDto> fillResults(List<TestResultDto> results) throws AqualityException {
109109

110110
if (results.size() > 0) {
111+
int projectId = results.get(0).getProject_id();
111112
List<FinalResultDto> finalResults = finalResultController.get(new FinalResultDto());
112113
IssueDto issueDto = new IssueDto();
113-
issueDto.setProject_id(results.get(0).getProject_id());
114+
issueDto.setProject_id(projectId);
114115
List<IssueDto> issues = issueController.get(issueDto);
115116

116117
TestDto testTemplate = new TestDto();
117-
testTemplate.setProject_id(results.get(0).getProject_id());
118+
testTemplate.setProject_id(projectId);
118119
List<TestDto> tests = testController.get(testTemplate);
119120

120121
ProjectUserDto projectUserDto = new ProjectUserDto();
121-
projectUserDto.setProject_id(results.get(0).getProject_id());
122+
projectUserDto.setProject_id(projectId);
123+
124+
boolean isStepsEnabled = projectController.isStepsEnabled(projectId);
122125

123126
for (TestResultDto result : results) {
124-
fillResult(result, finalResults, tests, issues);
127+
fillResult(result, finalResults, tests, issues, isStepsEnabled);
125128
}
126129
}
127130

128131
return results;
129132
}
130133

131-
private void fillResult(TestResultDto result, List<FinalResultDto> finalResults, List<TestDto> tests, List<IssueDto> issues) throws AqualityException {
132-
if (projectController.isStepsEnabled(result.getProject_id())) {
134+
private void fillResult(TestResultDto result, List<FinalResultDto> finalResults, List<TestDto> tests, List<IssueDto> issues, boolean isStepsEnabled) throws AqualityException {
135+
if (isStepsEnabled) {
133136
fillResultSteps(result);
134137
}
135138

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

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313
import java.util.stream.Collectors;
1414

1515
public class TestController extends BaseController<TestDto> {
16-
private TestDao testDao;
17-
private TestSuiteDao suiteDao;
18-
private TestResultDao resultDao;
19-
private Test2SuiteController test2SuiteController;
20-
private ProjectUserController projectUserController;
16+
private final TestDao testDao;
17+
private final TestSuiteDao suiteDao;
18+
private final TestResultDao resultDao;
19+
private final Test2SuiteController test2SuiteController;
20+
private final ProjectUserController projectUserController;
2121

2222
public TestController(UserDto user) {
2323
super(user);
@@ -54,10 +54,8 @@ public TestDto createOrUpdate(TestDto test) throws AqualityException {
5454
if(existingTests.size() > 0) {
5555
TestDto existingTest = existingTests.get(0);
5656
if(existingTest.getSuites() != null) {
57-
TestSuiteDto testSuite = existingTest.getSuites().stream().filter(suite -> suite.getId().equals(test.getSuites().get(0).getId())).findFirst().orElse(null);
58-
if(testSuite != null) {
59-
existingTest.getSuites().add(test.getSuites().get(0));
60-
}
57+
existingTest.getSuites().stream()
58+
.filter(suite -> suite.getId().equals(test.getSuites().get(0).getId())).findFirst().ifPresent(testSuite -> existingTest.getSuites().add(test.getSuites().get(0)));
6159
}else {
6260
existingTest.setSuites(test.getSuites());
6361
}
@@ -98,12 +96,12 @@ public boolean delete(TestDto template) throws AqualityException {
9896
}
9997
}
10098

101-
public boolean updateMultipleTests(List<TestDto> entities) throws AqualityException {
99+
public void updateMultipleTests(List<TestDto> entities) throws AqualityException {
102100
if (entities.size() > 0 && (baseUser.isManager() || baseUser.getProjectUser(entities.get(0).getProject_id()).isEditor())) {
103101
for (TestDto test : entities) {
104102
updateSuites(test);
105103
}
106-
return testDao.updateMultiply(entities);
104+
testDao.updateMultiply(entities);
107105
} else {
108106
throw new AqualityPermissionsException("Account is not allowed to update Test ", baseUser);
109107
}
@@ -162,16 +160,12 @@ private List<TestDto> fillTests(List<TestDto> tests) throws AqualityException {
162160
TestSuiteDto testSuiteDto = new TestSuiteDto();
163161
testSuiteDto.setProject_id(projectId);
164162
List<TestSuiteDto> testSuites = suiteDao.searchAll(testSuiteDto);
165-
List<Test2SuiteDto> test2Suites = new ArrayList<>();
166163
ProjectDto projectDto = new ProjectDto();
167164
projectDto.setId(tests.get(0).getProject_id());
168165

169-
for (TestSuiteDto testSuite : testSuites) {
170-
Test2SuiteDto test2Suite = new Test2SuiteDto();
171-
test2Suite.setSuite_id(testSuite.getId());
172-
test2Suites.addAll(test2SuiteController.get(test2Suite));
173-
}
174-
166+
Test2SuiteDto test2Suite = new Test2SuiteDto();
167+
test2Suite.setProject_id(projectId);
168+
List<Test2SuiteDto> test2Suites = test2SuiteController.get(test2Suite);
175169

176170
for (TestDto test : tests) {
177171
if (test.getDeveloper_id() != null) {
@@ -192,7 +186,8 @@ private void updateSuites(TestDto test) throws AqualityException {
192186
test2SuiteDto.setTest_id(test.getId());
193187
List<Test2SuiteDto> oldSuites = test2SuiteController.get(test2SuiteDto);
194188
if (test.getSuites() != null && test.getSuites().size() > 0) {
195-
for (TestSuiteDto newSuite : test.getSuites()) {
189+
List<TestSuiteDto> suites = test.getSuites();
190+
for (TestSuiteDto newSuite : suites) {
196191
Test2SuiteDto alreadyExists = oldSuites.stream().filter(x -> Objects.equals(x.getSuite_id(), newSuite.getId())).findAny().orElse(null);
197192
if (alreadyExists != null) {
198193
oldSuites.removeIf(x -> Objects.equals(x.getSuite_id(), alreadyExists.getSuite_id()));

src/main/java/main/controllers/Project/TestRunController.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,13 +89,21 @@ public TestRunDto getLastSuiteTestRun(Integer suiteId, Integer projectId) throws
8989

9090
@Override
9191
public boolean delete(TestRunDto template) throws AqualityException {
92-
if (baseUser.isManager() || baseUser.getProjectUser(template.getProject_id()).isEditor()) {
92+
if (baseUser.isManager() || baseUser.getProjectUser(template.getProject_id()).isAdminOrManager()) {
9393
return testRunDao.delete(template);
9494
} else {
9595
throw new AqualityPermissionsException("Account is not allowed to delete Test Run", baseUser);
9696
}
9797
}
9898

99+
public boolean delete(List<TestRunDto> template) throws AqualityException {
100+
if (baseUser.isManager() || baseUser.getProjectUser(template.get(0).getProject_id()).isAdminOrManager()) {
101+
return testRunDao.deleteMultiply(template);
102+
} else {
103+
throw new AqualityPermissionsException("Account is not allowed to delete Test Run", baseUser);
104+
}
105+
}
106+
99107
private void createPendingResults(TestRunDto testRunTemplate) throws AqualityException {
100108
TestDto testTemplate = new TestDto();
101109
testTemplate.setTest_suite_id(testRunTemplate.getTest_suite_id());

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
public class Test2SuiteDao extends DAO<Test2SuiteDto> {
77
public Test2SuiteDao() {
88
super(Test2SuiteDto.class);
9-
select = "{call SELECT_TEST_SUITES(?,?)}";
9+
select = "{call SELECT_TEST_SUITES(?,?,?)}";
1010
insert = "{call INSERT_TEST_TO_SUITE(?,?)}";
1111
remove = "{call REMOVE_TEST_FROM_SUITE(?,?)}";
1212
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,8 @@ public boolean isViewer(){
5050
public boolean isEditor() {
5151
return isAdmin() || isManager() || isEngineer();
5252
}
53+
54+
public boolean isAdminOrManager() {
55+
return isAdmin() || isManager();
56+
}
5357
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,7 @@ public class Test2SuiteDto extends BaseDto {
1717
@DataBaseInsert
1818
@DataBaseSearchable
1919
private Integer suite_id;
20+
@DataBaseName(name="request_project_id")
21+
@DataBaseSearchable
22+
private Integer project_id;
2023
}

src/main/java/main/view/Administration/UsersServlet.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,13 @@ public void doGet(HttpServletRequest req, HttpServletResponse resp) {
3535
public void doPost(HttpServletRequest req, HttpServletResponse resp) {
3636
setPostResponseHeaders(resp);
3737
setEncoding(resp);
38-
resp.addHeader("Access-Control-Expose-Headers", "id");
39-
resp.addHeader("Access-Control-Allow-Headers", "id");
4038

4139
try {
4240
Session session = createSession(req);
4341
UserDto user = mapper.mapObject(UserDto.class, getRequestJson(req));
4442
user = session.controllerFactory.getHandler(user).create(user);
45-
resp.setHeader("id", user.getId().toString());
43+
setJSONContentType(resp);
44+
resp.getWriter().write(mapper.serialize(user));
4645
} catch (Exception e) {
4746
handleException(resp, e);
4847
}

src/main/java/main/view/BaseServlet.java

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,7 @@ public class BaseServlet extends HttpServlet {
2626
protected static final String PROJECT_ID_KEY = "project_id";
2727

2828
protected Session createSession(HttpServletRequest req) throws AqualityException, AuthenticationException {
29-
String importToken = getStringQueryParameter(req, "importToken");
30-
Integer projectId = getIntegerQueryParameter(req, "projectId");
31-
if (importToken != null && projectId != null) {
32-
return new Session(importToken, projectId);
33-
} else {
34-
return new Session(getSessionId(req));
35-
}
29+
return new Session(getSessionId(req));
3630
}
3731

3832
private String replacer(String value) {
@@ -90,9 +84,6 @@ protected void setPostResponseHeaders(@NotNull HttpServletResponse resp) {
9084
resp.addHeader("Access-Control-Allow-Methods", "Post");
9185
resp.addHeader("Access-Control-Allow-Origin", "*");
9286
resp.addHeader("Access-Control-Allow-Headers", "Authorization");
93-
resp.addHeader("Access-Control-Allow-Credentials", "true");
94-
resp.addHeader("Access-Control-Expose-Headers", "ErrorMessage");
95-
resp.addHeader("Access-Control-Allow-Headers", "ErrorMessage");
9687
}
9788

9889
protected void setEncoding(@NotNull HttpServletResponse resp) {
@@ -107,28 +98,20 @@ protected void setDeleteResponseHeaders(@NotNull HttpServletResponse resp) {
10798
resp.addHeader("Access-Control-Allow-Methods", "Delete");
10899
resp.addHeader("Access-Control-Allow-Origin", "*");
109100
resp.addHeader("Access-Control-Allow-Headers", "Authorization");
110-
resp.addHeader("Access-Control-Allow-Credentials", "true");
111-
resp.addHeader("Access-Control-Expose-Headers", "ErrorMessage");
112-
resp.addHeader("Access-Control-Allow-Headers", "ErrorMessage");
113101
}
114102

115103
protected void setGetResponseHeaders(@NotNull HttpServletResponse resp) {
116104
resp.addHeader("Access-Control-Allow-Methods", "Get");
117105
resp.addHeader("Access-Control-Allow-Origin", "*");
118106
resp.addHeader("Access-Control-Allow-Headers", "Authorization");
119-
resp.addHeader("Access-Control-Allow-Credentials", "true");
120-
resp.addHeader("Access-Control-Expose-Headers", "ErrorMessage");
121-
resp.addHeader("Access-Control-Allow-Headers", "ErrorMessage");
122107
resp.addHeader("Access-Control-Expose-Headers", "Content-Disposition");
123108
resp.addHeader("Access-Control-Allow-Headers", "Content-Disposition");
124109
}
125110

126111
protected void setOptionsResponseHeaders(@NotNull HttpServletResponse resp) {
127112
resp.addHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS, PUT, DELETE");
128113
resp.addHeader("Access-Control-Allow-Origin", "*");
129-
resp.addHeader("Access-Control-Allow-Headers", "Authorization, authorization, ErrorMessage, Disposition");
130-
resp.addHeader("Access-Control-Allow-Credentials", "true");
131-
resp.addHeader("Access-Control-Expose-Headers", "ErrorMessage");
114+
resp.addHeader("Access-Control-Allow-Headers", "Authorization, authorization, Disposition, Content-Type");
132115
resp.addHeader("Access-Control-Expose-Headers", "Content-Disposition");
133116
resp.setStatus(204);
134117
}

src/main/java/main/view/Project/APITokenServlet.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public void doGet(HttpServletRequest req, HttpServletResponse resp) {
2222
APITokenDto tokenDto = new APITokenDto();
2323
tokenDto.getSearchTemplateFromRequestParameters(req);
2424
tokenDto.setApi_token(session.controllerFactory.getHandler(tokenDto).create(tokenDto).getApi_token());
25+
setJSONContentType(resp);
2526
resp.getWriter().write(mapper.serialize(tokenDto));
2627
} catch (Exception e) {
2728
handleException(resp, e);

src/main/java/main/view/Project/ExecuteImportServlet.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,7 @@ public void doPost(HttpServletRequest req, HttpServletResponse resp) {
5151
setPostResponseHeaders(resp);
5252
try {
5353
readParameters(req);
54-
Session session = importToken != null
55-
? new Session(importToken, projectId)
56-
: createSession(req);
54+
Session session = createSession(req);
5755

5856
suiteController = session.controllerFactory.getHandler(new TestSuiteDto());
5957
testRunController = session.controllerFactory.getHandler(new TestRunDto());
@@ -130,6 +128,10 @@ private Integer getTestRunId() throws AqualityException {
130128
}
131129

132130
private void validateRequest() throws AqualityQueryParameterException {
131+
if(importToken != null)
132+
{
133+
throw new AqualityQueryParameterException("Import Token is deprecated. Follow instructions on the API Token page.");
134+
}
133135

134136
if(singleTestRun)
135137
{

0 commit comments

Comments
 (0)