def test_put_is_updating_and_previous_value_cannot_be_used_to_filter(
        controller: layabase.CRUDController, mock_mongo_audit_datetime):
    controller.post({
        "key": "my_key1",
        "mandatory": 1,
        "optional": "my_value1"
    })
    controller.put({"key": "my_key1", "optional": "my_value"})
    assert controller.get({"optional": "my_value1"}) == []
    assert controller.get_audit({}) == [
        {
            "audit_action": "Insert",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "key": "my_key1",
            "mandatory": 1,
            "optional": "my_value1",
            "revision": 1,
        },
        {
            "audit_action": "Update",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "key": "my_key1",
            "mandatory": 1,
            "optional": "my_value",
            "revision": 2,
        },
    ]
def test_audit_filter_on_audit_collection_is_returning_only_selected_data(
        controller: layabase.CRUDController, mock_mongo_audit_datetime):
    controller.post({
        "key": "my_key1",
        "mandatory": 1,
        "optional": "my_value1"
    })
    controller.put({"key": "my_key1", "mandatory": 2})
    controller.delete({"key": "my_key1"})
    assert controller.get_audit({"audit_action": "Update"}) == [{
        "audit_action":
        "Update",
        "audit_date_utc":
        "2018-10-11T15:05:05.663000",
        "audit_user":
        "",
        "key":
        "my_key1",
        "mandatory":
        2,
        "optional":
        "my_value1",
        "revision":
        2,
    }]
def test_revision_on_versioned_audit_after_put_failure(
    controllers,
    controller_versioned: layabase.CRUDController,
    mock_mongo_audit_datetime,
):
    controller_versioned.post({"key": "my_key", "enum_fld": EnumTest.Value1})
    with pytest.raises(ModelCouldNotBeFound):
        controller_versioned.put({
            "key": "my_key2",
            "enum_fld": EnumTest.Value2
        })
    controller_versioned.delete({"key": "my_key"})
    assert controller_versioned.get_audit({}) == [
        {
            "audit_action": "Insert",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "revision": 1,
            "table_name": "test_versioned",
        },
        {
            "audit_action": "Delete",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "revision": 2,
            "table_name": "test_versioned",
        },
    ]
def test_post_many_with_empty_list_is_invalid(
        controller: layabase.CRUDController):
    with pytest.raises(layabase.ValidationFailed) as exception_info:
        controller.post_many([])
    assert exception_info.value.errors == {"": ["No data provided."]}
    assert exception_info.value.received_data == []
    assert controller.get_audit({}) == []
def test_post_without_key_is_invalid(controller: layabase.CRUDController):
    with pytest.raises(layabase.ValidationFailed) as exception_info:
        controller.post({"mandatory": 1})
    assert exception_info.value.errors == {
        "key": ["Missing data for required field."]
    }
    assert exception_info.value.received_data == {"mandatory": 1}
    assert controller.get_audit({}) == []
def test_post_with_wrong_type_is_invalid(controller: layabase.CRUDController):
    with pytest.raises(layabase.ValidationFailed) as exception_info:
        controller.post({"key": datetime.date(2007, 12, 5), "mandatory": 1})
    assert exception_info.value.errors == {"key": ["Not a valid str."]}
    assert exception_info.value.received_data == {
        "key": datetime.date(2007, 12, 5),
        "mandatory": 1,
    }
    assert controller.get_audit({}) == []
def test_put_many_is_valid(controller: layabase.CRUDController,
                           mock_mongo_audit_datetime):
    controller.post_many([{
        "key": "my_key",
        "mandatory": 1
    }, {
        "key": "my_key2",
        "mandatory": 2
    }])
    controller.put_many([{
        "key": "my_key",
        "optional": "test"
    }, {
        "key": "my_key2",
        "mandatory": 3
    }])
    assert controller.get_audit({}) == [
        {
            "audit_action": "Insert",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "key": "my_key",
            "mandatory": 1,
            "optional": None,
            "revision": 1,
        },
        {
            "audit_action": "Insert",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "key": "my_key2",
            "mandatory": 2,
            "optional": None,
            "revision": 2,
        },
        {
            "audit_action": "Update",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "key": "my_key",
            "mandatory": 1,
            "optional": "test",
            "revision": 3,
        },
        {
            "audit_action": "Update",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "key": "my_key2",
            "mandatory": 3,
            "optional": None,
            "revision": 4,
        },
    ]
Exemplo n.º 8
0
def test_versioned_int_primary_key_is_reset_after_delete(
    controller: layabase.CRUDController, mock_mongo_audit_datetime
):
    assert controller.post({"other": "test1"}) == {
        "key": 1,
        "other": "test1",
        "valid_since_revision": 1,
        "valid_until_revision": -1,
    }
    assert controller.delete({}) == 1
    assert controller.post({"other": "test1"}) == {
        "key": 1,
        "other": "test1",
        "valid_since_revision": 3,
        "valid_until_revision": -1,
    }
    assert controller.get_audit({}) == [
        {
            "audit_action": "Insert",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "revision": 1,
            "table_name": "test",
        },
        {
            "audit_action": "Delete",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "revision": 2,
            "table_name": "test",
        },
        {
            "audit_action": "Insert",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "revision": 3,
            "table_name": "test",
        },
    ]
    assert controller.get_history({}) == [
        {
            "key": 1,
            "other": "test1",
            "valid_since_revision": 1,
            "valid_until_revision": 2,
        },
        {
            "key": 1,
            "other": "test1",
            "valid_since_revision": 3,
            "valid_until_revision": -1,
        },
    ]
