package edu.asu.spring.quadriga.web.manageusers;
import static org.junit.Assert.assertEquals;
import java.security.Principal;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.springframework.validation.support.BindingAwareModelMap;
import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException;
import edu.asu.spring.quadriga.service.IUserManager;
import edu.asu.spring.quadriga.web.LoginController;
/**
* Test for {@link RequestAccountController}.
* @author Julia Damerow
*
*/
public class RequestAccountControllerTest {
private Principal principalUsername;
private Principal principleNoUsername;
private BindingAwareModelMap model;
@Mock
private IUserManager userManager;
@InjectMocks
private RequestAccountController requestAccountController;
/**
* This method sets up the needed objects for testing the {@link LoginController}
*
*/
@Before
public void setUp() throws Exception {
userManager = Mockito.mock(IUserManager.class);
MockitoAnnotations.initMocks(this);
model = new BindingAwareModelMap();
principalUsername = new Principal() {
@Override
public String getName() {
return "jdoe";
}
};
principleNoUsername = new Principal() {
@Override
public String getName() {
return null;
}
};
}
@Test
public void testSubmitAccountRequest() throws QuadrigaStorageException {
String result = requestAccountController.submitAccountRequest(model, principleNoUsername);
assertEquals(result, "requests/error");
// first time the user doesn't exist yet
Mockito.when(userManager.addAccountRequest(Mockito.anyString())).thenReturn(1);
result = requestAccountController.submitAccountRequest(model, principalUsername);
assertEquals(result, "requests/accountRequested");
assertEquals(model.get("requestStatus"), 1);
assertEquals(model.get("username"), "jdoe");
// now it should exist, so Mockito has to return 0
Mockito.when(userManager.addAccountRequest(Mockito.anyString())).thenReturn(0);
result = requestAccountController.submitAccountRequest(model, principalUsername);
assertEquals(result, "requests/accountRequested");
assertEquals(model.get("requestStatus"), 0);
assertEquals(model.get("username"), "jdoe");
}
}