test: add unit tests to MatchRepositoryImpl.kt
This commit is contained in:
parent
7b8c8a5b2e
commit
2a9dcbc616
1 changed files with 118 additions and 0 deletions
|
@ -0,0 +1,118 @@
|
|||
package xyz.leomurca.csgomatches.data.repository
|
||||
|
||||
import io.mockk.coEvery
|
||||
import io.mockk.mockk
|
||||
import junit.framework.TestCase.assertTrue
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.test.StandardTestDispatcher
|
||||
import kotlinx.coroutines.test.resetMain
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import kotlinx.coroutines.test.setMain
|
||||
import org.junit.After
|
||||
import org.junit.Before
|
||||
import xyz.leomurca.csgomatches.data.model.LeagueDto
|
||||
import xyz.leomurca.csgomatches.data.model.MatchDto
|
||||
import xyz.leomurca.csgomatches.data.model.OpponentDto
|
||||
import xyz.leomurca.csgomatches.data.model.OpponentRecord
|
||||
import xyz.leomurca.csgomatches.data.model.PlayerDto
|
||||
import xyz.leomurca.csgomatches.data.model.SerieDto
|
||||
import xyz.leomurca.csgomatches.data.model.TeamDetailsDto
|
||||
import xyz.leomurca.csgomatches.data.source.MatchDataSource
|
||||
import xyz.leomurca.csgomatches.domain.model.MatchStatus
|
||||
import xyz.leomurca.csgomatches.domain.model.Resource
|
||||
import java.time.ZonedDateTime
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
@OptIn(ExperimentalCoroutinesApi::class)
|
||||
class MatchRepositoryImplTest {
|
||||
private lateinit var remoteDataSource: MatchDataSource
|
||||
|
||||
private var testDispatcher: CoroutineDispatcher = StandardTestDispatcher()
|
||||
|
||||
private lateinit var repository: MatchRepositoryImpl
|
||||
|
||||
@Before
|
||||
fun setUp() {
|
||||
remoteDataSource = mockk()
|
||||
repository = MatchRepositoryImpl(
|
||||
testDispatcher,
|
||||
remoteDataSource
|
||||
)
|
||||
Dispatchers.setMain(testDispatcher)
|
||||
}
|
||||
|
||||
@After
|
||||
fun tearDown() {
|
||||
Dispatchers.resetMain()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `upcomingMatches - Resource Success from data source - returns Success mapped to domain`() =
|
||||
runTest {
|
||||
// Arrange
|
||||
val dto = MatchDto(
|
||||
beginAt = ZonedDateTime.parse("2025-07-20T14:00:00Z"),
|
||||
opponents = listOf(OpponentDto(type = "Team", OpponentRecord(1, "Team A", "img"))),
|
||||
league = LeagueDto(1, "League", "league.png"),
|
||||
serie = SerieDto(1, "Serie 1"),
|
||||
status = "running"
|
||||
)
|
||||
coEvery { remoteDataSource.upcomingMatches() } returns Resource.Success(listOf(dto))
|
||||
|
||||
// Act
|
||||
val result = repository.upcomingMatches()
|
||||
|
||||
// Assert
|
||||
assertTrue(result is Resource.Success)
|
||||
val match = (result as Resource.Success).data.first()
|
||||
assertEquals("Team A", match.opponents.first().name)
|
||||
assertEquals(MatchStatus.LIVE, match.matchStatus)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `upcomingMatches - Resource Error from data source - returns Error`() = runTest {
|
||||
// Arrange
|
||||
coEvery { remoteDataSource.upcomingMatches() } returns Resource.Error("Network issue")
|
||||
|
||||
// Act
|
||||
val result = repository.upcomingMatches()
|
||||
|
||||
// Assert
|
||||
assertTrue(result is Resource.Error)
|
||||
assertEquals("Network issue", (result as Resource.Error).message)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `teamDetails - Resource Success from data source - returns Success mapped to domain`() =
|
||||
runTest {
|
||||
// Arrange
|
||||
val player = PlayerDto(1, "nick", "John", "Doe", "img.png")
|
||||
val dto = TeamDetailsDto(10, "My Team", "logo.png", listOf(player))
|
||||
coEvery { remoteDataSource.teamDetails("10") } returns Resource.Success(listOf(dto))
|
||||
|
||||
// Act
|
||||
val result = repository.teamDetails("10")
|
||||
|
||||
// Assert
|
||||
assertTrue(result is Resource.Success)
|
||||
val team = (result as Resource.Success).data.first()
|
||||
assertEquals("My Team", team.name)
|
||||
assertEquals("John", team.players.first().firstName)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `teamDetails - Resource Error from data source - returns Error`() = runTest {
|
||||
// Arrange
|
||||
coEvery { remoteDataSource.teamDetails("123") } returns Resource.Error("Team not found")
|
||||
|
||||
// Act
|
||||
val result = repository.teamDetails("123")
|
||||
|
||||
// Assert
|
||||
assertTrue(result is Resource.Error)
|
||||
assertEquals("Team not found", (result as Resource.Error).message)
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue