From a75380470704eaa8bcc648d103f9fb65c44543cc Mon Sep 17 00:00:00 2001 From: YegorZh Date: Tue, 19 Nov 2024 17:04:19 +0000 Subject: [PATCH 1/3] feat: script to add version header to java dsdk on generation, some test fixes that are already merged in java sdk --- .gitignore | 5 ++- package-lock.json | 12 +++++++ package.json | 4 ++- scripts/java/addVersionHeaderToApiClient.ts | 36 +++++++++++++++++++ scripts/java/fixFileRelatedGetRequests.ts | 25 ++++--------- scripts/java/utils.ts | 31 ++++++++++++++++ unit/e2e_tests/java/AccountTests.java | 8 ++--- unit/e2e_tests/java/PaymentTests.java | 5 +-- unit/e2e_tests/java/ReceivedPaymentTests.java | 2 +- unit/e2e_tests/java/TestHelpers.java | 9 ++++- unit/e2e_tests/java/TokenTests.java | 1 - 11 files changed, 107 insertions(+), 31 deletions(-) create mode 100644 scripts/java/addVersionHeaderToApiClient.ts create mode 100644 scripts/java/utils.ts diff --git a/.gitignore b/.gitignore index bb7c652..91ff849 100644 --- a/.gitignore +++ b/.gitignore @@ -76,4 +76,7 @@ target/ node_modules #macOS -.DS_Store \ No newline at end of file +.DS_Store + +#local env +.env \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 492e360..3f4e212 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,7 @@ "dependencies": { "@openapitools/openapi-generator-cli": "^2.14.0", "@redocly/cli": "^1.13.0", + "dotenv": "^16.4.5", "prettier": "^3.2.5", "ts-node": "^10.9.2" } @@ -1308,6 +1309,17 @@ "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.1.tgz", "integrity": "sha512-tVP8C/GJwnABOn/7cx/ymx/hXpmBfWIPihC1aOEvS8GbMqy3pgeYtJk1HXN3CO7tu+8bpY18f6isjR5Cymj0TQ==" }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/easy-table": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.1.0.tgz", diff --git a/package.json b/package.json index cf5f4e9..34a0825 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,8 @@ "scripts": { "bundle": "redocly bundle openapi.json -o dist/bundledSchema.json", "fix-java-file-get-requests": "ts-node ./scripts/java/fixFileRelatedGetRequests.ts", - "generate-java": "rm -rf ./dist/java-sdk && npm run bundle && npx mkdirp dist/java-sdk/src/test/java/unit/java/sdk && cp -a ./unit/e2e_tests/java/. ./dist/java-sdk/src/test/java/unit/java/sdk && openapi-generator-cli generate -g java -i ./dist/bundledSchema.json -o ./dist/java-sdk -p hideGenerationTimestamp=true -p packageName=unit.java.sdk -p modelPackage=unit.java.sdk.model -p apiPackage=unit.java.sdk.api --library native -p useJakartaEe=true --openapi-normalizer REFACTOR_ALLOF_WITH_PROPERTIES_ONLY=true && npm run fix-java-file-get-requests -- --path=./dist/java-sdk/src/main/java/unit/java/sdk/api/UnitApi.java", + "add-version-header-to-java": "ts-node ./scripts/java/addVersionHeaderToApiClient.ts", + "generate-java": "rm -rf ./dist/java-sdk && npm run bundle && npx mkdirp dist/java-sdk/src/test/java/unit/java/sdk && cp -a ./unit/e2e_tests/java/. ./dist/java-sdk/src/test/java/unit/java/sdk && openapi-generator-cli generate -g java -i ./dist/bundledSchema.json -o ./dist/java-sdk -p hideGenerationTimestamp=true -p packageName=unit.java.sdk -p modelPackage=unit.java.sdk.model -p apiPackage=unit.java.sdk.api --library native -p useJakartaEe=true --openapi-normalizer REFACTOR_ALLOF_WITH_PROPERTIES_ONLY=true && npm run fix-java-file-get-requests -- --path=./dist/java-sdk/src/main/java/unit/java/sdk/api/UnitApi.java && npm run add-version-header-to-java -- --path=./dist/java-sdk/src/main/java/unit/java/sdk/ApiClient.java", "generate-ruby": "rm -rf ./dist/ruby-sdk && npm run bundle && cp -r unit ./dist/ruby-sdk && openapi-generator-cli generate -g ruby -i ./dist/bundledSchema.json -o ./dist/ruby-sdk", "generate-node": "rm -rf ./dist/node-sdk && npm run bundle && openapi-generator-cli generate -g typescript-axios -i ./dist/bundledSchema.json -o ./dist/node-sdk", "lint": "redocly lint --config .redocly.yaml openapi.json", @@ -11,6 +12,7 @@ "dependencies": { "@openapitools/openapi-generator-cli": "^2.14.0", "@redocly/cli": "^1.13.0", + "dotenv": "^16.4.5", "prettier": "^3.2.5", "ts-node": "^10.9.2" } diff --git a/scripts/java/addVersionHeaderToApiClient.ts b/scripts/java/addVersionHeaderToApiClient.ts new file mode 100644 index 0000000..d0cc3be --- /dev/null +++ b/scripts/java/addVersionHeaderToApiClient.ts @@ -0,0 +1,36 @@ +import { getPathCmdParameter, loadDotenv, openJavaFile } from "./utils"; +import fs from "fs"; + +function addVersionHeadersToApiClient(data: string): string { + const interceptorRegex = /interceptor = null;/gm; + + var processedData = data; + console.log("API VERSION: " + process.env.API_VERSION); + const interceptorWithVersionHeader = `interceptor = (req) -> { + req.setHeader("X-UNIT-SDK", "unit-node-sdk@v${process.env.API_VERSION}"); + };`; + processedData = processedData.replaceAll( + interceptorRegex, + interceptorWithVersionHeader + ); + + return processedData; +} + +function execute() { + loadDotenv(); + + try { + console.log("Adding version header to ApiClient..."); + const path = getPathCmdParameter(); + const data = openJavaFile(path); + const processedData = addVersionHeadersToApiClient(data); + console.log("Added version header to ApiClient!"); + + fs.writeFileSync(path, processedData); + } catch (e) { + console.error(e); + } +} + +execute(); diff --git a/scripts/java/fixFileRelatedGetRequests.ts b/scripts/java/fixFileRelatedGetRequests.ts index 03f0371..8a87d80 100644 --- a/scripts/java/fixFileRelatedGetRequests.ts +++ b/scripts/java/fixFileRelatedGetRequests.ts @@ -1,6 +1,7 @@ import fs from "fs"; +import { getPathCmdParameter, openJavaFile } from "./utils"; -function processData(data: string): string { +function fixFileRelatedGetRequests(data: string): string { const mainFunctionNameRegex = /(File )(get|download)/gm; const mainFunctionHttpInfoReturnRegex = /(ApiResponse<)(File)(> localVarResponse)/gm; @@ -73,26 +74,14 @@ import java.net.URI;` } function execute() { - const pathArg = process.argv.find((val) => val.includes("--path=")); - if (pathArg == null) { - console.error( - `Undefined path! Don't forget to specify the path, e.g. "...fixFileRelatedGetRequests.ts ./TargetFile.java"` - ); - return; - } - - const path = pathArg?.replace("--path=", ""); - if (!path.includes(".java")) { - console.error("Path must lead to a java file!"); - return; - } - try { console.log("Fixing file related get requests..."); - const data = fs.readFileSync(path, "utf-8"); - const processedData = processData(data); - fs.writeFileSync(path, processedData); + const path = getPathCmdParameter(); + const data = openJavaFile(path); + const processedData = fixFileRelatedGetRequests(data); console.log("Fixed file related get requests!"); + + fs.writeFileSync(path, processedData); } catch (e) { console.error(e); } diff --git a/scripts/java/utils.ts b/scripts/java/utils.ts new file mode 100644 index 0000000..3862452 --- /dev/null +++ b/scripts/java/utils.ts @@ -0,0 +1,31 @@ +import fs from "fs"; +import dotenv from "dotenv"; + +export function loadDotenv() { + dotenv.config(); +} + +export function openJavaFile(path: string): string { + if (!path.includes(".java")) { + throw new Error("Path must lead to a java file!"); + } + + return fs.readFileSync(path, "utf-8"); +} + +export function getPathCmdParameter(): string { + const pathArg = process.argv.find((val) => val.includes("--path=")); + + if (pathArg == null) { + throw new Error( + `Undefined path! Don't forget to specify the path, e.g. "...fixFileRelatedGetRequests.ts ./TargetFile.java"` + ); + } + + const path = pathArg?.replace("--path=", ""); + if (!path.includes(".java")) { + throw new Error("Path must lead to a java file!"); + } + + return path; +} diff --git a/unit/e2e_tests/java/AccountTests.java b/unit/e2e_tests/java/AccountTests.java index 42a74a9..34f2cac 100644 --- a/unit/e2e_tests/java/AccountTests.java +++ b/unit/e2e_tests/java/AccountTests.java @@ -414,7 +414,7 @@ WalletAccount CreateAndCloseWalletAccount() throws ApiException { CloseAccountRequestDataAttributes closeAccountRequestAttributes = new CloseAccountRequestDataAttributes(); closeAccountRequestAttributes.setReason(CloseAccountRequestDataAttributes.ReasonEnum.BY_CUSTOMER); closeAccountRequestData.setAttributes(closeAccountRequestAttributes); - closeAccountRequestData.setType(CloseAccountRequestData.TypeEnum.DEPOSIT_ACCOUNT_CLOSE); + closeAccountRequestData.setType(CloseAccountRequestData.TypeEnum.WALLET_ACCOUNT_CLOSE); closeAccountRequest.setData(closeAccountRequestData); UnitAccountResponse res = unitApi.closeAccount(walletAccount.getId(), closeAccountRequest); @@ -436,7 +436,7 @@ public void ReopenWalletAccountApiTest() throws ApiException { } WalletAccount CreateAndFreezeWalletAccount() throws ApiException { - DepositAccount walletAccount = CreateDepositAccount(unitApi, CreateIndividualCustomer(unitApi)); + WalletAccount walletAccount = CreateWalletAccount(); FreezeAccountRequest freezeAccountRequest = new FreezeAccountRequest(); FreezeAccountRequestData freezeAccountRequestData = new FreezeAccountRequestData(); FreezeAccountRequestDataAttributes freezeAccountRequestDataAttributes = new FreezeAccountRequestDataAttributes(); @@ -464,8 +464,8 @@ public void UnfreezeWalletAccountApiTest() throws ApiException { @Test public void GetWalletAccountLimitsApiTest() throws ApiException { - DepositAccount depositAccount = CreateDepositAccount(unitApi, CreateIndividualCustomer(unitApi)); - UnitGetAccountLimitsResponse res = unitApi.getAccountLimits(depositAccount.getId()); + WalletAccount walletAccount = CreateWalletAccount(); + UnitGetAccountLimitsResponse res = unitApi.getAccountLimits(walletAccount.getId()); assert res.getData().getType().equals(Limits.TypeEnum.WALLET_LIMITS); } diff --git a/unit/e2e_tests/java/PaymentTests.java b/unit/e2e_tests/java/PaymentTests.java index 728933d..7c5b627 100644 --- a/unit/e2e_tests/java/PaymentTests.java +++ b/unit/e2e_tests/java/PaymentTests.java @@ -7,7 +7,6 @@ import static unit.java.sdk.TestHelpers.CreateWirePaymentCounterparty; import static unit.java.sdk.TestHelpers.GenerateUnitApiClient; -import java.math.BigDecimal; import java.util.List; import static unit.java.sdk.CustomerTests.CreateIndividualCustomer; @@ -19,7 +18,6 @@ import unit.java.sdk.model.AchPayment; import unit.java.sdk.model.BookPayment; import unit.java.sdk.model.CashDepositBarcode; -import unit.java.sdk.model.Coordinates; import unit.java.sdk.model.Counterparty; import unit.java.sdk.model.CounterpartyAccountRelationship; import unit.java.sdk.model.CounterpartyAccountRelationshipData; @@ -54,7 +52,6 @@ import unit.java.sdk.model.GenerateBarcodeRequestDataAttributes; import unit.java.sdk.model.GenerateBarcodeRequestRelationships; import unit.java.sdk.model.GetCashDepositStoreLocationsListFilterParameter; -import unit.java.sdk.model.GetCheckDepositsListFilterParameter; import unit.java.sdk.model.IndividualCustomer; import unit.java.sdk.model.IndividualDebitCard; import unit.java.sdk.model.ListPageParameters; @@ -301,7 +298,7 @@ public void UpdateAchPaymentApiTest() throws ApiException { @Test public void CancelAchPaymentTest() throws ApiException { AchPayment payment = CreateAchPayment(); - System.err.println(payment.getAttributes().getStatus()); + UnitPaymentResponse res = unitApi.cancelPayment(payment.getId(), new Object()); assert res.getData().getType().equals(Payment.TypeEnum.ACH_PAYMENT); } diff --git a/unit/e2e_tests/java/ReceivedPaymentTests.java b/unit/e2e_tests/java/ReceivedPaymentTests.java index bfaf96e..cb661a1 100644 --- a/unit/e2e_tests/java/ReceivedPaymentTests.java +++ b/unit/e2e_tests/java/ReceivedPaymentTests.java @@ -135,7 +135,7 @@ public void ReprocessReceivedPaymentApiTest() throws ApiException { UnitReceivedPaymentResponse res = unitApi.createIncomingAchPaymentSimulation(req); ReceivedPayment payment = res.getData(); assert payment.getType().equals(ReceivedPayment.TypeEnum.ACH_RECEIVED_PAYMENT); - System.err.println(payment.toString()); + UnitReceivedPaymentResponse reprocessRes = unitApi.reprocessReceivedPayment(payment.getId()); assert reprocessRes.getData().getType().equals(ReceivedPayment.TypeEnum.ACH_RECEIVED_PAYMENT); } diff --git a/unit/e2e_tests/java/TestHelpers.java b/unit/e2e_tests/java/TestHelpers.java index 901fa1c..1096df1 100644 --- a/unit/e2e_tests/java/TestHelpers.java +++ b/unit/e2e_tests/java/TestHelpers.java @@ -1,8 +1,10 @@ package unit.java.sdk; +import java.net.http.HttpRequest; import java.time.LocalDate; import java.util.ArrayList; import java.util.List; +import java.util.function.Consumer; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; @@ -44,7 +46,12 @@ static UnitApi GenerateUnitApiClient() { ObjectMapper mapper = cl.getObjectMapper(); mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); cl.setObjectMapper(mapper); - cl.setRequestInterceptor(r -> r.header("Authorization", "Bearer " + access_token)); + Consumer defaultInterceptor = cl.getRequestInterceptor(); + cl.setRequestInterceptor(r -> { + r.header("Authorization", "Bearer " + access_token); + System.err.println(r.build().headers().toString()); + System.err.println("println test"); + }); unitApi = new UnitApi(cl); } diff --git a/unit/e2e_tests/java/TokenTests.java b/unit/e2e_tests/java/TokenTests.java index 37e3e7b..ee3c974 100644 --- a/unit/e2e_tests/java/TokenTests.java +++ b/unit/e2e_tests/java/TokenTests.java @@ -64,7 +64,6 @@ public class TokenTests { // data.setAttributes(attributes); // data.setType(CreateApiTokenRequestData.TypeEnum.APITOKEN); // req.setData(data); - // System.err.println(data.toString()); // UnitApiTokenResponse res = unitApi.createApiToken(testUserId, req); // assert res.getData().getType().equals(ApiToken.TypeEnum.APITOKEN); From e5b3de18fb126e81d83e0b0d6ef7db6d117e66f3 Mon Sep 17 00:00:00 2001 From: YegorZh Date: Wed, 20 Nov 2024 12:46:46 +0000 Subject: [PATCH 2/3] feat: generation now also injects headers for setInterceptor function of ApiClient --- scripts/java/addVersionHeaderToApiClient.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/scripts/java/addVersionHeaderToApiClient.ts b/scripts/java/addVersionHeaderToApiClient.ts index d0cc3be..f4378e3 100644 --- a/scripts/java/addVersionHeaderToApiClient.ts +++ b/scripts/java/addVersionHeaderToApiClient.ts @@ -3,17 +3,27 @@ import fs from "fs"; function addVersionHeadersToApiClient(data: string): string { const interceptorRegex = /interceptor = null;/gm; - - var processedData = data; - console.log("API VERSION: " + process.env.API_VERSION); const interceptorWithVersionHeader = `interceptor = (req) -> { req.setHeader("X-UNIT-SDK", "unit-node-sdk@v${process.env.API_VERSION}"); };`; + + const setInterceptorRegex = /this\.interceptor = interceptor;/gm; + const setInterceptorWithVersionHeader = `this.interceptor = (req) -> { + req.setHeader("X-UNIT-SDK", "unit-node-sdk@v${process.env.API_VERSION}"); + interceptor.accept(req); + };`; + + var processedData = data; processedData = processedData.replaceAll( interceptorRegex, interceptorWithVersionHeader ); + processedData = processedData.replaceAll( + setInterceptorRegex, + setInterceptorWithVersionHeader + ); + return processedData; } From 461bd40673a5232ebc7b9a30065ec144511d347a Mon Sep 17 00:00:00 2001 From: YegorZh Date: Wed, 20 Nov 2024 14:47:44 +0000 Subject: [PATCH 3/3] fix: java sdk version name --- scripts/java/addVersionHeaderToApiClient.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/java/addVersionHeaderToApiClient.ts b/scripts/java/addVersionHeaderToApiClient.ts index f4378e3..97ec169 100644 --- a/scripts/java/addVersionHeaderToApiClient.ts +++ b/scripts/java/addVersionHeaderToApiClient.ts @@ -4,12 +4,12 @@ import fs from "fs"; function addVersionHeadersToApiClient(data: string): string { const interceptorRegex = /interceptor = null;/gm; const interceptorWithVersionHeader = `interceptor = (req) -> { - req.setHeader("X-UNIT-SDK", "unit-node-sdk@v${process.env.API_VERSION}"); + req.setHeader("X-UNIT-SDK", "unit-openapi-java-sdk@v${process.env.JAVA_SDK_VERSION}"); };`; const setInterceptorRegex = /this\.interceptor = interceptor;/gm; const setInterceptorWithVersionHeader = `this.interceptor = (req) -> { - req.setHeader("X-UNIT-SDK", "unit-node-sdk@v${process.env.API_VERSION}"); + req.setHeader("X-UNIT-SDK", "unit-openapi-java-sdk@v${process.env.JAVA_SDK_VERSION}"); interceptor.accept(req); };`;