Guest User

Untitled

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