Skip to content

Commit

Permalink
Merge pull request #250 from Tinkoff/compatible-fix
Browse files Browse the repository at this point in the history
fix sqlalchemy compatibility
  • Loading branch information
livestreamx authored Jul 3, 2023
2 parents af3b026 + 706598a commit 034ae8d
Show file tree
Hide file tree
Showing 8 changed files with 23 additions and 35 deletions.
2 changes: 1 addition & 1 deletion makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
CODE = overhave
VENV ?= .venv
WORK_DIR ?= .
MIN_COVERAGE ?= 87.2
MIN_COVERAGE ?= 87.1
PACKAGE_BUILD_DIR ?= dist
PYTHON_VERSION ?= 3.11

Expand Down
3 changes: 1 addition & 2 deletions overhave/admin/views/tag.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,7 @@ class TagsView(ModelViewConfigured):
_tag_name_pattern = re.compile(r"^[0-9a-zA-Zа-яА-ЯёЁ_]+$")

def on_model_change(self, form: Form, model: db.Tags, is_created: bool) -> None:
tag = form.data.get("value")
if tag is not None and not self._tag_name_pattern.match(tag):
if not self._tag_name_pattern.match(model.value):
raise ValidationError("Unsupported symbols in tag name!")
if not is_created:
if current_user.login == model.created_by or current_user.role == db.Role.admin:
Expand Down
2 changes: 1 addition & 1 deletion overhave/admin/views/testing_users.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ class TestUserView(ModelViewConfigured):

_feature_type: FeatureTypeName | None = None

def on_form_prefill(self, form, id) -> None: # type: ignore # noqa: A002
def on_form_prefill(self, form: Form, id) -> None: # type: ignore # noqa: A002
if not isinstance(form._obj, db.TestUser):
return
self._feature_type = cast(FeatureTypeName, form._obj.feature_type.name)
Expand Down
4 changes: 1 addition & 3 deletions overhave/base_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,8 @@
import sqlalchemy as sa
import sqlalchemy.engine
import sqlalchemy.exc
import sqlalchemy.pool
from pydantic import BaseSettings, Field, validator
from sqlalchemy import Pool
from sqlalchemy.pool import SingletonThreadPool
from sqlalchemy.pool import Pool, SingletonThreadPool

OVERHAVE_ENV_PREFIX = "OVERHAVE_"

Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "overhave"
version = "4.0.2"
version = "4.0.3"
description = "Overhave - web-framework for BDD"
readme = "README.rst"
authors = [
Expand Down
13 changes: 2 additions & 11 deletions tests/unit/admin/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -193,11 +193,8 @@ def test_tags_row(faker: Faker, test_system_user_login: str) -> db.Tags:


@pytest.fixture()
def form_mock(test_incorrect_testing_user_row: db.TestUser) -> mock.MagicMock:
form_mock = mock.MagicMock()
form_mock.data = {}
form_mock._obj = test_incorrect_testing_user_row
return form_mock
def form_mock() -> mock.MagicMock:
return mock.MagicMock()


@pytest.fixture()
Expand All @@ -210,12 +207,6 @@ def test_testing_user_row() -> db.TestUser:
return db.TestUser()


@pytest.fixture()
def test_incorrect_testing_user_row(faker: Faker) -> db.TestUser:
test_user: db.TestUser = db.TestUser(feature_type=db.FeatureType(name=faker.word()))
return test_user


@pytest.fixture()
def current_user_mock(user_role: db.Role, faker: Faker, test_mock_patch_user_directory: str) -> mock.MagicMock:
with mock.patch(test_mock_patch_user_directory, return_value=mock.MagicMock()) as mocked:
Expand Down
18 changes: 8 additions & 10 deletions tests/unit/admin/test_tag_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,12 @@ def test_get_tag_created_not_change(
assert test_tags_row.created_by == previous_row.created_by

@pytest.mark.parametrize("user_role", [db.Role.user], indirect=True)
def test_get_tag_created_error(
self,
test_tags_view: views.TagsView,
current_user_mock: mock.MagicMock,
test_tags_row: db.Tags,
form_mock: mock.MagicMock,
def test_get_tag_validation_error_tag_not_creator_or_admin(
self, test_tags_view: views.TagsView, current_user_mock: mock.MagicMock, form_mock: mock.MagicMock, faker: Faker
) -> None:
db_tag = db.Tags(value=faker.word(), created_by=faker.word())
with pytest.raises(ValidationError):
test_tags_view.on_model_change(form=form_mock, model=test_tags_row, is_created=False)
test_tags_view.on_model_change(form=form_mock, model=db_tag, is_created=False)

@pytest.mark.parametrize("user_role", [db.Role.user], indirect=True)
def test_get_tag_delete_error(
Expand All @@ -60,15 +57,16 @@ def test_get_tag_created_by(

@pytest.mark.parametrize("user_role", [db.Role.admin, db.Role.user], indirect=True)
@pytest.mark.parametrize("value", ["(!)", "+5", "k$ek", "@", "(*"])
def test_incorrect_tag_raises_error(
def test_incorrect_tag_value_validation_error(
self,
test_tags_view: views.TagsView,
current_user_mock: mock.MagicMock,
test_tags_row: db.Tags,
faker: Faker,
form_mock: mock.MagicMock,
test_system_user_login: str,
value: str,
) -> None:
form_mock.data["value"] = value
db_tag = db.Tags(value=value, created_by=test_system_user_login)
with pytest.raises(ValidationError):
test_tags_view.on_model_change(form=form_mock, model=test_tags_row, is_created=True)
test_tags_view.on_model_change(form=form_mock, model=db_tag, is_created=True)
14 changes: 8 additions & 6 deletions tests/unit/admin/test_testing_users.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,24 +38,26 @@ def test_user_doesnt_delete_testing_users(
def test_incorrect_model_raises_error(
self,
test_testing_user_view: TestUserView,
test_incorrect_testing_user_row: db.TestUser,
current_user_mock: mock.MagicMock,
form_mock: mock.MagicMock,
test_is_created: bool,
faker: Faker,
) -> None:
db_test_user = db.TestUser(feature_type=db.FeatureType(name=faker.word()))
with pytest.raises(ValidationError):
test_testing_user_view.on_model_change(
form=form_mock, model=test_incorrect_testing_user_row, is_created=test_is_created
)
test_testing_user_view.on_model_change(form=form_mock, model=db_test_user, is_created=test_is_created)

@pytest.mark.parametrize("user_role", [db.Role.admin, db.Role.user], indirect=True)
def test_on_form_prefill(
def test_on_form_prefill_set_feature_type(
self,
test_testing_user_view: TestUserView,
test_testing_user_row: db.TestUser,
current_user_mock: mock.MagicMock,
form_mock: mock.MagicMock,
faker: Faker,
) -> None:
assert test_testing_user_view._feature_type is None
test_testing_user_view.on_form_prefill(form=form_mock, id=faker.word())
test_testing_user_row.feature_type = db.FeatureType(name=faker.word())
form_mock._obj = test_testing_user_row
test_testing_user_view.on_form_prefill(form=form_mock, id=faker.random_int())
assert test_testing_user_view._feature_type is not None

0 comments on commit 034ae8d

Please sign in to comment.