src/test-integration/kotlin/org/jetbrains/teamcity/github/WebHooksStorageIntegrationTest.kt (71 lines of code) (raw):
package org.jetbrains.teamcity.github
import jetbrains.buildServer.serverSide.impl.BaseServerTestCase
import jetbrains.buildServer.util.cache.CacheProvider
import org.eclipse.egit.github.core.RepositoryHook
import org.testng.annotations.BeforeMethod
import org.testng.annotations.Test
import org.assertj.core.api.BDDAssertions.then
import org.jetbrains.teamcity.github.controllers.Status
class WebHooksStorageIntegrationTest: BaseServerTestCase() {
private lateinit var hookStorage: WebHooksStorage
@BeforeMethod
override fun setUp() {
super.setUp()
hookStorage = WebHooksStorage(myFixture.getSingletonService<CacheProvider>(CacheProvider::class.java), myFixture.fileWatcherFactory,
myFixture.serverPaths, myFixture.eventDispatcher, myFixture.executorServices)
}
@Test
fun `add hook`() {
val hook = repoHook(123)
val info = hookStorage.getOrAdd(hook)
then(info).isNotNull()
then(info.status).isEqualTo(Status.WAITING_FOR_SERVER_RESPONSE)
val all = hookStorage.getAll()
then(all.map { it.second }).isEqualTo(listOf(info))
}
@Test
fun `delete hook`() {
val info123 = hookStorage.getOrAdd(repoHook(123))
val info345 = hookStorage.getOrAdd(repoHook(345))
then(hookStorage.getAll().map { it.second }).hasSize(2)
hookStorage.delete(info123)
then(hookStorage.getAll().map { it.second }).isEqualTo(listOf(info345))
}
@Test
fun `add 2 hooks`() {
val hook = repoHook(123)
hookStorage.getOrAdd(hook)
then(hookStorage.getAll()).hasSize(1)
val hook2 = repoHook(345)
hookStorage.getOrAdd(hook2)
then(hookStorage.getAll()).hasSize(2)
}
@Test
fun `add 2 identical hooks`() {
val hook = repoHook(123)
hookStorage.getOrAdd(hook)
then(hookStorage.getAll()).hasSize(1)
val hook2 = repoHook(123)
hookStorage.getOrAdd(hook2)
then(hookStorage.getAll()).hasSize(1)
}
@Test
fun `add hook saves to disk`() {
val hook = repoHook(123)
val info = hookStorage.getOrAdd(hook)
then(info).isNotNull()
then(info.status).isEqualTo(Status.WAITING_FOR_SERVER_RESPONSE)
val f = hookStorage.getStorageFile()
waitFor({ f.exists() }, 10000L)
then(f.readText()).contains("hooks/123")
}
private fun repoHook(hookId: Long): RepositoryHook {
val hook = RepositoryHook()
hook.id = hookId
hook.url = "https://api.github.com/repos/myowner/myrepo/hooks/${hookId}"
hook.config = HashMap<String, String>()
hook.config["url"] = "http://fake.callback.url"
hook.isActive = true
return hook
}
}