From 55c399b044cc223e497f84ddfcc93fc94393e7a9 Mon Sep 17 00:00:00 2001 From: Sina Madani Date: Fri, 9 Aug 2024 11:03:28 +0100 Subject: [PATCH] refactor: Add ExistingSubaccount class --- .../com/vonage/client/kt/Subaccounts.kt | 27 ++++++++--------- .../com/vonage/client/kt/SubaccountsTest.kt | 29 ++++++++++--------- 2 files changed, 30 insertions(+), 26 deletions(-) diff --git a/src/main/kotlin/com/vonage/client/kt/Subaccounts.kt b/src/main/kotlin/com/vonage/client/kt/Subaccounts.kt index 9899947..dffc91b 100644 --- a/src/main/kotlin/com/vonage/client/kt/Subaccounts.kt +++ b/src/main/kotlin/com/vonage/client/kt/Subaccounts.kt @@ -31,21 +31,22 @@ class Subaccounts internal constructor(private val client: SubaccountsClient) { return client.createSubaccount(builder.build()) } - fun getSubaccount(subaccountKey: String): Account = client.getSubaccount(subaccountKey) + fun subaccount(subaccountKey: String): ExistingSubaccount = ExistingSubaccount(subaccountKey) - fun updateSubaccount(subaccountKey: String, name: String? = null, - usePrimaryAccountBalance: Boolean? = null, suspend: Boolean? = null): Account { - val builder = UpdateSubaccountRequest.builder(subaccountKey) - if (name != null) { - builder.name(name) - } - if (usePrimaryAccountBalance != null) { - builder.usePrimaryAccountBalance(usePrimaryAccountBalance) - } - if (suspend != null) { - builder.suspended(suspend) + inner class ExistingSubaccount internal constructor(val subaccountKey: String) { + + fun get(): Account = client.getSubaccount(subaccountKey) + + fun suspended(suspend: Boolean): Account = + client.updateSubaccount(UpdateSubaccountRequest.builder(subaccountKey).suspended(suspend).build()) + + fun update(name: String? = null, usePrimaryAccountBalance: Boolean? = null): Account { + val builder = UpdateSubaccountRequest.builder(subaccountKey).name(name) + if (usePrimaryAccountBalance != null) { + builder.usePrimaryAccountBalance(usePrimaryAccountBalance) + } + return client.updateSubaccount(builder.build()) } - return client.updateSubaccount(builder.build()) } fun listCreditTransfers(startDate: Instant? = null, endDate: Instant? = null, diff --git a/src/test/kotlin/com/vonage/client/kt/SubaccountsTest.kt b/src/test/kotlin/com/vonage/client/kt/SubaccountsTest.kt index 4133065..24d9f7d 100644 --- a/src/test/kotlin/com/vonage/client/kt/SubaccountsTest.kt +++ b/src/test/kotlin/com/vonage/client/kt/SubaccountsTest.kt @@ -24,10 +24,11 @@ import java.time.temporal.ChronoUnit class SubaccountsTest : AbstractTest() { private val client = vonage.subaccounts + private val authType = AuthType.API_KEY_SECRET_HEADER + private val existingSubaccount = client.subaccount(apiKey2) private val baseUrl = "/accounts/$apiKey" private val subaccountsUrl = "$baseUrl/subaccounts" private val existingSubUrl = "$subaccountsUrl/$apiKey2" - private val authType = AuthType.API_KEY_SECRET_HEADER private val name = "Subaccount department A" private val primaryName = "Primary Account" private val balance = 93.26 @@ -54,7 +55,7 @@ class SubaccountsTest : AbstractTest() { private fun assertEqualsSampleSubaccount(parsed: Account) { assertNotNull(parsed) assertEquals(secret, parsed.secret) - assertEquals(apiKey2, parsed.apiKey) + assertEquals(existingSubaccount.subaccountKey, parsed.apiKey) assertEquals(name, parsed.name) assertEquals(apiKey, parsed.primaryAccountApiKey) assertEquals(usePrimary, parsed.usePrimaryAccountBalance) @@ -246,37 +247,39 @@ class SubaccountsTest : AbstractTest() { expectedUrl = existingSubUrl, authType = authType, expectedResponseParams = sampleSubaccountMap ) - assertEqualsSampleSubaccount(client.getSubaccount(apiKey2)) - assert401ApiResponseException("$subaccountsUrl/$apiKey2", HttpMethod.GET) { - client.getSubaccount(apiKey2) + assertEqualsSampleSubaccount(existingSubaccount.get()) + assert401ApiResponseException(existingSubUrl, HttpMethod.GET) { + existingSubaccount.get() } } @Test - fun `update subaccount all parameters`() { + fun `update subaccount`() { mockPatch( expectedUrl = existingSubUrl, authType = authType, expectedRequestParams = mapOf( "name" to name, - "use_primary_account_balance" to usePrimary, - "suspended" to suspended + "use_primary_account_balance" to usePrimary ), expectedResponseParams = sampleSubaccountMap ) - assertEqualsSampleSubaccount(client.updateSubaccount(apiKey2, name, usePrimary, suspended)) + assertEqualsSampleSubaccount(existingSubaccount.update(name, usePrimary)) assert401ApiResponseException(existingSubUrl, HttpMethod.PATCH) { - client.updateSubaccount(apiKey2, suspend = suspended) + existingSubaccount.update(usePrimaryAccountBalance = usePrimary) } } @Test - fun `update subaccount name only`() { + fun `suspend subaccount`() { mockPatch( expectedUrl = existingSubUrl, authType = authType, - expectedRequestParams = mapOf("name" to name), + expectedRequestParams = mapOf("suspended" to suspended), expectedResponseParams = sampleSubaccountMap ) - assertEqualsSampleSubaccount(client.updateSubaccount(subaccountKey = apiKey2, name = name)) + assertEqualsSampleSubaccount(existingSubaccount.suspended(suspended)) + assert401ApiResponseException(existingSubUrl, HttpMethod.PATCH) { + existingSubaccount.suspended(!suspended) + } } @Test