def test_delete_without_filter_is_removing_everything(
        controller: layabase.CRUDController, mock_mongo_audit_datetime):
    controller.post({
        "key": "my_key1",
        "mandatory": 1,
        "optional": "my_value1"
    })
    controller.post({
        "key": "my_key2",
        "mandatory": 2,
        "optional": "my_value2"
    })
    assert 2 == controller.delete({})
    assert [] == controller.get({})
    assert controller.get_audit({}) == [
        {
            "audit_action": "Insert",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "key": "my_key1",
            "mandatory": 1,
            "optional": "my_value1",
            "revision": 1,
        },
        {
            "audit_action": "Insert",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "key": "my_key2",
            "mandatory": 2,
            "optional": "my_value2",
            "revision": 2,
        },
        {
            "audit_action": "Delete",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "key": "my_key1",
            "mandatory": 1,
            "optional": "my_value1",
            "revision": 3,
        },
        {
            "audit_action": "Delete",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "key": "my_key2",
            "mandatory": 2,
            "optional": "my_value2",
            "revision": 4,
        },
    ]
Exemplo n.º 10
0
def test_get_without_filter_is_retrieving_everything_with_multiple_posts(
        controller: layabase.CRUDController, mock_mongo_audit_datetime):
    controller.post({
        "key": "my_key1",
        "mandatory": 1,
        "optional": "my_value1"
    })
    controller.post({
        "key": "my_key2",
        "mandatory": 2,
        "optional": "my_value2"
    })
    assert controller.get({}) == [
        {
            "key": "my_key1",
            "mandatory": 1,
            "optional": "my_value1"
        },
        {
            "key": "my_key2",
            "mandatory": 2,
            "optional": "my_value2"
        },
    ]
    assert controller.get_audit({}) == [
        {
            "audit_action": "Insert",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "key": "my_key1",
            "mandatory": 1,
            "optional": "my_value1",
            "revision": 1,
        },
        {
            "audit_action": "Insert",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "key": "my_key2",
            "mandatory": 2,
            "optional": "my_value2",
            "revision": 2,
        },
    ]
Exemplo n.º 11
0
def test_post_many_without_optional_is_valid(
        controller: layabase.CRUDController, mock_mongo_audit_datetime):
    assert controller.post_many([{
        "key": "my_key",
        "mandatory": 1
    }]) == [{
        "optional": None,
        "mandatory": 1,
        "key": "my_key"
    }]
    assert controller.get_audit({}) == [{
        "audit_action": "Insert",
        "audit_date_utc": "2018-10-11T15:05:05.663000",
        "audit_user": "",
        "key": "my_key",
        "mandatory": 1,
        "optional": None,
        "revision": 1,
    }]
Exemplo n.º 12
0
def test_put_with_wrong_type_is_invalid(controller: layabase.CRUDController,
                                        mock_mongo_audit_datetime):
    controller.post({"key": "value1", "mandatory": 1})
    with pytest.raises(layabase.ValidationFailed) as exception_info:
        controller.put({"key": "value1", "mandatory": "invalid_value"})
    assert exception_info.value.errors == {"mandatory": ["Not a valid int."]}
    assert exception_info.value.received_data == {
        "key": "value1",
        "mandatory": "invalid_value",
    }
    assert controller.get_audit({}) == [{
        "audit_action": "Insert",
        "audit_date_utc": "2018-10-11T15:05:05.663000",
        "audit_user": "",
        "key": "value1",
        "mandatory": 1,
        "optional": None,
        "revision": 1,
    }]
Exemplo n.º 13
0
def test_value_can_be_updated_to_previous_value(
        controller: layabase.CRUDController, mock_mongo_audit_datetime):
    controller.post({
        "key": "my_key1",
        "mandatory": 1,
        "optional": "my_value1"
    })
    controller.put({"key": "my_key1", "mandatory": 2})
    controller.put({
        "key": "my_key1",
        "mandatory": 1
    })  # Put back initial value
    assert controller.get_audit({}) == [
        {
            "audit_action": "Insert",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "key": "my_key1",
            "mandatory": 1,
            "optional": "my_value1",
            "revision": 1,
        },
        {
            "audit_action": "Update",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "key": "my_key1",
            "mandatory": 2,
            "optional": "my_value1",
            "revision": 2,
        },
        {
            "audit_action": "Update",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "key": "my_key1",
            "mandatory": 1,
            "optional": "my_value1",
            "revision": 3,
        },
    ]
