Skip to content

Commit 5bec40d

Browse files
committed
test: migrate TrustLineAssetTest to Kotlin.
1 parent c860da1 commit 5bec40d

File tree

2 files changed

+166
-78
lines changed

2 files changed

+166
-78
lines changed

src/test/java/org/stellar/sdk/TrustLineAssetTest.java

Lines changed: 0 additions & 78 deletions
This file was deleted.
Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
package org.stellar.sdk
2+
3+
import io.kotest.assertions.throwables.shouldThrow
4+
import io.kotest.core.spec.style.FunSpec
5+
import io.kotest.matchers.nulls.shouldBeNull
6+
import io.kotest.matchers.shouldBe
7+
import io.kotest.matchers.shouldNotBe
8+
import org.stellar.sdk.xdr.AssetType
9+
10+
class TrustLineAssetTest :
11+
FunSpec({
12+
context("Classic Asset") {
13+
test("should create TrustLineAsset with native asset") {
14+
val asset = AssetTypeNative()
15+
val trustLineAsset = TrustLineAsset(asset)
16+
17+
trustLineAsset.assetType shouldBe AssetType.ASSET_TYPE_NATIVE
18+
trustLineAsset.asset shouldBe asset
19+
trustLineAsset.liquidityPoolId.shouldBeNull()
20+
21+
val expectedXdr = "AAAAAA=="
22+
trustLineAsset.toXdr().toXdrBase64() shouldBe expectedXdr
23+
24+
val xdr = trustLineAsset.toXdr()
25+
val parsedTrustLineAsset = TrustLineAsset.fromXdr(xdr)
26+
parsedTrustLineAsset shouldBe trustLineAsset
27+
}
28+
29+
test("should create TrustLineAsset with alphaNum4 asset") {
30+
val asset = Asset.create("ARST:GB7TAYRUZGE6TVT7NHP5SMIZRNQA6PLM423EYISAOAP3MKYIQMVYP2JO")
31+
val trustLineAsset = TrustLineAsset(asset)
32+
33+
trustLineAsset.assetType shouldBe AssetType.ASSET_TYPE_CREDIT_ALPHANUM4
34+
trustLineAsset.asset shouldBe asset
35+
trustLineAsset.liquidityPoolId.shouldBeNull()
36+
37+
val expectedXdr = "AAAAAUFSU1QAAAAAfzBiNMmJ6dZ/ad/ZMRmLYA89bOa2TCJAcB+2KwiDK4c="
38+
trustLineAsset.toXdr().toXdrBase64() shouldBe expectedXdr
39+
40+
val xdr = trustLineAsset.toXdr()
41+
val parsedTrustLineAsset = TrustLineAsset.fromXdr(xdr)
42+
parsedTrustLineAsset shouldBe trustLineAsset
43+
}
44+
45+
test("should create TrustLineAsset with alphaNum12 asset") {
46+
val asset =
47+
Asset.create("ARST123123:GB7TAYRUZGE6TVT7NHP5SMIZRNQA6PLM423EYISAOAP3MKYIQMVYP2JO")
48+
val trustLineAsset = TrustLineAsset(asset)
49+
50+
trustLineAsset.assetType shouldBe AssetType.ASSET_TYPE_CREDIT_ALPHANUM12
51+
trustLineAsset.asset shouldBe asset
52+
trustLineAsset.liquidityPoolId.shouldBeNull()
53+
54+
val expectedXdr = "AAAAAkFSU1QxMjMxMjMAAAAAAAB/MGI0yYnp1n9p39kxGYtgDz1s5rZMIkBwH7YrCIMrhw=="
55+
trustLineAsset.toXdr().toXdrBase64() shouldBe expectedXdr
56+
57+
val xdr = trustLineAsset.toXdr()
58+
val parsedTrustLineAsset = TrustLineAsset.fromXdr(xdr)
59+
parsedTrustLineAsset shouldBe trustLineAsset
60+
}
61+
}
62+
63+
context("Liquidity Pool Share") {
64+
test("should create TrustLineAsset with liquidity pool ID") {
65+
val poolId = "dd7b1ab831c273310ddbec6f97870aa83c2fbd78ce22aded37ecbf4f3380faca"
66+
val trustLineAsset = TrustLineAsset(poolId)
67+
68+
trustLineAsset.assetType shouldBe AssetType.ASSET_TYPE_POOL_SHARE
69+
trustLineAsset.asset.shouldBeNull()
70+
trustLineAsset.liquidityPoolId shouldBe poolId
71+
72+
val expectedXdr = "AAAAA917GrgxwnMxDdvsb5eHCqg8L714ziKt7Tfsv08zgPrK"
73+
trustLineAsset.toXdr().toXdrBase64() shouldBe expectedXdr
74+
75+
// Test round-trip XDR conversion
76+
val xdr = trustLineAsset.toXdr()
77+
val parsedTrustLineAsset = TrustLineAsset.fromXdr(xdr)
78+
parsedTrustLineAsset shouldBe trustLineAsset
79+
}
80+
81+
test("should normalize liquidity pool ID to lowercase") {
82+
val poolIdUppercase = "DD7B1AB831C273310DDBEC6F97870AA83C2FBD78CE22ADED37ECBF4F3380FACA"
83+
val poolIdLowercase = "dd7b1ab831c273310ddbec6f97870aa83c2fbd78ce22aded37ecbf4f3380faca"
84+
val trustLineAsset = TrustLineAsset(poolIdUppercase)
85+
86+
trustLineAsset.liquidityPoolId shouldBe poolIdLowercase
87+
}
88+
89+
test("should handle mixed case liquidity pool ID") {
90+
val poolIdMixedCase = "Dd7B1aB831c273310DdBeC6f97870Aa83C2FbD78cE22adeD37ecBf4F3380fAcA"
91+
val poolIdLowercase = "dd7b1ab831c273310ddbec6f97870aa83c2fbd78ce22aded37ecbf4f3380faca"
92+
val trustLineAsset = TrustLineAsset(poolIdMixedCase)
93+
94+
trustLineAsset.liquidityPoolId shouldBe poolIdLowercase
95+
}
96+
97+
test("should handle short liquidity pool ID") {
98+
val shortPoolId = "dd7b1ab831c273310ddbec6f97870aa83c2fbd78ce22aded37ecbf4f3380fac"
99+
val exception = shouldThrow<Exception> { TrustLineAsset(shortPoolId) }
100+
exception.message shouldBe "Liquidity pool ID must be a 64-character hexadecimal string"
101+
}
102+
103+
test("should handle long liquidity pool ID") {
104+
val longPoolId = "dd7b1ab831c273310ddbec6f97870aa83c2fbd78ce22aded37ecbf4f3380facaa"
105+
val exception = shouldThrow<Exception> { TrustLineAsset(longPoolId) }
106+
exception.message shouldBe "Liquidity pool ID must be a 64-character hexadecimal string"
107+
}
108+
}
109+
110+
context("Equality and HashCode") {
111+
test("should be equal when same asset") {
112+
val asset = Asset.create("USD:GCEZWKCA5VLDNRLN3RPRJMRZOX3Z6G5CHCGSNFHEYVXM3XOJMDS674JZ")
113+
val trustLineAsset1 = TrustLineAsset(asset)
114+
val trustLineAsset2 = TrustLineAsset(asset)
115+
116+
trustLineAsset1 shouldBe trustLineAsset2
117+
trustLineAsset1.hashCode() shouldBe trustLineAsset2.hashCode()
118+
}
119+
120+
test("should be equal when same liquidity pool ID") {
121+
val poolId = "dd7b1ab831c273310ddbec6f97870aa83c2fbd78ce22aded37ecbf4f3380faca"
122+
val trustLineAsset1 = TrustLineAsset(poolId)
123+
val trustLineAsset2 = TrustLineAsset(poolId)
124+
125+
trustLineAsset1 shouldBe trustLineAsset2
126+
trustLineAsset1.hashCode() shouldBe trustLineAsset2.hashCode()
127+
}
128+
129+
test("should be equal when liquidity pool ID case differs") {
130+
val poolIdLower = "dd7b1ab831c273310ddbec6f97870aa83c2fbd78ce22aded37ecbf4f3380faca"
131+
val poolIdUpper = "DD7B1AB831C273310DDBEC6F97870AA83C2FBD78CE22ADED37ECBF4F3380FACA"
132+
val trustLineAsset1 = TrustLineAsset(poolIdLower)
133+
val trustLineAsset2 = TrustLineAsset(poolIdUpper)
134+
135+
trustLineAsset1 shouldBe trustLineAsset2
136+
trustLineAsset1.hashCode() shouldBe trustLineAsset2.hashCode()
137+
}
138+
139+
test("should not be equal when different assets") {
140+
val asset1 = Asset.create("USD:GCEZWKCA5VLDNRLN3RPRJMRZOX3Z6G5CHCGSNFHEYVXM3XOJMDS674JZ")
141+
val asset2 = Asset.create("EUR:GCEZWKCA5VLDNRLN3RPRJMRZOX3Z6G5CHCGSNFHEYVXM3XOJMDS674JZ")
142+
val trustLineAsset1 = TrustLineAsset(asset1)
143+
val trustLineAsset2 = TrustLineAsset(asset2)
144+
145+
trustLineAsset1 shouldNotBe trustLineAsset2
146+
}
147+
148+
test("should not be equal when different liquidity pool IDs") {
149+
val poolId1 = "dd7b1ab831c273310ddbec6f97870aa83c2fbd78ce22aded37ecbf4f3380faca"
150+
val poolId2 = "ee8c2bc942d384421eecfd7fa8981bb94d3cce89df33befe48fdc5e4491fb1db"
151+
val trustLineAsset1 = TrustLineAsset(poolId1)
152+
val trustLineAsset2 = TrustLineAsset(poolId2)
153+
154+
trustLineAsset1 shouldNotBe trustLineAsset2
155+
}
156+
157+
test("should not be equal when asset vs liquidity pool") {
158+
val asset = Asset.create("USD:GCEZWKCA5VLDNRLN3RPRJMRZOX3Z6G5CHCGSNFHEYVXM3XOJMDS674JZ")
159+
val poolId = "dd7b1ab831c273310ddbec6f97870aa83c2fbd78ce22aded37ecbf4f3380faca"
160+
val assetTrustLine = TrustLineAsset(asset)
161+
val poolTrustLine = TrustLineAsset(poolId)
162+
163+
assetTrustLine shouldNotBe poolTrustLine
164+
}
165+
}
166+
})

0 commit comments

Comments
 (0)