Skip to content

Commit cb11ac8

Browse files
authored
Move more SQL queries into .sql files and test SQL coverage (#18)
1 parent 5746ff5 commit cb11ac8

10 files changed

+36
-73
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ add_google_tests(${PROJECT_NAME}_unittest)
7373
# Functional Tests
7474
userver_testsuite_add_simple(
7575
REQUIREMENTS ${CMAKE_CURRENT_SOURCE_DIR}/tests/requirements.txt
76+
SQL_LIBRARY ${PROJECT_NAME}_sql
7677
)
7778

7879
# Install

postgresql/schemas/db-1.sql

Lines changed: 0 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -334,55 +334,6 @@ END;
334334
$$
335335
LANGUAGE plpgsql;
336336

337-
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)
338-
RETURNS SETOF TEXT
339-
AS $$
340-
BEGIN
341-
RETURN QUERY UPDATE
342-
real_medium.articles
343-
SET
344-
title = COALESCE(_title, title),
345-
slug = COALESCE(_new_slug, slug),
346-
description = COALESCE(_description, description),
347-
body = COALESCE(_body, body),
348-
updated_at = NOW()
349-
WHERE
350-
slug = _old_slug
351-
AND user_id = _user_id
352-
RETURNING
353-
article_id;
354-
END;
355-
$$
356-
LANGUAGE plpgsql;
357-
358-
CREATE OR REPLACE FUNCTION real_medium.get_article_id_by_slug(_slug varchar(255))
359-
RETURNS SETOF TEXT
360-
AS $$
361-
BEGIN
362-
RETURN QUERY
363-
SELECT
364-
article_id
365-
FROM
366-
real_medium.articles
367-
WHERE
368-
slug = _slug;
369-
END;
370-
$$
371-
LANGUAGE plpgsql;
372-
373-
CREATE OR REPLACE FUNCTION real_medium.delete_article_by_slug(_slug varchar(255), _user_id text)
374-
RETURNS SETOF TEXT
375-
AS $$
376-
BEGIN
377-
RETURN QUERY DELETE FROM real_medium.articles
378-
WHERE slug = _slug
379-
AND user_id = _user_id
380-
RETURNING
381-
article_id;
382-
END;
383-
$$
384-
LANGUAGE plpgsql;
385-
386337
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)
387338
RETURNS SETOF real_medium.tagged_article_with_author_profile
388339
AS $$

src/db/delete_article_by_slug.sql

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
SELECT real_medium.delete_article_by_slug($1, $2)
1+
DELETE FROM real_medium.articles
2+
WHERE slug = $1 AND user_id = $2
3+
RETURNING article_id

src/db/find_articles_by_filters.sql

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/db/find_articles_by_followed_users.sql

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/db/find_comments_by_article_id.sql

Lines changed: 0 additions & 18 deletions
This file was deleted.

src/db/get_article_id_by_slug.sql

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
SELECT real_medium.get_article_id_by_slug($1)
1+
SELECT article_id
2+
FROM real_medium.articles
3+
WHERE slug = $1

src/db/is_profile_following.sql

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/db/update_article_by_slug.sql

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,9 @@
1-
SELECT real_medium.update_article_by_slug($1, $2, $3, $4, $5, $6)
1+
UPDATE real_medium.articles
2+
SET
3+
title = COALESCE($3, title),
4+
slug = COALESCE($4, slug),
5+
description = COALESCE($5, description),
6+
body = COALESCE($6, body),
7+
updated_at = NOW()
8+
WHERE slug = $1 AND user_id = $2
9+
RETURNING article_id

tests/conftest.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import pytest
55

6+
from pytest_userver.plugins import coverage
67
from testsuite.databases.pgsql import discover
78

89
sys.path.append(os.path.join(os.path.dirname(__file__), 'helpers'))
@@ -19,3 +20,22 @@ def pgsql_local(service_source_dir, pgsql_local_create):
1920
[service_source_dir.joinpath('postgresql/schemas')],
2021
)
2122
return pgsql_local_create(list(databases.values()))
23+
24+
25+
@pytest.fixture
26+
def on_uncovered():
27+
"""
28+
Will be called when the coverage is incomplete.
29+
"""
30+
31+
def _on_uncovered(uncovered_statements):
32+
used_in_caches_sqls = {
33+
'select_full_article_info',
34+
'select_cached_comments',
35+
}
36+
uncovered_statements = set(uncovered_statements) - used_in_caches_sqls
37+
if uncovered_statements:
38+
msg = f'Uncovered SQL/YQL statements: {uncovered_statements}'
39+
raise coverage.UncoveredError(msg)
40+
41+
return _on_uncovered

0 commit comments

Comments
 (0)