001package edu.pdx.cs.joy.grader.poa; 002 003import com.google.common.eventbus.Subscribe; 004import org.junit.jupiter.api.BeforeEach; 005import org.junit.jupiter.api.Test; 006import org.mockito.ArgumentCaptor; 007 008import static org.hamcrest.MatcherAssert.assertThat; 009import static org.hamcrest.Matchers.equalTo; 010import static org.mockito.Mockito.*; 011 012public class EmailCredentialsPresenterTest extends EventBusTestCase { 013 014 private EmailCredentialsView view; 015 private EmailCredentialsPresenter presenter; 016 017 @Override 018 @BeforeEach 019 public void setUp() { 020 super.setUp(); 021 022 this.view = mock(EmailCredentialsView.class); 023 024 presenter = new EmailCredentialsPresenter(bus, view); 025 } 026 027 @Test 028 public void downloadingSubmissionsDisplaysEmailCredentialsView() { 029 this.bus.post(new DownloadPOASubmissionsRequest()); 030 031 verify(this.view).setIsVisible(true); 032 } 033 034 @Test 035 public void downloadingSubmissionsDisplaysStatusMessage() { 036 StatusMessageListener listener = mock(StatusMessageListener.class); 037 this.bus.register(listener); 038 039 this.bus.post(new DownloadPOASubmissionsRequest()); 040 041 ArgumentCaptor<StatusMessage> captor = ArgumentCaptor.forClass(StatusMessage.class); 042 verify(listener).handleStatusMessage(captor.capture()); 043 044 StatusMessage status = captor.getValue(); 045 assertThat(status.getStatusMessage(), equalTo(EmailCredentialsPresenter.ENTER_CREDENTIALS_MESSAGE)); 046 } 047 048 @Test 049 void downloadingSubmissionsWithNoCredentialsDoesNotPopulateView() { 050 this.bus.post(new DownloadPOASubmissionsRequest()); 051 052 verify(this.view, never()).setEmailAddress(any(String.class)); 053 verify(this.view, never()).setPassword(any(String.class)); 054 } 055 056 @Test 057 void downloadingSubmissionsWithCredentialsPopulatesView() { 058 String email = "me@me.com"; 059 String password = "password"; 060 this.bus.post(new DownloadPOASubmissionsRequest(email, password)); 061 062 verify(this.view).setEmailAddress(eq(email)); 063 verify(this.view).setPassword(eq(password)); 064 } 065 066 @Test 067 public void emailAddressInViewIsSavedToPresenter() { 068 ArgumentCaptor<EmailCredentialsView.EmailAddressValueListener> emailAddress = ArgumentCaptor.forClass(EmailCredentialsView.EmailAddressValueListener.class); 069 verify(this.view).addEmailAddressValueListener(emailAddress.capture()); 070 071 String address = "me@email.com"; 072 emailAddress.getValue().setEmailAddress(address); 073 074 assertThat(presenter.getEmailAddress(), equalTo(address)); 075 } 076 077 @Test 078 public void passwordInViewIsSavedToPresenter() { 079 ArgumentCaptor<EmailCredentialsView.PasswordValueListener> passwordCaptor = ArgumentCaptor.forClass(EmailCredentialsView.PasswordValueListener.class); 080 verify(this.view).addPasswordValueListener(passwordCaptor.capture()); 081 082 String password = "password"; 083 passwordCaptor.getValue().setPassword(password); 084 085 assertThat(presenter.getPassword(), equalTo(password)); 086 } 087 088 @Test 089 public void enteringCredentialsInViewFiresEmailCredentialsEvent() { 090 ArgumentCaptor<EmailCredentialsView.SubmitCredentialsListener> submitListener = ArgumentCaptor.forClass(EmailCredentialsView.SubmitCredentialsListener.class); 091 verify(this.view).addSubmitCredentialsListener(submitListener.capture()); 092 093 EmailCredentialsListener listener = mock(EmailCredentialsListener.class); 094 this.bus.register(listener); 095 096 String emailAddress = "me@email.com"; 097 this.presenter.setEmailAddress(emailAddress); 098 String password = "password"; 099 this.presenter.setPassword(password); 100 101 submitListener.getValue().submitCredentials(); 102 103 ArgumentCaptor<EmailCredentials> credentials = ArgumentCaptor.forClass(EmailCredentials.class); 104 verify(listener).emailCredentials(credentials.capture()); 105 106 assertThat(credentials.getValue().getEmailAddress(), equalTo(emailAddress)); 107 assertThat(credentials.getValue().getPassword(), equalTo(password)); 108 } 109 110 public interface EmailCredentialsListener { 111 @Subscribe 112 void emailCredentials(EmailCredentials event); 113 } 114 115 private interface StatusMessageListener { 116 @Subscribe 117 void handleStatusMessage(StatusMessage status); 118 } 119}