def test_load_data_from_file_error() -> None:
    """
    Check how we handle errors in case
    when file can't be loaded or parsed
    :return: None
    """
    filemanager = GrinderFileManager()
    with raises(GrinderFileManagerOpenError):
        filemanager.load_data_from_file(
            load_dir="totally", load_json_dir="wrong", load_file="path.json"
        )
def test_load_data_from_malformed_file_error() -> None:
    """
    Check case when JSON is malformed but needed
    to be loaded
    :return: None
    """
    filemanager = GrinderFileManager()
    with raises(GrinderFileManagerJsonDecoderError):
        filemanager.load_data_from_file(
            load_dir=str(TestDefaultFilemanagerValues.TEST_DATA_PATH),
            load_json_dir="test_queries",
            load_file=TestDefaultFilemanagerValues.TEST_MALFORMED_FILE,
        )
def test_load_data_from_file_success() -> None:
    """
    Originally this function is used to load results
    file, but in case of functionality we can check
    that this function can load any other
    json file (because results - is just dumped
    dicts)
    :return: None
    """
    filemanager = GrinderFileManager()
    queries = filemanager.load_data_from_file(
        load_dir=str(TestDefaultFilemanagerValues.TEST_DATA_PATH),
        load_json_dir="test_queries",
        load_file=TestDefaultFilemanagerValues.TEST_QUERIES_FILE,
    )
    for query_obj in queries:
        assert sorted(query_obj.keys()) == sorted(
            [
                "vendor",
                "product",
                "shodan_queries",
                "censys_queries",
                "scripts",
                "vendor_confidence",
            ]
        )
        assert (
            isinstance(query_obj.get("vendor"), str) and query_obj.get("vendor") != ""
        )
        assert (
            isinstance(query_obj.get("product"), str) and query_obj.get("product") != ""
        )
        assert (
            isinstance(query_obj.get("shodan_queries"), list)
            and query_obj.get("shodan_queries") != []
        )
        for query in query_obj.get("shodan_queries"):
            assert sorted(query.keys()) == sorted(["query", "query_confidence"])
        assert (
            isinstance(query_obj.get("censys_queries"), list)
            and query_obj.get("censys_queries") != []
        )
        for query in query_obj.get("censys_queries"):
            assert sorted(query.keys()) == sorted(["query", "query_confidence"])
        assert sorted(query_obj.get("scripts").keys()) == sorted(
            ["py_script", "nse_script"]
        )
        assert (
            isinstance(query_obj.get("vendor_confidence"), str)
            and query_obj.get("vendor_confidence") != ""
        )