Guest User

Untitled

a guest
Jan 24th, 2018
308
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. "FIRST_NAME",
  80. "LAST_NAME",
  81. "IMAGE_URL",
  82. "PROVIDER");
  83. socialService.createSocialUser(connection, "fr");
  84. MultiValueMap<String, Connection<?>> connectionsByProviderId = new LinkedMultiValueMap<>();
  85. connectionsByProviderId.put("PROVIDER", null);
  86. when(mockConnectionRepository.findAllConnections()).thenReturn(connectionsByProviderId);
  87.  
  88. // Exercise
  89. socialService.deleteUserSocialConnection("LOGIN");
  90.  
  91. // Verify
  92. verify(mockConnectionRepository, times(1)).removeConnections("PROVIDER");
  93. }
  94.  
  95. @Test(expected = IllegalArgumentException.class)
  96. public void testCreateSocialUserShouldThrowExceptionIfConnectionIsNull() {
  97. // Exercise
  98. socialService.createSocialUser(null, "fr");
  99. }
  100.  
  101. @Test(expected = IllegalArgumentException.class)
  102. public void testCreateSocialUserShouldThrowExceptionIfConnectionHasNoEmailAndNoLogin() {
  103. // Setup
  104. Connection<?> connection = createConnection("",
  105. "",
  106. "FIRST_NAME",
  107. "LAST_NAME",
  108. "IMAGE_URL",
  109. "PROVIDER");
  110.  
  111. // Exercise
  112. socialService.createSocialUser(connection, "fr");
  113. }
  114.  
  115. @Test(expected = IllegalArgumentException.class)
  116. public void testCreateSocialUserShouldThrowExceptionIfConnectionHasNoEmailAndLoginAlreadyExist() {
  117. // Setup
  118. User user = createExistingUser("login",
  119. "OTHER_FIRST_NAME",
  120. "OTHER_LAST_NAME",
  121. "OTHER_IMAGE_URL");
  122. Connection<?> connection = createConnection("LOGIN",
  123. "",
  124. "FIRST_NAME",
  125. "LAST_NAME",
  126. "IMAGE_URL",
  127. "PROVIDER");
  128.  
  129. // Exercise
  130. try {
  131. // Exercise
  132. socialService.createSocialUser(connection, "fr");
  133. } finally {
  134. // Teardown
  135. userRepository.delete(user);
  136. }
  137. }
  138.  
  139. @Test
  140. public void testCreateSocialUserShouldCreateUserIfNotExist() {
  141. // Setup
  142. Connection<?> connection = createConnection("LOGIN",
  143. "FIRST_NAME",
  144. "LAST_NAME",
  145. "IMAGE_URL",
  146. "PROVIDER");
  147.  
  148. // Exercise
  149. socialService.createSocialUser(connection, "fr");
  150.  
  151. // Verify
  152. final Optional<User> user = userRepository.findOneByEmailIgnoreCase("[email protected]");
  153. assertThat(user).isPresent();
  154.  
  155. // Teardown
  156. userRepository.delete(user.get());
  157. }
  158.  
  159. @Test
  160. public void testCreateSocialUserShouldCreateUserWithSocialInformation() {
  161. // Setup
  162. Connection<?> connection = createConnection("LOGIN",
  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("[email protected]").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. "FIRST_NAME",
  186. "LAST_NAME",
  187. "IMAGE_URL",
  188. "PROVIDER");
  189.  
  190. // Exercise
  191. socialService.createSocialUser(connection, "fr");
  192.  
  193. //Verify
  194. User user = userRepository.findOneByEmailIgnoreCase("[email protected]").get();
  195. assertThat(user.getActivated()).isEqualTo(true);
  196. assertThat(user.getPassword()).isNotEmpty();
  197. Authority userAuthority = authorityRepository.findOne(AuthoritiesConstants.USER);
  198. assertThat(user.getAuthorities().toArray()).containsExactly(userAuthority);
  199.  
  200. // Teardown
  201. userRepository.delete(user);
  202. }
  203.  
  204. @Test
  205. public void testCreateSocialUserShouldCreateUserWithExactLangKey() {
  206. // Setup
  207. Connection<?> connection = createConnection("LOGIN",
  208. "FIRST_NAME",
  209. "LAST_NAME",
  210. "IMAGE_URL",
  211. "PROVIDER");
  212.  
  213. // Exercise
  214. socialService.createSocialUser(connection, "fr");
  215.  
  216. //Verify
  217. final User user = userRepository.findOneByEmailIgnoreCase("[email protected]").get();
  218. assertThat(user.getLangKey()).isEqualTo("fr");
  219.  
  220. // Teardown
  221. userRepository.delete(user);
  222. }
  223.  
  224. @Test
  225. public void testCreateSocialUserShouldCreateUserWithLoginSameAsEmailIfNotTwitter() {
  226. // Setup
  227. Connection<?> connection = createConnection("LOGIN",
  228. "FIRST_NAME",
  229. "LAST_NAME",
  230. "IMAGE_URL",
  231. "PROVIDER_OTHER_THAN_TWITTER");
  232.  
  233. // Exercise
  234. socialService.createSocialUser(connection, "fr");
  235.  
  236. //Verify
  237. User user = userRepository.findOneByEmailIgnoreCase("[email protected]").get();
  238. assertThat(user.getLogin()).isEqualTo("first_name_last_name");
  239.  
  240. // Teardown
  241. userRepository.delete(user);
  242. }
  243.  
  244. @Test
  245. public void testCreateSocialUserShouldCreateUserWithSocialLoginWhenIsTwitter() {
  246. // Setup
  247. Connection<?> connection = createConnection("LOGIN",
  248. "FIRST_NAME",
  249. "LAST_NAME",
  250. "IMAGE_URL",
  251. "twitter");
  252.  
  253. // Exercise
  254. socialService.createSocialUser(connection, "fr");
  255.  
  256. //Verify
  257. User user = userRepository.findOneByEmailIgnoreCase("[email protected]").get();
  258. assertThat(user.getLogin()).isEqualToIgnoringCase("login");
  259.  
  260. // Teardown
  261. userRepository.delete(user);
  262. }
  263.  
  264. @Test
  265. public void testCreateSocialUserShouldCreateSocialConnection() {
  266. // Setup
  267. Connection<?> connection = createConnection("LOGIN",
  268. "FIRST_NAME",
  269. "LAST_NAME",
  270. "IMAGE_URL",
  271. "PROVIDER");
  272.  
  273. // Exercise
  274. socialService.createSocialUser(connection, "fr");
  275.  
  276. //Verify
  277. verify(mockConnectionRepository, times(1)).addConnection(connection);
  278.  
  279. // Teardown
  280. User userToDelete = userRepository.findOneByEmailIgnoreCase("[email protected]").get();
  281. userRepository.delete(userToDelete);
  282. }
  283.  
  284. @Test
  285. public void testCreateSocialUserShouldNotCreateUserIfEmailAlreadyExist() {
  286. // Setup
  287. createExistingUser("other_login",
  288. "OTHER_FIRST_NAME",
  289. "OTHER_LAST_NAME",
  290. "OTHER_IMAGE_URL");
  291. long initialUserCount = userRepository.count();
  292. Connection<?> connection = createConnection("LOGIN",
  293. "FIRST_NAME",
  294. "LAST_NAME",
  295. "IMAGE_URL",
  296. "PROVIDER");
  297.  
  298. // Exercise
  299. socialService.createSocialUser(connection, "fr");
  300.  
  301. //Verify
  302. assertThat(userRepository.count()).isEqualTo(initialUserCount);
  303.  
  304. // Teardown
  305. User userToDelete = userRepository.findOneByEmailIgnoreCase("[email protected]").get();
  306. userRepository.delete(userToDelete);
  307. }
  308.  
  309. @Test
  310. public void testCreateSocialUserShouldNotChangeUserIfEmailAlreadyExist() {
  311. // Setup
  312. createExistingUser("other_login",
  313. "OTHER_FIRST_NAME",
  314. "OTHER_LAST_NAME",
  315. "OTHER_IMAGE_URL");
  316. Connection<?> connection = createConnection("LOGIN",
  317. "FIRST_NAME",
  318. "LAST_NAME",
  319. "IMAGE_URL",
  320. "PROVIDER");
  321.  
  322. // Exercise
  323. socialService.createSocialUser(connection, "fr");
  324.  
  325. //Verify
  326. User userToVerify = userRepository.findOneByEmailIgnoreCase("[email protected]").get();
  327. assertThat(userToVerify.getLogin()).isEqualTo("other_login");
  328. assertThat(userToVerify.getFirstName()).isEqualTo("OTHER_FIRST_NAME");
  329. assertThat(userToVerify.getLastName()).isEqualTo("OTHER_LAST_NAME");
  330. assertThat(userToVerify.getImageUrl()).isEqualTo("OTHER_IMAGE_URL");
  331. // Teardown
  332. userRepository.delete(userToVerify);
  333. }
  334.  
  335. @Test
  336. public void testCreateSocialUserShouldSendRegistrationValidationEmail() {
  337. // Setup
  338. Connection<?> connection = createConnection("LOGIN",
  339. "FIRST_NAME",
  340. "LAST_NAME",
  341. "IMAGE_URL",
  342. "PROVIDER");
  343.  
  344. // Exercise
  345. socialService.createSocialUser(connection, "fr");
  346.  
  347. //Verify
  348. verify(mockMailService, times(1)).sendSocialRegistrationValidationEmail(anyObject(), anyString());
  349.  
  350. // Teardown
  351. User userToDelete = userRepository.findOneByEmailIgnoreCase("[email protected]").get();
  352. userRepository.delete(userToDelete);
  353. }
  354.  
  355. private Connection<?> createConnection(String login,
  356. String email,
  357. String firstName,
  358. String lastName,
  359. String imageUrl,
  360. String providerId) {
  361. UserProfile userProfile = mock(UserProfile.class);
  362. when(userProfile.getEmail()).thenReturn(email);
  363. when(userProfile.getUsername()).thenReturn(login);
  364. when(userProfile.getFirstName()).thenReturn(firstName);
  365. when(userProfile.getLastName()).thenReturn(lastName);
  366.  
  367. Connection<?> connection = mock(Connection.class);
  368. ConnectionKey key = new ConnectionKey(providerId, "PROVIDER_USER_ID");
  369. when(connection.fetchUserProfile()).thenReturn(userProfile);
  370. when(connection.getKey()).thenReturn(key);
  371. when(connection.getImageUrl()).thenReturn(imageUrl);
  372.  
  373. return connection;
  374. }
  375.  
  376. private User createExistingUser(String login,
  377. String email,
  378. String firstName,
  379. String lastName,
  380. String imageUrl) {
  381. User user = new User();
  382. user.setLogin(login);
  383. user.setPassword(passwordEncoder.encode("password"));
  384. user.setEmail(email);
  385. user.setFirstName(firstName);
  386. user.setLastName(lastName);
  387. user.setImageUrl(imageUrl);
  388. return userRepository.saveAndFlush(user);
  389. }
  390. }
Add Comment
Please, Sign In to add comment