public Mappings toMapping() { return MappingsImpl.fromRawString(getMapping()); }
@Override public Mappings getUserDomainMappings(MappingSource source) throws RecipientRewriteTableException { EntityManager entityManager = entityManagerFactory.createEntityManager(); final EntityTransaction transaction = entityManager.getTransaction(); try { transaction.begin(); @SuppressWarnings("unchecked") List<JPARecipientRewrite> virtualUsers = entityManager.createNamedQuery("selectUserDomainMapping") .setParameter("user", source.getFixedUser()) .setParameter("domain", source.getFixedDomain()) .getResultList(); transaction.commit(); if (virtualUsers.size() > 0) { return MappingsImpl.fromRawString(virtualUsers.get(0).getTargetAddress()); } return MappingsImpl.empty(); } catch (PersistenceException e) { LOGGER.debug("Failed to get user domain mappings", e); if (transaction.isActive()) { transaction.rollback(); } throw new RecipientRewriteTableException("Error while retrieve mappings", e); } finally { entityManager.close(); } }
@Override public Map<MappingSource, Mappings> getAllMappings() throws RecipientRewriteTableException { EntityManager entityManager = entityManagerFactory.createEntityManager(); final EntityTransaction transaction = entityManager.getTransaction(); Map<MappingSource, Mappings> mapping = new HashMap<>(); try { transaction.begin(); @SuppressWarnings("unchecked") List<JPARecipientRewrite> virtualUsers = entityManager.createNamedQuery("selectAllMappings").getResultList(); transaction.commit(); for (JPARecipientRewrite virtualUser : virtualUsers) { mapping.put(MappingSource.fromUser(virtualUser.getUser(), virtualUser.getDomain()), MappingsImpl.fromRawString(virtualUser.getTargetAddress())); } return mapping; } catch (PersistenceException e) { LOGGER.debug("Failed to get all mappings", e); if (transaction.isActive()) { transaction.rollback(); } throw new RecipientRewriteTableException("Error while retrieve mappings", e); } finally { entityManager.close(); } }
@Test(expected = NullPointerException.class) public void fromRawStringShouldThrowWhenNull() { MappingsImpl.fromRawString(null); }
@Test public void unionShouldReturnMergedWhenBothContainsData() { Mappings mappings = MappingsImpl.fromRawString("toto").union(MappingsImpl.fromRawString("tata")); assertThat(mappings).containsOnly(Mapping.address("toto"),Mapping.address("tata")); }
@Test public void fromRawStringShouldNotUseColonDelimiterWhenValueStartsWithError() { MappingsImpl actual = MappingsImpl.fromRawString("error:test"); assertThat(actual).containsOnly(Mapping.error("test")); }
@Test public void fromRawStringShouldReturnEmptyCollectionWhenEmptyString() { MappingsImpl actual = MappingsImpl.fromRawString(""); assertThat(actual.asStrings()).isEmpty(); }
@Test public void fromRawStringShouldReturnSingleElementCollectionWhenTrailingDelimiterString() { MappingsImpl actual = MappingsImpl.fromRawString("value1;"); assertThat(actual).containsOnly(Mapping.address("value1")); }
@Test public void fromRawStringShouldNotUseColonDelimiterWhenValueStartsWithRegex() { MappingsImpl actual = MappingsImpl.fromRawString("regex:test"); assertThat(actual).containsOnly(Mapping.regex("test")); }
@Test public void fromRawStringShouldReturnSingletonCollectionWhenSingleElementString() { MappingsImpl actual = MappingsImpl.fromRawString("value"); assertThat(actual).containsOnly(Mapping.address("value")); }
@Test public void fromRawStringShouldReturnSingleElementCollectionWhenHeadingDelimiterString() { MappingsImpl actual = MappingsImpl.fromRawString(";value1"); assertThat(actual).containsOnly(Mapping.address("value1")); }
@Test public void fromRawStringShouldReturnCollectionWhenValueContainsCommaSeperatedValues() { MappingsImpl actual = MappingsImpl.fromRawString("value1,value2"); assertThat(actual).containsOnly(Mapping.address("value1"),Mapping.address("value2")); }
@Test public void fromRawStringShouldTrimValues() { MappingsImpl actual = MappingsImpl.fromRawString("value1 ; value2 "); assertThat(actual).containsOnly(Mapping.address("value1"), Mapping.address("value2")); }
@Test public void fromRawStringShouldReturnCollectionWhenValueContainsColonSeperatedValues() { MappingsImpl actual = MappingsImpl.fromRawString("value1:value2"); assertThat(actual).containsOnly(Mapping.address("value1"),Mapping.address("value2")); }
@Test public void fromRawStringShouldUseCommaDelimiterBeforeSemicolonWhenValueContainsBoth() { MappingsImpl actual = MappingsImpl.fromRawString("value1;value1,value2"); assertThat(actual).containsOnly(Mapping.address("value1;value1"),Mapping.address("value2")); }
@Test public void fromRawStringShouldReturnCollectionWhenSeveralElementsString() { MappingsImpl actual = MappingsImpl.fromRawString("value1;value2"); assertThat(actual).containsOnly(Mapping.address("value1"), Mapping.address("value2")); }
@Test public void fromRawStringShouldUseSemicolonDelimiterBeforeColonWhenValueContainsBoth() { MappingsImpl actual = MappingsImpl.fromRawString("value1:value1;value2"); assertThat(actual).containsOnly(Mapping.address("value1:value1"),Mapping.address("value2")); }
@Test public void fromRawStringShouldNotUseColonDelimiterWhenValueStartsWithDomain() { MappingsImpl actual = MappingsImpl.fromRawString("domain:test"); assertThat(actual).containsOnly(Mapping.domain(Domain.of("test"))); }
@Test public void fromRawStringShouldNotSkipEmptyValue() { MappingsImpl actual = MappingsImpl.fromRawString("value1; ;value2"); assertThat(actual).containsOnly(Mapping.address("value1"), Mapping.address(""), Mapping.address("value2")); }
@Test void getDomainMappingsEmptyMappingsAreFilteredOut() throws RecipientRewriteTableException { MappingSource nonEmptyMapping = MappingSource.fromDomain(Domain.of("abc.com")); MappingSource emptyMapping = MappingSource.fromDomain(Domain.of("def.com")); Map<MappingSource, Mappings> mappings = ImmutableMap.of( nonEmptyMapping, MappingsImpl.fromRawString("domain:a.com"), emptyMapping, MappingsImpl.empty() ); when(recipientRewriteTable.getAllMappings()).thenReturn(mappings); Map<String, List<String>> map = when() .get() .then() .contentType(ContentType.JSON) .statusCode(HttpStatus.OK_200) .extract() .body() .jsonPath() .getMap("."); assertThat(map) .containsKey(nonEmptyMapping.asString()) .doesNotContainKey(emptyMapping.asString()); }