diff --git a/csv-validator-core/src/main/scala/uk/gov/nationalarchives/csv/validator/MetaDataValidator.scala b/csv-validator-core/src/main/scala/uk/gov/nationalarchives/csv/validator/MetaDataValidator.scala index f3939355..6a36295e 100644 --- a/csv-validator-core/src/main/scala/uk/gov/nationalarchives/csv/validator/MetaDataValidator.scala +++ b/csv-validator-core/src/main/scala/uk/gov/nationalarchives/csv/validator/MetaDataValidator.scala @@ -366,7 +366,7 @@ class RowIterator(parser: CsvParser, progress: Option[ProgressFor], maxCharsPerC case Failure(ex: TextParsingException) if(ex.toString.contains("exceeds the maximum number of characters")) => val cellLocationMsg = potentialHeaderRow match { - case Some(headerRow) => s"in the cell located at line: ${ex.getLineIndex}, column: ${headerRow.cells(ex.getColumnIndex).value}," + case Some(headerRow) => s"in the cell located at row: ${ex.getLineIndex}, column: ${headerRow.cells(ex.getColumnIndex).value}," case None => s"in column ${ex.getColumnIndex + 1} of the header row" } diff --git a/csv-validator-core/src/main/scala/uk/gov/nationalarchives/csv/validator/schema/Rule.scala b/csv-validator-core/src/main/scala/uk/gov/nationalarchives/csv/validator/schema/Rule.scala index aa803e79..2c454a88 100644 --- a/csv-validator-core/src/main/scala/uk/gov/nationalarchives/csv/validator/schema/Rule.scala +++ b/csv-validator-core/src/main/scala/uk/gov/nationalarchives/csv/validator/schema/Rule.scala @@ -67,7 +67,7 @@ abstract class Rule(name: String, val argProviders: ArgProvider*) extends Positi def fail(columnIndex: Int, row: Row, schema: Schema): RuleValidation[Any] = { val columnDefinition = schema.columnDefinitions(columnIndex) - s"$toError fails for line: ${row.lineNumber}, column: ${columnDefinition.id}, ${toValueError(row,columnIndex)}".invalidNel[Any] + s"$toError fails for row: ${row.lineNumber}, column: ${columnDefinition.id}, ${toValueError(row,columnIndex)}".invalidNel[Any] } def cellValue(columnIndex: Int, row: Row, schema: Schema): String = { diff --git a/csv-validator-core/src/main/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/Rule.scala b/csv-validator-core/src/main/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/Rule.scala index 414c3ba5..86520be5 100644 --- a/csv-validator-core/src/main/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/Rule.scala +++ b/csv-validator-core/src/main/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/Rule.scala @@ -277,7 +277,7 @@ case class UniqueRule() extends Rule("unique") { originalValue match { case None => distinctValues.put(cellValueCorrectCase, row.lineNumber); true.validNel case Some(o) => { - s"$toError fails for line: ${row.lineNumber}, column: ${columnDefinition.id}, ${toValueError(row,columnIndex)} (original at line: ${distinctValues(o)})".invalidNel[Any] + s"$toError fails for row: ${row.lineNumber}, column: ${columnDefinition.id}, ${toValueError(row,columnIndex)} (original at row: ${distinctValues(o)})".invalidNel[Any] } } } @@ -304,7 +304,7 @@ case class UniqueMultiRule(columns: List[ColumnReference]) extends Rule("unique( originalValue match { case None => distinctValues.put(cellValueCorrectCase, row.lineNumber); true.validNel case Some(o) => { - s"$toError ${columns.map(_.toError).mkString(", ")} ) fails for line: ${row.lineNumber}, column: ${columnDefinition.id}, ${toValueError(row,columnIndex)} (original at line: ${distinctValues(o)})".invalidNel[Any] + s"$toError ${columns.map(_.toError).mkString(", ")} ) fails for row: ${row.lineNumber}, column: ${columnDefinition.id}, ${toValueError(row,columnIndex)} (original at row: ${distinctValues(o)})".invalidNel[Any] } } } @@ -322,8 +322,8 @@ case class ChecksumRule(rootPath: ArgProvider, file: ArgProvider, algorithm: Str } else { search(filename(columnIndex, row, schema)) match { case Validated.Valid(hexValue: String) if hexValue == cellValue(columnIndex, row, schema) => true.validNel[String] - case Validated.Valid(hexValue: String) => s"""$toError file "${TypedPath(filename(columnIndex, row, schema)._1 + filename(columnIndex, row, schema)._2).toPlatform}" checksum match fails for line: ${row.lineNumber}, column: ${columnDefinition.id}, ${toValueError(row, columnIndex)}. Computed checksum value:"${hexValue}"""".invalidNel[Any] - case Validated.Invalid(errMsg) => s"$toError ${errMsg.head} for line: ${row.lineNumber}, column: ${columnDefinition.id}, ${toValueError(row, columnIndex)}".invalidNel[Any] + case Validated.Valid(hexValue: String) => s"""$toError file "${TypedPath(filename(columnIndex, row, schema)._1 + filename(columnIndex, row, schema)._2).toPlatform}" checksum match fails for row: ${row.lineNumber}, column: ${columnDefinition.id}, ${toValueError(row, columnIndex)}. Computed checksum value:"${hexValue}"""".invalidNel[Any] + case Validated.Invalid(errMsg) => s"$toError ${errMsg.head} for row: ${row.lineNumber}, column: ${columnDefinition.id}, ${toValueError(row, columnIndex)}".invalidNel[Any] } } } @@ -458,11 +458,11 @@ case class FileCountRule(rootPath: ArgProvider, file: ArgProvider, pathSubstitut case scala.util.Success(cellCount) => search(filename(columnIndex, row, schema)) match { case Validated.Valid(count: Int) if count == cellCount => true.validNel[String] - case Validated.Valid(count: Int) => s"$toError found $count file(s) for line: ${row.lineNumber}, column: ${columnDefinition.id}, ${toValueError(row,columnIndex)}".invalidNel[Any] - case Validated.Invalid(errMsg) => s"$toError ${errMsg.head} for line: ${row.lineNumber}, column: ${columnDefinition.id}, ${toValueError(row,columnIndex)}".invalidNel[Any] + case Validated.Valid(count: Int) => s"$toError found $count file(s) for row: ${row.lineNumber}, column: ${columnDefinition.id}, ${toValueError(row,columnIndex)}".invalidNel[Any] + case Validated.Invalid(errMsg) => s"$toError ${errMsg.head} for row: ${row.lineNumber}, column: ${columnDefinition.id}, ${toValueError(row,columnIndex)}".invalidNel[Any] } - case scala.util.Failure(_) => s"$toError '${cellValue(columnIndex,row,schema)}' is not a number for line: ${row.lineNumber}, column: ${columnDefinition.id}, ${toValueError(row,columnIndex)}".invalidNel[Any] + case scala.util.Failure(_) => s"$toError '${cellValue(columnIndex,row,schema)}' is not a number for row: ${row.lineNumber}, column: ${columnDefinition.id}, ${toValueError(row,columnIndex)}".invalidNel[Any] } } diff --git a/csv-validator-core/src/main/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/Rule.scala b/csv-validator-core/src/main/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/Rule.scala index 84ec9bff..bbaf12d9 100644 --- a/csv-validator-core/src/main/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/Rule.scala +++ b/csv-validator-core/src/main/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/Rule.scala @@ -78,7 +78,7 @@ case class IntegrityCheckRule(pathSubstitutions: List[(String,String)], enforceC catch { case ex: FileNotFoundException => val columnDefinition = schema.columnDefinitions(columnIndex) - s"$toError fails for line: ${row.lineNumber}, column: ${columnDefinition.id}, ${ex.getMessage} with substitution paths ${pathSubstitutions.mkString(", ")}".invalidNel[Any] + s"$toError fails for row: ${row.lineNumber}, column: ${columnDefinition.id}, ${ex.getMessage} with substitution paths ${pathSubstitutions.mkString(", ")}".invalidNel[Any] } } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/MetaDataValidatorAcceptanceSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/MetaDataValidatorAcceptanceSpec.scala index f339296a..a299e566 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/MetaDataValidatorAcceptanceSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/MetaDataValidatorAcceptanceSpec.scala @@ -91,7 +91,7 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "fail when @noHeader not set" in { validate(TextFile(Paths.get(base).resolve("regexRuleFailMetaData.csv")), parse(base + "/regexRuleSchemaWithoutNoHeaderSet.csvs"), None) must beLike { case Validated.Invalid(errors) => errors.toList mustEqual List( - FailMessage(ValidationError, "regex(\"[0-9]+\") fails for line: 1, column: Age, value: \"twenty\"",Some(1),Some(1)) + FailMessage(ValidationError, "regex(\"[0-9]+\") fails for row: 1, column: Age, value: \"twenty\"",Some(1),Some(1)) ) } } @@ -108,8 +108,8 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "all be reported" in { validate(TextFile(Paths.get(base).resolve("multipleErrorsMetaData.csv")), parse(base + "/regexRuleSchemaWithNoHeaderSet.csvs"), None) must beLike { case Validated.Invalid(errors) => errors.toList mustEqual List( - FailMessage(ValidationError, """regex("[0-9]+") fails for line: 1, column: Age, value: "twenty"""",Some(1),Some(1)), - FailMessage(ValidationError, """regex("[0-9]+") fails for line: 2, column: Age, value: "thirty"""",Some(2),Some(1))) + FailMessage(ValidationError, """regex("[0-9]+") fails for row: 1, column: Age, value: "twenty"""",Some(1),Some(1)), + FailMessage(ValidationError, """regex("[0-9]+") fails for row: 2, column: Age, value: "thirty"""",Some(2),Some(1))) } } } @@ -122,10 +122,10 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "fail when rules fail for all permutations" in { validate(TextFile(Paths.get(base).resolve("twoRulesFailMetaData.csv")), parse(base + "/twoRuleSchemaFail.csvs"), None) must beLike { case Validated.Invalid(errors) => errors.toList mustEqual List( - FailMessage(ValidationError, """in($FullName) fails for line: 1, column: Name, value: "Ben"""",Some(1),Some(0)), - FailMessage(ValidationError, """regex("[a-z]+") fails for line: 1, column: Name, value: "Ben"""",Some(1),Some(0)), - FailMessage(ValidationError, """in($FullName) fails for line: 2, column: Name, value: "Dave"""",Some(2),Some(0)), - FailMessage(ValidationError, """regex("[a-z]+") fails for line: 2, column: Name, value: "Dave"""",Some(2),Some(0))) + FailMessage(ValidationError, """in($FullName) fails for row: 1, column: Name, value: "Ben"""",Some(1),Some(0)), + FailMessage(ValidationError, """regex("[a-z]+") fails for row: 1, column: Name, value: "Ben"""",Some(1),Some(0)), + FailMessage(ValidationError, """in($FullName) fails for row: 2, column: Name, value: "Dave"""",Some(2),Some(0)), + FailMessage(ValidationError, """regex("[a-z]+") fails for row: 2, column: Name, value: "Dave"""",Some(2),Some(0))) } } } @@ -142,7 +142,7 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "fail if the conditionExpr is true but the thenExpr is false" in { validate(TextFile(Paths.get(base).resolve("ifRuleFailThenMetaData.csv")), parse(base + "/ifElseRuleSchema.csvs"), None) must beLike { case Validated.Invalid(errors) => errors.toList mustEqual List( - FailMessage(ValidationError, """is("hello world") fails for line: 1, column: SomeIfRule, value: "hello world1"""",Some(1),Some(1)) + FailMessage(ValidationError, """is("hello world") fails for row: 1, column: SomeIfRule, value: "hello world1"""",Some(1),Some(1)) ) } } @@ -150,7 +150,7 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "fail if the conditionExpr is fasle but the elseExpr is false" in { validate(TextFile(Paths.get(base).resolve("ifRuleFailElseMetaData.csv")), parse(base + "/ifElseRuleSchema.csvs"), None) must beLike { case Validated.Invalid(errors) => errors.toList mustEqual List( - FailMessage(ValidationError, """upperCase fails for line: 3, column: SomeIfRule, value: "EFQWeGW"""",Some(3),Some(1)) + FailMessage(ValidationError, """upperCase fails for row: 3, column: SomeIfRule, value: "EFQWeGW"""",Some(3),Some(1)) ) } } @@ -168,7 +168,7 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "fail if the conditionExpr is true but the thenExpr is false - 1" in { validate(TextFile(Paths.get(base).resolve("switch1RuleFailMetaData.csv")), parse(base + "/switch1RuleSchema.csvs"), None) must beLike { case Validated.Invalid(errors) => errors.toList mustEqual List( - FailMessage(ValidationError, """is("hello world") fails for line: 1, column: SomeSwitchRule, value: "hello world1"""",Some(1),Some(1)) + FailMessage(ValidationError, """is("hello world") fails for row: 1, column: SomeSwitchRule, value: "hello world1"""",Some(1),Some(1)) ) } } @@ -176,8 +176,8 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "fail if the conditionExpr is true but the thenExpr is false - 2" in { validate(TextFile(Paths.get(base).resolve("switch2RuleFailMetaData.csv")), parse(base + "/switch2RuleSchema.csvs"), None) must beLike { case Validated.Invalid(errors) =>errors.toList mustEqual List( - FailMessage(ValidationError, """is("hello world") fails for line: 1, column: SomeSwitchRule, value: "hello world1"""",Some(1),Some(1)), - FailMessage(ValidationError, """is("HELLO WORLD") fails for line: 2, column: SomeSwitchRule, value: "HELLO WORLD1"""",Some(2),Some(1)) + FailMessage(ValidationError, """is("hello world") fails for row: 1, column: SomeSwitchRule, value: "hello world1"""",Some(1),Some(1)), + FailMessage(ValidationError, """is("HELLO WORLD") fails for row: 2, column: SomeSwitchRule, value: "HELLO WORLD1"""",Some(2),Some(1)) ) } } @@ -193,8 +193,8 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "fail if the column value is not in the rule's literal string" in { validate(TextFile(Paths.get(base).resolve("inRuleFailMetaData.csv")), parse(base + "/inRuleSchema.csvs"), None) must beLike { case Validated.Invalid(errors) => errors.toList mustEqual List( - FailMessage(ValidationError, """in("thevaluemustbeinthisstring") fails for line: 1, column: SomeInRule, value: "valuenotinrule"""",Some(1),Some(1)), - FailMessage(ValidationError, """in("thevaluemustbeinthisstring") fails for line: 3, column: SomeInRule, value: "thisonewillfailtoo"""",Some(3),Some(1))) + FailMessage(ValidationError, """in("thevaluemustbeinthisstring") fails for row: 1, column: SomeInRule, value: "valuenotinrule"""",Some(1),Some(1)), + FailMessage(ValidationError, """in("thevaluemustbeinthisstring") fails for row: 3, column: SomeInRule, value: "thisonewillfailtoo"""",Some(3),Some(1))) } } @@ -204,7 +204,7 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "fail if the column value is not in the rule's cross referenced column" in { validate(TextFile(Paths.get(base).resolve("inRuleCrossReferenceFailMetaData.csv")), parse(base + "/inRuleCrossReferenceSchema.csvs"), None) must beLike { - case Validated.Invalid(errors) => errors.toList mustEqual List(FailMessage(ValidationError, """in($FullName) fails for line: 2, column: FirstName, value: "Dave"""",Some(2),Some(0))) + case Validated.Invalid(errors) => errors.toList mustEqual List(FailMessage(ValidationError, """in($FullName) fails for row: 2, column: FirstName, value: "Dave"""",Some(2),Some(0))) } } } @@ -217,7 +217,7 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "fail if the column value is not in the rule's literal string" in { validate(TextFile(Paths.get(base).resolve("anyRuleFailMetaData.csv")), parse(base + "/anyRuleSchema.csvs"), None) must beLike { case Validated.Invalid(errors) => errors.toList mustEqual List( - FailMessage(ValidationError, """any("value1", "value2", "value3") fails for line: 4, column: SomeAnyRule, value: "value4"""",Some(4),Some(1)) + FailMessage(ValidationError, """any("value1", "value2", "value3") fails for row: 4, column: SomeAnyRule, value: "value4"""",Some(4),Some(1)) ) } } @@ -231,7 +231,7 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "fail if the column value is not in the rule's literal string" in { validate(TextFile(Paths.get(base).resolve("xsdDateTimeFail.csv")), parse(base + "/xsdDateTime.csvs"), None) must beLike { case Validated.Invalid(errors) => errors.toList mustEqual List( - FailMessage(ValidationError, """xDateTime fails for line: 2, column: date, value: "2013-03-22"""",Some(2),Some(0)) + FailMessage(ValidationError, """xDateTime fails for row: 2, column: date, value: "2013-03-22"""",Some(2),Some(0)) ) } } @@ -245,7 +245,7 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "fail if the column value is not in the rule's literal string" in { validate(TextFile(Paths.get(base).resolve("xsdDateTimeRangeFail.csv")), parse(base + "/xsdDateTimeRange.csvs"), None) must beLike { case Validated.Invalid(errors) => errors.toList mustEqual List( - FailMessage(ValidationError, """xDateTime("2012-01-01T01:00:00, 2013-01-01T01:00:00") fails for line: 2, column: date, value: "2014-01-01T01:00:00"""",Some(2),Some(0)) + FailMessage(ValidationError, """xDateTime("2012-01-01T01:00:00, 2013-01-01T01:00:00") fails for row: 2, column: date, value: "2014-01-01T01:00:00"""",Some(2),Some(0)) ) } } @@ -260,7 +260,7 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "fail if the column value is invalid" in { validate(TextFile(Paths.get(base).resolve("xsdDateTimeTzFail.csv")), parse(base + "/xsdDateTimeTz.csvs"), None) must beLike { case Validated.Invalid(errors) => errors.toList mustEqual List( - FailMessage(ValidationError, """xDateTimeWithTimeZone fails for line: 4, column: date, value: "2012-01-01T00:00:00"""",Some(4),Some(0)) + FailMessage(ValidationError, """xDateTimeWithTimeZone fails for row: 4, column: date, value: "2012-01-01T00:00:00"""",Some(4),Some(0)) ) } } @@ -274,7 +274,7 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "fail if the column value is not in the rule's literal string" in { validate(TextFile(Paths.get(base).resolve("xsdDateTimeTzRangeFail.csv")), parse(base + "/xsdDateTimeTzRange.csvs"), None) must beLike { case Validated.Invalid(errors) => errors.toList mustEqual List( - FailMessage(ValidationError, """xDateTimeWithTimeZone("2012-01-01T01:00:00+00:00, 2013-01-01T01:00:00+00:00") fails for line: 2, column: date, value: "2014-01-01T01:00:00+00:00"""",Some(2),Some(0)) + FailMessage(ValidationError, """xDateTimeWithTimeZone("2012-01-01T01:00:00+00:00, 2013-01-01T01:00:00+00:00") fails for row: 2, column: date, value: "2014-01-01T01:00:00+00:00"""",Some(2),Some(0)) ) } } @@ -289,7 +289,7 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "fail if a non empty value fails a rule" in { validate(TextFile(Paths.get(base).resolve("optionalFailMetaData.csv")), parse(base + "/optionalSchema.csvs"), None) must beLike { - case Validated.Invalid(errors) => errors.toList mustEqual List(FailMessage(ValidationError, "in($FullName) fails for line: 1, column: Name, value: \"BP\"",Some(1),Some(0))) + case Validated.Invalid(errors) => errors.toList mustEqual List(FailMessage(ValidationError, "in($FullName) fails for row: 1, column: Name, value: \"BP\"",Some(1),Some(0))) } } } @@ -322,8 +322,8 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "fail if the file does not exist on the file system" in { validate(TextFile(Paths.get(base).resolve("fileExistsPassMetaData.csv")), parse(base + "/fileExistsSchemaWithBadBasePath.csvs"), None) must beLike { case Validated.Invalid(errors) => errors.toList mustEqual List( - FailMessage(ValidationError, """fileExists("src/test/resources/uk/gov/nationalarchives") fails for line: 1, column: PasswordFile, value: "benPass.csvs"""",Some(1),Some(2)), - FailMessage(ValidationError, """fileExists("src/test/resources/uk/gov/nationalarchives") fails for line: 2, column: PasswordFile, value: "andyPass.csvs"""",Some(2),Some(2))) + FailMessage(ValidationError, """fileExists("src/test/resources/uk/gov/nationalarchives") fails for row: 1, column: PasswordFile, value: "benPass.csvs"""",Some(1),Some(2)), + FailMessage(ValidationError, """fileExists("src/test/resources/uk/gov/nationalarchives") fails for row: 2, column: PasswordFile, value: "andyPass.csvs"""",Some(2),Some(2))) } } @@ -335,8 +335,8 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { validateE(TextFile(Paths.get(base).resolve("caseSensitiveFiles.csv")), parseE(new StringReader(csfSchema)), None) must beLike { case Validated.Invalid(errors) => errors.toList mustEqual List( - FailMessage(ValidationError, """fileExists("$$acceptance$$") fails for line: 2, column: filename, value: "casesensitivefiles.csv"""".replace("$$acceptance$$", base),Some(2),Some(0)), - FailMessage(ValidationError, """fileExists("$$acceptance$$") fails for line: 3, column: filename, value: "CASESENSITIVEFILES.csv"""".replace("$$acceptance$$", base),Some(3),Some(0)) + FailMessage(ValidationError, """fileExists("$$acceptance$$") fails for row: 2, column: filename, value: "casesensitivefiles.csv"""".replace("$$acceptance$$", base),Some(2),Some(0)), + FailMessage(ValidationError, """fileExists("$$acceptance$$") fails for row: 3, column: filename, value: "CASESENSITIVEFILES.csv"""".replace("$$acceptance$$", base),Some(3),Some(0)) ) } } @@ -350,7 +350,7 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "enforce all element in a call on to be in a range of value" in { validate(TextFile(Paths.get(base).resolve("rangeRuleFailMetaData.csv")), parse(base + "/rangeRuleSchema.csvs"), None) must beLike { - case Validated.Invalid(errors) => errors.toList mustEqual List(FailMessage(ValidationError, """range(1910,*) fails for line: 2, column: Year_of_birth, value: "1909"""",Some(2),Some(1))) + case Validated.Invalid(errors) => errors.toList mustEqual List(FailMessage(ValidationError, """range(1910,*) fails for row: 2, column: Year_of_birth, value: "1909"""",Some(2),Some(1))) } } @@ -378,8 +378,8 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { validateE(TextFile(Paths.get(base).resolve("caseSensitiveFilesChecksum.csv")), parseE(new StringReader(csfSchema)), None) must beLike { case Validated.Invalid(errors) => errors.toList mustEqual List( - FailMessage(ValidationError, """checksum(file("$$acceptance$$", $filename), "MD5") file "$$acceptance$$$$file-sep$$casesensitivefileschecksum.csvs" not found for line: 2, column: checksum, value: "41424313f6052b7f062358ed38640b6e"""".replace("$$acceptance$$", base).replace("$$file-sep$$", FILE_SEPARATOR.toString),Some(2),Some(1)), - FailMessage(ValidationError, """checksum(file("$$acceptance$$", $filename), "MD5") file "$$acceptance$$$$file-sep$$CASESENSITIVEFILESCHECKSUM.csvs" not found for line: 3, column: checksum, value: "41424313f6052b7f062358ed38640b6e"""".replace("$$acceptance$$", base).replace("$$file-sep$$", FILE_SEPARATOR.toString),Some(3),Some(1)) + FailMessage(ValidationError, """checksum(file("$$acceptance$$", $filename), "MD5") file "$$acceptance$$$$file-sep$$casesensitivefileschecksum.csvs" not found for row: 2, column: checksum, value: "41424313f6052b7f062358ed38640b6e"""".replace("$$acceptance$$", base).replace("$$file-sep$$", FILE_SEPARATOR.toString),Some(2),Some(1)), + FailMessage(ValidationError, """checksum(file("$$acceptance$$", $filename), "MD5") file "$$acceptance$$$$file-sep$$CASESENSITIVEFILESCHECKSUM.csvs" not found for row: 3, column: checksum, value: "41424313f6052b7f062358ed38640b6e"""".replace("$$acceptance$$", base).replace("$$file-sep$$", FILE_SEPARATOR.toString),Some(3),Some(1)) ) } } @@ -398,7 +398,7 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "fail for different rows in the same column " in { validateE(TextFile(Paths.get(base).resolve("identicalFailMetaData.csv")), parseE(base + "/identicalSchema.csvs"), None) must beLike { case Validated.Invalid(errors) => errors.toList mustEqual List( - FailMessage(ValidationError, """identical fails for line: 3, column: FullName, value: "fff"""",Some(3),Some(1)) + FailMessage(ValidationError, """identical fails for row: 3, column: FullName, value: "fff"""",Some(3),Some(1)) ) } } @@ -420,7 +420,7 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "only report first rule fail for multiple rules on a column" in { app.validate(TextFile(Paths.get(base).resolve("rulesFailMetaData.csv")), parse(base + "/rulesSchema.csvs"), None) must beLike { - case Validated.Invalid(errors) => errors.toList mustEqual List(FailMessage(ValidationError, """regex("[A-Z][a-z]+") fails for line: 2, column: Name, value: "ben"""",Some(2),Some(0))) + case Validated.Invalid(errors) => errors.toList mustEqual List(FailMessage(ValidationError, """regex("[A-Z][a-z]+") fails for row: 2, column: Name, value: "ben"""",Some(2),Some(0))) } } @@ -432,8 +432,8 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "report warnings" in { app.validate(TextFile(Paths.get(base).resolve("warnings.csv")), parse(base + "/warnings.csvs"), None) must beLike { case Validated.Invalid(warnings) => warnings.toList mustEqual List( - FailMessage(ValidationWarning, """is("WO") fails for line: 2, column: department, value: "BT"""", Some(2), Some(0)), - FailMessage(ValidationWarning, """is("WO") fails for line: 3, column: department, value: "ED"""", Some(3), Some(0)) + FailMessage(ValidationWarning, """is("WO") fails for row: 2, column: department, value: "BT"""", Some(2), Some(0)), + FailMessage(ValidationWarning, """is("WO") fails for row: 3, column: department, value: "ED"""", Some(3), Some(0)) ) } } @@ -441,9 +441,9 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "report warnings and only first error" in { app.validate(TextFile(Paths.get(base).resolve("warningsAndErrors.csv")), parse(base + "/warnings.csvs"), None) must beLike { case Validated.Invalid(warningsAndError) => warningsAndError.toList mustEqual List( - FailMessage(ValidationWarning, """is("WO") fails for line: 2, column: department, value: "BT"""", Some(2), Some(0)), - FailMessage(ValidationWarning, """is("WO") fails for line: 3, column: department, value: "ED"""", Some(3), Some(0)), - FailMessage(ValidationError, """is("13") fails for line: 4, column: division, value: "15"""", Some(4), Some(1)) + FailMessage(ValidationWarning, """is("WO") fails for row: 2, column: department, value: "BT"""", Some(2), Some(0)), + FailMessage(ValidationWarning, """is("WO") fails for row: 3, column: department, value: "ED"""", Some(3), Some(0)), + FailMessage(ValidationError, """is("13") fails for row: 4, column: division, value: "15"""", Some(4), Some(1)) ) } } @@ -476,7 +476,7 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "fail if both the lhs or rhs are fail" in { validate(TextFile(Paths.get(base).resolve("orWithTwoRulesFailMetaData.csv")), parse(base + "/orWithTwoRulesSchema.csvs"), None) must beLike { - case Validated.Invalid(errors) => errors.toList mustEqual List(FailMessage(ValidationError, """regex("[A-Z][a-z]+") or regex("[0-9]+") fails for line: 4, column: CountryOrCountryCode, value: "Andromeda9"""",Some(4),Some(1))) + case Validated.Invalid(errors) => errors.toList mustEqual List(FailMessage(ValidationError, """regex("[A-Z][a-z]+") or regex("[0-9]+") fails for row: 4, column: CountryOrCountryCode, value: "Andromeda9"""",Some(4),Some(1))) } } @@ -486,7 +486,7 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "fail if 'or' rules pass and 'and' rule fails" in { validate(TextFile(Paths.get(base).resolve("orWithFourRulesFailMetaData.csv")), parse(base + "/orWithFourRulesSchema.csvs"), None) must beLike { - case Validated.Invalid(errors) => errors.toList mustEqual List(FailMessage(ValidationError, """regex("[A-Z].+") fails for line: 2, column: Country, value: "ngland"""",Some(2),Some(1))) + case Validated.Invalid(errors) => errors.toList mustEqual List(FailMessage(ValidationError, """regex("[A-Z].+") fails for row: 2, column: Country, value: "ngland"""",Some(2),Some(1))) } } } @@ -499,13 +499,13 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "fail if all the rules are not" in { validate(TextFile(Paths.get(base).resolve("standardRulesFailMetaData.csv")), parse(base + "/standardRulesSchema.csvs"), None) must beLike { case Validated.Invalid(errors) => errors.toList mustEqual List( - FailMessage(ValidationError, """uri fails for line: 1, column: uri, value: "http:##datagov.nationalarchives.gov.uk#66#WO#409#9999#0#aaaaaaaa-aaaa-4aaa-9eee-0123456789ab"""", Some(1), Some(0)), - FailMessage(ValidationError, """xDateTime fails for line: 1, column: xDateTime, value: "2002-999-30T09:00:10"""", Some(1), Some(1)), - FailMessage(ValidationError, """xDate fails for line: 1, column: xDate, value: "02-99-30"""", Some(1), Some(2)), - FailMessage(ValidationError, """ukDate fails for line: 1, column: ukDate, value: "99/00/0009"""", Some(1), Some(3)), - FailMessage(ValidationError, """xTime fails for line: 1, column: xTime, value: "99:00:889"""", Some(1), Some(4)), - FailMessage(ValidationError, """uuid4 fails for line: 1, column: uuid4, value: "aaaaaaaab-aaaab-4aaa-9eee-0123456789ab"""", Some(1), Some(5)), - FailMessage(ValidationError, """positiveInteger fails for line: 1, column: positiveInteger, value: "12-0912459"""", Some(1), Some(6)) + FailMessage(ValidationError, """uri fails for row: 1, column: uri, value: "http:##datagov.nationalarchives.gov.uk#66#WO#409#9999#0#aaaaaaaa-aaaa-4aaa-9eee-0123456789ab"""", Some(1), Some(0)), + FailMessage(ValidationError, """xDateTime fails for row: 1, column: xDateTime, value: "2002-999-30T09:00:10"""", Some(1), Some(1)), + FailMessage(ValidationError, """xDate fails for row: 1, column: xDate, value: "02-99-30"""", Some(1), Some(2)), + FailMessage(ValidationError, """ukDate fails for row: 1, column: ukDate, value: "99/00/0009"""", Some(1), Some(3)), + FailMessage(ValidationError, """xTime fails for row: 1, column: xTime, value: "99:00:889"""", Some(1), Some(4)), + FailMessage(ValidationError, """uuid4 fails for row: 1, column: uuid4, value: "aaaaaaaab-aaaab-4aaa-9eee-0123456789ab"""", Some(1), Some(5)), + FailMessage(ValidationError, """positiveInteger fails for row: 1, column: positiveInteger, value: "12-0912459"""", Some(1), Some(6)) ) } } @@ -522,7 +522,7 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "fail for incorrect extension removal" in { validate(TextFile(Paths.get(base).resolve("noextFail.csv")), parse(base + "/noext.csvs"), None) must beLike { - case Validated.Invalid(errors) => errors.toList mustEqual List(FailMessage(ValidationError, """is(noExt($identifier)) fails for line: 3, column: noext, value: "file:/a/b/c.txt"""",Some(3),Some(1))) + case Validated.Invalid(errors) => errors.toList mustEqual List(FailMessage(ValidationError, """is(noExt($identifier)) fails for row: 3, column: noext, value: "file:/a/b/c.txt"""",Some(3),Some(1))) } } } @@ -550,7 +550,7 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "fail for incorrect concatenation" in { validate(TextFile(Paths.get(base).resolve("concatFail.csv")), parse(base + "/concat.csvs"), None) must beLike { - case Validated.Invalid(errors) => errors.toList mustEqual List(FailMessage(ValidationError, """is(concat($c1, $c2)) fails for line: 3, column: c3, value: "ccccc"""",Some(3),Some(2))) + case Validated.Invalid(errors) => errors.toList mustEqual List(FailMessage(ValidationError, """is(concat($c1, $c2)) fails for row: 3, column: c3, value: "ccccc"""",Some(3),Some(2))) } } @@ -560,7 +560,7 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "fail for incorrect concatenation (various arguments)" in { validate(TextFile(Paths.get(base).resolve("concat4Fail.csv")), parse(base + "/concat4.csvs"), None) must beLike { - case Validated.Invalid(errors) => errors.toList mustEqual List(FailMessage(ValidationError, """is(concat($c1, $c2, "hello", $c4)) fails for line: 2, column: c5, value: "aabbccdd"""",Some(2),Some(4))) + case Validated.Invalid(errors) => errors.toList mustEqual List(FailMessage(ValidationError, """is(concat($c1, $c2, "hello", $c4)) fails for row: 2, column: c5, value: "aabbccdd"""",Some(2),Some(4))) } } } @@ -572,7 +572,7 @@ class MetaDataValidatorAcceptanceSpec extends Specification with TestResources { "fail for incorrect concatenation" in { validate(TextFile(Paths.get(base).resolve("redactedFail.csv")), parse(base + "/redacted.csvs"), None) must beLike { - case Validated.Invalid(errors) => errors.toList mustEqual List(FailMessage(ValidationError, """is(concat(noExt($original_identifier), "_R.pdf")) fails for line: 2, column: identifier, value: "file:/some/folder/TNA%20Digital%20Preservation%20Strategy%20v0.3%5BA1031178%5D_R1.pdf"""",Some(2),Some(0))) + case Validated.Invalid(errors) => errors.toList mustEqual List(FailMessage(ValidationError, """is(concat(noExt($original_identifier), "_R.pdf")) fails for row: 2, column: identifier, value: "file:/some/folder/TNA%20Digital%20Preservation%20Strategy%20v0.3%5BA1031178%5D_R1.pdf"""",Some(2),Some(0))) } } } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/MetaDataValidatorChecksumSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/MetaDataValidatorChecksumSpec.scala index e0d9df42..724dcafa 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/MetaDataValidatorChecksumSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/MetaDataValidatorChecksumSpec.scala @@ -74,7 +74,7 @@ class MetaDataValidatorChecksumSpec extends Specification with TestResources { val metaData = s"$checksumPath,wrong" validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """checksum(file("""" + checksumPath + """"), "MD5") file """" + checksumPath + """" checksum match fails for line: 1, column: MD5, value: "wrong". Computed checksum value:"232762380299115da6995e4c4ac22fa2"""",Some(1),Some(1))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """checksum(file("""" + checksumPath + """"), "MD5") file """" + checksumPath + """" checksum match fails for row: 1, column: MD5, value: "wrong". Computed checksum value:"232762380299115da6995e4c4ac22fa2"""",Some(1),Some(1))) } } } @@ -106,7 +106,7 @@ class MetaDataValidatorChecksumSpec extends Specification with TestResources { val metaData = """ABC,wrong""" validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """checksum(file("""" + schemaPath1_0 + """", "checksum.csvs"), "MD5") file """" + checksumPath + """" checksum match fails for line: 1, column: MD5, value: "wrong". Computed checksum value:"232762380299115da6995e4c4ac22fa2"""",Some(1),Some(1))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """checksum(file("""" + schemaPath1_0 + """", "checksum.csvs"), "MD5") file """" + checksumPath + """" checksum match fails for row: 1, column: MD5, value: "wrong". Computed checksum value:"232762380299115da6995e4c4ac22fa2"""",Some(1),Some(1))) } } } @@ -139,7 +139,7 @@ class MetaDataValidatorChecksumSpec extends Specification with TestResources { val metaData = """checksum.csvs,232762380299115da6995e4c4ac22fa2""" validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """checksum(file("invalid/path/to/root", $File), "MD5") incorrect basepath invalid/path/to/root/ (localfile: """ + TypedPath("invalid/path/to/root/checksum.csvs").toPlatform + """) found for line: 1, column: MD5, value: "232762380299115da6995e4c4ac22fa2"""",Some(1),Some(1))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """checksum(file("invalid/path/to/root", $File), "MD5") incorrect basepath invalid/path/to/root/ (localfile: """ + TypedPath("invalid/path/to/root/checksum.csvs").toPlatform + """) found for row: 1, column: MD5, value: "232762380299115da6995e4c4ac22fa2"""",Some(1),Some(1))) } } @@ -171,7 +171,7 @@ class MetaDataValidatorChecksumSpec extends Specification with TestResources { val metaData = s"$checksumPath,rubbish" validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """checksum(file($File), "MD5") file """" + checksumPath + """" checksum match fails for line: 1, column: MD5, value: "rubbish". Computed checksum value:"232762380299115da6995e4c4ac22fa2"""",Some(1),Some(1))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """checksum(file($File), "MD5") file """" + checksumPath + """" checksum match fails for row: 1, column: MD5, value: "rubbish". Computed checksum value:"232762380299115da6995e4c4ac22fa2"""",Some(1),Some(1))) } } } @@ -188,7 +188,7 @@ class MetaDataValidatorChecksumSpec extends Specification with TestResources { val metaData = """checksum.csvs,rubbish""" validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """checksum(file("""" + schemaPath1_0 + """", $File), "MD5") file """" + checksumPath + """" checksum match fails for line: 1, column: MD5, value: "rubbish". Computed checksum value:"232762380299115da6995e4c4ac22fa2"""",Some(1),Some(1))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """checksum(file("""" + schemaPath1_0 + """", $File), "MD5") file """" + checksumPath + """" checksum match fails for row: 1, column: MD5, value: "rubbish". Computed checksum value:"232762380299115da6995e4c4ac22fa2"""",Some(1),Some(1))) } } } @@ -223,7 +223,7 @@ class MetaDataValidatorChecksumSpec extends Specification with TestResources { val metaData = """invalid/path/to/root,checksum.csvs,232762380299115da6995e4c4ac22fa2""" validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """checksum(file($Root, $File), "MD5") incorrect basepath invalid/path/to/root/ (localfile: """ + TypedPath("invalid/path/to/root/checksum.csvs").toPlatform + """) found for line: 1, column: MD5, value: "232762380299115da6995e4c4ac22fa2"""", Some(1), Some(2))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """checksum(file($Root, $File), "MD5") incorrect basepath invalid/path/to/root/ (localfile: """ + TypedPath("invalid/path/to/root/checksum.csvs").toPlatform + """) found for row: 1, column: MD5, value: "232762380299115da6995e4c4ac22fa2"""", Some(1), Some(2))) } } } @@ -276,7 +276,7 @@ class MetaDataValidatorChecksumSpec extends Specification with TestResources { validate(metaData, schema, maxCharsPerCell, None) must beLike { case Validated.Invalid(messages) => - val msg = """checksum(file($Root, $File), "MD5") root """ + searchPath + FILE_SEPARATOR + """ (localfile: """ + searchPath + FILE_SEPARATOR + """checksum.*) should not contain wildcards for line: 1, column: MD5, value: "232762380299115da6995e4c4ac22fa2"""" + val msg = """checksum(file($Root, $File), "MD5") root """ + searchPath + FILE_SEPARATOR + """ (localfile: """ + searchPath + FILE_SEPARATOR + """checksum.*) should not contain wildcards for row: 1, column: MD5, value: "232762380299115da6995e4c4ac22fa2"""" messages.toList mustEqual List(FailMessage(ValidationError, msg, Some(1), Some(2))) } } @@ -294,7 +294,7 @@ class MetaDataValidatorChecksumSpec extends Specification with TestResources { val metaData = """**/*.jp2,"232762380299115da6995e4c4ac22fa2"""" validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """checksum(file("""" + threeFilesPath + """", $File), "MD5") multiple files for """ + threeFilesPath + s"""${FILE_SEPARATOR}**${FILE_SEPARATOR}*.jp2 found for line: 1, column: MD5, value: "232762380299115da6995e4c4ac22fa2"""",Some(1),Some(1))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """checksum(file("""" + threeFilesPath + """", $File), "MD5") multiple files for """ + threeFilesPath + s"""${FILE_SEPARATOR}**${FILE_SEPARATOR}*.jp2 found for row: 1, column: MD5, value: "232762380299115da6995e4c4ac22fa2"""",Some(1),Some(1))) } } @@ -310,7 +310,7 @@ class MetaDataValidatorChecksumSpec extends Specification with TestResources { val metaData = """**/*.jp2,"232762380299115da6995e4c4ac22fa2"""" validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """checksum(file("src/test/resources/this/is/incorrect", $File), "MD5") incorrect basepath src/test/resources/this/is/incorrect/ (localfile: """ + TypedPath("src/test/resources/this/is/incorrect/**/*.jp2").toPlatform + """) found for line: 1, column: MD5, value: "232762380299115da6995e4c4ac22fa2"""",Some(1),Some(1))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """checksum(file("src/test/resources/this/is/incorrect", $File), "MD5") incorrect basepath src/test/resources/this/is/incorrect/ (localfile: """ + TypedPath("src/test/resources/this/is/incorrect/**/*.jp2").toPlatform + """) found for row: 1, column: MD5, value: "232762380299115da6995e4c4ac22fa2"""",Some(1),Some(1))) } } } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/MetaDataValidatorFileCountSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/MetaDataValidatorFileCountSpec.scala index f01bc773..6e1aed5c 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/MetaDataValidatorFileCountSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/MetaDataValidatorFileCountSpec.scala @@ -113,7 +113,7 @@ class MetaDataValidatorFileCountSpec extends Specification with TestResources { val metaData = s"$checksumPath,1" validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """fileCount(file("""" + wrongPath + """")) file """" + wrongPath + """" not found for line: 1, column: Count, value: "1"""",Some(1),Some(1))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """fileCount(file("""" + wrongPath + """")) file """" + wrongPath + """" not found for row: 1, column: Count, value: "1"""",Some(1),Some(1))) } } @@ -129,7 +129,7 @@ class MetaDataValidatorFileCountSpec extends Specification with TestResources { val metaData = s"$checksumPath,2" validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """fileCount(file("""" + checksumPath + """")) found 1 file(s) for line: 1, column: Count, value: "2"""",Some(1),Some(1))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """fileCount(file("""" + checksumPath + """")) found 1 file(s) for row: 1, column: Count, value: "2"""",Some(1),Some(1))) } } } @@ -162,7 +162,7 @@ class MetaDataValidatorFileCountSpec extends Specification with TestResources { val metaData = """ABC,99""" validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """fileCount(file("""" + schemaPath1_0 + """", "checksum.csvs")) found 1 file(s) for line: 1, column: Count, value: "99"""",Some(1),Some(1))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """fileCount(file("""" + schemaPath1_0 + """", "checksum.csvs")) found 1 file(s) for row: 1, column: Count, value: "99"""",Some(1),Some(1))) } } } @@ -195,7 +195,7 @@ class MetaDataValidatorFileCountSpec extends Specification with TestResources { val metaData = """checksum.csvs,99""" validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """fileCount(file("invalid/path/to/root", $File)) incorrect basepath invalid/path/to/root/ (localfile: """ + TypedPath("invalid/path/to/root/checksum.csvs").toPlatform + """) found for line: 1, column: Count, value: "99"""",Some(1),Some(1))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """fileCount(file("invalid/path/to/root", $File)) incorrect basepath invalid/path/to/root/ (localfile: """ + TypedPath("invalid/path/to/root/checksum.csvs").toPlatform + """) found for row: 1, column: Count, value: "99"""",Some(1),Some(1))) } } } @@ -229,7 +229,7 @@ class MetaDataValidatorFileCountSpec extends Specification with TestResources { val metaData = s"$checksumPath,rubbish" validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """fileCount(file($File)) 'rubbish' is not a number for line: 1, column: Count, value: "rubbish"""",Some(1),Some(1))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """fileCount(file($File)) 'rubbish' is not a number for row: 1, column: Count, value: "rubbish"""",Some(1),Some(1))) } } } @@ -265,7 +265,7 @@ class MetaDataValidatorFileCountSpec extends Specification with TestResources { val metaData = """invalid/path/to/root,checksum.csvs,99""" validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """fileCount(file($Root, $File)) incorrect basepath invalid/path/to/root/ (localfile: """ + TypedPath("invalid/path/to/root/checksum.csvs").toPlatform + """) found for line: 1, column: Count, value: "99"""",Some(1),Some(2))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """fileCount(file($Root, $File)) incorrect basepath invalid/path/to/root/ (localfile: """ + TypedPath("invalid/path/to/root/checksum.csvs").toPlatform + """) found for row: 1, column: Count, value: "99"""",Some(1),Some(2))) } } } @@ -334,7 +334,7 @@ class MetaDataValidatorFileCountSpec extends Specification with TestResources { validate(metaData, schema, maxCharsPerCell, None) must beLike { case Validated.Invalid(messages) => - messages.toList mustEqual List(FailMessage(ValidationError, """fileCount(file($Root, $File)) root """ + searchPath + """/ (localfile: """ + searchPath + FILE_SEPARATOR + """checksum.*) should not contain wildcards for line: 1, column: Count, value: "1"""",Some(1),Some(2))) + messages.toList mustEqual List(FailMessage(ValidationError, """fileCount(file($Root, $File)) root """ + searchPath + """/ (localfile: """ + searchPath + FILE_SEPARATOR + """checksum.*) should not contain wildcards for row: 1, column: Count, value: "1"""",Some(1),Some(2))) } } @@ -364,7 +364,7 @@ class MetaDataValidatorFileCountSpec extends Specification with TestResources { val metaData = """**/*.jp2,2""" validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """fileCount(file("src/test/resources/this/is/incorrect", $File)) incorrect basepath src/test/resources/this/is/incorrect/ (localfile: """ + TypedPath("src/test/resources/this/is/incorrect/**/*.jp2").toPlatform + """) found for line: 1, column: Count, value: "2"""",Some(1),Some(1))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """fileCount(file("src/test/resources/this/is/incorrect", $File)) incorrect basepath src/test/resources/this/is/incorrect/ (localfile: """ + TypedPath("src/test/resources/this/is/incorrect/**/*.jp2").toPlatform + """) found for row: 1, column: Count, value: "2"""",Some(1),Some(1))) } } } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/MetaDataValidatorSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/MetaDataValidatorSpec.scala index 427024a4..a4e469df 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/MetaDataValidatorSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/MetaDataValidatorSpec.scala @@ -102,9 +102,9 @@ class MetaDataValidatorSpec extends Specification with TestResources { validate(metaData, schema, maxCharsPerCell, None) must beLike { case Validated.Invalid(messages) => messages.toList mustEqual List ( - FailMessage(ValidationError, """regex("[a-c]*") fails for line: 1, column: second, value: "xxxy"""",Some(1),Some(1)), - FailMessage(ValidationError, """regex("[3-8]*") fails for line: 2, column: first, value: "abcd"""",Some(2),Some(0)), - FailMessage(ValidationError, """regex("[a-c]*") fails for line: 2, column: second, value: "uii"""",Some(2),Some(1))) + FailMessage(ValidationError, """regex("[a-c]*") fails for row: 1, column: second, value: "xxxy"""",Some(1),Some(1)), + FailMessage(ValidationError, """regex("[3-8]*") fails for row: 2, column: first, value: "abcd"""",Some(2),Some(0)), + FailMessage(ValidationError, """regex("[a-c]*") fails for row: 2, column: second, value: "uii"""",Some(2),Some(1))) } } @@ -137,7 +137,7 @@ class MetaDataValidatorSpec extends Specification with TestResources { val maxCharsPerCell = 4096 validate(metaData, schema, maxCharsPerCell, None) should beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """regex("C11") fails for line: 1, column: Col1, value: "c11"""",Some(1),Some(0))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """regex("C11") fails for row: 1, column: Col1, value: "c11"""",Some(1),Some(0))) } } @@ -181,7 +181,7 @@ class MetaDataValidatorSpec extends Specification with TestResources { val maxCharsPerCell = 4096 validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """regex("^T.+") fails for line: 1, column: c1, value: "Scooby"""",Some(1),Some(0)), FailMessage(ValidationError, """regex("^X.+") fails for line: 1, column: c1, value: "Scooby"""",Some(1),Some(0))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """regex("^T.+") fails for row: 1, column: c1, value: "Scooby"""",Some(1),Some(0)), FailMessage(ValidationError, """regex("^X.+") fails for row: 1, column: c1, value: "Scooby"""",Some(1),Some(0))) } } @@ -232,7 +232,7 @@ class MetaDataValidatorSpec extends Specification with TestResources { val maxCharsPerCell = 4096 validate(metaData, schema, maxCharsPerCell, None) should beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """in($col1) fails for line: 1, column: col2WithRule, value: "mustBeIn"""",Some(1),Some(1))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """in($col1) fails for row: 1, column: col2WithRule, value: "mustBeIn"""",Some(1),Some(1))) } } @@ -280,7 +280,7 @@ class MetaDataValidatorSpec extends Specification with TestResources { val maxCharsPerCell = 4096 validate(metaData, schema, maxCharsPerCell, None) should beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """regex("[0-9]") fails for line: 1, column: Col2, value: "a"""",Some(1),Some(1))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """regex("[0-9]") fails for row: 1, column: Col2, value: "a"""",Some(1),Some(1))) } } @@ -302,9 +302,9 @@ class MetaDataValidatorSpec extends Specification with TestResources { validate(metaData, schema, maxCharsPerCell, None) should beLike { case Validated.Invalid(messages) => messages.toList mustEqual List( - FailMessage(ValidationError, """regex("[0-9]") fails for line: 1, column: Col3, value: """"",Some(1),Some(2)), - FailMessage(ValidationError, """regex("[0-9]") fails for line: 2, column: Col2, value: "a"""",Some(2),Some(1)), - FailMessage(ValidationError, """regex("[0-9]") fails for line: 2, column: Col3, value: """"",Some(2),Some(2))) + FailMessage(ValidationError, """regex("[0-9]") fails for row: 1, column: Col3, value: """"",Some(1),Some(2)), + FailMessage(ValidationError, """regex("[0-9]") fails for row: 2, column: Col2, value: "a"""",Some(2),Some(1)), + FailMessage(ValidationError, """regex("[0-9]") fails for row: 2, column: Col3, value: """"",Some(2),Some(2))) } } @@ -345,7 +345,7 @@ class MetaDataValidatorSpec extends Specification with TestResources { val maxCharsPerCell = 4096 validate(metaData, schema, maxCharsPerCell, None) should beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """regex("[a-z]+") fails for line: 1, column: Col1, value: "SCOOBY"""",Some(1),Some(0))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """regex("[a-z]+") fails for row: 1, column: Col1, value: "SCOOBY"""",Some(1),Some(0))) } } @@ -390,7 +390,7 @@ class MetaDataValidatorSpec extends Specification with TestResources { val maxCharsPerCell = 4096 validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, "fileExists fails for line: 1, column: FirstColumn, value: \"some/non/existent/file\"",Some(1),Some(0))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, "fileExists fails for row: 1, column: FirstColumn, value: \"some/non/existent/file\"",Some(1),Some(0))) } } @@ -409,7 +409,7 @@ class MetaDataValidatorSpec extends Specification with TestResources { val maxCharsPerCell = 4096 validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """in("dog") fails for line: 1, column: col2WithRule, value: "thisisrubbish"""",Some(1),Some(1))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """in("dog") fails for row: 1, column: col2WithRule, value: "thisisrubbish"""",Some(1),Some(1))) } } @@ -516,7 +516,7 @@ class MetaDataValidatorSpec extends Specification with TestResources { val maxCharsPerCell = 4096 validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """in("This") or in("That") fails for line: 1, column: ThisOrThat, value: "SomethingElse"""",Some(1),Some(0))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """in("This") or in("That") fails for row: 1, column: ThisOrThat, value: "SomethingElse"""",Some(1),Some(0))) } } @@ -587,7 +587,7 @@ class MetaDataValidatorSpec extends Specification with TestResources { val maxCharsPerCell = 4096 validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """is("France") fails for line: 1, column: Country, value: "UK"""",Some(1),Some(0))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """is("France") fails for row: 1, column: Country, value: "UK"""",Some(1),Some(0))) } } @@ -603,7 +603,7 @@ class MetaDataValidatorSpec extends Specification with TestResources { val maxCharsPerCell = 4096 validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """is($MyCountry) fails for line: 1, column: Country, value: "United"""",Some(1),Some(0))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """is($MyCountry) fails for row: 1, column: Country, value: "United"""",Some(1),Some(0))) } } @@ -658,7 +658,7 @@ class MetaDataValidatorSpec extends Specification with TestResources { val maxCharsPerCell = 4096 validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """not("United Kingdom") fails for line: 1, column: Country, value: "United Kingdom"""",Some(1),Some(0))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """not("United Kingdom") fails for row: 1, column: Country, value: "United Kingdom"""",Some(1),Some(0))) } } @@ -674,7 +674,7 @@ class MetaDataValidatorSpec extends Specification with TestResources { val maxCharsPerCell = 4096 validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """not($MyCountry) fails for line: 1, column: Country, value: "United Kingdom"""",Some(1),Some(0))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """not($MyCountry) fails for row: 1, column: Country, value: "United Kingdom"""",Some(1),Some(0))) } } @@ -729,7 +729,7 @@ class MetaDataValidatorSpec extends Specification with TestResources { val maxCharsPerCell = 4096 validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """starts("united") fails for line: 1, column: Country, value: "United Kingdom"""",Some(1),Some(0))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """starts("united") fails for row: 1, column: Country, value: "United Kingdom"""",Some(1),Some(0))) } } @@ -745,7 +745,7 @@ class MetaDataValidatorSpec extends Specification with TestResources { val maxCharsPerCell = 4096 validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """starts($MyCountry) fails for line: 1, column: Country, value: "United"""",Some(1),Some(0))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """starts($MyCountry) fails for row: 1, column: Country, value: "United"""",Some(1),Some(0))) } } @@ -799,7 +799,7 @@ class MetaDataValidatorSpec extends Specification with TestResources { val maxCharsPerCell = 4096 validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """ends("kingdom") fails for line: 1, column: Country, value: "United Kingdom"""",Some(1),Some(0))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """ends("kingdom") fails for row: 1, column: Country, value: "United Kingdom"""",Some(1),Some(0))) } } @@ -815,7 +815,7 @@ class MetaDataValidatorSpec extends Specification with TestResources { val maxCharsPerCell = 4096 validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """ends($MyCountry) fails for line: 1, column: Country, value: "United Kingdom"""",Some(1),Some(0))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """ends($MyCountry) fails for row: 1, column: Country, value: "United Kingdom"""",Some(1),Some(0))) } } @@ -855,7 +855,7 @@ class MetaDataValidatorSpec extends Specification with TestResources { val maxCharsPerCell = 4096 validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, "unique fails for line: 4, column: Name, value: \"Jim\" (original at line: 2)",Some(4),Some(0)),FailMessage(ValidationError, "unique fails for line: 5, column: Name, value: \"Jim\" (original at line: 2)",Some(5),Some(0))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, "unique fails for row: 4, column: Name, value: \"Jim\" (original at row: 2)",Some(4),Some(0)),FailMessage(ValidationError, "unique fails for row: 5, column: Name, value: \"Jim\" (original at row: 2)",Some(5),Some(0))) } } @@ -1067,7 +1067,7 @@ class MetaDataValidatorSpec extends Specification with TestResources { val maxCharsPerCell = 4096 validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, "range(18,65) fails for line: 1, column: Age, value: \"10\"",Some(1),Some(1)),FailMessage(ValidationError, "range(18,65) fails for line: 3, column: Age, value: \"96\"",Some(3),Some(1))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, "range(18,65) fails for row: 1, column: Age, value: \"10\"",Some(1),Some(1)),FailMessage(ValidationError, "range(18,65) fails for row: 3, column: Age, value: \"96\"",Some(3),Some(1))) } } @@ -1086,7 +1086,7 @@ class MetaDataValidatorSpec extends Specification with TestResources { val maxCharsPerCell = 4096 validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, "length(*,3) fails for line: 3, column: Name, value: \"Benny\"",Some(3),Some(0)),FailMessage(ValidationError, "length(*,3) fails for line: 5, column: Name, value: \"Timmy\"",Some(5),Some(0))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, "length(*,3) fails for row: 3, column: Name, value: \"Benny\"",Some(3),Some(0)),FailMessage(ValidationError, "length(*,3) fails for row: 5, column: Name, value: \"Timmy\"",Some(5),Some(0))) } } @@ -1117,7 +1117,7 @@ class MetaDataValidatorSpec extends Specification with TestResources { val maxCharsPerCell = 4096 validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """(length(5) and length(*,*)) and is("Hello") fails for line: 2, column: Name, value: "World"""",Some(2),Some(0))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """(length(5) and length(*,*)) and is("Hello") fails for row: 2, column: Name, value: "World"""",Some(2),Some(0))) } } @@ -1207,7 +1207,7 @@ class MetaDataValidatorSpec extends Specification with TestResources { val maxCharsPerCell = 4096 validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """ends("Joe") fails for line: 1, column: col1, value: "Joe Bloggs"""",Some(1),Some(0))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """ends("Joe") fails for row: 1, column: col1, value: "Joe Bloggs"""",Some(1),Some(0))) } } @@ -1233,7 +1233,7 @@ class MetaDataValidatorSpec extends Specification with TestResources { val maxCharsPerCell = 4096 validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """ends("Joe") fails for line: 1, column: col1, value: "Joe Bloggs"""",Some(1),Some(0))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """ends("Joe") fails for row: 1, column: col1, value: "Joe Bloggs"""",Some(1),Some(0))) } } @@ -1271,7 +1271,7 @@ class MetaDataValidatorSpec extends Specification with TestResources { val maxCharsPerCell = 4096 validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """length(4) fails for line: 1, column: col1, value: "Joe Bloggs"""",Some(1),Some(0))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """length(4) fails for row: 1, column: col1, value: "Joe Bloggs"""",Some(1),Some(0))) } } @@ -1322,7 +1322,7 @@ class MetaDataValidatorSpec extends Specification with TestResources { val maxCharsPerCell = 4096 validate(metaData, schema, maxCharsPerCell, None) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """(is("True") or is("True")) and is("False") fails for line: 1, column: col1, value: "True"""",Some(1),Some(0))) + case Validated.Invalid(messages) => messages.toList mustEqual List(FailMessage(ValidationError, """(is("True") or is("True")) and is("False") fails for row: 1, column: col1, value: "True"""",Some(1),Some(0))) } } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/api/CsvValidatorMaxCharsPerCellSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/api/CsvValidatorMaxCharsPerCellSpec.scala index 025e9208..94f06d14 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/api/CsvValidatorMaxCharsPerCellSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/api/CsvValidatorMaxCharsPerCellSpec.scala @@ -37,7 +37,7 @@ class CsvValidatorMaxCharsPerCellSpec extends Specification with TestResources { val maxCharsAllowed = 15 val validatedNel = app(maxCharsAllowed).validate(TextFile(Paths.get(baseResourcePkgPath).resolve("metaDataWithALongCellLength.csv")), parse(baseResourcePkgPath + "/schema.csvs"), None).swap validatedNel.toList.head.toList must beEqualTo( - List(FailMessage(ValidationError,"java.lang.Exception: The number of characters in the cell located at line: 1, column: col2, is larger than the maximum number of characters allowed in a cell (15); increase this limit and re-run.",None,None)) + List(FailMessage(ValidationError,"java.lang.Exception: The number of characters in the cell located at row: 1, column: col2, is larger than the maximum number of characters allowed in a cell (15); increase this limit and re-run.",None,None)) ) } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/DateRulesSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/DateRulesSpec.scala index 8f09a109..a0a23ee3 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/DateRulesSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/DateRulesSpec.scala @@ -44,14 +44,14 @@ class DateRulesSpec extends Specification { "fail if cell has an invalid xsdDateTime format" in { val xsdDateRule = XsdDateTimeRule() xsdDateRule.evaluate(0, Row(List(Cell("2002-999-30T09:00:10")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """xDateTime fails for line: 1, column: column1, value: "2002-999-30T09:00:10"""" + case Validated.Invalid(messages) => messages.head mustEqual """xDateTime fails for row: 1, column: column1, value: "2002-999-30T09:00:10"""" } } "fail if cell has a valid xsdDateTime format but invalid date" in { val xsdDateRule = XsdDateTimeRule() xsdDateRule.evaluate(0, Row(List(Cell("2002-99-30T09:00:10")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """xDateTime fails for line: 1, column: column1, value: "2002-99-30T09:00:10"""" + case Validated.Invalid(messages) => messages.head mustEqual """xDateTime fails for row: 1, column: column1, value: "2002-99-30T09:00:10"""" } } @@ -82,7 +82,7 @@ class DateRulesSpec extends Specification { "fail if cell is just below lower bound" in { val xsdDateRangeRule = XsdDateTimeRangeRule("2012-01-01T00:00:01", "2013-01-01T00:00:00") xsdDateRangeRule.evaluate(0, Row(List(Cell("2012-01-01T00:00:00")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """xDateTime("2012-01-01T00:00:01, 2013-01-01T00:00:00") fails for line: 1, column: column1, value: "2012-01-01T00:00:00"""" + case Validated.Invalid(messages) => messages.head mustEqual """xDateTime("2012-01-01T00:00:01, 2013-01-01T00:00:00") fails for row: 1, column: column1, value: "2012-01-01T00:00:00"""" } } } @@ -100,14 +100,14 @@ class DateRulesSpec extends Specification { "fail if cell has an invalid xsdDateTimeWithTimeZone format" in { val xsdDateRule = XsdDateTimeWithTimeZoneRule() xsdDateRule.evaluate(0, Row(List(Cell("2002-999-30T09:00:10Z")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """xDateTimeWithTimeZone fails for line: 1, column: column1, value: "2002-999-30T09:00:10Z"""" + case Validated.Invalid(messages) => messages.head mustEqual """xDateTimeWithTimeZone fails for row: 1, column: column1, value: "2002-999-30T09:00:10Z"""" } } "fail if cell has an xsdDateTimeWithTimeZone missing time zone" in { val xsdDateRule = XsdDateTimeWithTimeZoneRule() xsdDateRule.evaluate(0, Row(List(Cell("2002-01-30T09:00:10")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """xDateTimeWithTimeZone fails for line: 1, column: column1, value: "2002-01-30T09:00:10"""" + case Validated.Invalid(messages) => messages.head mustEqual """xDateTimeWithTimeZone fails for row: 1, column: column1, value: "2002-01-30T09:00:10"""" } } @@ -145,7 +145,7 @@ class DateRulesSpec extends Specification { "fail if cell is just below lower bound" in { val xsdDateRangeRule = XsdDateTimeWithTimeZoneRangeRule("2012-01-01T00:00:01Z", "2013-01-01T00:00:00Z") xsdDateRangeRule.evaluate(0, Row(List(Cell("2012-01-01T00:00:00Z")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """xDateTimeWithTimeZone("2012-01-01T00:00:01Z, 2013-01-01T00:00:00Z") fails for line: 1, column: column1, value: "2012-01-01T00:00:00Z"""" + case Validated.Invalid(messages) => messages.head mustEqual """xDateTimeWithTimeZone("2012-01-01T00:00:01Z, 2013-01-01T00:00:00Z") fails for row: 1, column: column1, value: "2012-01-01T00:00:00Z"""" } } } @@ -165,14 +165,14 @@ class DateRulesSpec extends Specification { "fail if cell has an invalid xsdDate format" in { val xsdDateRule = XsdDateRule() xsdDateRule.evaluate(0, Row(List(Cell("2002-999-30")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """xDate fails for line: 1, column: column1, value: "2002-999-30"""" + case Validated.Invalid(messages) => messages.head mustEqual """xDate fails for row: 1, column: column1, value: "2002-999-30"""" } } "fail if cell has a valid xsdDate format but invalid date" in { val xsdDateRule = XsdDateRule() xsdDateRule.evaluate(0, Row(List(Cell("2002-99-30")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """xDate fails for line: 1, column: column1, value: "2002-99-30"""" + case Validated.Invalid(messages) => messages.head mustEqual """xDate fails for row: 1, column: column1, value: "2002-99-30"""" } } } @@ -202,7 +202,7 @@ class DateRulesSpec extends Specification { "fail if cell is just below lower bound" in { val xsdDateRangeRule = XsdDateRangeRule("2012-01-01", "2013-01-01") xsdDateRangeRule.evaluate(0, Row(List(Cell("2011-12-31")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """xDate("2012-01-01, 2013-01-01") fails for line: 1, column: column1, value: "2011-12-31"""" + case Validated.Invalid(messages) => messages.head mustEqual """xDate("2012-01-01, 2013-01-01") fails for row: 1, column: column1, value: "2011-12-31"""" } } } @@ -256,35 +256,35 @@ class DateRulesSpec extends Specification { "fail if cell has a valid UK Date with wrong ? count for month" in { val partUkDateRule = PartUkDateRule() partUkDateRule.evaluate(0, Row(List(Cell("?2/???/201?")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """partUkDate fails for line: 1, column: column1, value: "?2/???/201?"""" + case Validated.Invalid(messages) => messages.head mustEqual """partUkDate fails for row: 1, column: column1, value: "?2/???/201?"""" } } "fail if cell has a valid UK Date with wrong number of year symbols" in { val partUkDateRule = PartUkDateRule() partUkDateRule.evaluate(0, Row(List(Cell("04/Feburary/81")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """partUkDate fails for line: 1, column: column1, value: "04/Feburary/81"""" + case Validated.Invalid(messages) => messages.head mustEqual """partUkDate fails for row: 1, column: column1, value: "04/Feburary/81"""" } } "fail if cell has a valid UK Date with typo in month" in { val partUkDateRule = PartUkDateRule() partUkDateRule.evaluate(0, Row(List(Cell("09/Augudt/2010")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """partUkDate fails for line: 1, column: column1, value: "09/Augudt/2010"""" + case Validated.Invalid(messages) => messages.head mustEqual """partUkDate fails for row: 1, column: column1, value: "09/Augudt/2010"""" } } "fail if cell has a valid UK Date with - instead of /" in { val partUkDateRule = PartUkDateRule() partUkDateRule.evaluate(0, Row(List(Cell("09-August-2010")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """partUkDate fails for line: 1, column: column1, value: "09-August-2010"""" + case Validated.Invalid(messages) => messages.head mustEqual """partUkDate fails for row: 1, column: column1, value: "09-August-2010"""" } } "fail if cell has a valid UK Date with where zero padding is missing" in { val partUkDateRule = PartUkDateRule() partUkDateRule.evaluate(0, Row(List(Cell("9/August/2010")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """partUkDate fails for line: 1, column: column1, value: "9/August/2010"""" + case Validated.Invalid(messages) => messages.head mustEqual """partUkDate fails for row: 1, column: column1, value: "9/August/2010"""" } } } @@ -299,14 +299,14 @@ class DateRulesSpec extends Specification { "fail if cell has an invalid UK Date format" in { val ukDateRule = UkDateRule() ukDateRule.evaluate(0, Row(List(Cell("990/00/0009")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """ukDate fails for line: 1, column: column1, value: "990/00/0009"""" + case Validated.Invalid(messages) => messages.head mustEqual """ukDate fails for row: 1, column: column1, value: "990/00/0009"""" } } "fail if cell has a valid UK Date format but invalid date" in { val ukDateRule = UkDateRule() ukDateRule.evaluate(0, Row(List(Cell("99/12/2012")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """ukDate fails for line: 1, column: column1, value: "99/12/2012"""" + case Validated.Invalid(messages) => messages.head mustEqual """ukDate fails for row: 1, column: column1, value: "99/12/2012"""" } } @@ -337,7 +337,7 @@ class DateRulesSpec extends Specification { "fail if cell is just below lower bound" in { val ukDateRangeRule = UkDateRangeRule("01/01/2012", "02/01/2013") ukDateRangeRule.evaluate(0, Row(List(Cell("12/31/2011")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """ukDate("01/01/2012, 02/01/2013") fails for line: 1, column: column1, value: "12/31/2011"""" + case Validated.Invalid(messages) => messages.head mustEqual """ukDate("01/01/2012, 02/01/2013") fails for row: 1, column: column1, value: "12/31/2011"""" } } } @@ -357,7 +357,7 @@ class DateRulesSpec extends Specification { "fail if cell has an invalid xsdTime" in { val xsdTimeRule = XsdTimeRule() xsdTimeRule.evaluate(0, Row(List(Cell("99:000:88")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """xTime fails for line: 1, column: column1, value: "99:000:88"""" + case Validated.Invalid(messages) => messages.head mustEqual """xTime fails for row: 1, column: column1, value: "99:000:88"""" } } } @@ -387,7 +387,7 @@ class DateRulesSpec extends Specification { "fail if cell is just below lower bound" in { val xsdTimeRangeRule = XsdTimeRangeRule("01:10:01", "01:10:10") xsdTimeRangeRule.evaluate(0, Row(List(Cell("01:10:00")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """xTime("01:10:01, 01:10:10") fails for line: 1, column: column1, value: "01:10:00"""" + case Validated.Invalid(messages) => messages.head mustEqual """xTime("01:10:01, 01:10:10") fails for row: 1, column: column1, value: "01:10:00"""" } } } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/AndRuleSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/AndRuleSpec.scala index e2098a95..3df1c471 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/AndRuleSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/AndRuleSpec.scala @@ -30,7 +30,7 @@ class AndRuleSpec extends Specification { val andRule = AndRule(leftInRule, rightInRule) andRule.evaluate(0, Row(List(Cell("Germany")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("""in("Germany") and in("France") fails for line: 1, column: Country, value: "Germany"""") + case Validated.Invalid(messages) => messages.toList mustEqual List("""in("Germany") and in("France") fails for row: 1, column: Country, value: "Germany"""") } } @@ -44,7 +44,7 @@ class AndRuleSpec extends Specification { val andRule = AndRule(leftInRule, rightInRule) andRule.evaluate(0, Row(List(Cell("France")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("""in("Germany") and in("France") fails for line: 1, column: Country, value: "France"""") + case Validated.Invalid(messages) => messages.toList mustEqual List("""in("Germany") and in("France") fails for row: 1, column: Country, value: "France"""") } } @@ -58,7 +58,7 @@ class AndRuleSpec extends Specification { val andRule = AndRule(leftInRule, rightInRule) andRule.evaluate(0, Row(List(Cell("SomethingElse")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("""in("This") and in("That") fails for line: 1, column: ThisOrThat, value: "SomethingElse"""") + case Validated.Invalid(messages) => messages.toList mustEqual List("""in("This") and in("That") fails for row: 1, column: ThisOrThat, value: "SomethingElse"""") } } @@ -102,7 +102,7 @@ class AndRuleSpec extends Specification { val andRule = AndRule(leftInRule, rightInRule) andRule.evaluate(0, Row(List(Cell("SomethingElse")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("""is("UK") and (is("UK") is("UK1")) fails for line: 1, column: Country, value: "SomethingElse"""") + case Validated.Invalid(messages) => messages.toList mustEqual List("""is("UK") and (is("UK") is("UK1")) fails for row: 1, column: Country, value: "SomethingElse"""") } } } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/ChecksumRuleSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/ChecksumRuleSpec.scala index a2cc7baa..be516011 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/ChecksumRuleSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/ChecksumRuleSpec.scala @@ -31,7 +31,7 @@ class ChecksumRuleSpec extends Specification with TestResources { val checksumRule = new ChecksumRule(Literal(Some(checksumPath)), "MD5", false, false) checksumRule.evaluate(0, Row(List(Cell("699d61aff25f16a5560372e610da91ab")), 1), Schema(List(TotalColumns(1), NoHeader()), List(ColumnDefinition(NamedColumnIdentifier("column1"))))) must beLike { - case Validated.Invalid(m) => m.toList mustEqual List("""checksum(file("""" + checksumPath + """"), "MD5") file """" + checksumPath + """" checksum match fails for line: 1, column: column1, value: "699d61aff25f16a5560372e610da91ab". Computed checksum value:"232762380299115da6995e4c4ac22fa2"""") + case Validated.Invalid(m) => m.toList mustEqual List("""checksum(file("""" + checksumPath + """"), "MD5") file """" + checksumPath + """" checksum match fails for row: 1, column: column1, value: "699d61aff25f16a5560372e610da91ab". Computed checksum value:"232762380299115da6995e4c4ac22fa2"""") } } @@ -39,7 +39,7 @@ class ChecksumRuleSpec extends Specification with TestResources { val checksumRule = new ChecksumRule(Literal(Some(checksumPath)), "MD5", false, true) checksumRule.evaluate(0, Row(List(Cell("699d61aff25f16a5560372e610da91ab")), 1), Schema(List(TotalColumns(1), NoHeader()), List(ColumnDefinition(NamedColumnIdentifier("column1"))))) must beLike { - case Validated.Invalid(m) => m.toList mustEqual List("""checksum(file("""" + checksumPath + """"), "MD5") file """" + checksumPath + """" checksum match fails for line: 1, column: column1, value: "699d61aff25f16a5560372e610da91ab". Computed checksum value:"232762380299115da6995e4c4ac22fa2"""") + case Validated.Invalid(m) => m.toList mustEqual List("""checksum(file("""" + checksumPath + """"), "MD5") file """" + checksumPath + """" checksum match fails for row: 1, column: column1, value: "699d61aff25f16a5560372e610da91ab". Computed checksum value:"232762380299115da6995e4c4ac22fa2"""") } } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/EmptyRuleSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/EmptyRuleSpec.scala index ba09a140..b6dbb61c 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/EmptyRuleSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/EmptyRuleSpec.scala @@ -31,7 +31,7 @@ class EmptyRuleSpec extends Specification { "Fail if cell is NOT empty" in { val emptyRule = EmptyRule() emptyRule.evaluate(0, Row(List(Cell("something")), 1), Schema(globalDirsOne, List(ColumnDefinition(NamedColumnIdentifier("column1"))))) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """empty fails for line: 1, column: column1, value: "something"""" + case Validated.Invalid(messages) => messages.head mustEqual """empty fails for row: 1, column: column1, value: "something"""" } } } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/EndsRuleSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/EndsRuleSpec.scala index 33f016a6..7907859e 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/EndsRuleSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/EndsRuleSpec.scala @@ -30,7 +30,7 @@ class EndsRuleSpec extends Specification { "fail if cell does not end with endsRule value" in { val endsRule = EndsRule(Literal(Some("hello world"))) endsRule.evaluate(0, Row(List(Cell("hello")), 1), Schema(globalDirsOne, List(ColumnDefinition(NamedColumnIdentifier("column1"))))) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """ends("hello world") fails for line: 1, column: column1, value: "hello"""" + case Validated.Invalid(messages) => messages.head mustEqual """ends("hello world") fails for row: 1, column: column1, value: "hello"""" } } @@ -49,7 +49,7 @@ class EndsRuleSpec extends Specification { val endsRule = EndsRule(ColumnReference(NamedColumnIdentifier("nonExistentColumn"))) endsRule.evaluate(0, Row(List(Cell("hello world today")), 1), Schema(globalDirsOne, List(ColumnDefinition(NamedColumnIdentifier("column1"))))) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """ends($nonExistentColumn) fails for line: 1, column: column1, value: "hello world today"""" + case Validated.Invalid(messages) => messages.head mustEqual """ends($nonExistentColumn) fails for row: 1, column: column1, value: "hello world today"""" } } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/FileExistsRuleSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/FileExistsRuleSpec.scala index 3cd15831..2786e3d3 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/FileExistsRuleSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/FileExistsRuleSpec.scala @@ -39,7 +39,7 @@ class FileExistsRuleSpec extends Specification with TestResources { "fail for non-existent file" in { FileExistsRule(emptyPathSubstitutions, false).evaluate(0, Row(List(Cell("some/non/existent/file")), 1), Schema(globalDirsOne, List(ColumnDefinition(NamedColumnIdentifier("column1"))))) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual "fileExists fails for line: 1, column: column1, value: \"some/non/existent/file\"" + case Validated.Invalid(messages) => messages.head mustEqual "fileExists fails for row: 1, column: column1, value: \"some/non/existent/file\"" } } @@ -49,7 +49,7 @@ class FileExistsRuleSpec extends Specification with TestResources { "fail for empty file path" in { FileExistsRule(emptyPathSubstitutions, false).evaluate(1, Row(List(Cell("abc"), Cell("")), 2), Schema(globalDirsTwo, List(ColumnDefinition(NamedColumnIdentifier("column1")), ColumnDefinition(NamedColumnIdentifier("column2"))))) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual "fileExists fails for line: 2, column: column2, value: \"\"" + case Validated.Invalid(messages) => messages.head mustEqual "fileExists fails for row: 2, column: column2, value: \"\"" } } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/IfRuleSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/IfRuleSpec.scala index ded1212e..32be4274 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/IfRuleSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/IfRuleSpec.scala @@ -40,14 +40,14 @@ class IfRuleSpec extends Specification { "condition is true and no else, 'if body' rule fails" in { val ifRule = IfRule(startsRule("hello world"),endsRules("hello"), None) ifRule.evaluate(0, row, schema) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual "ends(\"hello\") fails for line: 1, column: column1, value: \"hello world\"" + case Validated.Invalid(messages) => messages.head mustEqual "ends(\"hello\") fails for row: 1, column: column1, value: \"hello world\"" } } "condition is true and there is an 'else' that is true and 'if' body that is false" in { val ifRule = IfRule(startsRule("hello"),endsRules("hello"), Some(endsRules("world"))) ifRule.evaluate(0, row, schema) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual "ends(\"hello\") fails for line: 1, column: column1, value: \"hello world\"" + case Validated.Invalid(messages) => messages.head mustEqual "ends(\"hello\") fails for row: 1, column: column1, value: \"hello world\"" } } @@ -64,7 +64,7 @@ class IfRuleSpec extends Specification { "condition is false and there is an 'else' that is false and 'if' body that is true" in { val ifRule = IfRule(startsRule("sello"),endsRules("world"), Some(endsRules("hello"))) ifRule.evaluate(0, row, schema) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual "ends(\"hello\") fails for line: 1, column: column1, value: \"hello world\"" + case Validated.Invalid(messages) => messages.head mustEqual "ends(\"hello\") fails for row: 1, column: column1, value: \"hello world\"" } } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/InRuleSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/InRuleSpec.scala index 513348b8..67ee3345 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/InRuleSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/InRuleSpec.scala @@ -31,7 +31,7 @@ class InRuleSpec extends Specification { val inRule = InRule(Literal(Some("hello world"))) inRule.evaluate(0, Row(List(Cell("hello world today")), 1), Schema(globalDirsOne, List(ColumnDefinition(NamedColumnIdentifier("column1"))))) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """in("hello world") fails for line: 1, column: column1, value: "hello world today"""" + case Validated.Invalid(messages) => messages.head mustEqual """in("hello world") fails for row: 1, column: column1, value: "hello world today"""" } } @@ -50,7 +50,7 @@ class InRuleSpec extends Specification { val inRule = InRule(ColumnReference(NamedColumnIdentifier("nonExistentColumn"))) inRule.evaluate(0, Row(List(Cell("hello world today")), 1), Schema(globalDirsOne, List(ColumnDefinition(NamedColumnIdentifier("column1"))))) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """in($nonExistentColumn) fails for line: 1, column: column1, value: "hello world today"""" + case Validated.Invalid(messages) => messages.head mustEqual """in($nonExistentColumn) fails for row: 1, column: column1, value: "hello world today"""" } } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/IsRuleSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/IsRuleSpec.scala index 8faad96a..f8d8bc12 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/IsRuleSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/IsRuleSpec.scala @@ -29,21 +29,21 @@ class IsRuleSpec extends Specification { "fail if isRule is not the same as value" in { val isRule = IsRule(Literal(Some("completely different value"))) isRule.evaluate(0, Row(List(Cell("hello world")), 1), Schema(globalDirsOne, List(ColumnDefinition(NamedColumnIdentifier("column1"))))) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """is("completely different value") fails for line: 1, column: column1, value: "hello world"""" + case Validated.Invalid(messages) => messages.head mustEqual """is("completely different value") fails for row: 1, column: column1, value: "hello world"""" } } "fail if isRule is embedded in value" in { val isRule = IsRule(Literal(Some("hello world today"))) isRule.evaluate(0, Row(List(Cell("hello world")), 1), Schema(globalDirsOne, List(ColumnDefinition(NamedColumnIdentifier("column1"))))) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """is("hello world today") fails for line: 1, column: column1, value: "hello world"""" + case Validated.Invalid(messages) => messages.head mustEqual """is("hello world today") fails for row: 1, column: column1, value: "hello world"""" } } "fail if isRule is not in value" in { val isRule = IsRule(Literal(Some("hello world"))) isRule.evaluate(0, Row(List(Cell("hello world today")), 1), Schema(globalDirsOne, List(ColumnDefinition(NamedColumnIdentifier("column1"))))) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """is("hello world") fails for line: 1, column: column1, value: "hello world today"""" + case Validated.Invalid(messages) => messages.head mustEqual """is("hello world") fails for row: 1, column: column1, value: "hello world today"""" } } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/LengthRuleSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/LengthRuleSpec.scala index 290a44f6..90164593 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/LengthRuleSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/LengthRuleSpec.scala @@ -37,7 +37,7 @@ class LengthRuleSpec extends Specification { val lengthRule = new LengthRule(None, "5") lengthRule.evaluate(0, Row(List(Cell("HelloWorld")), 1), Schema(List(TotalColumns(1), NoHeader()), List(ColumnDefinition(NamedColumnIdentifier("column1"))))) must beLike { - case Validated.Invalid(m) => m.toList mustEqual List("""length(5) fails for line: 1, column: column1, value: "HelloWorld"""") + case Validated.Invalid(m) => m.toList mustEqual List("""length(5) fails for row: 1, column: column1, value: "HelloWorld"""") } } @@ -57,7 +57,7 @@ class LengthRuleSpec extends Specification { val lengthRule = new LengthRule(Some("1"), "5") lengthRule.evaluate(0, Row(List(Cell("helloworld")), 1), Schema(List(TotalColumns(1), NoHeader()), List(ColumnDefinition(NamedColumnIdentifier("column1"))))) must beLike { - case Validated.Invalid(m) => m.toList mustEqual List("""length(1,5) fails for line: 1, column: column1, value: "helloworld"""") + case Validated.Invalid(m) => m.toList mustEqual List("""length(1,5) fails for row: 1, column: column1, value: "helloworld"""") } } @@ -84,7 +84,7 @@ class LengthRuleSpec extends Specification { val lengthRule = new LengthRule(Some("5"), "5") lengthRule.evaluate(0, Row(List(Cell("helloworld")), 1), Schema(List(TotalColumns(1), NoHeader()), List(ColumnDefinition(NamedColumnIdentifier("column1"))))) must beLike { - case Validated.Invalid(m) => m.toList mustEqual List("""length(5,5) fails for line: 1, column: column1, value: "helloworld"""") + case Validated.Invalid(m) => m.toList mustEqual List("""length(5,5) fails for row: 1, column: column1, value: "helloworld"""") } } @@ -111,7 +111,7 @@ class LengthRuleSpec extends Specification { val lengthRule = new LengthRule(None, "43") lengthRule.evaluate(0, Row(List(Cell("helloworld")), 1), Schema(List(TotalColumns(1), NoHeader()), List(ColumnDefinition(NamedColumnIdentifier("column1"))))) must beLike { - case Validated.Invalid(m) => m.toList mustEqual List("""length(43) fails for line: 1, column: column1, value: "helloworld"""") + case Validated.Invalid(m) => m.toList mustEqual List("""length(43) fails for row: 1, column: column1, value: "helloworld"""") } } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/NoArgRulesSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/NoArgRulesSpec.scala index c4e117de..19633f4f 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/NoArgRulesSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/NoArgRulesSpec.scala @@ -56,7 +56,7 @@ class NoArgRulesSpec extends Specification { val uriRule = UriRule() uriRule.evaluate(0, Row(List(Cell("""http:\\http:\\datagov.nationalarchives.gov.uk\66\WO\409\9999\0\aaaaaaaa-aaaa-4aaa-9eee-0123456789ab""")), 1), Schema(globalDirsOne, List(ColumnDefinition(NamedColumnIdentifier("column1"))))) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """uri fails for line: 1, column: column1, value: "http:\\http:\\datagov.nationalarchives.gov.uk\66\WO\409\9999\0\aaaaaaaa-aaaa-4aaa-9eee-0123456789ab"""" + case Validated.Invalid(messages) => messages.head mustEqual """uri fails for row: 1, column: column1, value: "http:\\http:\\datagov.nationalarchives.gov.uk\66\WO\409\9999\0\aaaaaaaa-aaaa-4aaa-9eee-0123456789ab"""" } } } @@ -71,7 +71,7 @@ class NoArgRulesSpec extends Specification { "fail if cell has an invalid uuid4" in { val uuid4Rule = Uuid4Rule() uuid4Rule.evaluate(0, Row(List(Cell("aaaaaaaaa-aaaa-4aaa-9eee-0123456789ab")), 1), Schema(globalDirsOne, List(ColumnDefinition(NamedColumnIdentifier("column1"))))) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """uuid4 fails for line: 1, column: column1, value: "aaaaaaaaa-aaaa-4aaa-9eee-0123456789ab"""" + case Validated.Invalid(messages) => messages.head mustEqual """uuid4 fails for row: 1, column: column1, value: "aaaaaaaaa-aaaa-4aaa-9eee-0123456789ab"""" } } } @@ -91,14 +91,14 @@ class NoArgRulesSpec extends Specification { "fail if cell has a negative integer" in { val posIntRule = PositiveIntegerRule() posIntRule.evaluate(0, Row(List(Cell("-123")), 1), Schema(globalDirsOne, List(ColumnDefinition(NamedColumnIdentifier("column1"))))) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """positiveInteger fails for line: 1, column: column1, value: "-123"""" + case Validated.Invalid(messages) => messages.head mustEqual """positiveInteger fails for row: 1, column: column1, value: "-123"""" } } "fail if cell has a non integer" in { val posIntRule = PositiveIntegerRule() posIntRule.evaluate(0, Row(List(Cell("123.45")), 1), Schema(globalDirsOne, List(ColumnDefinition(NamedColumnIdentifier("column1"))))) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """positiveInteger fails for line: 1, column: column1, value: "123.45"""" + case Validated.Invalid(messages) => messages.head mustEqual """positiveInteger fails for row: 1, column: column1, value: "123.45"""" } } @@ -110,14 +110,14 @@ class NoArgRulesSpec extends Specification { "fail if cell has a minus sign midway through" in { val posIntRule = PositiveIntegerRule() posIntRule.evaluate(0, Row(List(Cell("123-4456")), 1), Schema(globalDirsOne, List(ColumnDefinition(NamedColumnIdentifier("column1"))))) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """positiveInteger fails for line: 1, column: column1, value: "123-4456"""" + case Validated.Invalid(messages) => messages.head mustEqual """positiveInteger fails for row: 1, column: column1, value: "123-4456"""" } } "fail if cell has a non numeric character" in { val posIntRule = PositiveIntegerRule() posIntRule.evaluate(0, Row(List(Cell("12abc45")), 1), Schema(globalDirsOne, List(ColumnDefinition(NamedColumnIdentifier("column1"))))) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """positiveInteger fails for line: 1, column: column1, value: "12abc45"""" + case Validated.Invalid(messages) => messages.head mustEqual """positiveInteger fails for row: 1, column: column1, value: "12abc45"""" } } } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/NotEmptyRuleSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/NotEmptyRuleSpec.scala index e3e91b22..b2b59143 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/NotEmptyRuleSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/NotEmptyRuleSpec.scala @@ -26,7 +26,7 @@ class NotEmptyRuleSpec extends Specification { "File if cell is empty" in { val notEmptyRule = NotEmptyRule() notEmptyRule.evaluate(0, Row(List(Cell("")), 1), Schema(globalDirsOne, List(ColumnDefinition(NamedColumnIdentifier("column1"))))) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """notEmpty fails for line: 1, column: column1, value: """"" + case Validated.Invalid(messages) => messages.head mustEqual """notEmpty fails for row: 1, column: column1, value: """"" } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/NotRuleSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/NotRuleSpec.scala index 65b17bb7..f410adee 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/NotRuleSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/NotRuleSpec.scala @@ -34,14 +34,14 @@ class NotRuleSpec extends Specification { "fail if notRule is the same as value" in { val notRule = NotRule(Literal(Some("hello world"))) notRule.evaluate(0, Row(List(Cell("hello world")), 1), Schema(globalDirsOne, List(ColumnDefinition(NamedColumnIdentifier("column1"))))) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """not("hello world") fails for line: 1, column: column1, value: "hello world"""" + case Validated.Invalid(messages) => messages.head mustEqual """not("hello world") fails for row: 1, column: column1, value: "hello world"""" } } "fail with @ignoreCase" in { val notRule = NotRule(Literal(Some("hello world"))) notRule.evaluate(0, Row(List(Cell("hello WORLD")), 1), Schema(globalDirsOne, List(ColumnDefinition(NamedColumnIdentifier("column1"), Nil, List(IgnoreCase()))))) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """not("hello world") fails for line: 1, column: column1, value: "hello WORLD"""" + case Validated.Invalid(messages) => messages.head mustEqual """not("hello world") fails for row: 1, column: column1, value: "hello WORLD"""" } } } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/OrRuleSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/OrRuleSpec.scala index 365074dd..15c1f09d 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/OrRuleSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/OrRuleSpec.scala @@ -54,7 +54,7 @@ class OrRuleSpec extends Specification { val orRule = OrRule(leftInRule, rightInRule) orRule.evaluate(0, Row(List(Cell("SomethingElse")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("""in("This") or in("That") fails for line: 1, column: ThisOrThat, value: "SomethingElse"""") + case Validated.Invalid(messages) => messages.toList mustEqual List("""in("This") or in("That") fails for row: 1, column: ThisOrThat, value: "SomethingElse"""") } } @@ -68,7 +68,7 @@ class OrRuleSpec extends Specification { val orRule = OrRule(leftInRule, rightInRule) orRule.evaluate(0, Row(List(Cell("UK")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """in($ConfigurableCountry) or in("France") fails for line: 1, column: Country, value: "UK"""" + case Validated.Invalid(messages) => messages.head mustEqual """in($ConfigurableCountry) or in("France") fails for row: 1, column: Country, value: "UK"""" } } @@ -109,7 +109,7 @@ class OrRuleSpec extends Specification { val orRule = OrRule( OrRule(leftInRule, middleInRule), rightInRule ) orRule.evaluate(0, Row(List(Cell("up")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("""in("left") or in("middle") or in("right") fails for line: 1, column: Direction, value: "up"""") + case Validated.Invalid(messages) => messages.toList mustEqual List("""in("left") or in("middle") or in("right") fails for row: 1, column: Direction, value: "up"""") } } } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/RangeRuleSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/RangeRuleSpec.scala index 86cbf069..146de276 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/RangeRuleSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/RangeRuleSpec.scala @@ -26,7 +26,7 @@ class RangeRuleSpec extends Specification { val rangeRule = new RangeRule(1,2) rangeRule.evaluate(0, Row(List(Cell("Germany")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("""range(1,2) fails for line: 1, column: Country, value: "Germany"""") + case Validated.Invalid(messages) => messages.toList mustEqual List("""range(1,2) fails for row: 1, column: Country, value: "Germany"""") } } @@ -40,7 +40,7 @@ class RangeRuleSpec extends Specification { val rangeRule = new RangeRule(0.01,0.1) rangeRule.evaluate(0, Row(List(Cell(("0.00999999999999999999999999999999"))), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("""range(0.01,0.1) fails for line: 1, column: Country, value: "0.00999999999999999999999999999999"""") + case Validated.Invalid(messages) => messages.toList mustEqual List("""range(0.01,0.1) fails for row: 1, column: Country, value: "0.00999999999999999999999999999999"""") } } } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/StartsRuleSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/StartsRuleSpec.scala index 593b56ba..9270951d 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/StartsRuleSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/StartsRuleSpec.scala @@ -30,7 +30,7 @@ class StartsRuleSpec extends Specification { "fail if cell does not start with startsRule value" in { val startsRule = StartsRule(Literal(Some("hello world today"))) startsRule.evaluate(0, Row(List(Cell("hello world")), 1), Schema(globalDirsOne, List(ColumnDefinition(NamedColumnIdentifier("column1"))))) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """starts("hello world today") fails for line: 1, column: column1, value: "hello world"""" + case Validated.Invalid(messages) => messages.head mustEqual """starts("hello world today") fails for row: 1, column: column1, value: "hello world"""" } } @@ -49,7 +49,7 @@ class StartsRuleSpec extends Specification { val startsRule = StartsRule(ColumnReference(NamedColumnIdentifier("nonExistentColumn"))) startsRule.evaluate(0, Row(List(Cell("hello world today")), 1), Schema(globalDirsOne, List(ColumnDefinition(NamedColumnIdentifier("column1"))))) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """starts($nonExistentColumn) fails for line: 1, column: column1, value: "hello world today"""" + case Validated.Invalid(messages) => messages.head mustEqual """starts($nonExistentColumn) fails for row: 1, column: column1, value: "hello world today"""" } } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/UniqueMultiRuleSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/UniqueMultiRuleSpec.scala index 0daea41c..4c8ed8f0 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/UniqueMultiRuleSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/UniqueMultiRuleSpec.scala @@ -43,7 +43,7 @@ class UniqueMultiRuleSpec extends Specification { rule.evaluate(0, Row(Cell("r2d2") :: Cell("3") :: Cell("blue") :: Nil, 1), schema) rule.evaluate(0, Row(Cell("r2d2") :: Cell("3") :: Cell("blue") :: Nil, 2), schema) must beLike { - case Validated.Invalid(msgs) => msgs.toList mustEqual List("unique( $Legs, $Color ) fails for line: 2, column: Name, value: \"r2d2\" (original at line: 1)") + case Validated.Invalid(msgs) => msgs.toList mustEqual List("unique( $Legs, $Color ) fails for row: 2, column: Name, value: \"r2d2\" (original at row: 1)") } } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/UniqueRuleSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/UniqueRuleSpec.scala index ef465911..396d68c1 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/UniqueRuleSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_0/UniqueRuleSpec.scala @@ -37,7 +37,7 @@ class UniqueRuleSpec extends Specification { rule.evaluate(0, Row(Cell("Ben") :: Nil, 2), schema) rule.evaluate(0, Row(Cell("Jim") :: Nil, 3), schema) must beLike { - case Validated.Invalid(msgs) => msgs.toList mustEqual List("unique fails for line: 3, column: Name, value: \"Jim\" (original at line: 1)") + case Validated.Invalid(msgs) => msgs.toList mustEqual List("unique fails for row: 3, column: Name, value: \"Jim\" (original at row: 1)") } } @@ -48,7 +48,7 @@ class UniqueRuleSpec extends Specification { rule.evaluate(0, Row(Cell("Ben") :: Nil, 1), schema) rule.evaluate(0, Row(Cell("BEN") :: Nil, 2), schema) must beLike { - case Validated.Invalid(msgs) => msgs.toList mustEqual List("unique fails for line: 2, column: Name, value: \"BEN\" (original at line: 1)") + case Validated.Invalid(msgs) => msgs.toList mustEqual List("unique fails for row: 2, column: Name, value: \"BEN\" (original at row: 1)") } } } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/AnyRuleSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/AnyRuleSpec.scala index 555a83a1..b7bf0f23 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/AnyRuleSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/AnyRuleSpec.scala @@ -41,7 +41,7 @@ class AnyRuleSpec extends Specification { val anyRule = AnyRule(List(Literal(Some("hello world")))) anyRule.evaluate(0, Row(List(Cell("hello world today")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual """any("hello world") fails for line: 1, column: column1, value: "hello world today"""" + case Validated.Invalid(messages) => messages.head mustEqual """any("hello world") fails for row: 1, column: column1, value: "hello world today"""" } } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/CaseRuleSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/CaseRuleSpec.scala index 7b795491..c6d38430 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/CaseRuleSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/CaseRuleSpec.scala @@ -87,7 +87,7 @@ class CaseRuleSpec extends Specification { upperCaseRule.evaluate(0, Row(List(Cell("germany")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for line: 1, column: Country, value: \"germany\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for row: 1, column: Country, value: \"germany\"") } } @@ -102,13 +102,13 @@ class CaseRuleSpec extends Specification { upperCaseRule.evaluate(0, Row(List(Cell("GeRMANY")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for line: 1, column: Country, value: \"GeRMANY\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for row: 1, column: Country, value: \"GeRMANY\"") } upperCaseRule.evaluate(0, Row(List(Cell("GeRmANy")), 2), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for line: 2, column: Country, value: \"GeRmANy\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for row: 2, column: Country, value: \"GeRmANy\"") } upperCaseRule.evaluate(0, Row(List(Cell("gERMANY")), 3), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for line: 3, column: Country, value: \"gERMANY\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for row: 3, column: Country, value: \"gERMANY\"") } } @@ -122,13 +122,13 @@ class CaseRuleSpec extends Specification { upperCaseRule.evaluate(0, Row(List(Cell("ΑρΣΕΝΑΛ")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for line: 1, column: Country, value: \"ΑρΣΕΝΑΛ\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for row: 1, column: Country, value: \"ΑρΣΕΝΑΛ\"") } upperCaseRule.evaluate(0, Row(List(Cell("ΑρΣεΝΑΛ")), 2), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for line: 2, column: Country, value: \"ΑρΣεΝΑΛ\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for row: 2, column: Country, value: \"ΑρΣεΝΑΛ\"") } upperCaseRule.evaluate(0, Row(List(Cell("αΡΣΕΝΑΛ")), 3), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for line: 3, column: Country, value: \"αΡΣΕΝΑΛ\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for row: 3, column: Country, value: \"αΡΣΕΝΑΛ\"") } } @@ -142,10 +142,10 @@ class CaseRuleSpec extends Specification { val upperCaseRule = UpperCaseRule() upperCaseRule.evaluate(0, Row(List(Cell("United Kingdom")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for line: 1, column: Country, value: \"United Kingdom\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for row: 1, column: Country, value: \"United Kingdom\"") } upperCaseRule.evaluate(0, Row(List(Cell("uNITED KINGDOM")), 2), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for line: 2, column: Country, value: \"uNITED KINGDOM\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for row: 2, column: Country, value: \"uNITED KINGDOM\"") } } @@ -157,10 +157,10 @@ class CaseRuleSpec extends Specification { val upperCaseRule = UpperCaseRule() upperCaseRule.evaluate(0, Row(List(Cell("United Kingdom 11111")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for line: 1, column: Country, value: \"United Kingdom 11111\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for row: 1, column: Country, value: \"United Kingdom 11111\"") } upperCaseRule.evaluate(0, Row(List(Cell("uNITED KINGDOM 12345")), 2), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for line: 2, column: Country, value: \"uNITED KINGDOM 12345\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for row: 2, column: Country, value: \"uNITED KINGDOM 12345\"") } } @@ -172,10 +172,10 @@ class CaseRuleSpec extends Specification { val upperCaseRule = UpperCaseRule() upperCaseRule.evaluate(0, Row(List(Cell("United Kingdom 11111 ??")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for line: 1, column: Country, value: \"United Kingdom 11111 ??\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for row: 1, column: Country, value: \"United Kingdom 11111 ??\"") } upperCaseRule.evaluate(0, Row(List(Cell("uNITED KINGDOM 12345 ?!\"£")), 2), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for line: 2, column: Country, value: \"uNITED KINGDOM 12345 ?!\"£\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for row: 2, column: Country, value: \"uNITED KINGDOM 12345 ?!\"£\"") } } @@ -210,15 +210,15 @@ class CaseRuleSpec extends Specification { val lowerCaseRule = LowerCaseRule() lowerCaseRule.evaluate(0, Row(List(Cell("GERMANY")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("lowerCase fails for line: 1, column: Country, value: \"GERMANY\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("lowerCase fails for row: 1, column: Country, value: \"GERMANY\"") } lowerCaseRule.evaluate(0, Row(List(Cell("GeRMaNy")), 2), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("lowerCase fails for line: 2, column: Country, value: \"GeRMaNy\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("lowerCase fails for row: 2, column: Country, value: \"GeRMaNy\"") } lowerCaseRule.evaluate(0, Row(List(Cell("Germany")), 3), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("lowerCase fails for line: 3, column: Country, value: \"Germany\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("lowerCase fails for row: 3, column: Country, value: \"Germany\"") } } @@ -229,13 +229,13 @@ class CaseRuleSpec extends Specification { val lowerCaseRule = LowerCaseRule() lowerCaseRule.evaluate(0, Row(List(Cell("ΑρΣΕΝΑΛ")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("lowerCase fails for line: 1, column: Country, value: \"ΑρΣΕΝΑΛ\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("lowerCase fails for row: 1, column: Country, value: \"ΑρΣΕΝΑΛ\"") } lowerCaseRule.evaluate(0, Row(List(Cell("ΑρΣεΝΑΛ")), 2), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("lowerCase fails for line: 2, column: Country, value: \"ΑρΣεΝΑΛ\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("lowerCase fails for row: 2, column: Country, value: \"ΑρΣεΝΑΛ\"") } lowerCaseRule.evaluate(0, Row(List(Cell("αΡΣΕΝΑΛ")), 3), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("lowerCase fails for line: 3, column: Country, value: \"αΡΣΕΝΑΛ\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("lowerCase fails for row: 3, column: Country, value: \"αΡΣΕΝΑΛ\"") } } @@ -255,7 +255,7 @@ class CaseRuleSpec extends Specification { val lowerCaseRule = LowerCaseRule() lowerCaseRule.evaluate(0, Row(List(Cell("United Kingdom")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("lowerCase fails for line: 1, column: Country, value: \"United Kingdom\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("lowerCase fails for row: 1, column: Country, value: \"United Kingdom\"") } } @@ -277,7 +277,7 @@ class CaseRuleSpec extends Specification { val lowerCaseRule = LowerCaseRule() lowerCaseRule.evaluate(0, Row(List(Cell("united Kingdom 1234569")), 1), schema)must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("lowerCase fails for line: 1, column: Country, value: \"united Kingdom 1234569\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("lowerCase fails for row: 1, column: Country, value: \"united Kingdom 1234569\"") } } @@ -300,7 +300,7 @@ class CaseRuleSpec extends Specification { upperCaseRule.evaluate(0, Row(List(Cell("germany")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for line: 1, column: Country, value: \"germany\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for row: 1, column: Country, value: \"germany\"") } } @@ -315,13 +315,13 @@ class CaseRuleSpec extends Specification { upperCaseRule.evaluate(0, Row(List(Cell("GeRMANY")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for line: 1, column: Country, value: \"GeRMANY\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for row: 1, column: Country, value: \"GeRMANY\"") } upperCaseRule.evaluate(0, Row(List(Cell("GeRmANy")), 2), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for line: 2, column: Country, value: \"GeRmANy\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for row: 2, column: Country, value: \"GeRmANy\"") } upperCaseRule.evaluate(0, Row(List(Cell("gERMANY")), 3), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for line: 3, column: Country, value: \"gERMANY\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for row: 3, column: Country, value: \"gERMANY\"") } } @@ -334,10 +334,10 @@ class CaseRuleSpec extends Specification { val upperCaseRule = UpperCaseRule() upperCaseRule.evaluate(0, Row(List(Cell("United Kingdom")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for line: 1, column: Country, value: \"United Kingdom\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for row: 1, column: Country, value: \"United Kingdom\"") } upperCaseRule.evaluate(0, Row(List(Cell("uNITED KINGDOM")), 2), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for line: 2, column: Country, value: \"uNITED KINGDOM\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for row: 2, column: Country, value: \"uNITED KINGDOM\"") } } @@ -349,10 +349,10 @@ class CaseRuleSpec extends Specification { val upperCaseRule = UpperCaseRule() upperCaseRule.evaluate(0, Row(List(Cell("United Kingdom 11111")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for line: 1, column: Country, value: \"United Kingdom 11111\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for row: 1, column: Country, value: \"United Kingdom 11111\"") } upperCaseRule.evaluate(0, Row(List(Cell("uNITED KINGDOM 12345")), 2), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for line: 2, column: Country, value: \"uNITED KINGDOM 12345\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for row: 2, column: Country, value: \"uNITED KINGDOM 12345\"") } } @@ -364,10 +364,10 @@ class CaseRuleSpec extends Specification { val upperCaseRule = UpperCaseRule() upperCaseRule.evaluate(0, Row(List(Cell("United Kingdom 11111 ??")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for line: 1, column: Country, value: \"United Kingdom 11111 ??\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for row: 1, column: Country, value: \"United Kingdom 11111 ??\"") } upperCaseRule.evaluate(0, Row(List(Cell("uNITED KINGDOM 12345 ?!\"£")), 2), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for line: 2, column: Country, value: \"uNITED KINGDOM 12345 ?!\"£\"") + case Validated.Invalid(messages) => messages.toList mustEqual List("upperCase fails for row: 2, column: Country, value: \"uNITED KINGDOM 12345 ?!\"£\"") } } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/IdenticalRuleSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/IdenticalRuleSpec.scala index 7bd9020c..bd7d870e 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/IdenticalRuleSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/IdenticalRuleSpec.scala @@ -41,17 +41,17 @@ class IdenticalRuleSpec extends Specification { val schema = Schema(globalDirsTwo, List(ColumnDefinition(NamedColumnIdentifier("column1")), ColumnDefinition(NamedColumnIdentifier("column2")))) identicalRule1.evaluate(1, Row(List(Cell("row1"),Cell("abc")), 1), schema) mustEqual Validated.Valid(true) identicalRule1.evaluate(1, Row(List(Cell("row1"),Cell("efd")), 2), schema) must beLike { - case Validated.Invalid(msgs) => msgs.toList mustEqual List("identical fails for line: 2, column: column2, value: \"efd\"") + case Validated.Invalid(msgs) => msgs.toList mustEqual List("identical fails for row: 2, column: column2, value: \"efd\"") } identicalRule1.evaluate(1, Row(List(Cell("row1"),Cell("ghi")), 3), schema) must beLike { - case Validated.Invalid(msgs) => msgs.toList mustEqual List("identical fails for line: 3, column: column2, value: \"ghi\"") + case Validated.Invalid(msgs) => msgs.toList mustEqual List("identical fails for row: 3, column: column2, value: \"ghi\"") } val identicalRule2 = IdenticalRule() identicalRule2.evaluate(0, Row(List(Cell("row1"),Cell("abc")), 1), schema) mustEqual Validated.Valid(true) identicalRule2.evaluate(0, Row(List(Cell("row1"),Cell("efd")), 2), schema) mustEqual Validated.Valid(true) identicalRule2.evaluate(0, Row(List(Cell("row2"),Cell("ghi")), 3), schema) must beLike { - case Validated.Invalid(msgs) => msgs.toList mustEqual List("identical fails for line: 3, column: column1, value: \"row2\"") + case Validated.Invalid(msgs) => msgs.toList mustEqual List("identical fails for row: 3, column: column1, value: \"row2\"") } } @@ -59,13 +59,13 @@ class IdenticalRuleSpec extends Specification { val identicalRule = IdenticalRule() val schema = Schema(globalDirsTwo, List(ColumnDefinition(NamedColumnIdentifier("column1")), ColumnDefinition(NamedColumnIdentifier("column2")))) identicalRule.evaluate(0, Row(List(Cell(""),Cell("abc")), 1), schema) must beLike { - case Validated.Invalid(msgs) => msgs.toList mustEqual List("identical fails for line: 1, column: column1, value: \"\"") + case Validated.Invalid(msgs) => msgs.toList mustEqual List("identical fails for row: 1, column: column1, value: \"\"") } identicalRule.evaluate(0, Row(List(Cell(""),Cell("efd")), 2), schema) must beLike { - case Validated.Invalid(msgs) => msgs.toList mustEqual List("identical fails for line: 2, column: column1, value: \"\"") + case Validated.Invalid(msgs) => msgs.toList mustEqual List("identical fails for row: 2, column: column1, value: \"\"") } identicalRule.evaluate(0, Row(List(Cell(""),Cell("ghi")), 3), schema) must beLike { - case Validated.Invalid(msgs) => msgs.toList mustEqual List("identical fails for line: 3, column: column1, value: \"\"") + case Validated.Invalid(msgs) => msgs.toList mustEqual List("identical fails for row: 3, column: column1, value: \"\"") } } } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/IntegrityCheckRuleSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/IntegrityCheckRuleSpec.scala index 49b7b621..ec332662 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/IntegrityCheckRuleSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/IntegrityCheckRuleSpec.scala @@ -55,7 +55,7 @@ class IntegrityCheckRuleSpec extends Specification with TestResources { val totalRows: Some[Boolean] = Some(false) integrityCheckRule.evaluate(0, Row(List(Cell(relIntegrityCheckForRulePath)), 1), schema, totalRows) must beLike { - case Validated.Invalid(messages) => messages.head must be matching "integrityCheck fails for line: 1, column: column1, files: \"[a-z0-9._\\\\/-]*integrityCheck[\\\\/]folder1[\\\\/]content[\\\\/]file#2.txt\" are not listed in the metadata" + case Validated.Invalid(messages) => messages.head must be matching "integrityCheck fails for row: 1, column: column1, files: \"[a-z0-9._\\\\/-]*integrityCheck[\\\\/]folder1[\\\\/]content[\\\\/]file#2.txt\" are not listed in the metadata" } } @@ -66,7 +66,7 @@ class IntegrityCheckRuleSpec extends Specification with TestResources { integrityCheckRule.evaluate(1, Row(List(Cell("abc"), Cell(relIntegrityCheckForRulePath)), 1), schema, Some(true)) mustEqual Validated.Valid(true) integrityCheckRule.evaluate(1, Row(List(Cell("abc"), Cell("")), 2), schema, Some(false)) must beLike { - case Validated.Invalid(messages) => messages.head must be matching "integrityCheck fails for line: 2, column: column2, files: \"[a-z0-9._\\\\/-]*integrityCheck[\\\\/]folder1[\\\\/]content[\\\\/]file#2.txt\" are not listed in the metadata" + case Validated.Invalid(messages) => messages.head must be matching "integrityCheck fails for row: 2, column: column2, files: \"[a-z0-9._\\\\/-]*integrityCheck[\\\\/]folder1[\\\\/]content[\\\\/]file#2.txt\" are not listed in the metadata" } } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/RangeRuleSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/RangeRuleSpec.scala index e920ece3..833ca7f0 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/RangeRuleSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/RangeRuleSpec.scala @@ -27,7 +27,7 @@ class RangeRuleSpec extends Specification { val rangeRule = new RangeRule(Some(1),Some(2)) rangeRule.evaluate(0, Row(List(Cell("Germany")), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("""range(1,2) fails for line: 1, column: Country, value: "Germany"""") + case Validated.Invalid(messages) => messages.toList mustEqual List("""range(1,2) fails for row: 1, column: Country, value: "Germany"""") } } @@ -53,7 +53,7 @@ class RangeRuleSpec extends Specification { val rangeRule = new RangeRule(Some(0.01),Some(0.1)) rangeRule.evaluate(0, Row(List(Cell(("0.00999999999999999999999999999999"))), 1), schema) must beLike { - case Validated.Invalid(messages) => messages.toList mustEqual List("""range(0.01,0.1) fails for line: 1, column: Country, value: "0.00999999999999999999999999999999"""") + case Validated.Invalid(messages) => messages.toList mustEqual List("""range(0.01,0.1) fails for row: 1, column: Country, value: "0.00999999999999999999999999999999"""") } } } diff --git a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/SwitchRuleSpec.scala b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/SwitchRuleSpec.scala index 0fffd7cd..183fe46c 100644 --- a/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/SwitchRuleSpec.scala +++ b/csv-validator-core/src/test/scala/uk/gov/nationalarchives/csv/validator/schema/v1_1/SwitchRuleSpec.scala @@ -38,14 +38,14 @@ class SwitchRuleSpec extends Specification { "condition1 true and no else, body1 rule fails" in { val switchRule = SwitchRule(None,(startsRule("hello world"),endsRules("hello"))) switchRule.evaluate(0, row, schema) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual "ends(\"hello\") fails for line: 1, column: column1, value: \"hello world\"" + case Validated.Invalid(messages) => messages.head mustEqual "ends(\"hello\") fails for row: 1, column: column1, value: \"hello world\"" } } "condition1 is true and there is an 'else' that is true and body1 that is false" in { val switchRule = SwitchRule(Some(endsRules("world")),(startsRule("hello"),endsRules("hello"))) switchRule.evaluate(0, row, schema) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual "ends(\"hello\") fails for line: 1, column: column1, value: \"hello world\"" + case Validated.Invalid(messages) => messages.head mustEqual "ends(\"hello\") fails for row: 1, column: column1, value: \"hello world\"" } } @@ -63,7 +63,7 @@ class SwitchRuleSpec extends Specification { "condition1 is false and there is an 'else' that is false and body1 that is true" in { val switchRule = SwitchRule(Some(endsRules("hello")),(startsRule("sello"),endsRules("world"))) switchRule.evaluate(0, row, schema) must beLike { - case Validated.Invalid(messages) => messages.head mustEqual "ends(\"hello\") fails for line: 1, column: column1, value: \"hello world\"" + case Validated.Invalid(messages) => messages.head mustEqual "ends(\"hello\") fails for row: 1, column: column1, value: \"hello world\"" } } diff --git a/csv-validator-ui/src/main/scala/uk/gov/nationalarchives/csv/validator/ui/CsvValidatorUi.scala b/csv-validator-ui/src/main/scala/uk/gov/nationalarchives/csv/validator/ui/CsvValidatorUi.scala index 9e8b971b..dd88c4d3 100644 --- a/csv-validator-ui/src/main/scala/uk/gov/nationalarchives/csv/validator/ui/CsvValidatorUi.scala +++ b/csv-validator-ui/src/main/scala/uk/gov/nationalarchives/csv/validator/ui/CsvValidatorUi.scala @@ -70,8 +70,10 @@ object CsvValidatorUi extends SimpleSwingApplication { //handle resizing the main window, when resizing the settings panel settings.settingsGroup.reactions += SJXTaskPane.onViewStateChanged { val newSize = if(settings.settingsGroup.collapsed) { - new Dimension(this.size.getWidth.toInt, (this.size.getHeight - settings.size.getHeight).toInt) + txtArReport.rows = 35 + this.size } else { + txtArReport.rows = 9 new Dimension(this.size.getWidth.toInt, (this.size.getHeight + settings.size.getHeight).toInt) } this.preferredSize = newSize @@ -140,14 +142,14 @@ object CsvValidatorUi extends SimpleSwingApplication { Try(value.toInt) match { case Success(number) if number > 0 => number case _ => - handleErrorMsg(s"Error: Maximum number of $textBoxDescription should be more than 0") + handleErrorMsg(s"Error: Maximum number of $textBoxDescription should be more than 0") valueIfError } private def validate(csvFilePath: String, csvEncoding: Charset, csvSchemaFilePath: String, csvSchemaEncoding: Charset, - potentialMaxCharsPerCell: String, failOnFirstError: Boolean, pathSubstitutions: List[(String, String)], + maxCharsPerCell: Int, failOnFirstError: Boolean, pathSubstitutions: List[(String, String)], enforceCaseSensitivePathChecks: Boolean, progress: Option[ProgressCallback], validateEncoding: Boolean, - potentialMaxNumOfLines: String, skipFileChecks: Boolean, outputTextSuffix: String)(output: String => Unit) : Unit = { + maxNumOfLines: Int, skipFileChecks: Boolean, outputTextSuffix: String)(output: String => Unit) : Unit = { def toConsole(msg: String): Unit = Swing.onEDT { output(msg) @@ -156,11 +158,6 @@ object CsvValidatorUi extends SimpleSwingApplication { var badLines = 0 var truncated = false - val maxCharsPerCell = convertTextboxValueToInt(potentialMaxCharsPerCell, "characters per column", toConsole) - val maxNumOfLines = convertTextboxValueToInt(potentialMaxNumOfLines, "errors to display", toConsole) - - val safeToRunValidation = csvFilePath.nonEmpty && csvSchemaFilePath.nonEmpty && maxCharsPerCell > 0 && maxNumOfLines > 0 - def logRowCallback(maxBadLines: Int)(row: ValidatedNel[FailMessage, Any]): Unit = row match { case Invalid(failures) => if (badLines >= maxBadLines) { @@ -178,7 +175,6 @@ object CsvValidatorUi extends SimpleSwingApplication { case _ => } - if(safeToRunValidation) { val (status, cliExitCode) = CsvValidatorCmdApp.validate( TextFile(Paths.get(csvFilePath), csvEncoding, validateEncoding), TextFile(Paths.get(csvSchemaFilePath), csvSchemaEncoding), @@ -196,7 +192,6 @@ object CsvValidatorUi extends SimpleSwingApplication { case SystemExitCodes.ValidCsv => toConsole(s"PASS$outputTextSuffix") case _ => toConsole(status) } - } } /** @@ -242,7 +237,7 @@ object CsvValidatorUi extends SimpleSwingApplication { }.map(Some(_)).getOrElse(None) } - private val txtArReport = new TextArea(12,30) + private val txtArReport = new TextArea(35,30) /** * The main UI of the application @@ -309,7 +304,7 @@ object CsvValidatorUi extends SimpleSwingApplication { csvFileChooser.multiSelectionEnabled = false csvFileChooser.title = "Select a .csv file" csvFileChooser.fileFilter = new FileNameExtensionFilter("CSV file (*.csv)", "csv") - private val btnChooseCsvFile = new Button("...") + private val btnChooseCsvFile = new Button("Choose...") btnChooseCsvFile.reactions += onClick { csvFileChooser.selectedFile = lastCsvPath @@ -333,7 +328,7 @@ object CsvValidatorUi extends SimpleSwingApplication { csvSchemaFileChooser.fileFilter = new FileNameExtensionFilter("CSV Schema file (*.csvs)", "csvs" + "") - private val btnChooseCsvSchemaFile = new Button("...") + private val btnChooseCsvSchemaFile = new Button("Choose...") btnChooseCsvSchemaFile.reactions += onClick { csvSchemaFileChooser.selectedFile = lastCsvSchemaPath chooseFileOrDir(csvSchemaFileChooser, txtCsvSchemaFile, btnChooseCsvSchemaFile) @@ -375,53 +370,62 @@ object CsvValidatorUi extends SimpleSwingApplication { } } - def outputToReport(data: String) : Unit = + def outputToReport(clearOutput: Boolean=false)(data: String) : Unit = Swing.onEDT { + if(clearOutput) txtArReport.text = "" else () txtArReport.append(data + EOL) } - btnValidate.reactions += validateOnClick(false) - btnValidateMetadataOnly.reactions += validateOnClick(true) + btnValidate.reactions += onClick(validateOnClick(false)) + btnValidateMetadataOnly.reactions += onClick(validateOnClick(true)) private def validateOnClick(skipFileChecks: Boolean) = { - val suffix = if(skipFileChecks) " (Metadata Only)" else "" - onClick(displayWait( - suspendUi = { - btnValidate.enabled = false - btnValidateMetadataOnly.enabled = false - this.peer.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)) - this.progressBar.value = 0 - this.progressBar.visible = true - - }, - action = { - txtArReport.text = "" - CsvValidatorUi.this.validate( - txtCsvFile.getText, - settingsPanel.csvEncoding, - txtCsvSchemaFile.getText, - settingsPanel.csvSchemaEncoding, - settingsPanel.maxCharsPerCell, - settingsPanel.failOnFirstError, - settingsPanel.pathSubstitutions, - settingsPanel.enforceCaseSensitivePathChecks, - Some(progress), - settingsPanel.validateUtf8, - settingsPanel.numOfLinesToDisplay, - skipFileChecks, - suffix - ) - }, - output = outputToReport, - resumeUi = { - btnValidate.enabled = true - btnValidateMetadataOnly.enabled = true - btnValidate.peer.setCursor(Cursor.getDefaultCursor) - btnValidateMetadataOnly.peer.setCursor(Cursor.getDefaultCursor) - //this.progressBar.visible = false - } - )) + val csvFilePath = txtCsvFile.getText + val csvSchemaFilePath = txtCsvSchemaFile.getText + val fileBoxesAreFilled = csvFilePath.nonEmpty && csvSchemaFilePath.nonEmpty + + lazy val maxCharsPerCell = convertTextboxValueToInt(settingsPanel.maxCharsPerCell, "characters per column", outputToReport(clearOutput = true)) + lazy val maxNumOfLines = convertTextboxValueToInt(settingsPanel.numOfLinesToDisplay, "errors to display", outputToReport(clearOutput = true)) + + if(fileBoxesAreFilled && maxCharsPerCell > 0 && maxNumOfLines > 0){ + val suffix = if(skipFileChecks) " (Metadata Only)" else "" + displayWait( + suspendUi = { + btnValidate.enabled = false + btnValidateMetadataOnly.enabled = false + this.peer.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)) + this.progressBar.value = 0 + this.progressBar.visible = true + + }, + action = { + txtArReport.text = "" + CsvValidatorUi.this.validate( + csvFilePath, + settingsPanel.csvEncoding, + csvSchemaFilePath, + settingsPanel.csvSchemaEncoding, + maxCharsPerCell, + settingsPanel.failOnFirstError, + settingsPanel.pathSubstitutions, + settingsPanel.enforceCaseSensitivePathChecks, + Some(progress), + settingsPanel.validateUtf8, + maxNumOfLines, + skipFileChecks, + suffix + ) + }, + output = outputToReport(), + resumeUi = { + btnValidate.enabled = true + btnValidateMetadataOnly.enabled = true + btnValidate.peer.setCursor(Cursor.getDefaultCursor) + btnValidateMetadataOnly.peer.setCursor(Cursor.getDefaultCursor) + } + ) + } else doNothingOnClick() } private val separator2 = new Separator @@ -524,7 +528,7 @@ object CsvValidatorUi extends SimpleSwingApplication { val expectedMaxCharsPerCell = convertTextboxValueToInt(maxCharsPerCell, "", _ => (), 4096) val identifierRows = CsvValidatorCmdApp.getColumnFromCsv(csvFile, schemaFile, "identifier", expectedMaxCharsPerCell).sorted - val fromPath = identifierRows.headOption.getOrElse("") + val fromPath = identifierRows.headOption.getOrElse("").strip() val toPathField = new TextField(30) val fromPathField = new TextField(fromPath, 30) @@ -539,12 +543,12 @@ object CsvValidatorUi extends SimpleSwingApplication { Success("Text updated") } - val fileButton = new Button("...") + val fileButton = new Button("Choose...") fileButton.reactions += { case ev: ButtonClicked => val startingDir = if(toPathField.text.isEmpty) userDir.toFile else Path.of(toPathField.text).toFile val fromFolderName = Path.of(fromPathField.text).getFileName - val helpText = s"Select the ${fromFolderName} folder" + val helpText = s"Select the $fromFolderName folder" val fileChooser = new FileChooser(startingDir) fileChooser.multiSelectionEnabled = false fileChooser.title = helpText @@ -610,37 +614,43 @@ object CsvValidatorUi extends SimpleSwingApplication { c.gridx = 1 c.gridy = 2 - c.insets = new Insets(0, 0, 0, 0) + c.insets = new Insets(0, 1, 0, 0) layout(tfDisplayLines) = c c.gridx = 0 c.gridy = 3 + c.insets = new Insets(0, 0, 0, 0) layout(tfMaxColumnCharsLabel) = c c.gridx = 1 c.gridy = 3 + c.insets = new Insets(0, 1, 0, 0) layout(tfMaxColumnChars) = c c.gridx = 0 c.gridy = 4 + c.insets = new Insets(0,-7,0,0) layout(cbFailOnFirstError) = c c.gridx = 0 c.gridy = 5 + c.insets = new Insets(0,-7,0,0) layout(cbEnforceCaseSensitivePathChecks) = c c.gridx = 0 c.gridy = 6 + c.insets = new Insets(0,-7,0,0) layout(cbValidateUtf8) = c c.gridx = 0 c.gridy = 7 - c.insets = new Insets(0,10,0,0) + c.insets = new Insets(5,-2,0,0) layout(lblPathSubstitutions) = c c.gridx = 0 c.gridy = 8 c.gridwidth = 2 + c.insets = new Insets(0,-2,0,0) layout(spTblPathSubstitutions) = c c.gridx = 0 diff --git a/csv-validator-ui/src/main/scala/uk/gov/nationalarchives/csv/validator/ui/ScalaSwingHelpers.scala b/csv-validator-ui/src/main/scala/uk/gov/nationalarchives/csv/validator/ui/ScalaSwingHelpers.scala index d0a550e5..36760813 100644 --- a/csv-validator-ui/src/main/scala/uk/gov/nationalarchives/csv/validator/ui/ScalaSwingHelpers.scala +++ b/csv-validator-ui/src/main/scala/uk/gov/nationalarchives/csv/validator/ui/ScalaSwingHelpers.scala @@ -143,6 +143,11 @@ object ScalaSwingHelpers { action } + def doNothingOnClick(): Reactions.Reaction = { + case evt: ButtonClicked => () + case evt: MouseClicked => () + } + /** * Execute an Action when a specific Key is pressed *