Skip to content

Commit

Permalink
refactor: 홈 화면 테스트 event sharedFlow 리팩터링
Browse files Browse the repository at this point in the history
  • Loading branch information
SeongHoonC committed Oct 4, 2023
1 parent 8c25373 commit 85f5993
Showing 1 changed file with 48 additions and 34 deletions.
Original file line number Diff line number Diff line change
@@ -1,27 +1,24 @@
package com.festago.festago.presentation.ui.home

import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import app.cash.turbine.test
import com.festago.festago.repository.AuthRepository
import io.mockk.every
import io.mockk.mockk
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.resetMain
import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.test.setMain
import org.assertj.core.api.Assertions.assertThat
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test

class HomeViewModelTest {
private lateinit var vm: HomeViewModel
private lateinit var authRepository: AuthRepository

@get:Rule
val instantExecutorRule = InstantTaskExecutorRule()

@OptIn(ExperimentalCoroutinesApi::class)
@Before
fun setUp() {
Expand All @@ -37,74 +34,91 @@ class HomeViewModelTest {
}

@Test
fun `축제 목록을 요청했을 때 토큰이 있으면 축제 목록이 보인다`() {
fun `축제 목록을 요청했을 때 토큰이 있으면 축제 목록이 보인다`() = runTest {
// given
every { authRepository.isSigned } returns true

// when
vm.loadHomeItem(HomeItemType.FESTIVAL_LIST)
vm.event.test {
vm.loadHomeItem(HomeItemType.FESTIVAL_LIST)

// then
assertThat(vm.event.getValue() is HomeEvent.ShowFestivalList).isTrue
// then
assertThat(awaitItem()).isExactlyInstanceOf(HomeEvent.ShowFestivalList::class.java)
cancelAndIgnoreRemainingEvents()
}
}

@Test
fun `축제 목록을 요청했을 때 토큰이 없어도 축제 목록이 보인다`() {
fun `축제 목록을 요청했을 때 토큰이 없어도 축제 목록이 보인다`() = runTest {
// given
every { authRepository.isSigned } returns false

// when
vm.loadHomeItem(HomeItemType.FESTIVAL_LIST)
vm.event.test {
// when
vm.loadHomeItem(HomeItemType.FESTIVAL_LIST)

// then
assertThat(vm.event.getValue() is HomeEvent.ShowFestivalList).isTrue
// then
assertThat(awaitItem()).isExactlyInstanceOf(HomeEvent.ShowFestivalList::class.java)
cancelAndIgnoreRemainingEvents()
}
}

@Test
fun `티켓 목록을 요청했을 때 토큰이 있으면 티켓 목록 보기 이벤트가 발생한다`() {
fun `티켓 목록을 요청했을 때 토큰이 있으면 티켓 목록 보기 이벤트가 발생한다`() = runTest {
// given
every { authRepository.isSigned } returns true

// when
vm.loadHomeItem(HomeItemType.TICKET_LIST)
vm.event.test {
// when
vm.loadHomeItem(HomeItemType.TICKET_LIST)

// then
assertThat(vm.event.getValue() is HomeEvent.ShowTicketList).isTrue
// then
assertThat(awaitItem()).isExactlyInstanceOf(HomeEvent.ShowTicketList::class.java)
cancelAndIgnoreRemainingEvents()
}
}

@Test
fun `티켓 목록을 요청했을 때 토큰이 있으면 로그인 보기 이벤트가 발생한다`() {
fun `티켓 목록을 요청했을 때 토큰이 있으면 로그인 보기 이벤트가 발생한다`() = runTest {
// given
every { authRepository.isSigned } returns false

// when
vm.loadHomeItem(HomeItemType.TICKET_LIST)
vm.event.test {
// when
vm.loadHomeItem(HomeItemType.TICKET_LIST)

// then
assertThat(vm.event.getValue() is HomeEvent.ShowSignIn).isTrue
// then
assertThat(awaitItem()).isExactlyInstanceOf(HomeEvent.ShowSignIn::class.java)
cancelAndIgnoreRemainingEvents()
}
}

@Test
fun `마이페이지를 요청했을 때 토큰이 있으면 마이페이지 보기 이벤트가 발생한다`() {
fun `마이페이지를 요청했을 때 토큰이 있으면 마이페이지 보기 이벤트가 발생한다`() = runTest {
// given
every { authRepository.isSigned } returns true

// when
vm.loadHomeItem(HomeItemType.MY_PAGE)
vm.event.test {
// when
vm.loadHomeItem(HomeItemType.MY_PAGE)

// then
assertThat(vm.event.getValue() is HomeEvent.ShowMyPage).isTrue
// then
assertThat(awaitItem()).isExactlyInstanceOf(HomeEvent.ShowMyPage::class.java)
cancelAndIgnoreRemainingEvents()
}
}

@Test
fun `마이페이즈를 요청했을 때 토큰이 없으면 로그인 보기 이벤트가 발생한다`() {
fun `마이페이즈를 요청했을 때 토큰이 없으면 로그인 보기 이벤트가 발생한다`() = runTest {
// given
every { authRepository.isSigned } returns false

// when
vm.loadHomeItem(HomeItemType.MY_PAGE)
vm.event.test {
// when
vm.loadHomeItem(HomeItemType.MY_PAGE)

// then
assertThat(vm.event.getValue() is HomeEvent.ShowSignIn).isTrue
assertThat(awaitItem()).isExactlyInstanceOf(HomeEvent.ShowSignIn::class.java)
cancelAndIgnoreRemainingEvents()
}
}
}

0 comments on commit 85f5993

Please sign in to comment.