package com.allanditzel.dashboard.controller.user;
import com.allanditzel.dashboard.model.StormpathUserMapping;
import com.allanditzel.dashboard.model.User;
import com.stormpath.sdk.account.Account;
import com.stormpath.sdk.group.Group;
import com.stormpath.sdk.group.GroupList;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import java.util.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class UserBuilderTest {
@Mock
private Account account;
@Mock
private StormpathUserMapping stormpathUserMapping;
@Mock
private GroupList groupList;
@Mock
private Iterator<Group> groupIterator;
@Mock
private Group group1;
@Mock
private Group group2;
private UserBuilder builder;
@Before
public void setUp() {
builder = new UserBuilder();
}
@Test(expected = IllegalArgumentException.class)
public void shouldThrowIllegalArgumentExceptionIfTryingToAddNullAccount() {
builder.addStormpathAccount(null);
}
@Test(expected = IllegalArgumentException.class)
public void shouldThrowIllegalArgumentExceptionIfTryingToAddNullMapping() {
builder.addStormpathUserMapping(null);
}
@Test(expected = IllegalArgumentException.class)
public void shouldThrowIllegalArgumentExceptionIfTryingToBuildWithOnlyAnAccount() {
builder.addStormpathAccount(account).build();
}
@Test(expected = IllegalArgumentException.class)
public void shouldThrowIllegalArgumentExceptionIfTryingToBuildWithOnlyAMapping() {
builder.addStormpathUserMapping(stormpathUserMapping).build();
}
@Test
public void shouldCreateUser() {
String id = "id";
String username = "username";
String email = "email";
String firstName = "firstName";
String lastName = "lastName";
String group1Name = "group1";
String group2Name = "group2";
String[] groupNames = {group1Name, group2Name};
Set<String> groups = new HashSet<>();
Collections.addAll(groups, groupNames);
when(stormpathUserMapping.getId()).thenReturn(id);
when(stormpathUserMapping.getUsername()).thenReturn(username);
when(account.getEmail()).thenReturn(email);
when(account.getGivenName()).thenReturn(firstName);
when(account.getSurname()).thenReturn(lastName);
when(account.getGroups()).thenReturn(groupList);
when(groupList.iterator()).thenReturn(groupIterator);
when(groupIterator.hasNext()).thenReturn(true).thenReturn(true).thenReturn(false);
when(groupIterator.next()).thenReturn(group1).thenReturn(group2);
when(group1.getName()).thenReturn(group1Name);
when(group2.getName()).thenReturn(group2Name);
User user = builder.addStormpathUserMapping(stormpathUserMapping).addStormpathAccount(account).build();
verify(stormpathUserMapping).getId();
verify(stormpathUserMapping).getUsername();
verify(account).getEmail();
verify(account).getGivenName();
verify(account).getSurname();
verify(account).getGroups();
verify(groupList).iterator();
verify(groupIterator, times(3)).hasNext();
verify(groupIterator, times(2)).next();
verify(group1).getName();
verify(group2).getName();
assertNotNull(user);
assertEquals(id, user.getId());
assertEquals(firstName, user.getFirstName());
assertEquals(lastName, user.getLastName());
assertEquals(groups, user.getRoles());
}
}