@Test
public void testStoreAndRetrieveRegexMapping() throws ErrorMappingException, RecipientRewriteTableException {
String user = "test";
Domain domain = Domain.LOCALHOST;
MappingSource source = MappingSource.fromUser(user, domain);
String regex = "(.*)@localhost";
String regex2 = "(.+)@test";
String invalidRegex = ".*):";
assertThat(virtualUserTable.getMappings(user, domain)).describedAs("No mapping")
.isEqualTo(MappingsImpl.empty());
virtualUserTable.addMapping(source, Mapping.regex(regex));
virtualUserTable.addMapping(source, Mapping.regex(regex2));
assertThat(virtualUserTable.getMappings(user, domain)).describedAs("Two mappings").hasSize(2);
assertThat(virtualUserTable.getAllMappings()).describedAs("One mappingline").hasSize(1);
virtualUserTable.removeMapping(source, Mapping.regex(regex));
assertThatThrownBy(() -> virtualUserTable.addRegexMapping(source, invalidRegex))
.describedAs("Invalid Mapping throw exception")
.isInstanceOf(RecipientRewriteTableException.class);
virtualUserTable.removeMapping(source, Mapping.regex(regex2));
assertThat(virtualUserTable.getMappings(user, domain)).describedAs("No mapping")
.isEqualTo(MappingsImpl.empty());
assertThat(virtualUserTable.getAllMappings()).describedAs("No mapping").isEmpty();
}