Skip to content

Commit

Permalink
CreateProject tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Wavesonics committed Jul 1, 2024
1 parent d55435a commit 522195d
Showing 1 changed file with 70 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package com.darkrockstudios.apps.hammer.projects.repository

import com.darkrockstudios.apps.hammer.project.ProjectsSyncData
import io.mockk.coEvery
import io.mockk.every
import io.mockk.verify
import kotlinx.coroutines.test.runTest
import kotlinx.datetime.Instant
import org.junit.Test
import kotlin.test.assertEquals
import kotlin.test.assertTrue

class ProjectsRepositoryCreateProjectTest : ProjectsRepositoryBaseTest() {
@Test
fun `Create Project, conflicting projects sync session`() = runTest {
val syncId = "sync-id"
val projectName = "Project Name"

coEvery { projectsSessionManager.validateSyncId(any(), any(), any()) } returns false

createProjectsRepository().apply {
val result = createProject(userId, syncId, projectName)
assertTrue(result.isFailure)
verify(exactly = 0) { projectsDatasource.createProject(any(), any()) }
verify(exactly = 0) { projectsDatasource.updateSyncData(any(), any()) }
}
}

@Test
fun `Create Project, successful`() = runTest {
val syncId = "sync-id"
val projectName = "Project Name"

coEvery { projectsSessionManager.validateSyncId(userId, syncId, any()) } returns true
every { projectsDatasource.createProject(userId, projectName) } returns Unit

val initialSyncData = ProjectsSyncData(
lastSync = Instant.DISTANT_PAST,
deletedProjects = setOf(
projectName,
"Project 2"
),
)

var updatedSyncData: ProjectsSyncData? = null
every { projectsDatasource.updateSyncData(userId, captureLambda()) } answers {
lambda<(ProjectsSyncData) -> ProjectsSyncData>().captured.invoke(initialSyncData)
.apply {
updatedSyncData = this
}
}

val expectedSyncData = ProjectsSyncData(
lastSync = Instant.DISTANT_PAST,
deletedProjects = setOf(
"Project 2"
),
)

createProjectsRepository().apply {
val result = createProject(userId, syncId, projectName)

assertTrue(result.isSuccess)
verify { projectsDatasource.createProject(userId, projectName) }
verify { projectsDatasource.updateSyncData(userId, any()) }

assertEquals(expectedSyncData, updatedSyncData)
}
}
}

0 comments on commit 522195d

Please sign in to comment.