Guest User

Untitled

a guest
Jan 24th, 2018
298
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.19 KB | None | 0 0
  1. package com.mycompany.myapp.service;
  2.  
  3. import com.mycompany.myapp.SocialApp;
  4. import com.mycompany.myapp.domain.Authority;
  5. import com.mycompany.myapp.domain.User;
  6. import com.mycompany.myapp.repository.AuthorityRepository;
  7. import com.mycompany.myapp.repository.UserRepository;
  8. import com.mycompany.myapp.security.AuthoritiesConstants;
  9. import com.mycompany.myapp.security.jwt.TokenProvider;
  10. import org.junit.Before;
  11. import org.junit.Test;
  12. import org.junit.runner.RunWith;
  13. import org.mockito.Mock;
  14. import org.mockito.MockitoAnnotations;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.boot.test.context.SpringBootTest;
  17. import org.springframework.security.core.userdetails.UserDetailsService;
  18. import org.springframework.security.crypto.password.PasswordEncoder;
  19. import org.springframework.social.connect.*;
  20. import org.springframework.test.context.junit4.SpringRunner;
  21. import org.springframework.transaction.annotation.Transactional;
  22. import org.springframework.util.LinkedMultiValueMap;
  23. import org.springframework.util.MultiValueMap;
  24.  
  25. import java.util.Optional;
  26.  
  27. import static org.assertj.core.api.Assertions.assertThat;
  28. import static org.mockito.Mockito.*;
  29.  
  30. @RunWith(SpringRunner.class)
  31. @SpringBootTest(classes = SocialApp.class)
  32. @Transactional
  33. public class SocialServiceIntTest {
  34.  
  35. @Autowired
  36. private AuthorityRepository authorityRepository;
  37.  
  38. @Autowired
  39. private PasswordEncoder passwordEncoder;
  40.  
  41. @Autowired
  42. private UserRepository userRepository;
  43.  
  44. @Mock
  45. private UserDetailsService userDetailsService;
  46.  
  47. @Mock
  48. private ConnectionFactoryLocator connectionFactoryLocator;
  49.  
  50. @Mock
  51. private TokenProvider tokenProvider;
  52.  
  53. @Mock
  54. private MailService mockMailService;
  55.  
  56. @Mock
  57. private UsersConnectionRepository mockUsersConnectionRepository;
  58.  
  59. @Mock
  60. private ConnectionRepository mockConnectionRepository;
  61.  
  62. private SocialService socialService;
  63.  
  64. @Before
  65. public void setup() {
  66. MockitoAnnotations.initMocks(this);
  67. doNothing().when(mockMailService).sendSocialRegistrationValidationEmail(anyObject(), anyString());
  68. doNothing().when(mockConnectionRepository).addConnection(anyObject());
  69. when(mockUsersConnectionRepository.createConnectionRepository(anyString())).thenReturn(mockConnectionRepository);
  70.  
  71. socialService = new SocialService(mockUsersConnectionRepository, authorityRepository,
  72. passwordEncoder, userRepository, userDetailsService, tokenProvider, connectionFactoryLocator, mockMailService);
  73. }
  74.  
  75. @Test
  76. public void testDeleteUserSocialConnection() throws Exception {
  77. // Setup
  78. Connection<?> connection = createConnection("LOGIN",
  79. "mail@mail.com",
  80. "FIRST_NAME",
  81. "LAST_NAME",
  82. "IMAGE_URL",
  83. "PROVIDER");
  84. socialService.createSocialUser(connection, "fr");
  85. MultiValueMap<String, Connection<?>> connectionsByProviderId = new LinkedMultiValueMap<>();
  86. connectionsByProviderId.put("PROVIDER", null);
  87. when(mockConnectionRepository.findAllConnections()).thenReturn(connectionsByProviderId);
  88.  
  89. // Exercise
  90. socialService.deleteUserSocialConnection("LOGIN");
  91.  
  92. // Verify
  93. verify(mockConnectionRepository, times(1)).removeConnections("PROVIDER");
  94. }
  95.  
  96. @Test(expected = IllegalArgumentException.class)
  97. public void testCreateSocialUserShouldThrowExceptionIfConnectionIsNull() {
  98. // Exercise
  99. socialService.createSocialUser(null, "fr");
  100. }
  101.  
  102. @Test(expected = IllegalArgumentException.class)
  103. public void testCreateSocialUserShouldThrowExceptionIfConnectionHasNoEmailAndNoLogin() {
  104. // Setup
  105. Connection<?> connection = createConnection("",
  106. "",
  107. "FIRST_NAME",
  108. "LAST_NAME",
  109. "IMAGE_URL",
  110. "PROVIDER");
  111.  
  112. // Exercise
  113. socialService.createSocialUser(connection, "fr");
  114. }
  115.  
  116. @Test(expected = IllegalArgumentException.class)
  117. public void testCreateSocialUserShouldThrowExceptionIfConnectionHasNoEmailAndLoginAlreadyExist() {
  118. // Setup
  119. User user = createExistingUser("login",
  120. "mail@mail.com",
  121. "OTHER_FIRST_NAME",
  122. "OTHER_LAST_NAME",
  123. "OTHER_IMAGE_URL");
  124. Connection<?> connection = createConnection("LOGIN",
  125. "",
  126. "FIRST_NAME",
  127. "LAST_NAME",
  128. "IMAGE_URL",
  129. "PROVIDER");
  130.  
  131. // Exercise
  132. try {
  133. // Exercise
  134. socialService.createSocialUser(connection, "fr");
  135. } finally {
  136. // Teardown
  137. userRepository.delete(user);
  138. }
  139. }
  140.  
  141. @Test
  142. public void testCreateSocialUserShouldCreateUserIfNotExist() {
  143. // Setup
  144. Connection<?> connection = createConnection("LOGIN",
  145. "mail@mail.com",
  146. "FIRST_NAME",
  147. "LAST_NAME",
  148. "IMAGE_URL",
  149. "PROVIDER");
  150.  
  151. // Exercise
  152. socialService.createSocialUser(connection, "fr");
  153.  
  154. // Verify
  155. final Optional<User> user = userRepository.findOneByEmailIgnoreCase("mail@mail.com");
  156. assertThat(user).isPresent();
  157.  
  158. // Teardown
  159. userRepository.delete(user.get());
  160. }
  161.  
  162. @Test
  163. public void testCreateSocialUserShouldCreateUserWithSocialInformation() {
  164. // Setup
  165. Connection<?> connection = createConnection("LOGIN",
  166. "mail@mail.com",
  167. "FIRST_NAME",
  168. "LAST_NAME",
  169. "IMAGE_URL",
  170. "PROVIDER");
  171.  
  172. // Exercise
  173. socialService.createSocialUser(connection, "fr");
  174.  
  175. //Verify
  176. User user = userRepository.findOneByEmailIgnoreCase("mail@mail.com").get();
  177. assertThat(user.getFirstName()).isEqualTo("FIRST_NAME");
  178. assertThat(user.getLastName()).isEqualTo("LAST_NAME");
  179. assertThat(user.getImageUrl()).isEqualTo("IMAGE_URL");
  180.  
  181. // Teardown
  182. userRepository.delete(user);
  183. }
  184.  
  185. @Test
  186. public void testCreateSocialUserShouldCreateActivatedUserWithRoleUserAndPassword() {
  187. // Setup
  188. Connection<?> connection = createConnection("LOGIN",
  189. "mail@mail.com",
  190. "FIRST_NAME",
  191. "LAST_NAME",
  192. "IMAGE_URL",
  193. "PROVIDER");
  194.  
  195. // Exercise
  196. socialService.createSocialUser(connection, "fr");
  197.  
  198. //Verify
  199. User user = userRepository.findOneByEmailIgnoreCase("mail@mail.com").get();
  200. assertThat(user.getActivated()).isEqualTo(true);
  201. assertThat(user.getPassword()).isNotEmpty();
  202. Authority userAuthority = authorityRepository.findOne(AuthoritiesConstants.USER);
  203. assertThat(user.getAuthorities().toArray()).containsExactly(userAuthority);
  204.  
  205. // Teardown
  206. userRepository.delete(user);
  207. }
  208.  
  209. @Test
  210. public void testCreateSocialUserShouldCreateUserWithExactLangKey() {
  211. // Setup
  212. Connection<?> connection = createConnection("LOGIN",
  213. "mail@mail.com",
  214. "FIRST_NAME",
  215. "LAST_NAME",
  216. "IMAGE_URL",
  217. "PROVIDER");
  218.  
  219. // Exercise
  220. socialService.createSocialUser(connection, "fr");
  221.  
  222. //Verify
  223. final User user = userRepository.findOneByEmailIgnoreCase("mail@mail.com").get();
  224. assertThat(user.getLangKey()).isEqualTo("fr");
  225.  
  226. // Teardown
  227. userRepository.delete(user);
  228. }
  229.  
  230. @Test
  231. public void testCreateSocialUserShouldCreateUserWithLoginSameAsEmailIfNotTwitter() {
  232. // Setup
  233. Connection<?> connection = createConnection("LOGIN",
  234. "mail@mail.com",
  235. "FIRST_NAME",
  236. "LAST_NAME",
  237. "IMAGE_URL",
  238. "PROVIDER_OTHER_THAN_TWITTER");
  239.  
  240. // Exercise
  241. socialService.createSocialUser(connection, "fr");
  242.  
  243. //Verify
  244. User user = userRepository.findOneByEmailIgnoreCase("mail@mail.com").get();
  245. assertThat(user.getLogin()).isEqualTo("first_name_last_name");
  246.  
  247. // Teardown
  248. userRepository.delete(user);
  249. }
  250.  
  251. @Test
  252. public void testCreateSocialUserShouldCreateUserWithSocialLoginWhenIsTwitter() {
  253. // Setup
  254. Connection<?> connection = createConnection("LOGIN",
  255. "mail@mail.com",
  256. "FIRST_NAME",
  257. "LAST_NAME",
  258. "IMAGE_URL",
  259. "twitter");
  260.  
  261. // Exercise
  262. socialService.createSocialUser(connection, "fr");
  263.  
  264. //Verify
  265. User user = userRepository.findOneByEmailIgnoreCase("mail@mail.com").get();
  266. assertThat(user.getLogin()).isEqualToIgnoringCase("login");
  267.  
  268. // Teardown
  269. userRepository.delete(user);
  270. }
  271.  
  272. @Test
  273. public void testCreateSocialUserShouldCreateSocialConnection() {
  274. // Setup
  275. Connection<?> connection = createConnection("LOGIN",
  276. "mail@mail.com",
  277. "FIRST_NAME",
  278. "LAST_NAME",
  279. "IMAGE_URL",
  280. "PROVIDER");
  281.  
  282. // Exercise
  283. socialService.createSocialUser(connection, "fr");
  284.  
  285. //Verify
  286. verify(mockConnectionRepository, times(1)).addConnection(connection);
  287.  
  288. // Teardown
  289. User userToDelete = userRepository.findOneByEmailIgnoreCase("mail@mail.com").get();
  290. userRepository.delete(userToDelete);
  291. }
  292.  
  293. @Test
  294. public void testCreateSocialUserShouldNotCreateUserIfEmailAlreadyExist() {
  295. // Setup
  296. createExistingUser("other_login",
  297. "mail@mail.com",
  298. "OTHER_FIRST_NAME",
  299. "OTHER_LAST_NAME",
  300. "OTHER_IMAGE_URL");
  301. long initialUserCount = userRepository.count();
  302. Connection<?> connection = createConnection("LOGIN",
  303. "mail@mail.com",
  304. "FIRST_NAME",
  305. "LAST_NAME",
  306. "IMAGE_URL",
  307. "PROVIDER");
  308.  
  309. // Exercise
  310. socialService.createSocialUser(connection, "fr");
  311.  
  312. //Verify
  313. assertThat(userRepository.count()).isEqualTo(initialUserCount);
  314.  
  315. // Teardown
  316. User userToDelete = userRepository.findOneByEmailIgnoreCase("mail@mail.com").get();
  317. userRepository.delete(userToDelete);
  318. }
  319.  
  320. @Test
  321. public void testCreateSocialUserShouldNotChangeUserIfEmailAlreadyExist() {
  322. // Setup
  323. createExistingUser("other_login",
  324. "mail@mail.com",
  325. "OTHER_FIRST_NAME",
  326. "OTHER_LAST_NAME",
  327. "OTHER_IMAGE_URL");
  328. Connection<?> connection = createConnection("LOGIN",
  329. "mail@mail.com",
  330. "FIRST_NAME",
  331. "LAST_NAME",
  332. "IMAGE_URL",
  333. "PROVIDER");
  334.  
  335. // Exercise
  336. socialService.createSocialUser(connection, "fr");
  337.  
  338. //Verify
  339. User userToVerify = userRepository.findOneByEmailIgnoreCase("mail@mail.com").get();
  340. assertThat(userToVerify.getLogin()).isEqualTo("other_login");
  341. assertThat(userToVerify.getFirstName()).isEqualTo("OTHER_FIRST_NAME");
  342. assertThat(userToVerify.getLastName()).isEqualTo("OTHER_LAST_NAME");
  343. assertThat(userToVerify.getImageUrl()).isEqualTo("OTHER_IMAGE_URL");
  344. // Teardown
  345. userRepository.delete(userToVerify);
  346. }
  347.  
  348. @Test
  349. public void testCreateSocialUserShouldSendRegistrationValidationEmail() {
  350. // Setup
  351. Connection<?> connection = createConnection("LOGIN",
  352. "mail@mail.com",
  353. "FIRST_NAME",
  354. "LAST_NAME",
  355. "IMAGE_URL",
  356. "PROVIDER");
  357.  
  358. // Exercise
  359. socialService.createSocialUser(connection, "fr");
  360.  
  361. //Verify
  362. verify(mockMailService, times(1)).sendSocialRegistrationValidationEmail(anyObject(), anyString());
  363.  
  364. // Teardown
  365. User userToDelete = userRepository.findOneByEmailIgnoreCase("mail@mail.com").get();
  366. userRepository.delete(userToDelete);
  367. }
  368.  
  369. private Connection<?> createConnection(String login,
  370. String email,
  371. String firstName,
  372. String lastName,
  373. String imageUrl,
  374. String providerId) {
  375. UserProfile userProfile = mock(UserProfile.class);
  376. when(userProfile.getEmail()).thenReturn(email);
  377. when(userProfile.getUsername()).thenReturn(login);
  378. when(userProfile.getFirstName()).thenReturn(firstName);
  379. when(userProfile.getLastName()).thenReturn(lastName);
  380.  
  381. Connection<?> connection = mock(Connection.class);
  382. ConnectionKey key = new ConnectionKey(providerId, "PROVIDER_USER_ID");
  383. when(connection.fetchUserProfile()).thenReturn(userProfile);
  384. when(connection.getKey()).thenReturn(key);
  385. when(connection.getImageUrl()).thenReturn(imageUrl);
  386.  
  387. return connection;
  388. }
  389.  
  390. private User createExistingUser(String login,
  391. String email,
  392. String firstName,
  393. String lastName,
  394. String imageUrl) {
  395. User user = new User();
  396. user.setLogin(login);
  397. user.setPassword(passwordEncoder.encode("password"));
  398. user.setEmail(email);
  399. user.setFirstName(firstName);
  400. user.setLastName(lastName);
  401. user.setImageUrl(imageUrl);
  402. return userRepository.saveAndFlush(user);
  403. }
  404. }
Add Comment
Please, Sign In to add comment