Add test on DefaultAnnouncementService
This commit is contained in:
parent
ff46923c4c
commit
2d5f9c375e
3 changed files with 52 additions and 2 deletions
|
|
@ -19,16 +19,17 @@ import dev.zacsweers.metro.ContributesBinding
|
||||||
import dev.zacsweers.metro.Inject
|
import dev.zacsweers.metro.Inject
|
||||||
import io.element.android.features.announcement.api.AnnouncementService
|
import io.element.android.features.announcement.api.AnnouncementService
|
||||||
import io.element.android.features.announcement.api.AnnouncementState
|
import io.element.android.features.announcement.api.AnnouncementState
|
||||||
import io.element.android.features.announcement.impl.spaces.SpaceAnnouncementPresenter
|
import io.element.android.features.announcement.impl.spaces.SpaceAnnouncementState
|
||||||
import io.element.android.features.announcement.impl.spaces.SpaceAnnouncementView
|
import io.element.android.features.announcement.impl.spaces.SpaceAnnouncementView
|
||||||
import io.element.android.features.announcement.impl.store.AnnouncementStore
|
import io.element.android.features.announcement.impl.store.AnnouncementStore
|
||||||
|
import io.element.android.libraries.architecture.Presenter
|
||||||
import kotlinx.coroutines.flow.first
|
import kotlinx.coroutines.flow.first
|
||||||
|
|
||||||
@ContributesBinding(AppScope::class)
|
@ContributesBinding(AppScope::class)
|
||||||
@Inject
|
@Inject
|
||||||
class DefaultAnnouncementService(
|
class DefaultAnnouncementService(
|
||||||
private val announcementStore: AnnouncementStore,
|
private val announcementStore: AnnouncementStore,
|
||||||
private val spaceAnnouncementPresenter: SpaceAnnouncementPresenter,
|
private val spaceAnnouncementPresenter: Presenter<SpaceAnnouncementState>,
|
||||||
) : AnnouncementService {
|
) : AnnouncementService {
|
||||||
override suspend fun onEnteringSpaceTab() {
|
override suspend fun onEnteringSpaceTab() {
|
||||||
val currentValue = announcementStore.spaceAnnouncementFlow().first()
|
val currentValue = announcementStore.spaceAnnouncementFlow().first()
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,8 @@ import dev.zacsweers.metro.Binds
|
||||||
import dev.zacsweers.metro.ContributesTo
|
import dev.zacsweers.metro.ContributesTo
|
||||||
import io.element.android.features.announcement.api.AnnouncementState
|
import io.element.android.features.announcement.api.AnnouncementState
|
||||||
import io.element.android.features.announcement.impl.AnnouncementPresenter
|
import io.element.android.features.announcement.impl.AnnouncementPresenter
|
||||||
|
import io.element.android.features.announcement.impl.spaces.SpaceAnnouncementPresenter
|
||||||
|
import io.element.android.features.announcement.impl.spaces.SpaceAnnouncementState
|
||||||
import io.element.android.libraries.architecture.Presenter
|
import io.element.android.libraries.architecture.Presenter
|
||||||
|
|
||||||
@ContributesTo(AppScope::class)
|
@ContributesTo(AppScope::class)
|
||||||
|
|
@ -20,4 +22,7 @@ import io.element.android.libraries.architecture.Presenter
|
||||||
interface AnnouncementModule {
|
interface AnnouncementModule {
|
||||||
@Binds
|
@Binds
|
||||||
fun bindAnnouncementPresenter(presenter: AnnouncementPresenter): Presenter<AnnouncementState>
|
fun bindAnnouncementPresenter(presenter: AnnouncementPresenter): Presenter<AnnouncementState>
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
fun bindSpaceAnnouncementPresenter(presenter: SpaceAnnouncementPresenter): Presenter<SpaceAnnouncementState>
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2025 New Vector Ltd.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||||
|
* Please see LICENSE files in the repository root for full details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.element.android.features.announcement.impl
|
||||||
|
|
||||||
|
import com.google.common.truth.Truth.assertThat
|
||||||
|
import io.element.android.features.announcement.impl.spaces.SpaceAnnouncementState
|
||||||
|
import io.element.android.features.announcement.impl.spaces.aSpaceAnnouncementState
|
||||||
|
import io.element.android.features.announcement.impl.store.AnnouncementStore
|
||||||
|
import io.element.android.features.announcement.impl.store.InMemoryAnnouncementStore
|
||||||
|
import io.element.android.libraries.architecture.Presenter
|
||||||
|
import kotlinx.coroutines.flow.first
|
||||||
|
import kotlinx.coroutines.test.runTest
|
||||||
|
import org.junit.Test
|
||||||
|
|
||||||
|
class DefaultAnnouncementServiceTest {
|
||||||
|
@Test
|
||||||
|
fun `when entering space tab, space announcement is set to show only if it was never shown`() = runTest {
|
||||||
|
val announcementStore = InMemoryAnnouncementStore()
|
||||||
|
val sut = createDefaultAnnouncementService(
|
||||||
|
announcementStore = announcementStore,
|
||||||
|
)
|
||||||
|
assertThat(announcementStore.spaceAnnouncementFlow().first()).isEqualTo(AnnouncementStore.SpaceAnnouncement.NeverShown)
|
||||||
|
sut.onEnteringSpaceTab()
|
||||||
|
assertThat(announcementStore.spaceAnnouncementFlow().first()).isEqualTo(AnnouncementStore.SpaceAnnouncement.Show)
|
||||||
|
// Simulate user close the announcement
|
||||||
|
announcementStore.setSpaceAnnouncementValue(AnnouncementStore.SpaceAnnouncement.Shown)
|
||||||
|
// Entering again the space tab should not change the value
|
||||||
|
sut.onEnteringSpaceTab()
|
||||||
|
assertThat(announcementStore.spaceAnnouncementFlow().first()).isEqualTo(AnnouncementStore.SpaceAnnouncement.Shown)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun createDefaultAnnouncementService(
|
||||||
|
announcementStore: AnnouncementStore = InMemoryAnnouncementStore(),
|
||||||
|
spaceAnnouncementPresenter: Presenter<SpaceAnnouncementState> = Presenter { aSpaceAnnouncementState() },
|
||||||
|
) = DefaultAnnouncementService(
|
||||||
|
announcementStore = announcementStore,
|
||||||
|
spaceAnnouncementPresenter = spaceAnnouncementPresenter,
|
||||||
|
)
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue