package de.is24.infrastructure.gridfs.http.repos; import de.is24.infrastructure.gridfs.http.domain.RepoEntry; import de.is24.infrastructure.gridfs.http.exception.RepositoryNotFoundException; import de.is24.infrastructure.gridfs.http.metadata.RepoEntriesRepository; import org.hamcrest.Matchers; import org.junit.Before; import org.junit.Test; import java.util.HashSet; import java.util.Set; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.not; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; /** * @author twalter * @since 4/8/13 */ public class RepoTaggingServiceTest { public static final String REPO_NAME = "repoName"; public static final String TAG = "repoTag"; public static final String TAG2 = "repoTag2"; private RepoEntriesRepository repoEntriesRepository; private RepoTaggingService repoTaggingService; @Before public void setUp() { repoEntriesRepository = mock(RepoEntriesRepository.class); repoTaggingService = new RepoTaggingService(repoEntriesRepository); } @Test public void addTag() { when(repoEntriesRepository.findFirstByName(REPO_NAME)).thenReturn(givenRepoEntry()); repoTaggingService.addTag(REPO_NAME, TAG); RepoEntry repoEntry = givenRepoEntry(); repoEntry.getTags().add(TAG); verify(repoEntriesRepository).save(eq(repoEntry)); } @Test(expected = RepositoryNotFoundException.class) public void failWhenRepositoryNotFound() { repoTaggingService.addTag(REPO_NAME, TAG); } @Test public void getTags() { when(repoEntriesRepository.findFirstByName(REPO_NAME)).thenReturn(givenRepoEntry()); repoTaggingService.addTag(REPO_NAME, TAG); repoTaggingService.addTag(REPO_NAME, TAG2); Set<String> tags = repoTaggingService.getTags(REPO_NAME); assertThat(tags, hasItem(TAG)); assertThat(tags, hasItem(TAG2)); } @Test public void deleteExistingTagForRepo() { RepoEntry repoEntry = givenRepoEntry(); repoEntry.getTags().add(TAG); repoEntry.getTags().add(TAG2); when(repoEntriesRepository.findFirstByName(REPO_NAME)).thenReturn(repoEntry); repoTaggingService.deleteTag(REPO_NAME,TAG2); RepoEntry expectedRepoEntry = givenRepoEntry(); expectedRepoEntry.getTags().add(TAG); verify(repoEntriesRepository).save(eq(expectedRepoEntry)); } private RepoEntry givenRepoEntry() { RepoEntry repoEntry = new RepoEntry(); repoEntry.setName(REPO_NAME); return repoEntry; } }