Skip to content

Commit 2bd716c

Browse files
committed
add tests
1 parent 5b3c46a commit 2bd716c

File tree

6 files changed

+558
-8
lines changed

6 files changed

+558
-8
lines changed

Storage/src/commonMain/kotlin/io/github/jan/supabase/storage/BucketFilter.kt

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,24 @@ class BucketFilter {
2626
* The sort order for the results. Can be [SortOrder.ASC] (ascending) or [SortOrder.DESC] (descending).
2727
* If null, the default sort order from the API is used.
2828
*/
29-
var sortOrder: SortOrder? = null
29+
private var sortOrder: SortOrder? = null
3030

3131
/**
3232
* The column to sort the results by. If null, the default sort column from the API is used.
3333
*/
34-
var sortColumn: SortColumn? = null
34+
private var sortColumn: SortColumn? = null
3535

36-
internal fun build() = parameters {
36+
/**
37+
* Sets the sorting criteria for the bucket list results
38+
* @param column The column to sort by
39+
* @param order The sort order (ascending or descending)
40+
*/
41+
fun sortBy(column: SortColumn, order: SortOrder) {
42+
sortColumn = column
43+
sortOrder = order
44+
}
45+
46+
fun build() = parameters {
3747
limit?.let { set("limit", it.toString()) }
3848
offset?.let { set("offset", it.toString()) }
3949
search?.let { set("search", it) }

Storage/src/commonMain/kotlin/io/github/jan/supabase/storage/BucketListFilter.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,12 @@ class BucketListFilter {
2929

3030
/**
3131
* Sorts the result by the given [column] in the given [order]
32+
* @param column The column to sort by
33+
* @param order The sort order (ascending or descending)
3234
*/
33-
fun sortBy(column: String, order: String) {
35+
fun sortBy(column: String, order: SortOrder) {
3436
this.column = column
35-
this.order = order
37+
this.order = order.name.lowercase()
3638
}
3739

3840
@SupabaseInternal

Storage/src/commonTest/kotlin/BucketApiTest.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import io.github.jan.supabase.storage.BucketApi
44
import io.github.jan.supabase.storage.FileObjectV2
55
import io.github.jan.supabase.storage.FileUploadResponse
66
import io.github.jan.supabase.storage.ImageTransformation
7+
import io.github.jan.supabase.storage.SortOrder
78
import io.github.jan.supabase.storage.Storage
89
import io.github.jan.supabase.storage.resumable.MemoryResumableCache
910
import io.github.jan.supabase.storage.storage
@@ -451,7 +452,7 @@ class BucketApiTest {
451452
limit = expectedLimit
452453
offset = expectedOffset
453454
search = expectedSearch
454-
sortBy(expectedColumn, expectedOrder)
455+
sortBy(expectedColumn, SortOrder.ASC)
455456
}
456457
// assertContentEquals(expectedData, data, "Data should be $expectedData")
457458
}
Lines changed: 260 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,260 @@
1+
import io.github.jan.supabase.storage.BucketFilter
2+
import io.github.jan.supabase.storage.SortOrder
3+
import kotlin.test.Test
4+
import kotlin.test.assertEquals
5+
import kotlin.test.assertNull
6+
7+
class BucketFilterTest {
8+
9+
@Test
10+
fun testBucketFilterWithAllParameters() {
11+
val filter = BucketFilter().apply {
12+
limit = 10
13+
offset = 5
14+
search = "test"
15+
sortBy(BucketFilter.SortColumn.NAME, SortOrder.ASC)
16+
}
17+
val params = filter.build()
18+
assertEquals("10", params["limit"])
19+
assertEquals("5", params["offset"])
20+
assertEquals("test", params["search"])
21+
assertEquals("asc", params["sortOrder"])
22+
assertEquals("name", params["sortColumn"])
23+
}
24+
25+
@Test
26+
fun testBucketFilterEmpty() {
27+
val filter = BucketFilter()
28+
val params = filter.build()
29+
assertNull(params["limit"])
30+
assertNull(params["offset"])
31+
assertNull(params["search"])
32+
assertNull(params["sortOrder"])
33+
assertNull(params["sortColumn"])
34+
}
35+
36+
@Test
37+
fun testBucketFilterWithLimitOnly() {
38+
val filter = BucketFilter().apply {
39+
limit = 20
40+
}
41+
val params = filter.build()
42+
assertEquals("20", params["limit"])
43+
assertNull(params["offset"])
44+
assertNull(params["search"])
45+
assertNull(params["sortOrder"])
46+
assertNull(params["sortColumn"])
47+
}
48+
49+
@Test
50+
fun testBucketFilterWithOffsetOnly() {
51+
val filter = BucketFilter().apply {
52+
offset = 15
53+
}
54+
val params = filter.build()
55+
assertNull(params["limit"])
56+
assertEquals("15", params["offset"])
57+
assertNull(params["search"])
58+
assertNull(params["sortOrder"])
59+
assertNull(params["sortColumn"])
60+
}
61+
62+
@Test
63+
fun testBucketFilterWithSearchOnly() {
64+
val filter = BucketFilter().apply {
65+
search = "my-bucket"
66+
}
67+
val params = filter.build()
68+
assertNull(params["limit"])
69+
assertNull(params["offset"])
70+
assertEquals("my-bucket", params["search"])
71+
assertNull(params["sortOrder"])
72+
assertNull(params["sortColumn"])
73+
}
74+
75+
@Test
76+
fun testBucketFilterWithLimitAndOffset() {
77+
val filter = BucketFilter().apply {
78+
limit = 25
79+
offset = 50
80+
}
81+
val params = filter.build()
82+
assertEquals("25", params["limit"])
83+
assertEquals("50", params["offset"])
84+
assertNull(params["search"])
85+
assertNull(params["sortOrder"])
86+
assertNull(params["sortColumn"])
87+
}
88+
89+
@Test
90+
fun testBucketFilterSortByIdAscending() {
91+
val filter = BucketFilter().apply {
92+
sortBy(BucketFilter.SortColumn.ID, SortOrder.ASC)
93+
}
94+
val params = filter.build()
95+
assertEquals("id", params["sortColumn"])
96+
assertEquals("asc", params["sortOrder"])
97+
}
98+
99+
@Test
100+
fun testBucketFilterSortByIdDescending() {
101+
val filter = BucketFilter().apply {
102+
sortBy(BucketFilter.SortColumn.ID, SortOrder.DESC)
103+
}
104+
val params = filter.build()
105+
assertEquals("id", params["sortColumn"])
106+
assertEquals("desc", params["sortOrder"])
107+
}
108+
109+
@Test
110+
fun testBucketFilterSortByNameAscending() {
111+
val filter = BucketFilter().apply {
112+
sortBy(BucketFilter.SortColumn.NAME, SortOrder.ASC)
113+
}
114+
val params = filter.build()
115+
assertEquals("name", params["sortColumn"])
116+
assertEquals("asc", params["sortOrder"])
117+
}
118+
119+
@Test
120+
fun testBucketFilterSortByNameDescending() {
121+
val filter = BucketFilter().apply {
122+
sortBy(BucketFilter.SortColumn.NAME, SortOrder.DESC)
123+
}
124+
val params = filter.build()
125+
assertEquals("name", params["sortColumn"])
126+
assertEquals("desc", params["sortOrder"])
127+
}
128+
129+
@Test
130+
fun testBucketFilterSortByCreatedAtAscending() {
131+
val filter = BucketFilter().apply {
132+
sortBy(BucketFilter.SortColumn.CREATED_AT, SortOrder.ASC)
133+
}
134+
val params = filter.build()
135+
assertEquals("created_at", params["sortColumn"])
136+
assertEquals("asc", params["sortOrder"])
137+
}
138+
139+
@Test
140+
fun testBucketFilterSortByCreatedAtDescending() {
141+
val filter = BucketFilter().apply {
142+
sortBy(BucketFilter.SortColumn.CREATED_AT, SortOrder.DESC)
143+
}
144+
val params = filter.build()
145+
assertEquals("created_at", params["sortColumn"])
146+
assertEquals("desc", params["sortOrder"])
147+
}
148+
149+
@Test
150+
fun testBucketFilterSortByUpdatedAtAscending() {
151+
val filter = BucketFilter().apply {
152+
sortBy(BucketFilter.SortColumn.UPDATED_AT, SortOrder.ASC)
153+
}
154+
val params = filter.build()
155+
assertEquals("updated_at", params["sortColumn"])
156+
assertEquals("asc", params["sortOrder"])
157+
}
158+
159+
@Test
160+
fun testBucketFilterSortByUpdatedAtDescending() {
161+
val filter = BucketFilter().apply {
162+
sortBy(BucketFilter.SortColumn.UPDATED_AT, SortOrder.DESC)
163+
}
164+
val params = filter.build()
165+
assertEquals("updated_at", params["sortColumn"])
166+
assertEquals("desc", params["sortOrder"])
167+
}
168+
169+
@Test
170+
fun testBucketFilterSearchWithSpecialCharacters() {
171+
val filter = BucketFilter().apply {
172+
search = "test-bucket_123"
173+
}
174+
val params = filter.build()
175+
assertEquals("test-bucket_123", params["search"])
176+
}
177+
178+
@Test
179+
fun testBucketFilterWithZeroLimit() {
180+
val filter = BucketFilter().apply {
181+
limit = 0
182+
}
183+
val params = filter.build()
184+
assertEquals("0", params["limit"])
185+
}
186+
187+
@Test
188+
fun testBucketFilterWithZeroOffset() {
189+
val filter = BucketFilter().apply {
190+
offset = 0
191+
}
192+
val params = filter.build()
193+
assertEquals("0", params["offset"])
194+
}
195+
196+
@Test
197+
fun testBucketFilterComplexScenario() {
198+
val filter = BucketFilter().apply {
199+
limit = 50
200+
offset = 100
201+
search = "production"
202+
sortBy(BucketFilter.SortColumn.CREATED_AT, SortOrder.DESC)
203+
}
204+
val params = filter.build()
205+
assertEquals("50", params["limit"])
206+
assertEquals("100", params["offset"])
207+
assertEquals("production", params["search"])
208+
assertEquals("created_at", params["sortColumn"])
209+
assertEquals("desc", params["sortOrder"])
210+
}
211+
212+
@Test
213+
fun testBucketFilterWithLargeNumbers() {
214+
val filter = BucketFilter().apply {
215+
limit = 1000
216+
offset = 5000
217+
}
218+
val params = filter.build()
219+
assertEquals("1000", params["limit"])
220+
assertEquals("5000", params["offset"])
221+
}
222+
223+
@Test
224+
fun testBucketFilterSearchWithEmptyString() {
225+
val filter = BucketFilter().apply {
226+
search = ""
227+
}
228+
val params = filter.build()
229+
assertEquals("", params["search"])
230+
}
231+
232+
@Test
233+
fun testBucketFilterWithSearchAndSort() {
234+
val filter = BucketFilter().apply {
235+
search = "images"
236+
sortBy(BucketFilter.SortColumn.UPDATED_AT, SortOrder.ASC)
237+
}
238+
val params = filter.build()
239+
assertEquals("images", params["search"])
240+
assertEquals("updated_at", params["sortColumn"])
241+
assertEquals("asc", params["sortOrder"])
242+
assertNull(params["limit"])
243+
assertNull(params["offset"])
244+
}
245+
246+
@Test
247+
fun testBucketFilterPaginationScenario() {
248+
val filter = BucketFilter().apply {
249+
limit = 10
250+
offset = 30
251+
sortBy(BucketFilter.SortColumn.NAME, SortOrder.ASC)
252+
}
253+
val params = filter.build()
254+
assertEquals("10", params["limit"])
255+
assertEquals("30", params["offset"])
256+
assertEquals("name", params["sortColumn"])
257+
assertEquals("asc", params["sortOrder"])
258+
}
259+
260+
}

0 commit comments

Comments
 (0)