Skip to content

Commit fc14290

Browse files
Added unit test to GitFeedbackForm and good/bad (#70)
Mocks out the alchemy url function to point to a new postgres test container. Also switched to using sql alchemy 2.0 declarative base function, not the deprecated one. Mostly just to have some sort of unittests on the feedback form so the action doesn't fail (they are probably necessary, given the amount of python code / tight DB integration).
1 parent 91f0e98 commit fc14290

File tree

6 files changed

+45
-9
lines changed

6 files changed

+45
-9
lines changed

docassemble/GithubFeedbackForm/feedback_on_server.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
create_engine,
2020
func,
2121
)
22-
from sqlalchemy.ext.declarative import declarative_base
22+
from sqlalchemy.orm import declarative_base
2323
from alembic.config import Config
2424
from alembic import command
2525
from docassemble.base.util import DARedis, log

docassemble/GithubFeedbackForm/requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ docassemble.base>=1.4
22
docassemble.webapp
33
mypy
44
types-requests
5+
testcontainers
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from testcontainers.postgres import PostgresContainer
2+
from unittest import TestCase
3+
from unittest.mock import patch
4+
5+
6+
class TestFeedbackOnServer(TestCase):
7+
@classmethod
8+
def setUpClass(cls):
9+
cls._postgres = PostgresContainer("postgres:16")
10+
cls._postgres.start()
11+
cls._psql_url = cls._postgres.get_connection_url()
12+
13+
@classmethod
14+
def tearDownClass(cls):
15+
cls._postgres.stop()
16+
17+
@patch("docassemble.base.sql.alchemy_url")
18+
def test_minimal_db(self, url1):
19+
url1.return_value = self.__class__._psql_url
20+
from .feedback_on_server import save_good_or_bad, get_good_or_bad
21+
22+
save_good_or_bad(1, interview="unittest", version="1.0.0")
23+
save_good_or_bad(-1, interview="unittest", version="1.0.0")
24+
25+
save_good_or_bad(1, interview="unittest", version="1.0.1")
26+
save_good_or_bad(1, interview="unittest", version="1.0.1")
27+
save_good_or_bad(1, interview="unittest", version="1.0.1")
28+
29+
ratings = get_good_or_bad("unittest")
30+
self.assertEqual(len(ratings), 2)
31+
self.assertListEqual([r["interview"] for r in ratings], ["unittest"] * 2)
32+
if ratings[0]["version"] == "1.0.1":
33+
self.assertEqual(ratings[0]["average"], 1)
34+
self.assertEqual(ratings[1]["average"], 0)
35+
else:
36+
self.assertEqual(ratings[0]["average"], 0)
37+
self.assertEqual(ratings[1]["average"], 1)

docassemble/__init__.py

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

pyproject.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,7 @@ ignore_missing_imports = true
1414
[[tool.mypy.overrides]]
1515
module = "google.*"
1616
ignore_missing_imports = true
17+
18+
[[tool.mypy.overrides]]
19+
module = "testcontainers.*"
20+
ignore_missing_imports = true

setup.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import os
22
import sys
3-
from setuptools import setup, find_packages
3+
from setuptools import setup, find_namespace_packages
44
from fnmatch import fnmatchcase
55
from distutils.util import convert_path
66

@@ -51,8 +51,7 @@ def find_package_data(where='.', package='', exclude=standard_exclude, exclude_d
5151
author_email='qsteenhuis@suffolk.edu',
5252
license='The MIT License (MIT)',
5353
url='https://courtformsonline.org',
54-
packages=find_packages(),
55-
namespace_packages=['docassemble'],
54+
packages=find_namespace_packages(),
5655
install_requires=['docassemble.ALToolbox>=0.6.0', 'google-generativeai'],
5756
zip_safe=False,
5857
package_data=find_package_data(where='docassemble/GithubFeedbackForm/', package='docassemble.GithubFeedbackForm'),

0 commit comments

Comments
 (0)