Exemplo n.º 14
0
def test_get_without_filter_is_retrieving_the_only_item(
        controller: layabase.CRUDController, mock_mongo_audit_datetime):
    controller.post({
        "key": "my_key1",
        "mandatory": 1,
        "optional": "my_value1"
    })
    assert controller.get({}) == [{
        "mandatory": 1,
        "optional": "my_value1",
        "key": "my_key1"
    }]
    assert controller.get_audit({}) == [{
        "audit_action": "Insert",
        "audit_date_utc": "2018-10-11T15:05:05.663000",
        "audit_user": "",
        "key": "my_key1",
        "mandatory": 1,
        "optional": "my_value1",
        "revision": 1,
    }]
Exemplo n.º 15
0
def test_post_many_with_unknown_field_is_valid(
        controller: layabase.CRUDController, mock_mongo_audit_datetime):
    assert controller.post_many([{
        "key": "my_key",
        "mandatory": 1,
        "optional": "my_value",
        # This field do not exists in schema
        "unknown": "my_value",
    }]) == [{
        "optional": "my_value",
        "mandatory": 1,
        "key": "my_key"
    }]
    assert controller.get_audit({}) == [{
        "audit_action": "Insert",
        "audit_date_utc": "2018-10-11T15:05:05.663000",
        "audit_user": "",
        "key": "my_key",
        "mandatory": 1,
        "optional": "my_value",
        "revision": 1,
    }]
def test_versioned_audit_after_post_put_delete_rollback(
    controllers,
    controller_versioned: layabase.CRUDController,
    mock_mongo_audit_datetime,
):
    controller_versioned.post({"key": "my_key", "enum_fld": EnumTest.Value1})
    controller_versioned.put({"key": "my_key", "enum_fld": EnumTest.Value2})
    controller_versioned.delete({"key": "my_key"})
    controller_versioned.rollback_to({"revision": 1})
    assert controller_versioned.get_audit({}) == [
        {
            "audit_action": "Insert",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "revision": 1,
            "table_name": "test_versioned",
        },
        {
            "audit_action": "Update",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "revision": 2,
            "table_name": "test_versioned",
        },
        {
            "audit_action": "Delete",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "revision": 3,
            "table_name": "test_versioned",
        },
        {
            "audit_action": "Rollback",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "revision": 4,
            "table_name": "test_versioned",
        },
    ]
Exemplo n.º 17
0
def test_int_revision_is_not_reset_after_delete(
        controller: layabase.CRUDController, mock_mongo_audit_datetime):
    assert {"key": 1} == controller.post({"key": 1})
    assert 1 == controller.delete({})
    assert {"key": 1} == controller.post({"key": 1})
    assert {"key": 2} == controller.post({"key": 2})
    assert controller.get_audit({}) == [
        {
            "audit_action": "Insert",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "key": 1,
            "revision": 1,
        },
        {
            "audit_action": "Delete",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "key": 1,
            "revision": 2,
        },
        {
            "audit_action": "Insert",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "key": 1,
            "revision": 3,
        },
        {
            "audit_action": "Insert",
            "audit_date_utc": "2018-10-11T15:05:05.663000",
            "audit_user": "",
            "key": 2,
            "revision": 4,
        },
    ]
def test_revision_not_shared_if_not_versioned(
    controllers,
    controller,
    controller_versioned: layabase.CRUDController,
    mock_mongo_audit_datetime,
):
    assert {
        "optional": None,
        "mandatory": 1,
        "key": "my_key"
    } == controller.post({
        "key": "my_key",
        "mandatory": 1
    })
    controller_versioned.post({"key": "my_key", "enum_fld": EnumTest.Value1})
    assert controller.get_audit({}) == [{
        "audit_action": "Insert",
        "audit_date_utc": "2018-10-11T15:05:05.663000",
        "audit_user": "",
        "key": "my_key",
        "mandatory": 1,
        "optional": None,
        "revision": 1,
    }]
    assert controller_versioned.get_audit({}) == [{
        "audit_action":
        "Insert",
        "audit_date_utc":
        "2018-10-11T15:05:05.663000",
        "audit_user":
        "",
        "revision":
        1,
        "table_name":
        "test_versioned",
    }]
Exemplo n.º 19
0
def test_get_all_without_data_returns_empty_list(
        controller: layabase.CRUDController):
    assert controller.get({}) == []
    assert controller.get_audit({}) == []
Exemplo n.º 20
0
def test_delete_without_nothing_do_not_fail(
        controller: layabase.CRUDController):
    assert controller.delete({}) == 0
    assert controller.get_audit({}) == []
Exemplo n.º 21
0
def test_put_with_nothing_is_invalid(controller: layabase.CRUDController):
    with pytest.raises(layabase.ValidationFailed) as exception_info:
        controller.put(None)
    assert exception_info.value.errors == {"": ["No data provided."]}
    assert not exception_info.value.received_data
    assert controller.get_audit({}) == []