Skip to content

Commit 3a99744

Browse files
committed
Add tests
1 parent 197f885 commit 3a99744

File tree

3 files changed

+72
-45
lines changed

3 files changed

+72
-45
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package io.github.jan.supabase.auth
2+
3+
import io.github.jan.supabase.annotations.SupabaseInternal
4+
import io.github.jan.supabase.auth.status.SessionSource
5+
import io.github.jan.supabase.auth.user.UserSession
6+
import io.github.jan.supabase.buildUrl
7+
import io.github.jan.supabase.logging.d
8+
import io.ktor.client.request.HttpRequestBuilder
9+
import kotlinx.coroutines.launch
10+
11+
@SupabaseInternal
12+
fun Auth.parseFragmentAndImportSession(fragment: String, onSessionSuccess: (UserSession) -> Unit = {}) {
13+
Auth.logger.d { "Parsing deeplink fragment $fragment" }
14+
val session = try {
15+
parseSessionFromFragment(fragment)
16+
} catch(e: IllegalArgumentException) {
17+
Auth.logger.d(e) { "Received invalid session fragment. Ignoring." }
18+
return
19+
}
20+
this as AuthImpl
21+
authScope.launch {
22+
val user = retrieveUser(session.accessToken)
23+
val newSession = session.copy(user = user)
24+
onSessionSuccess(newSession)
25+
importSession(newSession, source = SessionSource.External)
26+
}
27+
}
28+
29+
@SupabaseInternal
30+
fun HttpRequestBuilder.redirectTo(url: String) {
31+
this.url.parameters["redirect_to"] = url
32+
}
33+
34+
internal fun consumeHashParameters(parameters: List<String>, url: String): String {
35+
return buildUrl(url) {
36+
fragment = fragment.split("&").filter {
37+
it.split("=").first() !in parameters
38+
}.joinToString("&")
39+
}
40+
}
41+
42+
internal fun consumeUrlParameter(parameters: List<String>, url: String): String {
43+
return buildUrl(url) {
44+
parameters.forEach { parameter ->
45+
this.parameters.remove(parameter)
46+
}
47+
}
48+
}

Auth/src/commonMain/kotlin/io/github/jan/supabase/auth/Utils.kt

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,7 @@
11
package io.github.jan.supabase.auth
22

33
import io.github.jan.supabase.SupabaseClient
4-
import io.github.jan.supabase.annotations.SupabaseInternal
5-
import io.github.jan.supabase.auth.status.SessionSource
64
import io.github.jan.supabase.auth.user.UserSession
7-
import io.github.jan.supabase.buildUrl
8-
import io.github.jan.supabase.logging.d
9-
import io.ktor.client.request.HttpRequestBuilder
10-
import kotlinx.coroutines.launch
11-
12-
@SupabaseInternal
13-
fun Auth.parseFragmentAndImportSession(fragment: String, onSessionSuccess: (UserSession) -> Unit = {}) {
14-
Auth.logger.d { "Parsing deeplink fragment $fragment" }
15-
val session = try {
16-
parseSessionFromFragment(fragment)
17-
} catch(e: IllegalArgumentException) {
18-
Auth.logger.d(e) { "Received invalid session fragment. Ignoring." }
19-
return
20-
}
21-
this as AuthImpl
22-
authScope.launch {
23-
val user = retrieveUser(session.accessToken)
24-
val newSession = session.copy(user = user)
25-
onSessionSuccess(newSession)
26-
importSession(newSession, source = SessionSource.External)
27-
}
28-
}
29-
30-
@SupabaseInternal
31-
fun HttpRequestBuilder.redirectTo(url: String) {
32-
this.url.parameters["redirect_to"] = url
33-
}
34-
35-
internal fun consumeHashParameters(parameters: List<String>, url: String): String {
36-
return buildUrl(url) {
37-
fragment = fragment.split("&").filter {
38-
it.split("=").first() !in parameters
39-
}.joinToString("&")
40-
}
41-
}
42-
43-
internal fun consumeUrlParameter(parameters: List<String>, url: String): String {
44-
return buildUrl(url) {
45-
parameters.forEach { parameter ->
46-
this.parameters.remove(parameter)
47-
}
48-
}
49-
}
505

516
internal fun invalidArg(message: String): Nothing = throw IllegalArgumentException(message)
527

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import io.github.jan.supabase.auth.consumeHashParameters
2+
import io.github.jan.supabase.auth.consumeUrlParameter
3+
import kotlin.test.Test
4+
import kotlin.test.assertEquals
5+
6+
class UtilsTest {
7+
8+
@Test
9+
fun testConsumeHashParameters() {
10+
val url = "https://example.com/#test=123&state=abc&code=xyz"
11+
val newUrl = consumeHashParameters(listOf("test", "state"), url)
12+
val expectedUrl = "https://example.com/#code=xyz"
13+
assertEquals(expectedUrl, newUrl)
14+
}
15+
16+
@Test
17+
fun testConsumeUrlParameter() {
18+
val url = "https://example.com/?test=123&state=abc&code=xyz"
19+
val newUrl = consumeUrlParameter(listOf("test", "state"), url)
20+
val expectedUrl = "https://example.com/?code=xyz"
21+
assertEquals(expectedUrl, newUrl)
22+
}
23+
24+
}

0 commit comments

Comments
 (0)