package org.wicket_sapporo.guiceApp.page; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; import static org.mockito.Matchers.*; import static org.mockito.Mockito.*; import org.apache.wicket.guice.GuiceComponentInjector; import org.apache.wicket.util.tester.FormTester; import org.apache.wicket.util.tester.WicketTester; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.wicket_sapporo.guiceApp.GuiceAppSession; import org.wicket_sapporo.guiceApp.GuiceApplication; import org.wicket_sapporo.guiceApp.service.IGuiceAuthService; import com.google.inject.Binder; import com.google.inject.Module; public class GuiceSignInPageTest { private WicketTester tester; @Before public void setUp() { tester = new WicketTester(new GuiceApplication() { @Override protected void initGuice() { // モックテスト用のModuleを作成 Module module = new Module() { @Override public void configure(Binder binder) { // 以下、Mockito関係のクラスをstatic importしているのでメソッドのみ呼び出し // IGuiceAuthService のモックオブジェクトが作成される IGuiceAuthService mAuthService = mock(IGuiceAuthService.class); // certify メソッドにどんな値が来ても、falseを返す(認証失敗の体で) // ただし、certify メソッドに"abcd", 1234 が来たときは、trueを返す(認証成功の体で) when(mAuthService.certify(anyString(), anyString())).thenReturn(false); when(mAuthService.certify("abcd", "1234")).thenReturn(true); // IGuiceAuthService に mAuthService をbindする binder.bind(IGuiceAuthService.class).toInstance(mAuthService); } }; getComponentInstantiationListeners().add(new GuiceComponentInjector(this, module)); } }); } @Test public void ページが表示される() { tester.startPage(GuiceSignInPage.class); tester.assertRenderedPage(GuiceSignInPage.class); } @Test public void 認証に成功するとSessionが変更され認証後の画面に遷移される() { tester.startPage(GuiceSignInPage.class); FormTester formTester = tester.newFormTester("form"); formTester.setValue("userId", "abcd"); formTester.setValue("passphrase", "1234"); formTester.submit(); // Sessionオブジェクトを呼び出す GuiceAppSession session = (GuiceAppSession) tester.getSession(); assertThat(session.isSigned(), is(true)); tester.assertRenderedPage(GuiceSignedPage.class); } @Test public void 認証に失敗するとサインイン失敗と表示される() { tester.startPage(GuiceSignInPage.class); FormTester formTester = tester.newFormTester("form"); formTester.setValue("userId", "abcd"); formTester.setValue("passphrase", "12345"); formTester.submit(); tester.assertFeedback("form:feedback", "サインイン失敗."); tester.assertRenderedPage(GuiceSignInPage.class); } @After public void tearDown() { tester.destroy(); } }