Skip to content

Commit

Permalink
feat(backend): Add function to retrieve builds by build status
Browse files Browse the repository at this point in the history
  • Loading branch information
zhe-zhao committed May 8, 2021
1 parent 8c76184 commit 0bf3d2a
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 11 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package fourkeymetrics.project.repository

import fourkeymetrics.common.model.Build
import fourkeymetrics.common.model.Status
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.data.domain.Sort
Expand All @@ -17,6 +18,7 @@ class BuildRepository {
companion object {
private const val PROP_PIPELINEID: String = "pipelineId"
private const val PROP_NUMBER: String = "number"
private const val PROP_RESULT: String = "result"
}

@Autowired
Expand Down Expand Up @@ -69,10 +71,17 @@ class BuildRepository {
return result
}

fun findByBuildNumber(pipelineId: String, number: Int): Build? {
fun getByBuildNumber(pipelineId: String, number: Int): Build? {
val query = Query.query(Criteria.where(PROP_PIPELINEID).isEqualTo(pipelineId).and(PROP_NUMBER).`is`(number))
val result = mongoTemplate.findOne(query, Build::class.java, collectionName)
logger.info("Query result for build number [$number] in pipeline [$pipelineId] is [${result}]")
val result = mongoTemplate.findOne<Build>(query, collectionName)
logger.info("Query result for build number [$number] in pipeline [$pipelineId] is [$result]")
return result
}

fun getByBuildStatus(pipelineId: String, status: Status): List<Build> {
val query = Query.query(Criteria.where(PROP_PIPELINEID).isEqualTo(pipelineId).and(PROP_RESULT).`is`(status))
val result = mongoTemplate.find<Build>(query, collectionName)
logger.info("Query result size for build status [$status] in pipeline [$pipelineId] is [${result.size}]")
return result
}

Expand All @@ -81,7 +90,7 @@ class BuildRepository {
.query(Criteria.where(PROP_PIPELINEID).`is`(pipelineId))
.with(Sort.by(Sort.Direction.DESC, PROP_NUMBER))
.limit(1)
val result = mongoTemplate.findOne<Build>(query)
val result = mongoTemplate.findOne<Build>(query, collectionName)
logger.info("Query result the most recent build in pipeline [$pipelineId] is [${result!!.number}]")
return result
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ class BambooPipelineService(
}

private fun filterNeedToSync(pipeline: Pipeline, maxBuildNumber: Int) = (1..maxBuildNumber).filter {
val buildInDB = buildRepository.findByBuildNumber(pipeline.id, it)
val buildInDB = buildRepository.getByBuildNumber(pipeline.id, it)
buildInDB == null || buildInDB.result == Status.IN_PROGRESS
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ class JenkinsPipelineService(
val buildsNeedToSync = getBuildSummariesFromJenkins(username!!, credential, baseUrl)
.parallelStream()
.filter {
val buildInDB = buildRepository.findByBuildNumber(pipeline.id, it.number)
val buildInDB = buildRepository.getByBuildNumber(pipeline.id, it.number)
buildInDB == null || buildInDB.result == Status.IN_PROGRESS
}
.toList()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package fourkeymetrics.project.repository
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.kotlin.readValue
import fourkeymetrics.common.model.Build
import fourkeymetrics.common.model.Status
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertTrue
Expand Down Expand Up @@ -117,7 +118,7 @@ class BuildRepositoryTest {

buildRepository.save(listOf(firstBuild))

assertThat(buildRepository.findByBuildNumber(pipelineId, 1)).isNotNull
assertThat(buildRepository.getByBuildNumber(pipelineId, 1)).isNotNull
}

@Test
Expand All @@ -127,7 +128,24 @@ class BuildRepositoryTest {

buildRepository.save(listOf(firstBuild))

assertThat(buildRepository.findByBuildNumber(pipelineId, 2)).isNull()
assertThat(buildRepository.getByBuildNumber(pipelineId, 2)).isNull()
}

@Test
internal fun `should get builds with certain build status`() {
val pipelineId = "fake-id"
val collectionName = "build"
val buildsToSave = listOf(
Build(pipelineId, 1, Status.SUCCESS),
Build(pipelineId, 2, Status.SUCCESS),
Build(pipelineId, 5, Status.IN_PROGRESS)
)

buildsToSave.forEach { mongoTemplate.save(it, collectionName) }

assertEquals(2, buildRepository.getByBuildStatus(pipelineId, Status.SUCCESS).size)
assertEquals(1, buildRepository.getByBuildStatus(pipelineId, Status.IN_PROGRESS).size)
assertEquals(0, buildRepository.getByBuildStatus(pipelineId, Status.FAILED).size)
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -438,7 +438,7 @@ internal class BambooPipelineServiceTest {
type = PipelineType.BAMBOO
)

`when`(buildRepository.findByBuildNumber(pipelineId, 1)).thenReturn(
`when`(buildRepository.getByBuildNumber(pipelineId, 1)).thenReturn(
Build(pipelineId = pipelineId, number = 1, result = Status.IN_PROGRESS)
)

Expand Down Expand Up @@ -493,7 +493,7 @@ internal class BambooPipelineServiceTest {
type = PipelineType.BAMBOO
)

`when`(buildRepository.findByBuildNumber(pipelineId, 1)).thenReturn(null)
`when`(buildRepository.getByBuildNumber(pipelineId, 1)).thenReturn(null)

mockServer.expect(MockRestRequestMatchers.requestTo(getBuildSummariesUrl))
.andExpect { MockRestRequestMatchers.header("Authorization", credential) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ internal class JenkinsPipelineServiceTest {
url = baseUrl
)

`when`(buildRepository.findByBuildNumber(pipelineId, 1)).thenReturn(
`when`(buildRepository.getByBuildNumber(pipelineId, 1)).thenReturn(
Build(pipelineId = pipelineId, number = 1, result = Status.IN_PROGRESS)
)

Expand Down

0 comments on commit 0bf3d2a

Please sign in to comment.