package fr.ippon.tatami.service;
import fr.ippon.tatami.AbstractCassandraTatamiTest;
import fr.ippon.tatami.domain.User;
import fr.ippon.tatami.security.AuthenticationService;
import fr.ippon.tatami.web.rest.dto.Tag;
import org.junit.Test;
import org.springframework.test.util.ReflectionTestUtils;
import javax.inject.Inject;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class TagMembershipServiceTest extends AbstractCassandraTatamiTest {
@Inject
public UserService userService;
@Inject
public TagMembershipService tagMembershipService;
@Test
public void shouldFollowTag() {
mockAuthentication("uuser@ippon.fr");
Tag tag = new Tag();
tag.setName("test");
assertTrue(tagMembershipService.followTag(tag));
assertTrue(tagMembershipService.unfollowTag(tag));
}
@Test
public void shouldNotFollowTagTwice() {
mockAuthentication("uuser@ippon.fr");
Tag tag = new Tag();
tag.setName("test");
assertTrue(tagMembershipService.followTag(tag));
assertFalse(tagMembershipService.followTag(tag));
assertTrue(tagMembershipService.unfollowTag(tag));
}
@Test
public void shouldNotUnfollowUnknownTag() {
mockAuthentication("uuser@ippon.fr");
Tag tag = new Tag();
tag.setName("test");
assertFalse(tagMembershipService.unfollowTag(tag));
}
private void mockAuthentication(String login) {
User authenticateUser = constructAUser(login);
AuthenticationService mockAuthenticationService = mock(AuthenticationService.class);
when(mockAuthenticationService.getCurrentUser()).thenReturn(authenticateUser);
ReflectionTestUtils.setField(tagMembershipService, "authenticationService", mockAuthenticationService);
ReflectionTestUtils.setField(userService, "authenticationService", mockAuthenticationService);
}
}