Skip to content
This repository has been archived by the owner on Jan 9, 2025. It is now read-only.

Commit

Permalink
Fixed python tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Juan Pablo Sarmiento committed Nov 15, 2024
1 parent 16fb2af commit 2198b01
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 22 deletions.
8 changes: 7 additions & 1 deletion server/models/workflow/api_schemas.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
"""Workflow schemas that are used in the API."""

from datetime import datetime
from typing import Any

Expand Down Expand Up @@ -35,6 +36,7 @@ class WorkflowUpdate(FullWorkflow):

pass


class ValidationFailure(BaseModel):
"""
A validation failure with a message.
Expand All @@ -44,13 +46,17 @@ class ValidationFailure(BaseModel):
- row_number (int | None) -- The row number of the error. Or None if there
is no row number (e.g. if this is a file type error).
"""

message: str
row_number: int | None = Field(default=None, serialization_alias="rowNumber")


class WorkflowRunReport(BaseModel):
"""Report for a server-side run of a workflow."""

row_count: int = Field(serialization_alias="rowCount")
filename: str
workflow_id: str = Field(serialization_alias="workflowId")
validation_failures: list[ValidationFailure] = Field(serialization_alias="validationFailures")
validation_failures: list[ValidationFailure] = Field(
serialization_alias="validationFailures"
)
62 changes: 41 additions & 21 deletions server/tests/workflow_runner/test_validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,19 @@
from unittest.mock import MagicMock

