Exemple #1
0
def test_creates_readonly_session(monkeypatch):
    session_obj = pretend.stub(execute=pretend.call_recorder(lambda sql: None))
    session_cls = pretend.call_recorder(lambda bind: session_obj)
    monkeypatch.setattr(db, "Session", session_cls)

    engine = pretend.stub()
    request = pretend.stub(
        registry={"sqlalchemy.engine": engine},
        tm=pretend.stub(),
        matched_route=pretend.stub(
            predicates=[db.ReadOnlyPredicate(True, None)], ),
        add_finished_callback=pretend.call_recorder(lambda callback: None),
    )

    request2 = pretend.stub(db=pretend.stub(
        close=pretend.call_recorder(lambda: None), ), )

    register = pretend.call_recorder(lambda session, transaction_manager: None)
    monkeypatch.setattr(zope.sqlalchemy, "register", register)

    assert _create_session(request) is session_obj
    assert session_cls.calls == [pretend.call(bind=engine)]
    assert register.calls == [
        pretend.call(session_obj, transaction_manager=request.tm),
    ]
    assert session_obj.execute.calls == [
        pretend.call(""" SET TRANSACTION
                    ISOLATION LEVEL SERIALIZABLE READ ONLY DEFERRABLE
                """),
    ]
    assert request.add_finished_callback.calls == [pretend.call(mock.ANY)]
    request.add_finished_callback.calls[0].args[0](request2)
    assert request2.db.close.calls == [pretend.call()]
Exemple #2
0
def test_readonly_predicate():
    assert db.ReadOnlyPredicate(False, None)(pretend.stub(), pretend.stub())
    assert db.ReadOnlyPredicate(True, None)(pretend.stub(), pretend.stub())
Exemple #3
0
        tm=pretend.stub(doom=pretend.call_recorder(lambda: None)),
        read_only=False,
        add_finished_callback=lambda callback: None,
        user=pretend.stub(is_superuser=is_superuser),
    )

    assert _create_session(request) is session_obj
    assert get.calls == [pretend.call("read-only")]
    assert request.tm.doom.calls == doom_calls


@pytest.mark.parametrize(
    ("predicates", "expected"),
    [
        ([], False),
        ([db.ReadOnlyPredicate(False, None)], False),
        ([object()], False),
        ([db.ReadOnlyPredicate(True, None)], True),
    ],
)
def test_readonly(predicates, expected):
    request = pretend.stub(matched_route=pretend.stub(predicates=predicates))
    assert _readonly(request) == expected


def test_readonly_no_matched_route():
    request = pretend.stub(matched_route=None)
    assert not _readonly(request)


def test_readonly_predicate():
Exemple #4
0
        registry=pretend.stub(settings={"database.url": pretend.stub()}), )

    alembic_config = _configure_alembic(config)

    assert alembic_config is config_obj
    assert alembic_config.set_main_option.calls == [
        pretend.call("script_location", "warehouse:migrations"),
        pretend.call("url", config.registry.settings["database.url"]),
    ]


@pytest.mark.parametrize(
    "predicates",
    [
        [],
        [db.ReadOnlyPredicate(False, None)],
        [object()],
    ],
)
def test_create_session(monkeypatch, predicates):
    session_obj = pretend.stub()
    session_cls = pretend.call_recorder(lambda bind: session_obj)
    monkeypatch.setattr(db, "Session", session_cls)

    engine = pretend.stub()
    request = pretend.stub(
        registry={"sqlalchemy.engine": engine},
        tm=pretend.stub(),
        matched_route=pretend.stub(predicates=predicates),
        add_finished_callback=pretend.call_recorder(lambda callback: None),
    )