/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
// www.projectforge.org
//
// Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de)
//
// ProjectForge is dual-licensed.
//
// This community edition 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; version 3 of the License.
//
// This community edition 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/.
//
/////////////////////////////////////////////////////////////////////////////
package org.projectforge.web;
import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.tester.FormTester;
import org.junit.Assert;
import org.junit.Test;
import org.projectforge.test.TestBase;
import org.projectforge.web.address.AddressListPage;
import org.projectforge.web.admin.SystemUpdatePage;
import org.projectforge.web.calendar.CalendarPage;
import org.projectforge.web.wicket.WicketPageTestBase;
import org.projectforge.web.wicket.WicketUtils;
public class LoginPageTest extends WicketPageTestBase
{
@Test
public void testLoginAndLogout()
{
final LoginPage loginPage = new LoginPage(new PageParameters());
// start and render the test page
tester.startPage(loginPage);
// assert rendered page class
tester.assertRenderedPage(LoginPage.class);
// assert rendered label component
tester.assertVisible("body:form:username");
FormTester form = tester.newFormTester("body:form");
form.setValue(findComponentByLabel(form, "username"), "demo");
form.setValue(findComponentByLabel(form,"password"), "wrong");
form.submit(KEY_LOGINPAGE_BUTTON_LOGIN);
tester.assertRenderedPage(LoginPage.class);
form = tester.newFormTester("body:form");
form.setValue(findComponentByLabel(form,"username"), TestBase.TEST_ADMIN_USER);
form.setValue(findComponentByLabel(form,"password"), TestBase.TEST_ADMIN_USER_PASSWORD);
form.submit(KEY_LOGINPAGE_BUTTON_LOGIN);
tester.assertRenderedPage(CalendarPage.class);
tester.startPage(AddressListPage.class);
tester.assertRenderedPage(AddressListPage.class);
loginTestAdmin(); // login should be ignored.
tester.assertRenderedPage(WicketUtils.getDefaultPage());
logout();
try {
tester.startPage(AddressListPage.class);
Assert.fail("Page must not be available, user not logged-in.");
} catch (final WicketRuntimeException ex) {
// Everything fine.
}
}
@Test
public void testInternalCheckLogin() throws InterruptedException
{
login(TestBase.TEST_USER, TestBase.TEST_USER_PASSWORD);
logout();
login(TestBase.TEST_DELETED_USER, TestBase.TEST_DELETED_USER_PASSWORD, false);
tester.assertRenderedPage(LoginPage.class);
// Update required
UserFilter.setUpdateRequiredFirst(true);
login(TestBase.TEST_USER, TestBase.TEST_USER_PASSWORD, false);
tester.assertRenderedPage(LoginPage.class);
login(TestBase.TEST_DELETED_USER, TestBase.TEST_DELETED_USER_PASSWORD, false);
tester.assertRenderedPage(LoginPage.class);
login(TestBase.TEST_ADMIN_USER, "wrongPassword", false);
tester.assertRenderedPage(LoginPage.class);
Thread.sleep(1000);
login(TestBase.TEST_ADMIN_USER, TestBase.TEST_ADMIN_USER_PASSWORD, false);
tester.assertRenderedPage(SystemUpdatePage.class);
logout();
UserFilter.setUpdateRequiredFirst(false);
login(TestBase.TEST_USER, TestBase.TEST_USER_PASSWORD);
logout();
}
}