File size: 2,143 Bytes
4304c6d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
from textwrap import dedent

import pytest
from yaml import YAMLError

from core.tools.utils.yaml_utils import load_yaml_file

EXAMPLE_YAML_FILE = 'example_yaml.yaml'
INVALID_YAML_FILE = 'invalid_yaml.yaml'
NON_EXISTING_YAML_FILE = 'non_existing_file.yaml'


@pytest.fixture
def prepare_example_yaml_file(tmp_path, monkeypatch) -> str:
    monkeypatch.chdir(tmp_path)
    file_path = tmp_path.joinpath(EXAMPLE_YAML_FILE)
    file_path.write_text(dedent(
        """\

        address:

            city: Example City

            country: Example Country

        age: 30

        gender: male

        languages:

            - Python

            - Java

            - C++

        empty_key:

        """))
    return str(file_path)


@pytest.fixture
def prepare_invalid_yaml_file(tmp_path, monkeypatch) -> str:
    monkeypatch.chdir(tmp_path)
    file_path = tmp_path.joinpath(INVALID_YAML_FILE)
    file_path.write_text(dedent(
        """\

        address:

                   city: Example City

            country: Example Country

        age: 30

        gender: male

        languages:

        - Python

        - Java

        - C++

        """))
    return str(file_path)


def test_load_yaml_non_existing_file():
    assert load_yaml_file(file_path=NON_EXISTING_YAML_FILE) == {}
    assert load_yaml_file(file_path='') == {}


def test_load_valid_yaml_file(prepare_example_yaml_file):
    yaml_data = load_yaml_file(file_path=prepare_example_yaml_file)
    assert len(yaml_data) > 0
    assert yaml_data['age'] == 30
    assert yaml_data['gender'] == 'male'
    assert yaml_data['address']['city'] == 'Example City'
    assert set(yaml_data['languages']) == {'Python', 'Java', 'C++'}
    assert yaml_data.get('empty_key') is None
    assert yaml_data.get('non_existed_key') is None


def test_load_invalid_yaml_file(prepare_invalid_yaml_file):
    # yaml syntax error
    with pytest.raises(YAMLError):
        load_yaml_file(file_path=prepare_invalid_yaml_file)

    # ignore error
    assert load_yaml_file(file_path=prepare_invalid_yaml_file, ignore_error=True) == {}