Skip to content
Snippets Groups Projects
Commit caf47cb1 authored by Neda Moeini's avatar Neda Moeini
Browse files

Add unittests for form validator

parent cf96902b
No related branches found
No related tags found
1 merge request!2Feature/unit test for validations
......@@ -99,7 +99,7 @@ def mock_meo_database(mocker):
supplier_mock = MagicMock()
supplier_mock.all.return_value = [
MeoValidSuppliers(supplier_account_number=str(fake.random_int(min=10000, max=99999)), supplier_account_name=fake.company()),
MeoValidSuppliers(supplier_account_number="12345", supplier_account_name=fake.company())
MeoValidSuppliers(supplier_account_number="12345", supplier_account_name="Sample Narrative")
]
mocker.patch("sage_validation.file_validator.models.MeoValidSuppliers.objects.using", return_value=supplier_mock)
......
import csv
import io
from django.core.files.uploadedfile import SimpleUploadedFile
from sage_validation.file_validator.forms import CSVUploadForm
def test_valid_csv_upload(sample_input_file, mock_meo_database):
"""Test CSV upload with valid data."""
form = CSVUploadForm(files={"file": sample_input_file})
assert form.is_valid(), f"Form errors: {form.errors}"
def test_invalid_file_extension():
"""Test form rejects non-CSV files."""
bad_file = SimpleUploadedFile("test.txt", b"Some text content", content_type="text/plain")
form = CSVUploadForm(files={"file": bad_file})
assert not form.is_valid()
assert "File must be in CSV format." in form.errors["file"]
def test_missing_required_columns():
"""Test form rejects CSV missing required headers."""
invalid_csv = SimpleUploadedFile("test.csv", b"AccountNumber,CBAccountNumber\n12345,54321", content_type="text/csv")
form = CSVUploadForm(files={"file": invalid_csv})
assert not form.is_valid()
assert "Missing required columns" in str(form.errors)
def test_source_and_trader_type_validation(sample_input_file, mock_meo_database):
"""Test validation for Source and SYSTraderTranType columns."""
csv_content = sample_input_file.read().decode("utf-8").splitlines()
reader = csv.DictReader(csv_content)
rows = list(reader)
# Modify the first row's "Source" and "SYSTraderTranType" values
rows[0]["Source"] = "90" # Change Source from 80 to 90
rows[0]["SYSTraderTranType"] = "5" # Change SYSTraderTranType from 4 to 5
# Rebuild the CSV with modified values
output = io.StringIO()
writer = csv.DictWriter(output, fieldnames=reader.fieldnames)
writer.writeheader()
writer.writerows(rows)
modified_file = SimpleUploadedFile("test_modified.csv", output.getvalue().encode("utf-8"), content_type="text/csv")
form = CSVUploadForm(files={"file": modified_file})
assert not form.is_valid(), "Form should be invalid due to incorrect Source and SYSTraderTranType values"
assert "Row 1: 'Source' must be 80" in form.errors["file"][0]
assert "Row 1: 'SYSTraderTranType' must be 4" in form.errors["file"][1]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment