diff --git a/scanner.cmd b/scanner.cmd index 7b5c7b6..ec4028f 100644 --- a/scanner.cmd +++ b/scanner.cmd @@ -1 +1 @@ -call C:\Ext\mvn17\bin\mvn.cmd clean package verify sonar:sonar -Dsonar.projectKey=scfs-api-sdk -Dsonar.projectName=scfs-api-sdk -Dsonar.host.url=http://10.129.135.192:7100 -Dsonar.login=sqp_90e5fb014f985e2c458e46b9239926cfbbd4fffe \ No newline at end of file +call C:\Ext\mvn17\bin\mvn.cmd clean test verify sonar:sonar -Dsonar.projectKey=scfs-api-sdk -Dsonar.projectName=scfs-api-sdk -Dsonar.host.url=http://10.129.135.192:7100 -Dsonar.login=sqp_90e5fb014f985e2c458e46b9239926cfbbd4fffe \ No newline at end of file diff --git a/scfs-api-test/src/main/java/com/czcb/scfs/api/test/RefGenTestMethod.java b/scfs-api-test/src/main/java/com/czcb/scfs/api/test/RefGenTestMethod.java index b23e203..e942492 100644 --- a/scfs-api-test/src/main/java/com/czcb/scfs/api/test/RefGenTestMethod.java +++ b/scfs-api-test/src/main/java/com/czcb/scfs/api/test/RefGenTestMethod.java @@ -1,10 +1,13 @@ package com.czcb.scfs.api.test; +import lombok.SneakyThrows; import lombok.experimental.UtilityClass; import org.assertj.core.util.Lists; import java.lang.reflect.Method; +import java.lang.reflect.ParameterizedType; import java.math.BigDecimal; +import java.util.ArrayList; import java.util.List; @UtilityClass @@ -34,61 +37,127 @@ public class RefGenTestMethod { private static final String EXTRACTED_RESPONSE = "\textracted%sParams(response);\n"; private static final String EXTRACTED_RESPONSE_ASSERTIONS = "\textracted%sAssertions(response);\n\n"; + @SneakyThrows private static void genRequestParams(Class request) { print("void extracted%sParams(%s request) {\n", request.getSimpleName(), request.getSimpleName()); + List> list = new ArrayList<>(); Method[] methods = request.getMethods(); for (Method method : methods) { if (!method.getName().startsWith("set")) { continue; } - printParams(FMT_REQUEST_METHOD, method); + if (method.getParameterTypes()[0].isAssignableFrom(List.class)) { + ParameterizedType type = (ParameterizedType) method.getGenericParameterTypes()[0]; + Class actualType = Class.forName(type.getActualTypeArguments()[0].getTypeName()); + list.add(actualType); + + String sun = actualType.getSimpleName(); + print("\t%s.%s %s = new %s.%s();\n", request.getSimpleName(), actualType.getSimpleName(), sun.toLowerCase(), request.getSimpleName(), actualType.getSimpleName()); + print("\textracted%sNestParams(%s);\n", actualType.getSimpleName(), sun.toLowerCase()); + print("\trequest.%s(Lists.list(%s));\n", method.getName(), sun.toLowerCase()); + } else { + printParams(FMT_REQUEST_METHOD, method); + } } print("}\n"); + + for (Class clazz : list) { + genNest(clazz); + } } + @SneakyThrows private static void genRequestAssertions(Class request) { print("void extracted%sAssertions(%s request) {\n", request.getSimpleName(), request.getSimpleName()); + List> list = new ArrayList<>(); Method[] methods = request.getMethods(); for (Method method : methods) { if (!method.getName().startsWith("set")) { continue; } - printAssertions(FMT_REQUEST_ASSERTIONS, method, true); + if (method.getParameterTypes()[0].isAssignableFrom(List.class)) { + ParameterizedType type = (ParameterizedType) method.getGenericParameterTypes()[0]; + Class actualType = Class.forName(type.getActualTypeArguments()[0].getTypeName()); + list.add(actualType); + + String sun = actualType.getSimpleName(); + print("\tfor (%s.%s %s : request.%s()) {\n", request.getSimpleName(), actualType.getSimpleName(), sun.toLowerCase(), method.getName().replace("set", "get")); + print("\t\textracted%sNestNestAssertions(%s);\n", actualType.getSimpleName(), sun.toLowerCase()); + print("\t}\n", method.getName(), sun.toLowerCase()); + } else { + printAssertions(FMT_REQUEST_ASSERTIONS, method, true); + } } print("}\n"); + + for (Class clazz : list) { + genNest(clazz); + } } + @SneakyThrows private static void genResponseParams(Class response) { print("void extracted%sParams(%s response) {\n", response.getSimpleName(), response.getSimpleName()); + List> list = new ArrayList<>(); Method[] methods = response.getMethods(); for (Method method : methods) { if (!method.getName().startsWith("set")) { continue; } + if (method.getParameterTypes()[0].isAssignableFrom(List.class)) { + ParameterizedType type = (ParameterizedType) method.getGenericParameterTypes()[0]; + Class actualType = Class.forName(type.getActualTypeArguments()[0].getTypeName()); + list.add(actualType); - printParams(FMT_RESPONSE_METHOD, method); + String sun = actualType.getSimpleName(); + print("\t%s.%s %s = new %s.%s();\n", response.getSimpleName(), actualType.getSimpleName(), sun.toLowerCase(), response.getSimpleName(), actualType.getSimpleName()); + print("\textracted%sNestParams(%s);\n", actualType.getSimpleName(), sun.toLowerCase()); + print("\tresponse.set%s(Lists.list(%s));\n", method.getName(), sun.toLowerCase()); + } else { + printParams(FMT_RESPONSE_METHOD, method); + } } print("}\n"); + + for (Class clazz : list) { + genNest(clazz); + } } + @SneakyThrows private static void genResponseAssertions(Class response) { print("void extracted%sAssertions(%s response) {\n", response.getSimpleName(), response.getSimpleName()); + List> list = new ArrayList<>(); Method[] methods = response.getMethods(); for (Method method : methods) { if (!method.getName().startsWith("set")) { continue; } + if (method.getParameterTypes()[0].isAssignableFrom(List.class)) { + ParameterizedType type = (ParameterizedType) method.getGenericParameterTypes()[0]; + Class actualType = Class.forName(type.getActualTypeArguments()[0].getTypeName()); + list.add(actualType); - printAssertions(FMT_RESPONSE_ASSERTIONS, method, false); + String sun = actualType.getSimpleName(); + print("\tfor (%s.%s %s : response.%s()) {\n", response.getSimpleName(), actualType.getSimpleName(), sun.toLowerCase(), method.getName().replace("set", "get")); + print("\t\textracted%sNestNestAssertions(%s);\n", actualType.getSimpleName(), sun.toLowerCase()); + print("\t}\n", method.getName(), sun.toLowerCase()); + } else { + printAssertions(FMT_RESPONSE_ASSERTIONS, method, false); + } } print("}\n"); + + for (Class clazz : list) { + genNest(clazz); + } } public static void gen(Class request, Class response, String methodName, String url) { diff --git a/scfs-api-test/src/test/java/com/czcb/scfs/api/test/RefGenTestMethodTest.java b/scfs-api-test/src/test/java/com/czcb/scfs/api/test/RefGenTestMethodTest.java index b332a14..01361ab 100644 --- a/scfs-api-test/src/test/java/com/czcb/scfs/api/test/RefGenTestMethodTest.java +++ b/scfs-api-test/src/test/java/com/czcb/scfs/api/test/RefGenTestMethodTest.java @@ -32,43 +32,43 @@ class RefGenTestMethodTest { RefGenTestMethod.gen(PersonOpenAccountThreeElementRequest.class, PersonOpenAccountThreeElementResponse.class, "personOpenAccountThreeElement", "/account/v2/person-open-account-three-element"); - RefGenTestMethod.gen(PersonOpenAccountFourElementRequest.class, PersonOpenAccountFourElementResponse.class, - "personOpenAccountFourElement", "/account/v2/person-open-account-four-element"); - - RefGenTestMethod.gen(OpenAccountCompanyRequest.class, OpenAccountCompanyResponse.class, - "openAccountCompany", "/account/v2/company-open-account"); - - RefGenTestMethod.gen(ModAccPersonRequest.class, ModAccPersonResponse.class, - "modAccPerson", "/account/v2/person-mod-account"); - - RefGenTestMethod.gen(ModAccCompanyRequest.class, ModAccCompanyResponse.class, - "modAccCompany", "/account/v2/company-mod-account"); - - RefGenTestMethod.gen(QueryBalanceRequest.class, QueryBalanceResponse.class, - "queryBalance", "/account/v2/query-balance"); - - RefGenTestMethod.gen(QueryCardInfoRequest.class, QueryCardInfoResponse.class, - "queryCardInfo", "/card-bin/v2/query"); - - RefGenTestMethod.gen(PersonBindRequest.class, PersonBindResponse.class, - "personBind", "/bank-card/v2/person-bind"); - - RefGenTestMethod.gen(CompanyBindRequest.class, CompanyBindResponse.class, - "companyBind", "/bank-card/v2/company-bind"); - - - RefGenTestMethod.gen(BankCardQueryRequest.class, BankCardQueryResponse.class, - "bankCardQuery", "/bank-card/v2/query"); - - - RefGenTestMethod.gen(UnbindRequest.class, UnbindResponse.class, - "unbind", "/bank-card/v2/unbind"); - - RefGenTestMethod.gen(ClosedAccRequest.class, ClosedAccResponse.class, - "closedAcc", "/account/v2/closed-account"); - - RefGenTestMethod.gen(OpenAccInnerRequest.class, OpenAccInnerResponse.class, - "openAccInner", "/account/v2/inner-open-account"); +// RefGenTestMethod.gen(PersonOpenAccountFourElementRequest.class, PersonOpenAccountFourElementResponse.class, +// "personOpenAccountFourElement", "/account/v2/person-open-account-four-element"); +// +// RefGenTestMethod.gen(OpenAccountCompanyRequest.class, OpenAccountCompanyResponse.class, +// "openAccountCompany", "/account/v2/company-open-account"); +// +// RefGenTestMethod.gen(ModAccPersonRequest.class, ModAccPersonResponse.class, +// "modAccPerson", "/account/v2/person-mod-account"); +// +// RefGenTestMethod.gen(ModAccCompanyRequest.class, ModAccCompanyResponse.class, +// "modAccCompany", "/account/v2/company-mod-account"); +// +// RefGenTestMethod.gen(QueryBalanceRequest.class, QueryBalanceResponse.class, +// "queryBalance", "/account/v2/query-balance"); +// +// RefGenTestMethod.gen(QueryCardInfoRequest.class, QueryCardInfoResponse.class, +// "queryCardInfo", "/card-bin/v2/query"); +// +// RefGenTestMethod.gen(PersonBindRequest.class, PersonBindResponse.class, +// "personBind", "/bank-card/v2/person-bind"); +// +// RefGenTestMethod.gen(CompanyBindRequest.class, CompanyBindResponse.class, +// "companyBind", "/bank-card/v2/company-bind"); +// +// +// RefGenTestMethod.gen(BankCardQueryRequest.class, BankCardQueryResponse.class, +// "bankCardQuery", "/bank-card/v2/query"); +// +// +// RefGenTestMethod.gen(UnbindRequest.class, UnbindResponse.class, +// "unbind", "/bank-card/v2/unbind"); +// +// RefGenTestMethod.gen(ClosedAccRequest.class, ClosedAccResponse.class, +// "closedAcc", "/account/v2/closed-account"); +// +// RefGenTestMethod.gen(OpenAccInnerRequest.class, OpenAccInnerResponse.class, +// "openAccInner", "/account/v2/inner-open-account"); } @Test