Merge branch 'master' into v1.6

This commit is contained in:
BugKing 2020-12-31 14:32:32 +08:00
commit a19e3521e2
8 changed files with 46 additions and 43 deletions

View File

@ -1,8 +1,8 @@
--- ---
name: v1.6.1 问题 name: v1.6反馈
about: 提交关于 v1.6.1 的缺陷与建议赢取Lv同款鼠标垫马克杯文化衫 about: 提交关于 v1.6的缺陷与建议赢取Lv同款鼠标垫马克杯文化衫
title: "[v1.6.1]" title: "[v1.6]"
labels: v1.6.1 labels: v1.6
assignees: luty2018 assignees: luty2018
--- ---

View File

@ -32,12 +32,7 @@ public class KeyValue {
} }
public KeyValue(String name, String value, String description, String contentType) { public KeyValue(String name, String value, String description, String contentType) {
this.name = name; this(name, value, description, contentType, true);
this.value = value;
this.description = description;
this.contentType = contentType;
this.enable = true;
this.required = true;
} }
public KeyValue(String name, String value, String description, String contentType, boolean required) { public KeyValue(String name, String value, String description, String contentType, boolean required) {
@ -49,6 +44,10 @@ public class KeyValue {
this.required = required; this.required = required;
} }
public KeyValue(String name, String value, String description, boolean required) {
this(name, value, description, "", required);
}
public boolean isValid() { public boolean isValid() {
return (StringUtils.isNotBlank(name) || StringUtils.isNotBlank(value)) && !StringUtils.equalsIgnoreCase(type, "file"); return (StringUtils.isNotBlank(name) || StringUtils.isNotBlank(value)) && !StringUtils.equalsIgnoreCase(type, "file");
} }

View File

@ -142,10 +142,10 @@ public abstract class ApiImportAbstractParser implements ApiImportParser {
} }
protected void addCookie(List<KeyValue> headers, String key, String value) { protected void addCookie(List<KeyValue> headers, String key, String value) {
addCookie(headers, key, value, "", "", true); addCookie(headers, key, value, "", true);
} }
protected void addCookie(List<KeyValue> headers, String key, String value, String description, String contentType, boolean required) { protected void addCookie(List<KeyValue> headers, String key, String value, String description, boolean required) {
boolean hasCookie = false; boolean hasCookie = false;
for (KeyValue header : headers) { for (KeyValue header : headers) {
if (StringUtils.equalsIgnoreCase("Cookie", header.getName())) { if (StringUtils.equalsIgnoreCase("Cookie", header.getName())) {

View File

@ -166,8 +166,7 @@ public class Swagger2Parser extends ApiImportAbstractParser {
private void parseCookieParameters(Parameter parameter, List<KeyValue> headers) { private void parseCookieParameters(Parameter parameter, List<KeyValue> headers) {
CookieParameter cookieParameter = (CookieParameter) parameter; CookieParameter cookieParameter = (CookieParameter) parameter;
addCookie(headers, cookieParameter.getName(), "", getDefaultStringValue(cookieParameter.getDescription()), addCookie(headers, cookieParameter.getName(), "", getDefaultStringValue(cookieParameter.getDescription()), parameter.getRequired());
"", parameter.getRequired());
} }
private void parseHeaderParameters(Parameter parameter, List<KeyValue> headers) { private void parseHeaderParameters(Parameter parameter, List<KeyValue> headers) {
@ -301,8 +300,7 @@ public class Swagger2Parser extends ApiImportAbstractParser {
private void parseFormDataParameters(FormParameter parameter, Body body) { private void parseFormDataParameters(FormParameter parameter, Body body) {
List<KeyValue> keyValues = Optional.ofNullable(body.getKvs()).orElse(new ArrayList<>()); List<KeyValue> keyValues = Optional.ofNullable(body.getKvs()).orElse(new ArrayList<>());
KeyValue kv = new KeyValue(parameter.getName(), "", getDefaultStringValue(parameter.getDescription()), KeyValue kv = new KeyValue(parameter.getName(), "", getDefaultStringValue(parameter.getDescription()), parameter.getRequired());
"", parameter.getRequired());
if (StringUtils.equals(parameter.getType(), "file")) { if (StringUtils.equals(parameter.getType(), "file")) {
kv.setType("file"); kv.setType("file");
} }
@ -312,7 +310,6 @@ public class Swagger2Parser extends ApiImportAbstractParser {
private void parseQueryParameters(Parameter parameter, List<KeyValue> arguments) { private void parseQueryParameters(Parameter parameter, List<KeyValue> arguments) {
QueryParameter queryParameter = (QueryParameter) parameter; QueryParameter queryParameter = (QueryParameter) parameter;
arguments.add(new KeyValue(queryParameter.getName(), "", getDefaultStringValue(queryParameter.getDescription()), arguments.add(new KeyValue(queryParameter.getName(), "", getDefaultStringValue(queryParameter.getDescription()), queryParameter.getRequired()));
"", queryParameter.getRequired()));
} }
} }

View File

@ -17,7 +17,6 @@ import io.metersphere.commons.exception.MSException;
import io.metersphere.commons.utils.CommonBeanFactory; import io.metersphere.commons.utils.CommonBeanFactory;
import io.metersphere.commons.utils.LogUtil; import io.metersphere.commons.utils.LogUtil;
import io.metersphere.commons.utils.XMLUtils; import io.metersphere.commons.utils.XMLUtils;
import io.swagger.models.parameters.FormParameter;
import io.swagger.parser.OpenAPIParser; import io.swagger.parser.OpenAPIParser;
import io.swagger.v3.oas.models.*; import io.swagger.v3.oas.models.*;
import io.swagger.v3.oas.models.headers.Header; import io.swagger.v3.oas.models.headers.Header;
@ -179,12 +178,12 @@ public class Swagger3Parser extends ApiImportAbstractParser {
private void parseCookieParameters(Parameter parameter, List<KeyValue> headers) { private void parseCookieParameters(Parameter parameter, List<KeyValue> headers) {
CookieParameter cookieParameter = (CookieParameter) parameter; CookieParameter cookieParameter = (CookieParameter) parameter;
addCookie(headers, cookieParameter.getName(), "", getDefaultStringValue(cookieParameter.getDescription()), "", true); addCookie(headers, cookieParameter.getName(), "", getDefaultStringValue(cookieParameter.getDescription()), parameter.getRequired());
} }
private void parseHeaderParameters(Parameter parameter, List<KeyValue> headers) { private void parseHeaderParameters(Parameter parameter, List<KeyValue> headers) {
HeaderParameter headerParameter = (HeaderParameter) parameter; HeaderParameter headerParameter = (HeaderParameter) parameter;
addHeader(headers, headerParameter.getName(), "", getDefaultStringValue(headerParameter.getDescription()), "", true); addHeader(headers, headerParameter.getName(), "", getDefaultStringValue(headerParameter.getDescription()), "", parameter.getRequired());
} }
private HttpResponse parseResponse(ApiResponses responses) { private HttpResponse parseResponse(ApiResponses responses) {
@ -250,9 +249,9 @@ public class Swagger3Parser extends ApiImportAbstractParser {
} }
Set<String> refSet = new HashSet<>(); Set<String> refSet = new HashSet<>();
Map<String, String> binaryKeyMap = new HashMap(); Map<String, Schema> infoMap = new HashMap();
Schema schema = mediaType.getSchema(); Schema schema = mediaType.getSchema();
Object bodyData = parseSchema(schema, refSet, binaryKeyMap); Object bodyData = parseSchema(schema, refSet, infoMap);
if (bodyData == null) { if (bodyData == null) {
return; return;
@ -261,7 +260,7 @@ public class Swagger3Parser extends ApiImportAbstractParser {
body.setType(getBodyType(contentType)); body.setType(getBodyType(contentType));
if (StringUtils.equals(contentType, org.springframework.http.MediaType.APPLICATION_FORM_URLENCODED_VALUE)) { if (StringUtils.equals(contentType, org.springframework.http.MediaType.APPLICATION_FORM_URLENCODED_VALUE)) {
parseKvBody(schema, body, bodyData, binaryKeyMap); parseKvBody(schema, body, bodyData, infoMap);
} else if (StringUtils.equals(contentType, org.springframework.http.MediaType.MULTIPART_FORM_DATA_VALUE)) { } else if (StringUtils.equals(contentType, org.springframework.http.MediaType.MULTIPART_FORM_DATA_VALUE)) {
body.setRaw(bodyData.toString()); body.setRaw(bodyData.toString());
} else if (StringUtils.equals(contentType, org.springframework.http.MediaType.APPLICATION_JSON_VALUE)) { } else if (StringUtils.equals(contentType, org.springframework.http.MediaType.APPLICATION_JSON_VALUE)) {
@ -269,28 +268,35 @@ public class Swagger3Parser extends ApiImportAbstractParser {
} else if (StringUtils.equals(contentType, org.springframework.http.MediaType.APPLICATION_XML_VALUE)) { } else if (StringUtils.equals(contentType, org.springframework.http.MediaType.APPLICATION_XML_VALUE)) {
body.setRaw(parseXmlBody(schema, bodyData)); body.setRaw(parseXmlBody(schema, bodyData));
} else if (StringUtils.equals(contentType, org.springframework.http.MediaType.APPLICATION_OCTET_STREAM_VALUE)) { } else if (StringUtils.equals(contentType, org.springframework.http.MediaType.APPLICATION_OCTET_STREAM_VALUE)) {
parseKvBody(schema, body, bodyData, binaryKeyMap); parseKvBody(schema, body, bodyData, infoMap);
} else { } else {
body.setRaw(bodyData.toString()); body.setRaw(bodyData.toString());
} }
} }
private void parseKvBody(Schema schema, Body body, Object data, Map<String, String> binaryKeyMap) { private void parseKvBody(Schema schema, Body body, Object data, Map<String, Schema> infoMap) {
if (data instanceof JSONObject) { if (data instanceof JSONObject) {
((JSONObject) data).forEach((k, v) -> { ((JSONObject) data).forEach((k, v) -> {
KeyValue kv = new KeyValue(k, v.toString()); KeyValue kv = new KeyValue(k, v.toString());
if (binaryKeyMap.keySet().contains(k)) { Schema schemaInfo = infoMap.get(k);
kv.setDescription(binaryKeyMap.get(k)); if (schemaInfo != null) {
kv.setDescription(schemaInfo.getDescription());
// kv.setRequired(schemaInfo.getRequired());
if (schemaInfo instanceof BinarySchema) {
kv.setType("file"); kv.setType("file");
} }
}
body.getKvs().add(kv); body.getKvs().add(kv);
}); });
} else { } else {
KeyValue kv = new KeyValue(schema.getName(), data.toString(), schema.getDescription()); KeyValue kv = new KeyValue(schema.getName(), data.toString(), schema.getDescription());
if (binaryKeyMap.keySet().contains(schema.getName())) { Schema schemaInfo = infoMap.get(schema.getName());
kv.setDescription(binaryKeyMap.get(schema.getDescription())); if (schemaInfo != null) {
kv.setDescription(schemaInfo.getDescription());
if (schemaInfo instanceof BinarySchema) {
kv.setType("file"); kv.setType("file");
} }
}
body.getKvs().add(kv); body.getKvs().add(kv);
} }
} }
@ -315,37 +321,37 @@ public class Swagger3Parser extends ApiImportAbstractParser {
return this.components.getSchemas().get(ref); return this.components.getSchemas().get(ref);
} }
private Object parseSchema(Schema schema, Set<String> refSet, Map<String, String> binaryKeyMap) { private Object parseSchema(Schema schema, Set<String> refSet, Map<String, Schema> infoMap) {
infoMap.put(schema.getName(), schema);
if (StringUtils.isNotBlank(schema.get$ref())) { if (StringUtils.isNotBlank(schema.get$ref())) {
if (refSet.contains(schema.get$ref())) { if (refSet.contains(schema.get$ref())) {
return new JSONObject(); return new JSONObject();
} }
refSet.add(schema.get$ref()); refSet.add(schema.get$ref());
Object propertiesResult = parseSchemaProperties(getModelByRef(schema.get$ref()), refSet, binaryKeyMap); Object propertiesResult = parseSchemaProperties(getModelByRef(schema.get$ref()), refSet, infoMap);
return propertiesResult == null ? getDefaultValueByPropertyType(schema) : propertiesResult; return propertiesResult == null ? getDefaultValueByPropertyType(schema) : propertiesResult;
} else if (schema instanceof ArraySchema) { } else if (schema instanceof ArraySchema) {
JSONArray jsonArray = new JSONArray(); JSONArray jsonArray = new JSONArray();
Schema items = ((ArraySchema) schema).getItems(); Schema items = ((ArraySchema) schema).getItems();
parseSchema(items, refSet, binaryKeyMap); parseSchema(items, refSet, infoMap);
jsonArray.add(parseSchema(items, refSet, binaryKeyMap)); jsonArray.add(parseSchema(items, refSet, infoMap));
return jsonArray; return jsonArray;
} else if (schema instanceof BinarySchema) { } else if (schema instanceof BinarySchema) {
binaryKeyMap.put(schema.getName(), schema.getDescription());
return getDefaultValueByPropertyType(schema); return getDefaultValueByPropertyType(schema);
} else { } else {
Object propertiesResult = parseSchemaProperties(schema, refSet, binaryKeyMap); Object propertiesResult = parseSchemaProperties(schema, refSet, infoMap);
return propertiesResult == null ? getDefaultValueByPropertyType(schema) : propertiesResult; return propertiesResult == null ? getDefaultValueByPropertyType(schema) : propertiesResult;
} }
} }
private Object parseSchemaProperties(Schema schema, Set<String> refSet, Map<String, String> binaryKeyMap) { private Object parseSchemaProperties(Schema schema, Set<String> refSet, Map<String, Schema> infoMap) {
Map<String, Schema> properties = schema.getProperties(); Map<String, Schema> properties = schema.getProperties();
if (MapUtils.isEmpty(properties)) { if (MapUtils.isEmpty(properties)) {
return null; return null;
} }
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
properties.forEach((key, value) -> { properties.forEach((key, value) -> {
jsonObject.put(key, parseSchema(value, refSet, binaryKeyMap)); jsonObject.put(key, parseSchema(value, refSet, infoMap));
}); });
return jsonObject; return jsonObject;
} }
@ -363,6 +369,6 @@ public class Swagger3Parser extends ApiImportAbstractParser {
private void parseQueryParameters(Parameter parameter, List<KeyValue> arguments) { private void parseQueryParameters(Parameter parameter, List<KeyValue> arguments) {
QueryParameter queryParameter = (QueryParameter) parameter; QueryParameter queryParameter = (QueryParameter) parameter;
arguments.add(new KeyValue(queryParameter.getName(), "", getDefaultStringValue(queryParameter.getDescription()))); arguments.add(new KeyValue(queryParameter.getName(), "", getDefaultStringValue(queryParameter.getDescription()), parameter.getRequired()));
} }
} }

@ -1 +1 @@
Subproject commit 068127ce59ea8b016434ed52a9de4a7a4b13bdb4 Subproject commit f27d1609d77f7d6c988d37d709466e844d350e17

View File

@ -1,4 +1,5 @@
alter table test_plan add project_id varchar(50) null comment '测试计划所属项目'; alter table test_plan add project_id varchar(50) null comment '测试计划所属项目';
ALTER TABLE api_test_case MODIFY COLUMN name varchar(255) NOT NULL COMMENT 'Test name';
DROP PROCEDURE IF EXISTS test_cursor; DROP PROCEDURE IF EXISTS test_cursor;
DELIMITER // DELIMITER //

View File

@ -307,7 +307,7 @@ export default {
rules: { rules: {
name: [ name: [
{required: true, message: this.$t('test_track.case.input_name'), trigger: 'blur'}, {required: true, message: this.$t('test_track.case.input_name'), trigger: 'blur'},
{max: 50, message: this.$t('test_track.length_less_than') + '50', trigger: 'blur'} {max: 255, message: this.$t('test_track.length_less_than') + '255', trigger: 'blur'}
], ],
module: [{required: true, message: this.$t('test_track.case.input_module'), trigger: 'change'}], module: [{required: true, message: this.$t('test_track.case.input_module'), trigger: 'change'}],
maintainer: [{required: true, message: this.$t('test_track.case.input_maintainer'), trigger: 'change'}], maintainer: [{required: true, message: this.$t('test_track.case.input_maintainer'), trigger: 'change'}],