package de.zalando.toga.generator; import com.fasterxml.jackson.databind.ObjectMapper; import de.zalando.toga.generator.scenarios.SingleString; import org.junit.Test; import java.io.File; import java.io.IOException; import java.util.List; import java.util.regex.Pattern; import static de.zalando.toga.generator.GeneratorTest.generateOutput; import static de.zalando.toga.generator.GeneratorTest.verifyFile; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.greaterThan; import static org.hamcrest.Matchers.lessThan; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; public class StringDimensionTest { @Test public void simpleString() throws IOException { verifyFile("string/single_string", SingleString.class); } @Test public void shouldGenerate4ExamplesByDefault() throws IOException { String scenario = "string/string_pattern"; File output = generateOutput(scenario); ObjectMapper mapper = new ObjectMapper(); List<SingleString> referenceObjects = mapper.readValue(output, mapper.getTypeFactory().constructCollectionType(List.class, SingleString.class)); assertThat(referenceObjects.size(), is(equalTo(4))); } @Test public void stringPattern() throws IOException { String scenario = "string/string_pattern"; File output = generateOutput(scenario); ObjectMapper mapper = new ObjectMapper(); List<SingleString> referenceObjects = mapper.readValue(output, mapper.getTypeFactory().constructCollectionType(List.class, SingleString.class)); Pattern pattern = Pattern.compile("^(\\([0-9]{3}\\))?[0-9]{3}-[0-9]{4}$"); for (SingleString obj : referenceObjects) { String someString = obj.getSomeString(); boolean matches = pattern.matcher(someString).matches(); assertThat("pattern match failed for input [" + someString + "].", matches, is(true)); } } @Test public void stringWithLengthPattern() throws IOException { String scenario = "string/string_pattern_length"; File output = generateOutput(scenario); ObjectMapper mapper = new ObjectMapper(); List<SingleString> referenceObjects = mapper.readValue(output, mapper.getTypeFactory().constructCollectionType(List.class, SingleString.class)); Pattern pattern = Pattern.compile("[0-9]{1,100}"); for (SingleString obj : referenceObjects) { String someString = obj.getSomeString(); int length = someString.length(); boolean matches = pattern.matcher(someString).matches(); assertThat("pattern match failed for input [" + someString + "].", matches, is(true)); assertThat(length, lessThan(9)); assertThat(length, greaterThan(3)); } } @Test public void stringWithExampleCountShouldCreateRightNumberOfExamples() throws IOException { String scenario = "string/string_example_count"; File output = generateOutput(scenario); ObjectMapper mapper = new ObjectMapper(); List<SingleString> referenceObjects = mapper.readValue(output, mapper.getTypeFactory().constructCollectionType(List.class, SingleString.class)); assertThat(referenceObjects.size(), is(equalTo(10))); } @Test(expected = IllegalArgumentException.class) public void stringWithLengthButWithoutPattern() { generateOutput("string/string_length_no_pattern"); } @Test public void stringWithPatternAndValues() throws IOException { String scenario = "string/string_pattern_and_values"; File output = generateOutput(scenario); ObjectMapper mapper = new ObjectMapper(); List<SingleString> referenceObjects = mapper.readValue(output, mapper.getTypeFactory().constructCollectionType(List.class, SingleString.class)); assertThat(referenceObjects.size(), is(4)); assertThat("Empty string not found.", referenceObjects.contains(new SingleString("")), is(true)); assertThat("testString not found.", referenceObjects.contains(new SingleString("testString")), is(true)); } }