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));
}
}