Skip to content

Commit

Permalink
Issue-1143: Improving RoutingRuleForm.
Browse files Browse the repository at this point in the history
  • Loading branch information
steve-todorov committed Jul 11, 2019
1 parent 99cea4f commit 1000f06
Show file tree
Hide file tree
Showing 15 changed files with 594 additions and 122 deletions.
@@ -1,10 +1,7 @@
package org.carlspring.strongbox.services.impl;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.parallel.ExecutionMode.CONCURRENT;

import java.io.IOException;
Expand Down Expand Up @@ -124,6 +121,21 @@ public void multipleAdditionOfTheSameRepositoryShouldNotAffectGroup() throws IOE
assertThat(iterator.next(), CoreMatchers.equalTo("jboss-public-releases"));
}

@Test
public void testGetRepositories()
{
List<Repository> repositories = configurationManagementService.getConfiguration().getRepositories();

assertFalse(repositories.isEmpty());

logger.debug("Repositories:");

for (Repository repository : repositories)
{
logger.debug(" - " + repository.getId());
}
}

@Test
public void testGetGroupRepositories()
{
Expand Down
Expand Up @@ -192,6 +192,18 @@ public List<Repository> getRepositoriesWithLayout(String storageId,
.collect(Collectors.toList());
}

public List<Repository> getRepositories()
{
List<Repository> repositories = new ArrayList<>();

for (Storage storage : getStorages().values())
{
repositories.addAll(storage.getRepositories().values());
}

return repositories;
}

public List<Repository> getGroupRepositories()
{
List<Repository> groupRepositories = new ArrayList<>();
Expand Down
Expand Up @@ -61,5 +61,7 @@ public interface Repository
RepositoryConfiguration getRepositoryConfiguration();

String getStorageIdAndRepositoryId();

boolean isType(String type);

}
Expand Up @@ -321,6 +321,12 @@ public String getStorageIdAndRepositoryId()
return storageAndRepositoryId.toString();
}

@Override
public boolean isType(String compareType)
{
return type.equalsIgnoreCase(compareType);
}

@Override
public Set<String> getGroupRepositories()
{
Expand Down
Expand Up @@ -343,6 +343,12 @@ public String getStorageIdAndRepositoryId()
return storageAndRepositoryId.toString();
}

@Override
public boolean isType(String compareType)
{
return type.equalsIgnoreCase(compareType);
}

public void setAllowsForceDeletion(boolean allowsForceDeletion)
{
this.allowsForceDeletion = allowsForceDeletion;
Expand Down

Large diffs are not rendered by default.

Expand Up @@ -25,12 +25,17 @@ public MutableRoutingRule convert(RoutingRuleForm routingRuleForm)
rule.setStorageId(StringUtils.trimToEmpty(routingRuleForm.getStorageId()));
rule.setType(routingRuleForm.getType().getType());
rule.setPattern(routingRuleForm.getPattern());
rule.setRepositories(routingRuleForm.getRepositories().stream().map(r -> {
MutableRoutingRuleRepository repository = new MutableRoutingRuleRepository();
repository.setRepositoryId(StringUtils.trimToEmpty(routingRuleForm.getGroupRepositoryId()));
repository.setStorageId(StringUtils.trimToEmpty(routingRuleForm.getStorageId()));
return repository;
}).collect(Collectors.toList()));
rule.setRepositories(
routingRuleForm.getRepositories()
.stream()
.map(r -> {
MutableRoutingRuleRepository repository = new MutableRoutingRuleRepository();
repository.setRepositoryId(StringUtils.trimToEmpty(r.getRepositoryId()));
repository.setStorageId(StringUtils.trimToEmpty(r.getStorageId()));
return repository;
})
.collect(Collectors.toList())
);

return rule;
}
Expand Down
@@ -0,0 +1,60 @@
package org.carlspring.strongbox.validation.configuration.routing;

import org.carlspring.strongbox.forms.storage.routing.RoutingRuleRepositoryForm;
import org.carlspring.strongbox.services.ConfigurationManagementService;

import javax.inject.Inject;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

import org.apache.commons.lang3.StringUtils;

