package org.activityinfo.server.login;
/*
* #%L
* ActivityInfo Server
* %%
* Copyright (C) 2009 - 2013 UNICEF
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
import com.google.inject.util.Providers;
import com.sun.jersey.api.view.Viewable;
import org.activityinfo.server.database.hibernate.dao.AuthenticationDAO;
import org.activityinfo.server.database.hibernate.dao.UserDAO;
import org.activityinfo.server.database.hibernate.entity.Authentication;
import org.activityinfo.server.database.hibernate.entity.User;
import org.activityinfo.server.login.model.ConfirmInvitePageModel;
import org.activityinfo.server.login.model.InvalidInvitePageModel;
import org.activityinfo.server.util.MailingListClient;
import org.easymock.EasyMock;
import org.junit.Before;
import org.junit.Test;
import javax.persistence.NoResultException;
import javax.ws.rs.core.Response;
import static org.easymock.EasyMock.*;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.hamcrest.core.IsInstanceOf.instanceOf;
import static org.hamcrest.core.IsNull.nullValue;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
public class ConfirmInviteControllerTest {
private static final String VALID_KEY = "xyz123";
private UserDAO userDAO;
private ConfirmInviteController resource;
private User user;
@Before
public final void setup() {
user = new User();
userDAO = createMock(UserDAO.class);
expect(userDAO.findUserByChangePasswordKey(eq(VALID_KEY))).andReturn(
user);
expect(userDAO.findUserByChangePasswordKey(EasyMock.not(eq(VALID_KEY))))
.andThrow(new NoResultException());
replay(userDAO);
AuthenticationDAO authDAO = createMock(AuthenticationDAO.class);
authDAO.persist(isA(Authentication.class));
expectLastCall().anyTimes();
MailingListClient mailingListClient = createNiceMock(MailingListClient.class);
replay(mailingListClient);
AuthTokenProvider authTokenProvider = new AuthTokenProvider(
Providers.of(authDAO));
resource = new ConfirmInviteController(
Providers.of(userDAO), authTokenProvider, mailingListClient);
}
@Test
public void requestWithValidKeyShouldGetView() throws Exception {
Viewable response = resource.getPage(RestMockUtils
.mockUriInfo("http://www.activityinfo.org/confirm?xyz123"));
assertThat(response.getModel(), instanceOf(ConfirmInvitePageModel.class));
}
@Test
public void badKeyShouldGetProblemPage() throws Exception {
Viewable response = resource.getPage(RestMockUtils
.mockUriInfo("http://www.activityinfo.org/confirm?badkey"));
assertThat(response.getModel(),
instanceOf(InvalidInvitePageModel.class));
}
@Test
public void passwordShouldBeSetAfterNewUserCompletion() throws Exception {
resource.confirm(
RestMockUtils.mockUriInfo("http://www.activityinfo.org/confirm"),
VALID_KEY, "fr", "foobar", "Alex Bertram", false);
assertThat(user.getHashedPassword(), is(not(nullValue())));
assertThat(user.getLocale(), equalTo("fr"));
assertThat(user.getChangePasswordKey(), is(nullValue()));
assertThat(user.getName(), equalTo("Alex Bertram"));
}
@Test
public void emptyPasswordShouldNotBeAccepted() throws Exception {
Response response = resource.confirm(
RestMockUtils.mockUriInfo("http://www.activityinfo.org/confirm"),
VALID_KEY, "fr", null, "Alex Bertram", false);
Viewable viewable = (Viewable) response.getEntity();
assertThat(viewable.getModel(),
instanceOf(ConfirmInvitePageModel.class));
ConfirmInvitePageModel model = (ConfirmInvitePageModel) viewable
.getModel();
assertTrue("error message set", model.isFormIncomplete());
}
}