package org.wicket_sapporo.workshop01.page.session;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
import static org.mockito.Matchers.*;
import static org.mockito.Mockito.*;
import org.apache.wicket.util.tester.FormTester;
import org.apache.wicket.util.tester.WicketTester;
import org.junit.Before;
import org.junit.Test;
import org.wicket_sapporo.workshop01.WS01Application;
import org.wicket_sapporo.workshop01.WS01Session;
import org.wicket_sapporo.workshop01.service.IAuthService;
/**
* @author Hiroto Yamakawa
*/
public class SimpleSignInPageTest {
private WicketTester tester;
private IAuthService mAuthService;
@Before
public void setUp() {
tester = new WicketTester(new WS01Application());
// 以下、Mockito関係のクラスををstatic importしているのでメソッドのみ呼び出し
// IAuthServiceのモックオブジェクトが作成される
mAuthService = mock(IAuthService.class);
// certify メソッドにどんな値が来ても、falseを返す(認証失敗の体で)
when(mAuthService.certify(anyString(), anyString())).thenReturn(false);
// ただし、certify メソッドに"abcd", 1234 が来たときは、trueを返す(認証成功の体で)
when(mAuthService.certify("abcd", "1234")).thenReturn(true);
// sessionのフィールドのauthService変数にmAuthServiceが代入される
}
@Test
public void ページが表示される() {
tester.startPage(new SimpleSignInPage(mAuthService));
tester.assertRenderedPage(SimpleSignInPage.class);
}
@Test
public void 認証に成功するとSessionが変更され認証後の画面に遷移される() {
tester.startPage(new SimpleSignInPage(mAuthService));
FormTester formTester = tester.newFormTester("form");
formTester.setValue("userId", "abcd");
formTester.setValue("passphrase", "abcd");
formTester.submit();
// Sessionオブジェクトを呼び出す
WS01Session session = (WS01Session) tester.getSession();
assertThat(session.isSigned(), is(true));
tester.assertRenderedPage(SignedPage.class);
}
@Test
public void 認証に失敗するとサインイン失敗と表示される() {
tester.startPage(new SimpleSignInPage(mAuthService));
FormTester formTester = tester.newFormTester("form");
formTester.setValue("userId", "abcd");
formTester.setValue("passphrase", "12345");
formTester.submit();
tester.assertFeedback("form:feedback", "サインイン失敗.");
tester.assertRenderedPage(SimpleSignInPage.class);
}
}