Skip to content

Commit bf3cf91

Browse files
committed
WIP
1 parent 8a2b7ec commit bf3cf91

File tree

4 files changed

+62
-12
lines changed

4 files changed

+62
-12
lines changed

dsl/src/main/java/be/sddevelopment/validation/dsl/CsvFile.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
package be.sddevelopment.validation.dsl;
22

33
import java.nio.file.Path;
4+
import java.util.List;
45
import java.util.Vector;
6+
import java.util.stream.Collectors;
57
import java.util.stream.Stream;
68

79
public record CsvFile (
810
String fileIdentifier,
911
Vector<String> headerFields,
1012
Vector<Vector<String>> lines
1113
) {
14+
private static final String DEFAULT = ".*\\.csv";
15+
1216
public CsvFile {
1317
if (headerFields == null || lines == null) {
1418
throw new IllegalArgumentException("Header fields and lines must not be null");
@@ -19,11 +23,29 @@ public Vector<String> line(int lineNumber) {
1923
return lines.get(lineNumber);
2024
}
2125

22-
public static CsvFile fromLines(Stream<String> lines) {
26+
public static CsvFile fromLines(List<String> lines) {
27+
if(lines.isEmpty()) {
28+
throw new IllegalArgumentException("No lines provided. A data file requires at least one line");
29+
}
30+
31+
var header = parseHeader(lines.getFirst());
32+
var dataLines = lines.stream().skip(1).map(CsvFile::parseLine).toList();
33+
return new CsvFile(DEFAULT, header, new Vector<>(dataLines));
34+
}
35+
36+
private static Vector<String> parseHeader(String s) {
37+
return null;
38+
}
39+
40+
private static Vector<String> parseLine(String s) {
2341
return null;
2442
}
2543

2644
public static CsvFile fromFile(Path dataFile) {
2745
return null;
2846
}
47+
48+
public boolean isEmpty() {
49+
return this.lines.isEmpty();
50+
}
2951
}

dsl/src/test/java/be/sddevelopment/validation/dsl/CsvFileTest.java

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,56 @@
44
import org.assertj.core.api.WithAssertions;
55
import org.junit.jupiter.api.DisplayName;
66
import org.junit.jupiter.api.DisplayNameGeneration;
7+
import org.junit.jupiter.api.Nested;
78
import org.junit.jupiter.api.Test;
89

10+
import java.util.List;
11+
912
@DisplayName("Comma Separated Values File")
1013
@DisplayNameGeneration(ReplaceUnderscoredCamelCasing.class)
1114
class CsvFileTest implements WithAssertions {
1215

13-
@Test
14-
void canBeCreatedFromLines() {
15-
var dataWithHeader = """
16+
@Nested
17+
class LineBasedParsing {
18+
19+
@Test
20+
void dataIsAccessibleAfterParsing() {
21+
var dataWithHeader = """
1622
NAME,HEIGHT,SPECIES
1723
Luke Skywalker,172,Human
1824
C-3PO,167,Droid
1925
R2-D2,96,Droid
2026
Boba Fett,183, Human
2127
""";
2228

23-
var csvFile = CsvFile.fromLines(dataWithHeader.lines());
29+
var csvFile = CsvFile.fromLines(dataWithHeader.lines().toList());
30+
31+
assertThat(csvFile).isNotNull()
32+
.extracting(CsvFile::headerFields)
33+
.asInstanceOf(LIST)
34+
.containsExactly("NAME", "HEIGHT", "SPECIES");
35+
assertThat(csvFile.line(0)).containsExactly("Luke Skywalker", "172", "Human");
36+
}
37+
38+
@Test
39+
void parsingRequiresAtLeastAHeaderLine() {
40+
assertThatException().isThrownBy(() -> CsvFile.fromLines(List.of()))
41+
.isInstanceOf(IllegalArgumentException.class)
42+
.withMessage("No lines provided. A data file requires at least one line")
43+
.withNoCause();
44+
}
45+
46+
@Test
47+
void canHandleEmptyDataSets() {
48+
var headerOnly = List.of("NAME,HEIGHT,SPECIES");
49+
50+
var csvFile = CsvFile.fromLines(headerOnly);
2451

25-
assertThat(csvFile).isNotNull()
26-
.extracting(CsvFile::headerFields)
27-
.asInstanceOf(LIST)
28-
.containsExactly("NAME", "HEIGHT", "SPECIES");
29-
assertThat(csvFile.line(0)).containsExactly("Luke Skywalker", "172", "Human");
52+
assertThat(csvFile).isNotNull();
53+
assertThat(csvFile.headerFields())
54+
.asInstanceOf(LIST)
55+
.containsExactly("NAME", "HEIGHT", "SPECIES");
56+
assertThat(csvFile).matches(CsvFile::isEmpty);
57+
}
3058
}
3159
}

dsl/src/test/java/be/sddevelopment/validation/dsl/FileValidatorParserTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ void canCheckFieldExistence() {
6262
C-3PO,167,Droid
6363
R2-D2,96,Droid
6464
Boba Fett,183, Human
65-
""".lines()
65+
""".lines().toList()
6666
);
6767
var rule = "FieldExists('HOMEWORLD')";
6868
var ruleAdder = FileValidatorParser.<CsvFile>toRuleAdder(rule);

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
<sonar.projectKey>sddevelopment_modular-validators</sonar.projectKey>
6161
<sonar.coverage.jacoco.xmlReportPaths>${jacoco.build.dir}/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>
6262

63-
<code.utils.version>1.0.0-SNAPSHOT</code.utils.version>
63+
<code.utils.version>1.0.0</code.utils.version>
6464
<rewrite.version>5.36.0</rewrite.version>
6565
</properties>
6666
<dependencyManagement>

0 commit comments

Comments
 (0)