feat(测试跟踪): tapd提交缺陷时增加处理人信息

This commit is contained in:
shiziyuan9527 2020-09-15 16:54:50 +08:00
parent 14531a571a
commit a325a18139
5 changed files with 63 additions and 0 deletions

View File

@ -1,6 +1,7 @@
package io.metersphere.track.controller;
import io.metersphere.base.domain.Issues;
import io.metersphere.track.domain.TapdUser;
import io.metersphere.track.service.IssuesService;
import io.metersphere.track.request.testcase.IssuesRequest;
import org.springframework.web.bind.annotation.*;
@ -35,4 +36,9 @@ public class TestCaseIssuesController {
issuesService.closeLocalIssue(id);
}
@GetMapping("/tapd/user/{caseId}")
public List<TapdUser> getTapdUsers(@PathVariable String caseId) {
return issuesService.getTapdProjectUsers(caseId);
}
}

View File

@ -0,0 +1,12 @@
package io.metersphere.track.domain;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class TapdUser implements Serializable {
private List<String> roleId;
private String name;
private String user;
}

View File

@ -3,6 +3,8 @@ package io.metersphere.track.request.testcase;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
public class IssuesRequest {
@ -10,4 +12,5 @@ public class IssuesRequest {
private String content;
private String projectId;
private String testCaseId;
private List<String> tapdUsers;
}

View File

@ -1,6 +1,7 @@
package io.metersphere.track.service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import io.metersphere.base.domain.*;
import io.metersphere.base.mapper.IssuesMapper;
@ -17,6 +18,7 @@ import io.metersphere.controller.ResultHolder;
import io.metersphere.controller.request.IntegrationRequest;
import io.metersphere.service.IntegrationService;
import io.metersphere.service.ProjectService;
import io.metersphere.track.domain.TapdUser;
import io.metersphere.track.request.testcase.IssuesRequest;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
@ -188,10 +190,14 @@ public class IssuesService {
MSException.throwException("未关联Tapd 项目ID");
}
List<String> tapdUsers = issuesRequest.getTapdUsers();
String usersStr = String.join(";", tapdUsers);
MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<>();
paramMap.add("title", issuesRequest.getTitle());
paramMap.add("workspace_id", tapdId);
paramMap.add("description", issuesRequest.getContent());
paramMap.add("current_owner", usersStr);
ResultHolder result = call(url, HttpMethod.POST, paramMap);
@ -535,4 +541,19 @@ public class IssuesService {
issuesMapper.updateByPrimaryKeySelective(issues);
}
public List<TapdUser> getTapdProjectUsers(String caseId) {
List<TapdUser> users = new ArrayList<>();
String projectId = getTapdProjectId(caseId);
String url = "https://api.tapd.cn/workspaces/users?workspace_id=" + projectId;
ResultHolder call = call(url);
String listJson = JSON.toJSONString(call.getData());
JSONArray jsonArray = JSON.parseArray(listJson);
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject o = jsonArray.getJSONObject(i);
TapdUser user = o.getObject("UserWorkspace", TapdUser.class);
users.add(user);
}
return users;
}
}

View File

@ -218,6 +218,12 @@
/>
<ckeditor :editor="editor" :disabled="isReadOnly" :config="editorConfig"
v-model="testCase.issues.content"/>
<el-row v-if="hasTapdId">
Tapd平台处理人
<el-select v-model="testCase.tapdUsers" placeholder="请选择处理人" style="width: 20%" multiple collapse-tags>
<el-option v-for="(userInfo, index) in users" :key="index" :label="userInfo.user" :value="userInfo.user"/>
</el-select>
</el-row>
<el-button type="primary" size="small" @click="saveIssues">{{$t('commons.save')}}</el-button>
<el-button size="small" @click="issuesSwitch=false">{{$t('commons.cancel')}}</el-button>
</el-col>
@ -323,6 +329,8 @@
test: {},
activeTab: 'detail',
isFailure: true,
users: [],
hasTapdId: false
};
},
props: {
@ -490,6 +498,17 @@
executeResult += this.addPLabel(stepPrefix + (step.executeResult == undefined ? '' : step.executeResult));
});
this.testCase.issues.content = desc + this.addPLabel('') + result + this.addPLabel('') + executeResult + this.addPLabel('');
this.$get("/test/case/project/" + this.testCase.caseId, res => {
const project = res.data;
if (project.tapdId) {
this.hasTapdId = true;
this.result = this.$get("/issues/tapd/user/" + this.testCase.caseId, response => {
let data = response.data;
this.users = data;
})
}
})
}
},
addPLabel(str) {
@ -515,6 +534,7 @@
param.title = this.testCase.issues.title;
param.content = this.testCase.issues.content;
param.testCaseId = this.testCase.caseId;
param.tapdUsers = this.testCase.tapdUsers;
this.result = this.$post("/issues/add", param, () => {
this.$success(this.$t('commons.save_success'));
this.getIssues(param.testCaseId);
@ -522,6 +542,7 @@
this.issuesSwitch = false;
this.testCase.issues.title = "";
this.testCase.issues.content = "";
this.testCase.tapdUsers = [];
},
getIssues(caseId) {
this.result = this.$get("/issues/get/" + caseId, response => {