Skip to content
Snippets Groups Projects
test_API.py 3.52 KiB
Newer Older
Benedikt's avatar
Benedikt committed
from fastapi.testclient import TestClient
from restAPIServer import app

client = TestClient(app)

def test_convert_to_utf8():
    response = client.post("/convert/utf8/", json={"unit_string": r"\metre"})
    assert response.status_code == 200
    assert response.json() == ["m"]

def test_convert_to_latex():
    response = client.post("/convert/latex/", json={"unit_string": r"\metre\tothe{2}"})
    assert response.status_code == 200
    assert response.json() == ['$$\\mathrm{m}^{2}$$'] # Adjust based on actual response structure

def test_compare_units_equal():
    response = client.post("/compare/units/", json={"unit_string1": r"\watt", "unit_string2": r"\joule\per\second"})
    assert response.status_code == 200
    assert response.json() == {'scale_factor': 1.0, 'base_unit': '\\kilogram\\metre\\tothe{2}\\second\\tothe{-3}'}  # Example expected response

def test_compare_units_not_equal():
    response = client.post("/compare/units/", json={"unit_string1": r"\metre", "unit_string2": r"\second"})
    assert response.status_code == 200
    assert "error" in response.json()  # Checking for error message

def test_compare_units_not_equal_but_equal_WithCompleate():
    response = client.post("/compare/units/", json={"unit_string1": r"\one", "unit_string2": r"\percent", })
    assert response.status_code == 200
    assert "error" in response.json()  # Checking for error message
    response = client.post("/compare/units/", json={"unit_string1": r"\one", "unit_string2": r"\percent", "complete":True})
    assert response.status_code == 200
    assert response.json()  ==  {'scale_factor': 0.01, 'base_unit': '\\one'}

def test_invalid_unit():
    response = client.post("/convert/utf8/", json={"unit_string": "not_a_unit"})
    assert response.status_code == 500  # Assuming your API returns 500 for invalid units


def test_parse_xml():
    xml_content = """<root>
        <si:unit>\metre</si:unit>
        <si:unitXMLList>\metre \second \kilogram</si:unitXMLList>
        <si:unit>not_a_unit</si:unit>
        <si:unit>\seconds</si:unit>
    </root>
    """
    response = client.post("/validateUnitsInXML/", json={"xml": xml_content})
    assert response.status_code == 200
    result = response.json()

    assert "valid_units" in result
    assert "invalid_units" in result

    valid_units = result["valid_units"]
    invalid_units = result["invalid_units"]

    # Check valid units
    assert "2" in valid_units  # Line number for <si:unit>\metre</si:unit>
    assert valid_units["2"] == "\\metre"

    assert "3:0" in valid_units  # Line number and index for the first entry in <si:unitXMLList>
    assert valid_units["3:0"] == "\\metre"
    assert "3:1" in valid_units  # Line number and index for the second entry in <si:unitXMLList>
    assert valid_units["3:1"] == "\\second"
    assert "3:2" in valid_units  # Line number and index for the third entry in <si:unitXMLList>
    assert valid_units["3:2"] == "\\kilogram"

    # Check invalid units
    assert "4" in invalid_units  # Line number for <si:unit>not_a_unit</si:unit>
    assert invalid_units["4"]['unit'] == "not_a_unit"
    assert invalid_units["4"]['warnings']==[r'String should start with \, string given was «not_a_unit»',
     r'The identifier «not_a_unit» does not match any D-SI units!']
    # Check invalid units
    assert "5" in invalid_units  # Line number for <si:unit>not_a_unit</si:unit>
    assert invalid_units["5"]['unit'] == "\seconds"
    assert invalid_units["5"]['warnings']==[r'The identifier «seconds» does not match any D-SI units! Did you mean one of these «\second, \arcsecond»?']