public class RoutingRuleRepositoryFormValidator
implements ConstraintValidator<RoutingRuleRepositoryFormValid, RoutingRuleRepositoryForm>
{

@Inject
private ConfigurationManagementService configurationManagementService;

private String message;

@Override
public void initialize(RoutingRuleRepositoryFormValid constraintAnnotation)
{
message = constraintAnnotation.message();
}

@Override
public boolean isValid(RoutingRuleRepositoryForm form,
ConstraintValidatorContext context)
{
Boolean valid = false;

try
{
String storageIdValue = StringUtils.trimToNull(form.getStorageId());
String repositoryIdValue = StringUtils.trimToNull(form.getRepositoryId());

if (storageIdValue == null && repositoryIdValue == null)
{
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate(message)
.addPropertyNode("storageId")
.addConstraintViolation();
context.buildConstraintViolationWithTemplate(message)
.addPropertyNode("repositoryId")
.addConstraintViolation();
}
else
{
valid = true;
}
}
catch (Exception e)
{
e.printStackTrace();
}

return valid;
}
}
Expand Up @@ -2,6 +2,7 @@ org.carlspring.strongbox.validation.configuration.DescribableEnumValueValidator
org.carlspring.strongbox.validation.configuration.LayoutProviderValueValidator
org.carlspring.strongbox.validation.configuration.UniqueStorageValidator
org.carlspring.strongbox.validation.configuration.ShouldNotContainValidator
org.carlspring.strongbox.validation.configuration.routing.RoutingRuleRepositoryFormValidator

org.carlspring.strongbox.validation.users.PasswordValidator
org.carlspring.strongbox.validation.users.UniqueUsernameValidator
Expand Down
Expand Up @@ -11,17 +11,19 @@
import java.util.UUID;

import com.google.common.collect.Lists;
import io.restassured.module.mockmvc.response.ValidatableMockMvcResponse;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;

import static io.restassured.module.mockmvc.RestAssuredMockMvc.given;
import static org.assertj.core.api.Assertions.assertThat;
import static org.carlspring.strongbox.controllers.configuration.RoutingConfigurationController.*;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.collection.IsCollectionWithSize.hasSize;

