package com.hubspot.blazar.data.service; import static org.assertj.core.api.Assertions.assertThat; import org.jukito.JukitoRunner; import org.jukito.UseModules; import org.junit.Test; import org.junit.runner.RunWith; import com.google.common.base.Optional; import com.google.inject.Inject; import com.hubspot.blazar.base.GitInfo; import com.hubspot.blazar.data.BlazarDataTestModule; import com.hubspot.blazar.test.base.service.DatabaseBackedTest; @RunWith(JukitoRunner.class) @UseModules({BlazarDataTestModule.class}) public class BranchServiceTest extends DatabaseBackedTest { @Inject private BranchService branchService; @Test public void itInsertsABranchWhenNonePresent() throws Exception { // Mysql long before = System.currentTimeMillis() - 1000; GitInfo original = newGitInfo(123, "Overwatch", "master"); GitInfo inserted = branchService.upsert(original); assertThat(inserted.getId().isPresent()).isTrue(); Optional<GitInfo> retrieved = branchService.get(inserted.getId().get()); assertThat(retrieved.isPresent()).isTrue(); assertThat(retrieved.get()).isEqualTo(inserted); assertThat(retrieved.get().getCreatedTimestamp()).isBetween(before, System.currentTimeMillis()); assertThat(retrieved.get().getUpdatedTimestamp()) .isBetween(before, System.currentTimeMillis()) .isEqualTo(retrieved.get().getCreatedTimestamp()); } @Test public void itUpdatesARenamedBranchWhenAlreadyExists() throws InterruptedException { long before = System.currentTimeMillis() - 1000; GitInfo original = newGitInfo(123, "Overwatch", "master"); original = branchService.upsert(original); GitInfo renamed = newGitInfo(123, "Underwatch", "master"); renamed = branchService.upsert(renamed); assertThat(renamed.getId().get()).isEqualTo(original.getId().get()); Optional<GitInfo> retrieved = branchService.get(original.getId().get()); assertThat(retrieved.isPresent()).isTrue(); assertThat(retrieved.get()).isEqualTo(renamed); assertThat(retrieved.get().getUpdatedTimestamp()).isBetween(before, System.currentTimeMillis()); } @Test public void itInsertsMultipleBranches() { GitInfo master = newGitInfo(123, "Overwatch", "master"); master = branchService.upsert(master); GitInfo branch = newGitInfo(123, "Overwatch", "branch"); branch = branchService.upsert(branch); assertThat(branch.getId().get()).isNotEqualTo(master.getId().get()); Optional<GitInfo> masterRetrieved = branchService.get(master.getId().get()); assertThat(masterRetrieved.isPresent()).isTrue(); assertThat(masterRetrieved.get()).isEqualTo(master); Optional<GitInfo> branchRetrieved = branchService.get(branch.getId().get()); assertThat(branchRetrieved.isPresent()).isTrue(); assertThat(branchRetrieved.get()).isEqualTo(branch); } public static GitInfo newGitInfo(int repositoryId, String repositoryName, String branch) { return new GitInfo(Optional.absent(), "github", "HubSpot", repositoryName, repositoryId, branch, true, System.currentTimeMillis(), System.currentTimeMillis()); } }