package org.springjutsu.validation.integrationTests;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import org.junit.Test;
import org.springframework.context.support.DefaultMessageSourceResolvable;
import org.springframework.validation.Errors;
import org.springjutsu.validation.test.entities.Company;
import org.springjutsu.validation.test.entities.Customer;
public class CollectionIntegrationTest extends ValidationIntegrationTest {
@Override
protected String getXmlSubdirectory() {
return "collectionIntegrationTest";
}
@Test
public void testCollectionRules() {
Company company = new Company();
Customer namedCustomer = new Customer();
namedCustomer.setFirstName("bob");
company.getCustomers().add(namedCustomer);
company.getCustomers().add(new Customer());
company.getCustomers().add(new Customer());
Errors errors = doValidate("testCollectionRules.xml", company).errors;
assertEquals(3, errors.getErrorCount());
assertEquals("messageOverride.errors.required", errors.getFieldError("name").getCode());
assertNull(errors.getFieldError("customers[0].firstName"));
assertEquals("messageOverride.errors.required", errors.getFieldError("customers[1].firstName").getCode());
assertEquals("customer.firstName", ((DefaultMessageSourceResolvable) errors.getFieldError("customers[1].firstName").getArguments()[0]).getCode());
assertEquals("messageOverride.errors.required", errors.getFieldError("customers[2].firstName").getCode());
assertEquals("customer.firstName", ((DefaultMessageSourceResolvable) errors.getFieldError("customers[2].firstName").getArguments()[0]).getCode());
}
@Test
public void testLocalCollectionRules() {
Company company = new Company();
company.setName("Awesome Co.");
company.getSlogans().add("Doing right.");
company.getSlogans().add("Doing our customers right.");
company.getSlogans().add("Doing our customers right in a non-suggestive way.");
Errors errors = doValidate("testCollectionRules.xml", company).errors;
assertEquals(2, errors.getErrorCount());
assertEquals("messageOverride.errors.maxLength", errors.getFieldError("slogans[1]").getCode());
assertEquals("company.slogans", ((DefaultMessageSourceResolvable) errors.getFieldError("slogans[1]").getArguments()[0]).getCode());
assertEquals("messageOverride.errors.maxLength", errors.getFieldError("slogans[2]").getCode());
assertEquals("company.slogans", ((DefaultMessageSourceResolvable) errors.getFieldError("slogans[2]").getArguments()[0]).getCode());
}
@Test
public void testCollectionRulePathFromModel() {
Company company = new Company();
Customer namedCustomer = new Customer();
namedCustomer.setFirstName("bob");
company.getCustomers().add(namedCustomer);
company.getCustomers().add(new Customer());
company.getCustomers().add(new Customer());
Errors errors = doValidate("testCollectionRulePathFromModel.xml", company).errors;
assertEquals(3, errors.getErrorCount());
assertEquals("messageOverride.errors.required", errors.getFieldError("name").getCode());
assertNull(errors.getFieldError("customers[0].firstName"));
assertEquals("messageOverride.errors.required", errors.getFieldError("customers[1].firstName").getCode());
assertEquals("messageOverride.errors.required", errors.getFieldError("customers[2].firstName").getCode());
}
@Test
public void testCollectionRulePathFromCollectionNestedModel() {
Company company = new Company();
Customer namedCustomer = new Customer();
namedCustomer.setFirstName("bob");
company.getAcquisitions().add(new Company());
company.getAcquisitions().add(new Company());
company.getAcquisitions().get(0).getCustomers().add(new Customer());
company.getAcquisitions().get(0).getCustomers().add(new Customer());
company.getAcquisitions().get(1).getCustomers().add(namedCustomer);
company.getAcquisitions().get(1).getCustomers().add(new Customer());
Errors errors = doValidate("testCollectionRulePathFromCollectionNestedModel.xml", company).errors;
assertEquals(3, errors.getErrorCount());
assertEquals("messageOverride.errors.required", errors.getFieldError("acquisitions[0].customers[0].firstName").getCode());
assertEquals("messageOverride.errors.required", errors.getFieldError("acquisitions[0].customers[1].firstName").getCode());
assertNull(errors.getFieldError("acquisitions[1].customers[0].firstName"));
assertEquals("messageOverride.errors.required", errors.getFieldError("acquisitions[1].customers[1].firstName").getCode());
}
@Test
public void testNestedCollectionRulePathFromModel() {
Company company = new Company();
Customer namedCustomer = new Customer();
namedCustomer.setFirstName("bob");
company.getAcquisitions().add(new Company());
company.getAcquisitions().add(new Company());
company.getAcquisitions().get(0).getCustomers().add(new Customer());
company.getAcquisitions().get(0).getCustomers().add(new Customer());
company.getAcquisitions().get(1).getCustomers().add(namedCustomer);
company.getAcquisitions().get(1).getCustomers().add(new Customer());
Errors errors = doValidate("testNestedCollectionRulePathFromModel.xml", company).errors;
assertEquals(3, errors.getErrorCount());
assertEquals("messageOverride.errors.required", errors.getFieldError("acquisitions[0].customers[0].firstName").getCode());
assertEquals("messageOverride.errors.required", errors.getFieldError("acquisitions[0].customers[1].firstName").getCode());
assertNull(errors.getFieldError("acquisitions[1].customers[0].firstName"));
assertEquals("messageOverride.errors.required", errors.getFieldError("acquisitions[1].customers[1].firstName").getCode());
}
@Test
public void testNestedCollectionRulesAdaptedToMembers() {
Company company = new Company();
Customer noNameCustomer = new Customer();
Customer partiallyNamedCustomer = new Customer();
partiallyNamedCustomer.setFirstName("bob");
Customer fullyNamedCustomer = new Customer();
fullyNamedCustomer.setFirstName("joe");
fullyNamedCustomer.setLastName("alsojoe");
fullyNamedCustomer.setEmailAddress("alsojoe@joe.com");
company.getCustomers().add(noNameCustomer);
company.getCustomers().add(partiallyNamedCustomer);
company.getCustomers().add(fullyNamedCustomer);
Errors errors = doValidate("testNestedCollectionRulesAdaptedToMembers.xml", company).errors;
assertEquals(2, errors.getErrorCount());
assertEquals("messageOverride.errors.required", errors.getFieldError("customers[1].lastName").getCode());
assertEquals("messageOverride.emailRequired", errors.getFieldError("customers[1]").getCode());
}
@Test
public void testDeepNestedCollectionRulesAdaptedToMembers() {
Company company = new Company();
Customer noNameCustomer = new Customer();
Customer partiallyNamedCustomer = new Customer();
partiallyNamedCustomer.setFirstName("bob");
Customer fullyNamedCustomer = new Customer();
fullyNamedCustomer.setFirstName("joe");
fullyNamedCustomer.setLastName("alsojoe");
fullyNamedCustomer.setEmailAddress("alsojoe@joe.com");
company.getCustomers().add(noNameCustomer);
company.getCustomers().add(partiallyNamedCustomer);
company.getCustomers().add(fullyNamedCustomer);
Company acquired = new Company();
acquired.getCustomers().add(noNameCustomer);
acquired.getCustomers().add(partiallyNamedCustomer);
acquired.getCustomers().add(fullyNamedCustomer);
company.getAcquisitions().add(acquired);
Company parentCompany = new Company();
parentCompany.getAcquisitions().add(company);
Errors errors = doValidate("testNestedCollectionRulesAdaptedToMembers.xml", parentCompany).errors;
assertEquals(4, errors.getErrorCount());
assertEquals("messageOverride.errors.required", errors.getFieldError("acquisitions[0].customers[1].lastName").getCode());
assertEquals("messageOverride.emailRequired", errors.getFieldError("acquisitions[0].customers[1]").getCode());
assertEquals("messageOverride.errors.required", errors.getFieldError("acquisitions[0].acquisitions[0].customers[1].lastName").getCode());
assertEquals("messageOverride.emailRequired", errors.getFieldError("acquisitions[0].acquisitions[0].customers[1]").getCode());
}
@Test
public void testSubCollectionRulesAdaptedToMembers() {
Customer noNameCustomer = new Customer();
Customer partiallyNamedCustomer = new Customer();
partiallyNamedCustomer.setLastName("bob");
Company noNameCompany = new Company();
noNameCompany.getCustomers().add(noNameCustomer);
noNameCompany.getCustomers().add(partiallyNamedCustomer);
Company namedCompany = new Company();
namedCompany.setName("Awesome co");
namedCompany.getCustomers().add(noNameCustomer);
namedCompany.getCustomers().add(partiallyNamedCustomer);
Company anotherNamedCompany = new Company();
anotherNamedCompany.setName("Awesome co");
anotherNamedCompany.getCustomers().add(noNameCustomer);
anotherNamedCompany.getCustomers().add(partiallyNamedCustomer);
namedCompany.getAcquisitions().add(anotherNamedCompany);
Company parentCompany = new Company();
parentCompany.getAcquisitions().add(noNameCompany);
parentCompany.getAcquisitions().add(namedCompany);
Errors errors = doValidate("testSubCollectionRulesAdaptedToMembers.xml", parentCompany).errors;
assertEquals(2, errors.getErrorCount());
assertEquals("messageOverride.errors.required", errors.getFieldError("acquisitions[1].customers[0].lastName").getCode());
assertEquals("customer.lastName", ((DefaultMessageSourceResolvable) errors.getFieldError("acquisitions[1].customers[0].lastName").getArguments()[0]).getCode());
assertEquals("messageOverride.errors.required", errors.getFieldError("acquisitions[1].acquisitions[0].customers[0].lastName").getCode());
assertEquals("customer.lastName", ((DefaultMessageSourceResolvable) errors.getFieldError("acquisitions[1].acquisitions[0].customers[0].lastName").getArguments()[0]).getCode());
}
@Test
public void testCollectionStrategyDefault() {
Company company = new Company();
company.getSlogans().add("Doing right.");
company.getSlogans().add("Doing our customers right.");
Errors errors = doValidate("testCollectionStrategyAttribute.xml", company).errors;
assertEquals(1, errors.getErrorCount());
assertEquals("messageOverride.errors.maxLength", errors.getFieldError("slogans[1]").getCode());
}
@Test
public void testCollectionStrategyValidateMembers() {
Company company = new Company();
company.getWebsites().add("www.shorturl.com");
company.getWebsites().add("http://www.longerurlthanisallowedforthisfield.com/lolstillevenlonger");
Errors errors = doValidate("testCollectionStrategyAttribute.xml", company).errors;
assertEquals(1, errors.getErrorCount());
assertEquals("messageOverride.errors.maxLength", errors.getFieldError("websites[1]").getCode());
}
@Test
public void testCollectionStrategyValidateCollectionObject() {
Company company = new Company();
company.setAcquisitions(null);
Errors errors = doValidate("testCollectionStrategyAttribute.xml", company).errors;
assertEquals(1, errors.getErrorCount());
assertEquals("messageOverride.errors.required", errors.getFieldError("acquisitions").getCode());
}
}