diff --git a/CMakeLists.txt b/CMakeLists.txt index 3f7f5af..916fffc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -73,6 +73,7 @@ add_google_tests(${PROJECT_NAME}_unittest) # Functional Tests userver_testsuite_add_simple( REQUIREMENTS ${CMAKE_CURRENT_SOURCE_DIR}/tests/requirements.txt + SQL_LIBRARY ${PROJECT_NAME}_sql ) # Install diff --git a/postgresql/schemas/db-1.sql b/postgresql/schemas/db-1.sql index a79717b..9430ce1 100644 --- a/postgresql/schemas/db-1.sql +++ b/postgresql/schemas/db-1.sql @@ -334,55 +334,6 @@ END; $$ LANGUAGE plpgsql; -CREATE OR REPLACE FUNCTION real_medium.update_article_by_slug(_old_slug varchar(255), _user_id text, _title varchar(255) = NULL, _new_slug varchar(255) = NULL, _description text = NULL, _body text = NULL) - RETURNS SETOF TEXT - AS $$ -BEGIN - RETURN QUERY UPDATE - real_medium.articles - SET - title = COALESCE(_title, title), - slug = COALESCE(_new_slug, slug), - description = COALESCE(_description, description), - body = COALESCE(_body, body), - updated_at = NOW() - WHERE - slug = _old_slug - AND user_id = _user_id - RETURNING - article_id; -END; -$$ -LANGUAGE plpgsql; - -CREATE OR REPLACE FUNCTION real_medium.get_article_id_by_slug(_slug varchar(255)) - RETURNS SETOF TEXT - AS $$ -BEGIN - RETURN QUERY - SELECT - article_id - FROM - real_medium.articles - WHERE - slug = _slug; -END; -$$ -LANGUAGE plpgsql; - -CREATE OR REPLACE FUNCTION real_medium.delete_article_by_slug(_slug varchar(255), _user_id text) - RETURNS SETOF TEXT - AS $$ -BEGIN - RETURN QUERY DELETE FROM real_medium.articles - WHERE slug = _slug - AND user_id = _user_id - RETURNING - article_id; -END; -$$ -LANGUAGE plpgsql; - CREATE OR REPLACE FUNCTION real_medium.get_articles_by_filters(_user_id text = NULL, _tag text = NULL, _author text = NULL, _favorited text = NULL, _limit int = 20, _offset int = 0) RETURNS SETOF real_medium.tagged_article_with_author_profile AS $$ diff --git a/src/db/delete_article_by_slug.sql b/src/db/delete_article_by_slug.sql index 5383a26..dd7aa4c 100644 --- a/src/db/delete_article_by_slug.sql +++ b/src/db/delete_article_by_slug.sql @@ -1 +1,3 @@ -SELECT real_medium.delete_article_by_slug($1, $2) +DELETE FROM real_medium.articles +WHERE slug = $1 AND user_id = $2 +RETURNING article_id diff --git a/src/db/find_articles_by_filters.sql b/src/db/find_articles_by_filters.sql deleted file mode 100644 index 4fe81d1..0000000 --- a/src/db/find_articles_by_filters.sql +++ /dev/null @@ -1 +0,0 @@ -SELECT real_medium.get_articles_by_filters($1, $2, $3, $4, $5, $6) diff --git a/src/db/find_articles_by_followed_users.sql b/src/db/find_articles_by_followed_users.sql deleted file mode 100644 index 1c8598e..0000000 --- a/src/db/find_articles_by_followed_users.sql +++ /dev/null @@ -1 +0,0 @@ -SELECT real_medium.get_feed_articles($1, $2, $3) diff --git a/src/db/find_comments_by_article_id.sql b/src/db/find_comments_by_article_id.sql deleted file mode 100644 index 277d076..0000000 --- a/src/db/find_comments_by_article_id.sql +++ /dev/null @@ -1,18 +0,0 @@ -WITH comments AS ( - SELECT * FROM real_medium.comments WHERE article_id = $1 -) -SELECT - comments.comment_id, - comments.created_at, - comments.updated_at, - comments.body, - ( - SELECT - ROW(users.username, users.bio, users.image, - CASE WHEN EXISTS (SELECT 1 FROM real_medium.followers - WHERE followers.followed_user_id = comments.user_id AND followers.follower_user_id = $2) - THEN true ELSE false END)::real_medium.profile - FROM real_medium.users - WHERE user_id = comments.user_id - ) AS author -FROM comments diff --git a/src/db/get_article_id_by_slug.sql b/src/db/get_article_id_by_slug.sql index f90a0e4..9b787fb 100644 --- a/src/db/get_article_id_by_slug.sql +++ b/src/db/get_article_id_by_slug.sql @@ -1 +1,3 @@ -SELECT real_medium.get_article_id_by_slug($1) +SELECT article_id +FROM real_medium.articles +WHERE slug = $1 diff --git a/src/db/is_profile_following.sql b/src/db/is_profile_following.sql deleted file mode 100644 index 8663eb0..0000000 --- a/src/db/is_profile_following.sql +++ /dev/null @@ -1 +0,0 @@ -RETURN EXISTS (SELECT 1 FROM real_medium.followers WHERE follower_user_id = $1 AND followed_user_id = $2) diff --git a/src/db/update_article_by_slug.sql b/src/db/update_article_by_slug.sql index 0420a4c..837e3c6 100644 --- a/src/db/update_article_by_slug.sql +++ b/src/db/update_article_by_slug.sql @@ -1 +1,9 @@ -SELECT real_medium.update_article_by_slug($1, $2, $3, $4, $5, $6) +UPDATE real_medium.articles +SET + title = COALESCE($3, title), + slug = COALESCE($4, slug), + description = COALESCE($5, description), + body = COALESCE($6, body), + updated_at = NOW() +WHERE slug = $1 AND user_id = $2 +RETURNING article_id diff --git a/tests/conftest.py b/tests/conftest.py index 952dafc..b8d77ef 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -3,6 +3,7 @@ import pytest +from pytest_userver.plugins import coverage from testsuite.databases.pgsql import discover sys.path.append(os.path.join(os.path.dirname(__file__), 'helpers')) @@ -19,3 +20,22 @@ def pgsql_local(service_source_dir, pgsql_local_create): [service_source_dir.joinpath('postgresql/schemas')], ) return pgsql_local_create(list(databases.values())) + + +@pytest.fixture +def on_uncovered(): + """ + Will be called when the coverage is incomplete. + """ + + def _on_uncovered(uncovered_statements): + used_in_caches_sqls = { + 'select_full_article_info', + 'select_cached_comments', + } + uncovered_statements = set(uncovered_statements) - used_in_caches_sqls + if uncovered_statements: + msg = f'Uncovered SQL/YQL statements: {uncovered_statements}' + raise coverage.UncoveredError(msg) + + return _on_uncovered