from textwrap import dedent import pytest from core.helper.position_helper import get_position_map, is_filtered, pin_position_map, sort_by_position_map @pytest.fixture def prepare_example_positions_yaml(tmp_path, monkeypatch) -> str: monkeypatch.chdir(tmp_path) tmp_path.joinpath("example_positions.yaml").write_text( dedent( """\ - first - second # - commented - third - 9999999999999 - forth """ ) ) return str(tmp_path) @pytest.fixture def prepare_empty_commented_positions_yaml(tmp_path, monkeypatch) -> str: monkeypatch.chdir(tmp_path) tmp_path.joinpath("example_positions_all_commented.yaml").write_text( dedent( """\ # - commented1 # - commented2 - - """ ) ) return str(tmp_path) def test_position_helper(prepare_example_positions_yaml): position_map = get_position_map(folder_path=prepare_example_positions_yaml, file_name="example_positions.yaml") assert len(position_map) == 4 assert position_map == { "first": 0, "second": 1, "third": 2, "forth": 3, } def test_position_helper_with_all_commented(prepare_empty_commented_positions_yaml): position_map = get_position_map( folder_path=prepare_empty_commented_positions_yaml, file_name="example_positions_all_commented.yaml" ) assert position_map == {} def test_excluded_position_data(prepare_example_positions_yaml): position_map = get_position_map(folder_path=prepare_example_positions_yaml, file_name="example_positions.yaml") pin_list = ["forth", "first"] include_set = set() exclude_set = {"9999999999999"} position_map = pin_position_map(original_position_map=position_map, pin_list=pin_list) data = [ "forth", "first", "second", "third", "9999999999999", "extra1", "extra2", ] # filter out the data data = [item for item in data if not is_filtered(include_set, exclude_set, item, lambda x: x)] # sort data by position map sorted_data = sort_by_position_map( position_map=position_map, data=data, name_func=lambda x: x, ) # assert the result in the correct order assert sorted_data == ["forth", "first", "second", "third", "extra1", "extra2"] def test_included_position_data(prepare_example_positions_yaml): position_map = get_position_map(folder_path=prepare_example_positions_yaml, file_name="example_positions.yaml") pin_list = ["forth", "first"] include_set = {"forth", "first"} exclude_set = {} position_map = pin_position_map(original_position_map=position_map, pin_list=pin_list) data = [ "forth", "first", "second", "third", "9999999999999", "extra1", "extra2", ] # filter out the data data = [item for item in data if not is_filtered(include_set, exclude_set, item, lambda x: x)] # sort data by position map sorted_data = sort_by_position_map( position_map=position_map, data=data, name_func=lambda x: x, ) # assert the result in the correct order assert sorted_data == ["forth", "first"]