jalan-api / src /tests /test_template_validations.py
sairusses's picture
add
b400ace
import os
from pathlib import Path
from src.tests.test_samples.sample1.boilerplate import TEMPLATE_BOILERPLATE
from src.tests.utils import (
generate_write_jsons_and_run,
run_entry_point,
setup_mocker_patches,
)
FROZEN_TIMESTAMP = "1970-01-01"
CURRENT_DIR = Path("src/tests")
BASE_SAMPLE_PATH = CURRENT_DIR.joinpath("test_samples", "sample1")
BASE_SAMPLE_TEMPLATE_PATH = BASE_SAMPLE_PATH.joinpath("template.json")
def run_sample(mocker, input_path):
setup_mocker_patches(mocker)
output_dir = os.path.join("outputs", input_path)
run_entry_point(input_path, output_dir)
write_jsons_and_run = generate_write_jsons_and_run(
run_sample,
sample_path=BASE_SAMPLE_PATH,
template_boilerplate=TEMPLATE_BOILERPLATE,
)
def test_no_input_dir(mocker):
try:
run_sample(mocker, "X")
except Exception as e:
assert str(e) == "Given input directory does not exist: 'X'"
def test_no_template(mocker):
if os.path.exists(BASE_SAMPLE_TEMPLATE_PATH):
os.remove(BASE_SAMPLE_TEMPLATE_PATH)
try:
run_sample(mocker, BASE_SAMPLE_PATH)
except Exception as e:
assert (
str(e)
== "No template file found in the directory tree of src/tests/test_samples/sample1"
)
def test_empty_template(mocker):
def modify_template(_):
return {}
exception = write_jsons_and_run(mocker, modify_template=modify_template)
assert (
str(exception)
== f"Provided Template JSON is Invalid: '{BASE_SAMPLE_TEMPLATE_PATH}'"
)
def test_invalid_field_type(mocker):
def modify_template(template):
template["fieldBlocks"]["MCQ_Block_1"]["fieldType"] = "X"
exception = write_jsons_and_run(mocker, modify_template=modify_template)
assert (
str(exception)
== f"Provided Template JSON is Invalid: '{BASE_SAMPLE_TEMPLATE_PATH}'"
)
def test_overflow_labels(mocker):
def modify_template(template):
template["fieldBlocks"]["MCQ_Block_1"]["fieldLabels"] = ["q1..100"]
exception = write_jsons_and_run(mocker, modify_template=modify_template)
assert (
str(exception)
== "Overflowing field block 'MCQ_Block_1' with origin [65, 60] and dimensions [189, 5173] in template with dimensions [300, 400]"
)
def test_overflow_safe_dimensions(mocker):
def modify_template(template):
template["pageDimensions"] = [255, 400]
exception = write_jsons_and_run(mocker, modify_template=modify_template)
assert str(exception) == "No Error"
def test_field_strings_overlap(mocker):
def modify_template(template):
template["fieldBlocks"] = {
**template["fieldBlocks"],
"New_Block": {
**template["fieldBlocks"]["MCQ_Block_1"],
"fieldLabels": ["q5"],
},
}
exception = write_jsons_and_run(mocker, modify_template=modify_template)
assert str(exception) == (
"The field strings for field block New_Block overlap with other existing fields"
)
def test_custom_label_strings_overlap_single(mocker):
def modify_template(template):
template["customLabels"] = {
"label1": ["q1..2", "q2..3"],
}
exception = write_jsons_and_run(mocker, modify_template=modify_template)
assert (
str(exception)
== "Given field string 'q2..3' has overlapping field(s) with other fields in 'Custom Label: label1': ['q1..2', 'q2..3']"
)
def test_custom_label_strings_overlap_multiple(mocker):
def modify_template(template):
template["customLabels"] = {
"label1": ["q1..2"],
"label2": ["q2..3"],
}
exception = write_jsons_and_run(mocker, modify_template=modify_template)
assert (
str(exception)
== "The field strings for custom label 'label2' overlap with other existing custom labels"
)
def test_missing_field_block_labels(mocker):
def modify_template(template):
template["customLabels"] = {"Combined": ["qX", "qY"]}
exception = write_jsons_and_run(mocker, modify_template=modify_template)
assert (
str(exception)
== "Missing field block label(s) in the given template for ['qX', 'qY'] from 'Combined'"
)
def test_missing_output_columns(mocker):
def modify_template(template):
template["outputColumns"] = ["qX", "q1..5"]
exception = write_jsons_and_run(mocker, modify_template=modify_template)
assert str(exception) == (
"Some columns are missing in the field blocks for the given output columns"
)
def test_safe_missing_label_columns(mocker):
def modify_template(template):
template["outputColumns"] = ["q1..4"]
exception = write_jsons_and_run(mocker, modify_template=modify_template)
assert str(exception) == "No Error"