from server.models.workflow.workflow_schema import (
WorkflowParam,
BasicFieldDataTypeSchema,
FieldSchema,
FileTypeValidation,
ParamReference,
RowCountValidation,
FieldsetSchema,
TimestampDataTypeSchema,
WorkflowParam,
)
from server.workflow_runner.validators import (
ValidationFailure,
WorkflowParamValue,
_check_csv_columns,
_validate_field,
validate_file_type,
Expand Down Expand Up @@ -242,9 +245,9 @@ def test_validate_field_case_insensitive(self):
allow_empty_values=False,
allowed_values=None,
)
self.assertEqual(_validate_field(1, {"Name": "John"}, field, {}), [])
self.assertEqual(_validate_field(1, {"Name": "John"}, field, {}, {}), [])
self.assertEqual(
_validate_field(1, {"Name": ""}, field, {}),
_validate_field(1, {"Name": ""}, field, {}, {}),
[
ValidationFailure(
row_number=1, message="Empty value for the field 'name'"
Expand All @@ -258,26 +261,26 @@ def test_validate_field_allow_empty(self):
"name",
allow_empty_values=True,
)
self.assertEqual(_validate_field(1, {"name": "John"}, field, {}), [])
self.assertEqual(_validate_field(1, {"name": ""}, field, {}), [])
self.assertEqual(_validate_field(1, {"name": None}, field, {}), [])
self.assertEqual(_validate_field(1, {"name": "John"}, field, {}, {}), [])
self.assertEqual(_validate_field(1, {"name": ""}, field, {}, {}), [])
self.assertEqual(_validate_field(1, {"name": None}, field, {}, {}), [])

# now disallow empty values
field = mock_field_schema(
"name",
allow_empty_values=False,
)
self.assertEqual(_validate_field(1, {"name": "John"}, field, {}), [])
self.assertEqual(_validate_field(1, {"name": "John"}, field, {}, {}), [])
self.assertEqual(
_validate_field(1, {"name": ""}, field, {}),
_validate_field(1, {"name": ""}, field, {}, {}),
[
ValidationFailure(
row_number=1, message="Empty value for the field 'name'"
)
],
)
self.assertEqual(
_validate_field(1, {"name": None}, field, {}),
_validate_field(1, {"name": None}, field, {}, {}),
[
ValidationFailure(
row_number=1, message="Empty value for the field 'name'"
Expand All @@ -293,10 +296,10 @@ def test_validate_field_allowed_values(self):
allow_empty_values=False,
allowed_values=["John", "Jane"],
)
self.assertEqual(_validate_field(1, {"name": "John"}, field, {}), [])
self.assertEqual(_validate_field(1, {"name": "Jane"}, field, {}), [])
self.assertEqual(_validate_field(1, {"name": "John"}, field, {}, {}), [])
self.assertEqual(_validate_field(1, {"name": "Jane"}, field, {}, {}), [])
self.assertEqual(
_validate_field(1, {"name": "Bob"}, field, {}),
_validate_field(1, {"name": "Bob"}, field, {}, {}),
[
ValidationFailure(
row_number=1, message="Value 'Bob' is not allowed for field 'name'"
Expand All @@ -310,13 +313,27 @@ def test_validate_field_allowed_values_from_param(self):
required=True,
case_sensitive=True,
allow_empty_values=False,
allowed_values=ParamReference(paramId="allowed_names"),
allowed_values=ParamReference(paramId="allowed_names_uuid"),
)
param_schemas = {
"allowed_names_uuid": WorkflowParam(
id="allowed_names_uuid",
name="allowed_names",
displayName="Allowed names",
required=True,
description="",
type="string list",
)
}
params: dict[str, WorkflowParamValue] = {"allowed_names": ["John", "Jane"]}
self.assertEqual(
_validate_field(1, {"name": "John"}, field, param_schemas, params), []
)
self.assertEqual(
_validate_field(1, {"name": "Jane"}, field, param_schemas, params), []
)
params = {"allowed_names": ["John", "Jane"]}
self.assertEqual(_validate_field(1, {"name": "John"}, field, params), [])
self.assertEqual(_validate_field(1, {"name": "Jane"}, field, params), [])
self.assertEqual(
_validate_field(1, {"name": "Bob"}, field, params),
_validate_field(1, {"name": "Bob"}, field, param_schemas, params),
[
ValidationFailure(
row_number=1, message="Value 'Bob' is not allowed for field 'name'"
Expand All @@ -333,10 +350,10 @@ def test_validate_field_number_type(self):
allowed_values=None,
data_type_validation=BasicFieldDataTypeSchema(dataType="number"),
)
self.assertEqual(_validate_field(1, {"age": "42"}, field, {}), [])
self.assertEqual(_validate_field(1, {"age": "42.0"}, field, {}), [])
self.assertEqual(_validate_field(1, {"age": "42"}, field, {}, {}), [])
self.assertEqual(_validate_field(1, {"age": "42.0"}, field, {}, {}), [])
self.assertEqual(
_validate_field(1, {"age": "42.0.0"}, field, {}),
_validate_field(1, {"age": "42.0.0"}, field, {}, {}),
[
ValidationFailure(
row_number=1,
Expand All @@ -356,9 +373,9 @@ def test_validate_field_timestamp_type(self):
dataType="timestamp", dateTimeFormat="%Y-%m-%d"
),
)
self.assertEqual(_validate_field(1, {"date": "2021-01-01"}, field, {}), [])
self.assertEqual(_validate_field(1, {"date": "2021-01-01"}, field, {}, {}), [])
self.assertEqual(
_validate_field(1, {"date": "2021-01-01 00:00:00.000"}, field, {}),
_validate_field(1, {"date": "2021-01-01 00:00:00.000"}, field, {}, {}),
[
ValidationFailure(
row_number=1,
Expand Down Expand Up @@ -406,6 +423,7 @@ def test_validate_fieldset_with_bad_data(self):
[{"name": "John", "age": "42", "city": "New York"}],
fieldset_schema,
{},
{},
),
[],
)
Expand All @@ -415,6 +433,7 @@ def test_validate_fieldset_with_bad_data(self):
[{"name": "John", "age": "42", "city": ""}],
fieldset_schema,
{},
{},
),
[
ValidationFailure(
Expand All @@ -428,6 +447,7 @@ def test_validate_fieldset_with_bad_data(self):
[{"name": "John", "age": None, "city": "New York"}],
fieldset_schema,
{},
{},
),
[
ValidationFailure(
Expand Down

0 comments on commit 2198b01

Please sign in to comment.