1
+ package io.supabase.postgrest.builder
2
+
3
+ import assertk.assertThat
4
+ import assertk.assertions.isEqualTo
5
+ import io.mockk.mockk
6
+ import org.apache.hc.core5.http.Method
7
+ import org.junit.jupiter.api.BeforeEach
8
+ import org.junit.jupiter.api.Nested
9
+ import org.junit.jupiter.api.Test
10
+ import java.net.URI
11
+
12
+ internal class PostgrestQueryBuilderTest {
13
+
14
+ private var queryBuilder: PostgrestQueryBuilder <Any >? = null
15
+
16
+ @BeforeEach
17
+ fun beforeEach () {
18
+ queryBuilder = PostgrestQueryBuilder (URI (" 123" ), mockk(), mockk(), emptyMap(), null )
19
+ }
20
+
21
+ @Nested
22
+ inner class Select {
23
+
24
+ @Test
25
+ fun `basic select` () {
26
+ queryBuilder!! .select(columns = " *" )
27
+ assertMethod(Method .GET )
28
+ assertSearchParam(" select" , " *" )
29
+ }
30
+
31
+ @Test
32
+ fun `select with head` () {
33
+ queryBuilder!! .select(head = true )
34
+ assertMethod(Method .HEAD )
35
+ }
36
+
37
+ @Test
38
+ fun `select with count` () {
39
+ queryBuilder!! .select(count = Count .PLANNED )
40
+ assertHeader(" Prefer" , " count=planned" )
41
+ }
42
+ }
43
+
44
+ @Nested
45
+ inner class Insert {
46
+
47
+ private val value = mapOf (" foo" to " bar" )
48
+
49
+ @Test
50
+ fun `insert single` () {
51
+ queryBuilder!! .insert(value = value)
52
+ assertMethod(Method .POST )
53
+ assertBody(listOf (value))
54
+ }
55
+
56
+ @Test
57
+ fun `insert multiple` () {
58
+ val values = listOf (value, value)
59
+ queryBuilder!! .insert(values = values)
60
+ assertBody(values)
61
+ }
62
+
63
+ @Test
64
+ fun `insert with count` () {
65
+ queryBuilder!! .insert(value = value, count = Count .ESTIMATED )
66
+ assertHeader(" Prefer" , " return=representation,count=estimated" )
67
+ }
68
+
69
+ @Test
70
+ fun `insert with different returning` () {
71
+ queryBuilder!! .insert(value = value, returning = Returning .MINIMAL )
72
+ assertHeader(" Prefer" , " return=minimal" )
73
+ }
74
+
75
+ @Test
76
+ fun `upsert` () {
77
+ queryBuilder!! .insert(value = value, upsert = true )
78
+ assertHeader(" Prefer" , " return=representation,resolution=merge-duplicates" )
79
+ }
80
+
81
+ @Test
82
+ fun `upsert with count` () {
83
+ queryBuilder!! .insert(value = value, upsert = true , count = Count .EXACT )
84
+ assertHeader(" Prefer" , " return=representation,resolution=merge-duplicates,count=exact" )
85
+ }
86
+
87
+ @Test
88
+ fun `upsert with onconflict` () {
89
+ queryBuilder!! .insert(value = value, upsert = true , onConflict = " foobar" )
90
+ assertHeader(" Prefer" , " return=representation,resolution=merge-duplicates" )
91
+ assertSearchParam(" on_conflict" , " foobar" )
92
+ }
93
+ }
94
+
95
+ @Nested
96
+ inner class Update {
97
+
98
+ private val value = mapOf (" foo" to " bar" )
99
+
100
+ @Test
101
+ fun `update` () {
102
+ queryBuilder!! .update(value = value)
103
+ assertMethod(Method .PATCH )
104
+ }
105
+
106
+ @Test
107
+ fun `update with count` () {
108
+ queryBuilder!! .update(value = value, count = Count .EXACT )
109
+ assertHeader(" Prefer" , " return=representation,count=exact" )
110
+ }
111
+
112
+ @Test
113
+ fun `insert with different returning` () {
114
+ queryBuilder!! .update(value = value, returning = Returning .MINIMAL )
115
+ assertHeader(" Prefer" , " return=minimal" )
116
+ }
117
+ }
118
+
119
+ @Nested
120
+ inner class Delete {
121
+
122
+ @Test
123
+ fun `delete` () {
124
+ queryBuilder!! .delete()
125
+ assertMethod(Method .DELETE )
126
+ }
127
+
128
+ @Test
129
+ fun `delete with count` () {
130
+ queryBuilder!! .delete(count = Count .PLANNED )
131
+ assertHeader(" Prefer" , " return=representation,count=planned" )
132
+ }
133
+
134
+ @Test
135
+ fun `delete with different returning` () {
136
+ queryBuilder!! .delete(returning = Returning .MINIMAL )
137
+ assertHeader(" Prefer" , " return=minimal" )
138
+ }
139
+ }
140
+
141
+ @Nested
142
+ inner class Rpc {
143
+
144
+ @Test
145
+ fun `rpc without body` () {
146
+ queryBuilder!! .rpc(null )
147
+ assertMethod(Method .POST )
148
+ assertBody(null )
149
+ }
150
+
151
+ @Test
152
+ fun `rpc with body` () {
153
+ val params = mapOf (" foo" to " bar" )
154
+ queryBuilder!! .rpc(params)
155
+ assertBody(params)
156
+ }
157
+ }
158
+
159
+ private fun assertHeader (name : String , value : String ) {
160
+ assertThat(queryBuilder!! .getHeaders()[name]).isEqualTo(value)
161
+ }
162
+
163
+ private fun assertMethod (method : Method ) {
164
+ assertThat(queryBuilder!! .getMethod()).isEqualTo(method)
165
+ }
166
+
167
+ private fun assertBody (body : Any? ) {
168
+ assertThat(queryBuilder!! .getBody()).isEqualTo(body)
169
+ }
170
+
171
+ private fun assertSearchParam (name : String , value : String ) {
172
+ val searchParams = queryBuilder!! .getSearchParams()
173
+ assertThat(searchParams[name]).isEqualTo(value)
174
+ }
175
+
176
+ }
0 commit comments