Advertisement
Guest User

Untitled

a guest
Aug 18th, 2017
539
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.63 KB | None | 0 0
  1. package sheypme.com.sheypme.signUp.activity.presenter;
  2.  
  3. import android.accounts.Account;
  4. import android.app.Activity;
  5. import android.content.Context;
  6. import android.support.v4.app.FragmentActivity;
  7.  
  8. import com.facebook.CallbackManager;
  9. import com.facebook.login.LoginManager;
  10. import com.google.android.gms.auth.UserRecoverableAuthException;
  11.  
  12. import org.junit.Before;
  13. import org.junit.Test;
  14. import org.mockito.ArgumentCaptor;
  15. import org.mockito.Mock;
  16. import org.mockito.Mockito;
  17. import org.mockito.MockitoAnnotations;
  18.  
  19. import java.util.Arrays;
  20. import java.util.List;
  21.  
  22. import sheypme.com.sheypme.base.appPreferences.AppPreferences;
  23. import sheypme.com.sheypme.base.interactor.listener.BaseInteractorListener;
  24. import sheypme.com.sheypme.base.tokenPreferences.TokenPreferences;
  25. import sheypme.com.sheypme.interactors.facebook.FacebookInteractor;
  26. import sheypme.com.sheypme.interactors.facebook.listener.FacebookListener;
  27. import sheypme.com.sheypme.interactors.google.GoogleInteractor;
  28. import sheypme.com.sheypme.interactors.google.listener.GoogleListener;
  29. import sheypme.com.sheypme.interactors.login.LoginInteractor;
  30. import sheypme.com.sheypme.interactors.login.listener.LoginListener;
  31. import sheypme.com.sheypme.interactors.register.RegisterInteractor;
  32. import sheypme.com.sheypme.interactors.register.listener.RegisterListener;
  33. import sheypme.com.sheypme.models.authData.AuthData;
  34. import sheypme.com.sheypme.models.authData.UserData;
  35. import sheypme.com.sheypme.models.authUser.AuthUser;
  36. import sheypme.com.sheypme.signUp.activity.view.SignUpActivity;
  37. import sheypme.com.sheypme.signUp.activity.view.SignUpActivityView;
  38.  
  39. import static org.mockito.Matchers.eq;
  40. import static org.mockito.Mockito.mock;
  41. import static org.mockito.Mockito.verify;
  42. import static sheypme.com.sheypme.base.errorMessageHandler.ErrorMessageHandler.TAG_NETWORK_ERROR;
  43. import static sheypme.com.sheypme.interactors.register.RegisterInteractor.TAG_REGISTER;
  44.  
  45. /**
  46. * Created on 14/03/17.
  47. */
  48. public class SignUpActivityPresenterImplTest {
  49.  
  50. @Mock
  51. TokenPreferences tokenPreferences;
  52. @Mock
  53. SignUpActivityView signUpActivityView;
  54. @Mock
  55. GoogleInteractor googleInteractor;
  56. @Mock
  57. FacebookInteractor facebookInteractor;
  58. @Mock
  59. LoginInteractor loginInteractor;
  60. @Mock
  61. RegisterInteractor registerInteractor;
  62. @Mock
  63. AppPreferences appPreferences;
  64. @Mock
  65. LoginManager loginManager;
  66. private SignUpActivityPresenterImpl signUpActivityPresenter;
  67.  
  68. @Before
  69. public void setup() throws Exception {
  70. MockitoAnnotations.initMocks(this);
  71. //signUpActivityPresenter = new SignUpActivityPresenterImpl(signUpActivityView, googleInteractor, facebookInteractor, loginInteractor, registerInteractor, tokenPreferences, loginManager, appPreferences);
  72. signUpActivityPresenter.initialize(SignUpActivity.MODE_SIGN_IN);
  73. }
  74.  
  75. @Test
  76. public void initializeSignIn() throws Exception {
  77. verify(signUpActivityView).setupSignInViews();
  78. }
  79.  
  80. @Test
  81. public void initializeSignUp() throws Exception {
  82. signUpActivityPresenter.initialize(SignUpActivity.MODE_SIGN_UP);
  83. verify(signUpActivityView).setupSignUpViews();
  84. }
  85.  
  86. /**
  87. * nothing to test except the call. We need to test interactor impl for more.
  88. *
  89. * @throws Exception if fails
  90. */
  91.  
  92. @Test
  93. public void googleRegister() throws Exception {
  94. FragmentActivity fragmentActivity = Mockito.mock(FragmentActivity.class);
  95. ArgumentCaptor<BaseInteractorListener> baseInteractorListenerArgumentCaptor = ArgumentCaptor.forClass(BaseInteractorListener.class);
  96. signUpActivityPresenter.googleRegister(fragmentActivity);
  97. verify(googleInteractor).loginRegisterGoogle(eq(fragmentActivity), baseInteractorListenerArgumentCaptor.capture());
  98. }
  99.  
  100. /**
  101. * nothing to test except the call. We need to test interactor impl for more.
  102. *
  103. * @throws Exception
  104. */
  105. @Test
  106. public void initFacebookRegister() throws Exception {
  107. ArgumentCaptor<CallbackManager> callbackManagerArgumentCaptor = ArgumentCaptor.forClass(CallbackManager.class);
  108. ArgumentCaptor<FacebookListener> facebookListenerArgumentCaptor = ArgumentCaptor.forClass(FacebookListener.class);
  109. signUpActivityPresenter.initFacebookRegister();
  110. verify(facebookInteractor).loginRegisterFacebook(callbackManagerArgumentCaptor.capture(), facebookListenerArgumentCaptor.capture());
  111. }
  112.  
  113. @Test
  114. public void loginRegisterFacebook() throws Exception {
  115. Activity activity = Mockito.mock(Activity.class);
  116. List<String> permissionParams = Arrays.asList("email", "public_profile");
  117.  
  118. signUpActivityPresenter.loginRegisterFacebook(activity);
  119. verify(loginManager).logInWithReadPermissions(activity, permissionParams);
  120. }
  121.  
  122. @Test
  123. public void registerServiceFacebookValid() throws Exception {
  124. String service = LoginInteractor.SERVICE_FACEBOOK;
  125. String token = "valid_token";
  126. String email = "test@test.com";
  127. String name = "tester";
  128. String lastName = "lastName";
  129. Account account = Mockito.mock(Account.class);
  130. AuthUser authUser = Mockito.spy(new AuthUser(email, name, lastName, account));
  131. AuthData authData = Mockito.spy(new AuthData());
  132. UserData userMetaData = mock(UserData.class);
  133. ArgumentCaptor<RegisterListener> registerListenerArgumentCaptor = ArgumentCaptor.forClass(RegisterListener.class);
  134.  
  135. Mockito.when(authData.getUserMetaData()).thenReturn(userMetaData);
  136.  
  137. signUpActivityPresenter.registerByService(service, authUser, token);
  138. verify(registerInteractor).registerService(eq(service), eq(token), eq(email), eq(name), eq(lastName), registerListenerArgumentCaptor.capture());
  139.  
  140. registerListenerArgumentCaptor.getValue().onSuccess(service, authData);
  141. verify(signUpActivityView).runCreatePlanActivity(authData);
  142. }
  143.  
  144. @Test
  145. public void registerServiceFacebookInvalid() throws Exception {
  146. String service = LoginInteractor.SERVICE_FACEBOOK;
  147. String token = "valid_token";
  148. String email = "test@test.com";
  149. String name = "tester";
  150. String lastName = "lastName";
  151. String errorMessage = "error";
  152. Account account = Mockito.mock(Account.class);
  153. AuthUser authUser = Mockito.spy(new AuthUser(email, name, lastName, account));
  154. AuthData authData = Mockito.spy(new AuthData());
  155. UserData userMetaData = mock(UserData.class);
  156. ArgumentCaptor<RegisterListener> registerListenerArgumentCaptor = ArgumentCaptor.forClass(RegisterListener.class);
  157.  
  158. Mockito.when(authData.getUserMetaData()).thenReturn(userMetaData);
  159.  
  160. signUpActivityPresenter.registerByService(service, authUser, token);
  161. verify(registerInteractor).registerService(eq(service), eq(token), eq(email), eq(name), eq(lastName), registerListenerArgumentCaptor.capture());
  162.  
  163. registerListenerArgumentCaptor.getValue().onRequestFailed(service, errorMessage);
  164. verify(signUpActivityView).makeErrorSnackBar(errorMessage);
  165. }
  166.  
  167. /**
  168. * This test covers all data flow. Because of that, test is complex.
  169. *
  170. * @throws Exception
  171. */
  172. @Test
  173. public void getGoogleTokenValid() throws Exception {
  174. String email = "test@test.com";
  175. String name = "tester";
  176. String lastName = "lastName";
  177. String token = "jwtValidToken";
  178. String service = LoginInteractor.SERVICE_GOOGLE;
  179. Account account = Mockito.mock(Account.class);
  180. Context context = Mockito.mock(Context.class);
  181. UserData userMetaData = Mockito.mock(UserData.class);
  182. AuthUser authUser = Mockito.spy(new AuthUser(email, name, lastName, account));
  183. AuthData authData = Mockito.spy(new AuthData());
  184.  
  185. ArgumentCaptor<GoogleListener> googleListenerArgumentCaptor = ArgumentCaptor.forClass(GoogleListener.class);
  186. ArgumentCaptor<LoginListener> loginListenerArgumentCaptor = ArgumentCaptor.forClass(LoginListener.class);
  187. Mockito.when(authData.getUserMetaData()).thenReturn(userMetaData);
  188. signUpActivityPresenter.getGoogleToken(context, authUser);
  189.  
  190. verify(googleInteractor).getToken(eq(context), eq(authUser), googleListenerArgumentCaptor.capture());
  191. googleListenerArgumentCaptor.getValue().googleTokenSuccess(token, authUser);
  192.  
  193. verify(loginInteractor).loginService(eq(service), eq(authUser), eq(token), loginListenerArgumentCaptor.capture());
  194. loginListenerArgumentCaptor.getValue().onSuccess(service, authData);
  195. verify(signUpActivityView).runCreatePlanActivity(authData);
  196. }
  197.  
  198. @Test
  199. public void getGoogleTokenInvalid() throws Exception {
  200. String email = "test@test.com";
  201. String name = "tester";
  202. String lastName = "lastName";
  203. String token = "jwtValidToken";
  204. String errorMessage = "message";
  205. Account account = Mockito.mock(Account.class);
  206. Context context = Mockito.mock(Context.class);
  207. AuthUser authUser = Mockito.spy(new AuthUser(email, name, lastName, account));
  208. ArgumentCaptor<GoogleListener> googleListenerArgumentCaptor = ArgumentCaptor.forClass(GoogleListener.class);
  209.  
  210. signUpActivityPresenter.getGoogleToken(context, authUser);
  211.  
  212. verify(googleInteractor).getToken(eq(context), eq(authUser), googleListenerArgumentCaptor.capture());
  213. googleListenerArgumentCaptor.getValue().onRequestFailed(token, errorMessage);
  214. verify(signUpActivityView).makeErrorSnackBar(errorMessage);
  215.  
  216. }
  217.  
  218. /**
  219. * Validate case when there is user expection
  220. *
  221. * @throws Exception
  222. */
  223. @Test
  224. public void getGoogleExceptionInvalid() throws Exception {
  225. String email = "test@test.com";
  226. String name = "tester";
  227. String lastName = "lastName";
  228. Account account = Mockito.mock(Account.class);
  229. Context context = Mockito.mock(Context.class);
  230. UserRecoverableAuthException userRecoverableAuthException = Mockito.mock(UserRecoverableAuthException.class);
  231. AuthUser authUser = Mockito.spy(new AuthUser(email, name, lastName, account));
  232. ArgumentCaptor<GoogleListener> googleListenerArgumentCaptor = ArgumentCaptor.forClass(GoogleListener.class);
  233.  
  234. signUpActivityPresenter.getGoogleToken(context, authUser);
  235.  
  236. verify(googleInteractor).getToken(eq(context), eq(authUser), googleListenerArgumentCaptor.capture());
  237. googleListenerArgumentCaptor.getValue().authorisationException(userRecoverableAuthException);
  238. verify(signUpActivityView).requestGoogleAuthorisation(userRecoverableAuthException);
  239. }
  240.  
  241. /**
  242. * Case when login fails
  243. *
  244. * @throws Exception
  245. */
  246. @Test
  247. public void getGoogleTokenLoginInvalid() throws Exception {
  248. String email = "test@test.com";
  249. String name = "tester";
  250. String lastName = "lastName";
  251. String token = "jwtValidToken";
  252. String errorMessage = "message";
  253. String service = LoginInteractor.SERVICE_GOOGLE;
  254. Account account = Mockito.mock(Account.class);
  255. Context context = Mockito.mock(Context.class);
  256. AuthUser authUser = Mockito.spy(new AuthUser(email, name, lastName, account));
  257. ArgumentCaptor<GoogleListener> googleListenerArgumentCaptor = ArgumentCaptor.forClass(GoogleListener.class);
  258. ArgumentCaptor<LoginListener> loginListenerArgumentCaptor = ArgumentCaptor.forClass(LoginListener.class);
  259.  
  260. signUpActivityPresenter.getGoogleToken(context, authUser);
  261.  
  262. verify(googleInteractor).getToken(eq(context), eq(authUser), googleListenerArgumentCaptor.capture());
  263. googleListenerArgumentCaptor.getValue().googleTokenSuccess(token, authUser);
  264.  
  265. verify(loginInteractor).loginService(eq(service), eq(authUser), eq(token), loginListenerArgumentCaptor.capture());
  266. loginListenerArgumentCaptor.getValue().onRequestFailed(service, errorMessage);
  267. verify(signUpActivityView).makeErrorSnackBar(errorMessage);
  268. }
  269.  
  270. @Test
  271. public void onNetworkError() throws Exception {
  272. String tag = TAG_NETWORK_ERROR;
  273. String errorMessage = "error";
  274. signUpActivityPresenter.onRequestFailed(tag, errorMessage);
  275. verify(signUpActivityView).makeNoInternetErrorSnackBar(errorMessage);
  276. }
  277.  
  278.  
  279. @Test
  280. public void requestRegistrationValid() throws Exception {
  281.  
  282. String firstName = "first_name";
  283. String lastName = "last_name";
  284. String email = "valid_email@gmail.com";
  285. String token = "token";
  286. String service = LoginInteractor.SERVICE_FACEBOOK;//doesn't matter which service it is.
  287. AuthData authData = Mockito.spy(new AuthData()); //avoid using spy! http://softwareengineering.stackexchange.com/questions/212493/is-spying-on-tested-class-bad-practice
  288. UserData userMetaData = Mockito.mock(UserData.class);
  289. Account account = Mockito.mock(Account.class);
  290. AuthUser authUser = Mockito.spy(new AuthUser(email, firstName, lastName, account));
  291. Mockito.when(authData.getUserMetaData()).thenReturn(userMetaData);
  292. ArgumentCaptor<RegisterListener> registerListenerArgumentCaptor = ArgumentCaptor.forClass(RegisterListener.class);
  293.  
  294. //signUpActivityPresenter.requestRegistration(service, authUser, token);
  295.  
  296. verify(registerInteractor).registerService(eq(service), eq(token), eq(email), eq(firstName), eq(lastName), registerListenerArgumentCaptor.capture());
  297. //invoke success method on registration
  298. registerListenerArgumentCaptor.getValue().onSuccess(TAG_REGISTER, authData);
  299. //validate that on success block did his job
  300. verify(signUpActivityView).runCreatePlanActivity(authData);
  301. }
  302.  
  303. @Test
  304. public void requestRegistrationInvalid() throws Exception {
  305.  
  306. String firstName = "first_name";
  307. String lastName = "last_name";
  308. String email = "valid_email@gmail.com";
  309. String errorMessage = "errorMessage";
  310. String token = "token";
  311. String service = LoginInteractor.SERVICE_FACEBOOK;//doesn't matter which service it is.
  312. UserData userMetaData = Mockito.mock(UserData.class);
  313. Account account = Mockito.mock(Account.class);
  314. AuthData authData = Mockito.spy(new AuthData()); //avoid using spy! http://softwareengineering.stackexchange.com/questions/212493/is-spying-on-tested-class-bad-practice
  315. AuthUser authUser = Mockito.spy(new AuthUser(email, firstName, lastName, account));
  316. Mockito.when(authData.getUserMetaData()).thenReturn(userMetaData);
  317. ArgumentCaptor<RegisterListener> registerListenerArgumentCaptor = ArgumentCaptor.forClass(RegisterListener.class);
  318.  
  319. //signUpActivityPresenter.requestRegistration(service, authUser, token);
  320.  
  321. verify(registerInteractor).registerService(eq(service), eq(token), eq(email), eq(firstName), eq(lastName), registerListenerArgumentCaptor.capture());
  322. //invoke failed method on registration
  323. registerListenerArgumentCaptor.getValue().onRequestFailed(TAG_REGISTER, errorMessage);
  324. //validate that on error is called
  325. verify(signUpActivityView).makeErrorSnackBar(errorMessage);
  326. }
  327.  
  328. /**
  329. * Because we can't test facebooks flow inside the {@link #loginRegisterFacebook()} we need to validate this callback!
  330. *
  331. * @throws Exception
  332. */
  333. @Test
  334. public void onSuccessFacebookNoMail() throws Exception {
  335.  
  336. String service = LoginInteractor.SERVICE_FACEBOOK;
  337. String email = "test@test.com";
  338. String name = "tester";
  339. String lastName = "lastName";
  340. String token = "jwtValidToken";
  341. Account account = Mockito.mock(Account.class);
  342. AuthUser authUser = Mockito.spy(new AuthUser(email, name, lastName, account));
  343.  
  344. Mockito.when(authUser.getMail()).thenReturn(null);
  345.  
  346. signUpActivityPresenter.onSuccessFacebook(service, authUser, token);
  347. verify(signUpActivityView).showFacebookEmailDialog(service, authUser, token);
  348. }
  349.  
  350. /**
  351. * Because we can't test facebooks flow inside the {@link #loginRegisterFacebook()} we need to validate this callback!
  352. *
  353. * @throws Exception
  354. */
  355. @Test
  356. public void onSuccessFacebookWithMailValid() throws Exception {
  357.  
  358. String service = LoginInteractor.SERVICE_FACEBOOK;
  359. String email = "test@test.com";
  360. String name = "tester";
  361. String lastName = "lastName";
  362. String token = "jwtValidToken";
  363. Account account = Mockito.mock(Account.class);
  364. UserData userMetaData = Mockito.mock(UserData.class);
  365. AuthUser authUser = Mockito.spy(new AuthUser(email, name, lastName, account));
  366. AuthData authData = Mockito.spy(new AuthData()); //avoid using spy! http://softwareengineering.stackexchange.com/questions/212493/is-spying-on-tested-class-bad-practice
  367. ArgumentCaptor<LoginListener> loginListenerArgumentCaptor = ArgumentCaptor.forClass(LoginListener.class);
  368. Mockito.when(authData.getUserMetaData()).thenReturn(userMetaData);
  369. Mockito.when(authUser.getMail()).thenReturn(email);
  370.  
  371. signUpActivityPresenter.onSuccessFacebook(service, authUser, token);
  372. verify(loginInteractor).loginService(eq(service), eq(authUser), eq(token), loginListenerArgumentCaptor.capture());
  373.  
  374. loginListenerArgumentCaptor.getValue().onSuccess(service, authData);
  375. verify(signUpActivityView).runCreatePlanActivity(authData);
  376. }
  377.  
  378. /**
  379. * Because we can't test facebooks flow inside the {@link #loginRegisterFacebook()} we need to validate this callback!
  380. *
  381. * @throws Exception
  382. */
  383. @Test
  384. public void onSuccessFacebookWithMailInvalid() throws Exception {
  385.  
  386. String service = LoginInteractor.SERVICE_FACEBOOK;
  387. String email = "test@test.com";
  388. String name = "tester";
  389. String lastName = "lastName";
  390. String token = "jwtValidToken";
  391. String errorMessage = "message";
  392. Account account = Mockito.mock(Account.class);
  393. AuthUser authUser = Mockito.spy(new AuthUser(email, name, lastName, account));
  394. ArgumentCaptor<LoginListener> loginListenerArgumentCaptor = ArgumentCaptor.forClass(LoginListener.class);
  395. Mockito.when(authUser.getMail()).thenReturn(email);
  396.  
  397. signUpActivityPresenter.onSuccessFacebook(service, authUser, token);
  398. verify(loginInteractor).loginService(eq(service), eq(authUser), eq(token), loginListenerArgumentCaptor.capture());
  399.  
  400. loginListenerArgumentCaptor.getValue().onRequestFailed(service, errorMessage);
  401. verify(signUpActivityView).makeErrorSnackBar(errorMessage);
  402. }
  403.  
  404.  
  405. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement