Exemplo n.º 1
0
def test_load_from_disk_with_data(
        mock_read_persisted_options: MagicMock,
        mock_get_persisted_options_from_data: MagicMock,
        mock_set_field: MagicMock, fields_to_test: List[str], option: Options):
    # Setup
    persisted_options = {
        field_name: MagicMock()
        for field_name in fields_to_test
    }
    new_serializers = {
        field_name: MagicMock()
        for field_name in fields_to_test
    }
    mock_get_persisted_options_from_data.return_value = persisted_options

    # Run
    with patch.dict(randovania.interface_common.options._SERIALIZER_FOR_FIELD,
                    new_serializers):
        option.load_from_disk()

    # Assert
    mock_read_persisted_options.assert_called_once_with(option)
    mock_get_persisted_options_from_data.assert_called_once_with(
        mock_read_persisted_options.return_value)
    for field_name, serializer in new_serializers.items():
        serializer.decode.assert_called_once_with(
            persisted_options[field_name])

    mock_set_field.assert_has_calls(
        call(option, field_name,
             new_serializers[field_name].decode.return_value)
        for field_name in fields_to_test)
Exemplo n.º 2
0
def test_load_from_disk_no_data(
        mock_read_persisted_options: MagicMock,
        mock_get_persisted_options_from_data: MagicMock, option: Options):
    # Run
    option.load_from_disk()

    # Assert
    mock_read_persisted_options.assert_called_once_with(option)
    mock_get_persisted_options_from_data.assert_not_called()
Exemplo n.º 3
0
def test_load_from_disk_missing_json(ignore_decode_errors: bool, tmpdir):
    # Setup
    option = Options(Path(tmpdir))
    tmpdir.join("config.json").write_text("", "utf-8")

    if ignore_decode_errors:
        result = option.load_from_disk(ignore_decode_errors)
        assert result != ignore_decode_errors
    else:
        with pytest.raises(DecodeFailedException):
            option.load_from_disk(ignore_decode_errors)
Exemplo n.º 4
0
def test_load_from_disk_no_data(tmp_path, mocker):
    # Setup
    mock_get_persisted_options_from_data: MagicMock = mocker.patch(
        "randovania.interface_common.persisted_options.get_persisted_options_from_data",
        autospec=True)
    option = Options(tmp_path)

    # Run
    option.load_from_disk()

    # Assert
    mock_get_persisted_options_from_data.assert_not_called()
Exemplo n.º 5
0
def test_mark_alert_as_displayed(tmp_path):
    opt = Options(tmp_path)

    all_alerts = (InfoAlert.FAQ, InfoAlert.MULTIWORLD_FAQ)
    for alert in all_alerts:
        assert not opt.is_alert_displayed(alert)
        opt.mark_alert_as_displayed(alert)
        assert opt.is_alert_displayed(alert)

    assert opt.displayed_alerts == set(all_alerts)

    new_opt = Options(tmp_path)
    new_opt.load_from_disk()
    assert new_opt.displayed_alerts == set(all_alerts)
Exemplo n.º 6
0
def test_load_from_disk_first_failure(tmp_path, mocker):
    persisted_result = MagicMock()
    mocker.patch(
        "randovania.interface_common.persisted_options.find_config_files",
        autospec=True,
        return_value=[
            "[1]",
            "[2]",
        ])
    mock_get_persisted_options_from_data = mocker.patch(
        "randovania.interface_common.persisted_options.get_persisted_options_from_data",
        autospec=True,
        side_effect=[
            migration_lib.UnsupportedVersion(),
            persisted_result,
        ])
    option = Options(tmp_path)
    option.load_from_persisted = MagicMock()

    # Run
    result = option.load_from_disk(True)

    # Assert
    assert result
    option.load_from_persisted.assert_called_once_with(persisted_result, True)
    mock_get_persisted_options_from_data.assert_has_calls([
        call([1]),
        call([2]),
    ])
Exemplo n.º 7
0
def test_load_from_disk_invalid_json(ignore_decode_errors: bool, tmpdir):
    # Setup
    option = Options(Path(tmpdir))
    tmpdir.join("config.json").write_text(
        json.dumps(
            randovania.interface_common.persisted_options.
            serialized_data_for_options(
                {"cosmetic_patches": {
                    "pickup_model_style": "invalid-value"
                }})), "utf-8")

    if ignore_decode_errors:
        result = option.load_from_disk(ignore_decode_errors)
        assert result != ignore_decode_errors
    else:
        with pytest.raises(DecodeFailedException):
            option.load_from_disk(ignore_decode_errors)
Exemplo n.º 8
0
def load_options_from_disk(options: Options) -> bool:
    try:
        options.load_from_disk()
        return True

    except DecodeFailedException as decode_failed:
        user_response = QMessageBox.critical(
            None, "Error loading previous settings",
            ("The following error occurred while restoring your settings:\n"
             "{}\n\n"
             "Do you want to reset this part of your settings?"
             ).format(decode_failed), QMessageBox.Yes | QMessageBox.No,
            QMessageBox.No)
        if user_response == QMessageBox.Yes:
            options.load_from_disk(True)
            return True
        else:
            return False
Exemplo n.º 9
0
def test_edit_during_options_changed(tmpdir):
    # Setup
    option = Options(Path(tmpdir))
    option._output_directory = Path("start")

    def on_changed():
        with option:
            option.output_directory = Path("final")

    option.on_options_changed = on_changed

    # Run
    with option:
        option.output_directory = Path("middle")

    second_option = Options(Path(tmpdir))
    second_option.load_from_disk()

    # Assert
    assert option.output_directory == Path("final")
    assert option.output_directory == second_option.output_directory
Exemplo n.º 10
0
def test_edit_during_options_changed(tmpdir):
    # Setup
    option = Options(Path(tmpdir))
    option._selected_tracker = "start"

    def on_changed():
        with option:
            option.selected_tracker = "final"

    option.on_options_changed = on_changed

    # Run
    with option:
        option.selected_tracker = "middle"

    second_option = Options(Path(tmpdir))
    second_option.load_from_disk()

    # Assert
    assert option.selected_tracker == "final"
    assert option.selected_tracker == second_option.selected_tracker
Exemplo n.º 11
0
def test_load_from_disk_with_data(fields_to_test: list[str], tmp_path, mocker):
    # Setup
    mock_get_persisted_options_from_data: MagicMock = mocker.patch(
        "randovania.interface_common.persisted_options.get_persisted_options_from_data",
        autospec=True)
    mock_set_field: MagicMock = mocker.patch(
        "randovania.interface_common.options.Options._set_field",
        autospec=True)
    tmp_path.joinpath("config.json").write_text("[1, 2, 54, 69]")

    option = Options(tmp_path)

    persisted_options = {
        field_name: MagicMock()
        for field_name in fields_to_test
    }
    new_serializers = {
        field_name: MagicMock()
        for field_name in fields_to_test
    }
    mock_get_persisted_options_from_data.return_value = persisted_options

    # Run
    with patch.dict(randovania.interface_common.options._SERIALIZER_FOR_FIELD,
                    new_serializers):
        option.load_from_disk()

    # Assert
    mock_get_persisted_options_from_data.assert_called_once_with(
        [1, 2, 54, 69])
    for field_name, serializer in new_serializers.items():
        serializer.decode.assert_called_once_with(
            persisted_options[field_name])

    mock_set_field.assert_has_calls([
        call(option, field_name,
             new_serializers[field_name].decode.return_value)
        for field_name in fields_to_test
    ])
Exemplo n.º 12
0
async def load_options_from_disk(options: Options) -> bool:
    parent: QtWidgets.QWidget = None
    try:
        options.load_from_disk()
        return True

    except DecodeFailedException as decode_failed:
        user_response = await async_dialog.message_box(
            parent,
            QtWidgets.QMessageBox.Critical,
            "Error loading previous settings",
            ("The following error occurred while restoring your settings:\n"
             "{}\n\n"
             "Do you want to reset this part of your settings?"
             ).format(decode_failed),
            QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No,
            QtWidgets.QMessageBox.No,
        )
        if user_response == QtWidgets.QMessageBox.Yes:
            options.load_from_disk(True)
            return True
        else:
            logging.exception("")
            return False
Exemplo n.º 13
0
def test_load_from_disk_first_successful(tmp_path, mocker):
    mocker.patch(
        "randovania.interface_common.persisted_options.find_config_files",
        autospec=True,
        return_value=[
            "[1]",
            "[2]",
        ])
    mock_get_persisted_options_from_data = mocker.patch(
        "randovania.interface_common.persisted_options.get_persisted_options_from_data",
        autospec=True,
    )
    option = Options(tmp_path)
    option.load_from_persisted = MagicMock()

    # Run
    result = option.load_from_disk(False)

    # Assert
    assert result
    option.load_from_persisted.assert_called_once_with(
        mock_get_persisted_options_from_data.return_value, False)
    mock_get_persisted_options_from_data.assert_called_once_with([1])