/**
* @author Pablo Tirado
Expand Down Expand Up @@ -57,36 +59,62 @@ public void cleanup()
MediaType.TEXT_PLAIN_VALUE })
void testGetRoutingRule(String acceptHeader)
{
addRoutingRule(acceptHeader);
addRoutingRule(acceptHeader, true);
MutableRoutingRules routingRules = getRoutingRules();

assertThat(routingRules).isNotNull();

MutableRoutingRule rule1 = routingRules.getRules().get(routingRules.getRules().size() - 1);
MutableRoutingRule rule2 = getRoutingRule(rule1.getUuid());

assertThat(rule2).isNotNull();
assertThat(rule1.getUuid()).isEqualTo(rule2.getUuid());
}

@ParameterizedTest
@ValueSource(strings = { MediaType.APPLICATION_JSON_VALUE,
MediaType.TEXT_PLAIN_VALUE })
void testAddAndRemoveRoutingRule(String acceptHeader)
void testAddAndRemoveRoutingRuleWithRepositories(String acceptHeader)
{
addRoutingRule(acceptHeader);
addRoutingRule(acceptHeader, true);

MutableRoutingRules routingRules = getRoutingRules();

assertThat(routingRules).isNotNull();
assertThat(routingRules.getRules().size()).isEqualTo(2);

MutableRoutingRule lastRule = routingRules.getRules().get(routingRules.getRules().size() - 1);

assertThat(lastRule.getRepositories().size()).isEqualTo(2);

removeRoutingRule(acceptHeader, lastRule.getUuid());

routingRules = getRoutingRules();


assertThat(routingRules).isNotNull();
assertThat(routingRules.getRules().size()).isEqualTo(1);
}

@ParameterizedTest
@ValueSource(strings = { MediaType.APPLICATION_JSON_VALUE,
MediaType.TEXT_PLAIN_VALUE })
void testAddAndRemoveRoutingRuleWithoutRepositories(String acceptHeader)
{
addRoutingRule(acceptHeader, false);

MutableRoutingRules routingRules = getRoutingRules();

assertThat(routingRules).isNotNull();
assertThat(routingRules.getRules().size()).isEqualTo(2);

MutableRoutingRule lastRule = routingRules.getRules().get(routingRules.getRules().size() - 1);

assertThat(lastRule.getRepositories().size()).isEqualTo(0);

removeRoutingRule(acceptHeader, lastRule.getUuid());

routingRules = getRoutingRules();

assertThat(routingRules).isNotNull();
assertThat(routingRules.getRules().size()).isEqualTo(1);
}
Expand All @@ -104,13 +132,13 @@ void testShouldNotAddAcceptedRuleSet(String acceptHeader)
MediaType.TEXT_PLAIN_VALUE })
void testAddAndUpdateAndRemoveRoutingRule(String acceptHeader)
{
addRoutingRule(acceptHeader);
addRoutingRule(acceptHeader, true);

MutableRoutingRules routingRules = getRoutingRules();

assertThat(routingRules).isNotNull();
assertThat(routingRules.getRules().size()).isEqualTo(2);

MutableRoutingRule lastRule = routingRules.getRules().get(routingRules.getRules().size() - 1);

updateRoutingRule(acceptHeader, lastRule.getUuid());
Expand All @@ -119,32 +147,37 @@ void testAddAndUpdateAndRemoveRoutingRule(String acceptHeader)

assertThat(routingRules).isNotNull();
assertThat(routingRules.getRules().size()).isEqualTo(2);

lastRule = routingRules.getRules().get(routingRules.getRules().size() - 1);

assertThat(lastRule.getGroupRepositoryId()).isEqualTo("group-releases-2-updated");
assertThat(lastRule.getPattern()).isEqualTo(".*some.test-updated");
assertThat(lastRule.getType()).isEqualTo(RoutingRuleTypeEnum.DENY.getType());

removeRoutingRule(acceptHeader, lastRule.getUuid());

routingRules = getRoutingRules();

assertThat(routingRules).isNotNull();
assertThat(routingRules.getRules().size()).isEqualTo(1);
}

private void addRoutingRule(String acceptHeader)
private void addRoutingRule(String acceptHeader,
boolean withRepositories)
{
RoutingRuleForm routingRuleForm = new RoutingRuleForm();
routingRuleForm.setPattern(".*some.test");
routingRuleForm.setType(RoutingRuleTypeEnum.ACCEPT);
routingRuleForm.setGroupRepositoryId(GROUP_RELEASES_2);
RoutingRuleRepositoryForm routingRuleRepositoryForm = new RoutingRuleRepositoryForm();
routingRuleRepositoryForm.setRepositoryId("releases-with-trash");
RoutingRuleRepositoryForm routingRuleRepositoryForm2 = new RoutingRuleRepositoryForm();
routingRuleRepositoryForm2.setRepositoryId("releases-with-redeployment");
routingRuleForm.setRepositories(Lists.newArrayList(routingRuleRepositoryForm, routingRuleRepositoryForm2));

if (withRepositories)
{
RoutingRuleRepositoryForm routingRuleRepositoryForm = new RoutingRuleRepositoryForm();
routingRuleRepositoryForm.setRepositoryId("releases-with-trash");
RoutingRuleRepositoryForm routingRuleRepositoryForm2 = new RoutingRuleRepositoryForm();
routingRuleRepositoryForm2.setRepositoryId("releases-with-redeployment");
routingRuleForm.setRepositories(Lists.newArrayList(routingRuleRepositoryForm, routingRuleRepositoryForm2));
}

given().contentType(MediaType.APPLICATION_JSON_VALUE)
.accept(acceptHeader)
Expand Down Expand Up @@ -186,16 +219,28 @@ private void shouldNotAddRoutingRule(String acceptHeader)
RoutingRuleForm routingRuleForm = new RoutingRuleForm();
routingRuleForm.setPattern("");
routingRuleForm.setType(RoutingRuleTypeEnum.ACCEPT);
routingRuleForm.setRepositories(Lists.newArrayList());

given().contentType(MediaType.APPLICATION_JSON_VALUE)
.accept(acceptHeader)
.body(routingRuleForm)
.when()
.put(getContextBaseUrl())
.then()
.statusCode(HttpStatus.BAD_REQUEST.value())
.body(containsString(FAILED_ADD_ROUTING_RULE_FORM_ERRORS));
RoutingRuleRepositoryForm routingRuleRepositoryForm = new RoutingRuleRepositoryForm();
routingRuleRepositoryForm.setRepositoryId("");
RoutingRuleRepositoryForm routingRuleRepositoryForm2 = new RoutingRuleRepositoryForm();
routingRuleRepositoryForm2.setRepositoryId("");
routingRuleForm.setRepositories(Lists.newArrayList(routingRuleRepositoryForm, routingRuleRepositoryForm2));

ValidatableMockMvcResponse response = given().contentType(MediaType.APPLICATION_JSON_VALUE)
.accept(acceptHeader)
.body(routingRuleForm)
.when()
.put(getContextBaseUrl())
.then()
.statusCode(HttpStatus.BAD_REQUEST.value())
.body(containsString(FAILED_ADD_ROUTING_RULE_FORM_ERRORS));

if (acceptHeader.equals(MediaType.APPLICATION_JSON_VALUE))
{
response.body("errors", hasSize(equalTo(5)));
response.body(containsString("must not be blank"));
response.body(containsString("A pattern must be specified"));
}
}

private void removeRoutingRule(String acceptHeader,
Expand Down Expand Up @@ -233,7 +278,7 @@ private MutableRoutingRule getRoutingRule(UUID uuid)
return given().contentType(MediaType.APPLICATION_JSON_VALUE)
.accept(MediaType.APPLICATION_JSON_VALUE)
.when()
.get(url+'/'+uuid.toString())
.get(url + '/' + uuid.toString())
.then()
.statusCode(HttpStatus.OK.value())
.extract()
Expand Down

0 comments on commit 1000f06

Please sign in to comment.