public WhitelistEmail saveWhiteListEmail(String email) throws WhitelistEmailNotSavedException { LOG.info("Got new email for the whitelist " + email); Optional<WhitelistEmail> whitelistEmailFromDb = Optional.empty(); try { whitelistEmailFromDb = Optional.ofNullable(this.whitelistEmailRepository.save(new WhitelistEmail(email, new Date()))); } catch (DataIntegrityViolationException e) { LOG.info("Email {} was already subscribed.", email); whitelistEmailFromDb = this.whitelistEmailRepository.findByEmail(email); } catch (Exception e) { LOG.error("Could not save the email to the whitelist.", e); } return whitelistEmailFromDb.orElseThrow(() -> new WhitelistEmailNotSavedException()); }
@RequestMapping(value = "/whitelist/subscribe", method = POST, consumes = APPLICATION_JSON_UTF8_VALUE, produces = APPLICATION_JSON_UTF8_VALUE) public ResponseEntity<?> saveWhiteListEmail(@Valid @RequestBody WhitelistEmailRequest whitelistEmailRequest) throws BaseException { try { WhitelistEmail whitelistEmail = this.whitelistEmailService.saveWhiteListEmail(whitelistEmailRequest.getEmail()); return new ResponseEntity<>(new WhitelistEmailResponse(whitelistEmail.getEmail(), whitelistEmail.getSubscriptionDate()), HttpStatus.OK); } catch (WhitelistEmailNotSavedException e) { throw new UnexpectedException(); } }
@Test public void testSaveAndFind() { Date now = Date.from(Instant.now()); WhitelistEmail wTest1 = new WhitelistEmail("test@test.com", now); WhitelistEmail wTestSaved1 = whitelistEmailRepository.saveAndFlush(wTest1); WhitelistEmail wTest2 = new WhitelistEmail("test2@test.com", now); WhitelistEmail wTestSaved2 = whitelistEmailRepository.saveAndFlush(wTest2); assertNotNull(wTestSaved1.getEmail()); assertNotNull(wTestSaved1.getSubscriptionDate()); assertEquals(wTestSaved1.getSubscriptionDate(), now); assertNotNull(wTestSaved2.getEmail()); assertNotNull(wTestSaved2.getSubscriptionDate()); assertEquals(wTestSaved2.getSubscriptionDate(), now); Optional<WhitelistEmail> oWTestFound1 = whitelistEmailRepository.findByEmail("test@test.com"); assertTrue(oWTestFound1.isPresent()); Optional<WhitelistEmail> oWTestFound2 = whitelistEmailRepository.findByEmail("test2@test.com"); assertTrue(oWTestFound2.isPresent()); List<WhitelistEmail> allEmails = whitelistEmailRepository.findAll(); assertEquals(2, allEmails.size()); }
@Test(expected = DataIntegrityViolationException.class) public void testSaveSameEmail_UniqueIndexViolation() { Date now = Date.from(Instant.now()); WhitelistEmail wTest1 = new WhitelistEmail("test@test.com", now); whitelistEmailRepository.saveAndFlush(wTest1); WhitelistEmail wTest2 = new WhitelistEmail("test@test.com", now); whitelistEmailRepository.saveAndFlush(wTest2); }
@Test public void testSubscribeEmail() throws Exception { when(mockWhitelistEmailService.saveWhiteListEmail(TEST_EMAIL)).thenReturn(new WhitelistEmail(TEST_EMAIL, TEST_DATE)); WhitelistEmailRequest request = new WhitelistEmailRequest(TEST_EMAIL); MvcResult mvcResult1 = this.mockMvc.perform(post(WHITELIST_SUBSCRIBE_ENDPOINT) .contentType(APPLICATION_JSON) .content(jsonWhitelistEmailRequest.write(request).getJson())) .andExpect(status().isOk()) .andDo(print()) .andReturn(); assertThat(mvcResult1.getResponse().getContentAsString()).isEqualTo( jsonWhitelistEmailResponse.write(new WhitelistEmailResponse(TEST_EMAIL, TEST_DATE)).getJson() ); }