Skip to content

add more extension functions for dynamic-links-ktx #1753

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Aug 10, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions firebase-dynamic-links/ktx/api.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@ package com.google.firebase.dynamiclinks.ktx {
ctor public FirebaseDynamicLinksKt();
method @NonNull public static void androidParameters(@NonNull com.google.firebase.dynamiclinks.DynamicLink.Builder, @NonNull kotlin.jvm.functions.Function1<? super com.google.firebase.dynamiclinks.DynamicLink.AndroidParameters.Builder,kotlin.Unit> init);
method @NonNull public static void androidParameters(@NonNull com.google.firebase.dynamiclinks.DynamicLink.Builder, @NonNull String packageName, @NonNull kotlin.jvm.functions.Function1<? super com.google.firebase.dynamiclinks.DynamicLink.AndroidParameters.Builder,kotlin.Unit> init);
method @Nullable public static operator android.net.Uri component1(@NonNull com.google.firebase.dynamiclinks.ShortDynamicLink);
method @Nullable public static operator android.net.Uri component1(@NonNull com.google.firebase.dynamiclinks.PendingDynamicLinkData);
method @Nullable public static operator android.net.Uri component2(@NonNull com.google.firebase.dynamiclinks.ShortDynamicLink);
method public static operator int component2(@NonNull com.google.firebase.dynamiclinks.PendingDynamicLinkData);
method @NonNull public static operator java.util.List<com.google.firebase.dynamiclinks.ShortDynamicLink.Warning> component3(@NonNull com.google.firebase.dynamiclinks.ShortDynamicLink);
method public static operator long component3(@NonNull com.google.firebase.dynamiclinks.PendingDynamicLinkData);
method @NonNull public static com.google.firebase.dynamiclinks.DynamicLink dynamicLink(@NonNull com.google.firebase.dynamiclinks.FirebaseDynamicLinks, @NonNull kotlin.jvm.functions.Function1<? super com.google.firebase.dynamiclinks.DynamicLink.Builder,kotlin.Unit> init);
method @NonNull public static com.google.firebase.dynamiclinks.FirebaseDynamicLinks dynamicLinks(@NonNull com.google.firebase.ktx.Firebase, @NonNull com.google.firebase.FirebaseApp app);
method @NonNull public static com.google.firebase.dynamiclinks.FirebaseDynamicLinks getDynamicLinks(@NonNull com.google.firebase.ktx.Firebase);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import com.google.firebase.components.Component
import com.google.firebase.components.ComponentRegistrar
import com.google.firebase.dynamiclinks.DynamicLink
import com.google.firebase.dynamiclinks.FirebaseDynamicLinks
import com.google.firebase.dynamiclinks.PendingDynamicLinkData
import com.google.firebase.dynamiclinks.ShortDynamicLink
import com.google.firebase.ktx.Firebase
import com.google.firebase.platforminfo.LibraryVersionComponent
Expand Down Expand Up @@ -117,6 +118,24 @@ fun FirebaseDynamicLinks.shortLinkAsync(suffix: Int, init: DynamicLink.Builder.(
return builder.buildShortDynamicLink(suffix)
}

/** Destructuring declaration for [ShortDynamicLink] to provide shortLink. */
operator fun ShortDynamicLink.component1() = shortLink

/** Destructuring declaration for [ShortDynamicLink] to provide previewLink. */
operator fun ShortDynamicLink.component2() = previewLink

/** Destructuring declaration for [ShortDynamicLink] to provide warnings. */
operator fun ShortDynamicLink.component3(): List<ShortDynamicLink.Warning> = warnings

/** Destructuring declaration for [PendingDynamicLinkData] to provide link. */
operator fun PendingDynamicLinkData.component1() = link

/** Destructuring declaration for [PendingDynamicLinkData] to provide minimumAppVersion. */
operator fun PendingDynamicLinkData.component2() = minimumAppVersion

/** Destructuring declaration for [PendingDynamicLinkData] to provide clickTimestamp. */
operator fun PendingDynamicLinkData.component3() = clickTimestamp

internal const val LIBRARY_NAME: String = "fire-dl-ktx"

/** @suppress */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,17 @@ import com.google.common.truth.Truth.assertThat
import com.google.firebase.FirebaseApp
import com.google.firebase.FirebaseOptions
import com.google.firebase.dynamiclinks.FirebaseDynamicLinks
import com.google.firebase.dynamiclinks.PendingDynamicLinkData
import com.google.firebase.dynamiclinks.ShortDynamicLink
import com.google.firebase.ktx.Firebase
import com.google.firebase.ktx.app
import com.google.firebase.ktx.initialize
import org.junit.After
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito.`when`
import org.mockito.Mockito.mock
import org.robolectric.RobolectricTestRunner
import org.robolectric.RuntimeEnvironment

Expand Down Expand Up @@ -223,4 +227,45 @@ class DynamicLinksTests : BaseTestCase() {
val efr = Integer.parseInt(dynamicLink.uri.getQueryParameter("efr")!!) == 1
assertThat(efr).isEqualTo(forcedRedirect)
}

@Test
fun `ShortDynamicLink destructure declaration works`() {
val fakeWarning = object : ShortDynamicLink.Warning {
override fun getMessage() = "Warning"
override fun getCode() = "warning"
}

val expectedShortLink = Uri.parse("https://example.com")
val expectedPreviewLink = Uri.parse("https://example.com/preview")
val expectedWarnings = mutableListOf<ShortDynamicLink.Warning>(fakeWarning)

val mockShortDynamicLink = mock(ShortDynamicLink::class.java)
`when`(mockShortDynamicLink.shortLink).thenReturn(expectedShortLink)
`when`(mockShortDynamicLink.previewLink).thenReturn(expectedPreviewLink)
`when`(mockShortDynamicLink.warnings).thenReturn(expectedWarnings)

val (shortLink, previewLink, warnings) = mockShortDynamicLink

assertThat(shortLink).isEqualTo(expectedShortLink)
assertThat(previewLink).isEqualTo(expectedPreviewLink)
assertThat(warnings).isEqualTo(expectedWarnings)
}

@Test
fun `PendingDynamicLinkData destructure declaration works`() {
val expectedLink = Uri.parse("https://example.com")
val expectedMinAppVersion = 30
val expectedTimestamp = 172947600L

val mockPendingData = mock(PendingDynamicLinkData::class.java)
`when`(mockPendingData.link).thenReturn(expectedLink)
`when`(mockPendingData.minimumAppVersion).thenReturn(expectedMinAppVersion)
`when`(mockPendingData.clickTimestamp).thenReturn(expectedTimestamp)

val (link, minAppVersion, timestamp) = mockPendingData

assertThat(link).isEqualTo(expectedLink)
assertThat(minAppVersion).isEqualTo(expectedMinAppVersion)
assertThat(timestamp).isEqualTo(expectedTimestamp)
}
}