Skip to content

Commit c19e692

Browse files
committed
test(orm): remove FakeSeeder test double, assert via autospec mock
Replace the hand-rolled FakeSeeder class in test_db_seed_command.py with mock.patch(..., autospec=True) against the real Seeder, asserting constructor args and awaited calls directly. Same cleanup already applied on the PR #155 branch (commit 8471bd9) but missed on the experiments seeds->seeders refactor (PR #175).
1 parent f4b6cd9 commit c19e692

1 file changed

Lines changed: 14 additions & 54 deletions

File tree

fastapi_startkit/tests/masoniteorm/commands/test_db_seed_command.py

Lines changed: 14 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -12,24 +12,6 @@
1212
FIXTURE_SEED_PATH = "tests.masoniteorm.commands.fixtures.databases.seeders"
1313

1414

15-
class FakeSeeder:
16-
"""Records constructor args and awaited methods, mocking DB side effects."""
17-
18-
instances = []
19-
20-
def __init__(self, seed_path="databases/seeders", connection=None):
21-
self.seed_path = seed_path
22-
self.connection = connection
23-
self.calls = []
24-
FakeSeeder.instances.append(self)
25-
26-
async def run_database_seed(self):
27-
self.calls.append(("run_database_seed", None))
28-
29-
async def run_specific_seed(self, seed):
30-
self.calls.append(("run_specific_seed", seed))
31-
32-
3315
class TestDBSeedCommand(unittest.TestCase):
3416
def setUp(self):
3517
from .fixtures.app import create_app
@@ -54,69 +36,47 @@ def _run_app(self, args=""):
5436
# -- option/argument resolution, exercised against a mocked Seeder --
5537

5638
def test_runs_database_seeder_by_default(self):
57-
FakeSeeder.instances = []
58-
with mock.patch("fastapi_startkit.masoniteorm.seeders.Seeder", FakeSeeder):
39+
with mock.patch("fastapi_startkit.masoniteorm.seeders.Seeder", autospec=True) as MockSeeder:
5940
output = self._run("")
6041

6142
self.assertIn("Database Seeder seeded!", output)
62-
seeder = FakeSeeder.instances[-1]
63-
self.assertEqual(seeder.calls, [("run_database_seed", None)])
64-
self.assertEqual(seeder.seed_path, "databases/seeders")
65-
self.assertEqual(seeder.connection, "default")
43+
MockSeeder.assert_called_once_with(seed_path="databases/seeders", connection="default")
44+
MockSeeder.return_value.run_database_seed.assert_awaited_once_with()
45+
MockSeeder.return_value.run_specific_seed.assert_not_awaited()
6646

6747
def test_seeds_specific_table_from_argument(self):
68-
FakeSeeder.instances = []
69-
with mock.patch("fastapi_startkit.masoniteorm.seeders.Seeder", FakeSeeder):
48+
with mock.patch("fastapi_startkit.masoniteorm.seeders.Seeder", autospec=True) as MockSeeder:
7049
output = self._run("posts")
7150

7251
self.assertIn("PostsTableSeeder seeded!", output)
73-
seeder = FakeSeeder.instances[-1]
74-
self.assertEqual(
75-
seeder.calls,
76-
[("run_specific_seed", "posts_table_seeder.PostsTableSeeder")],
77-
)
52+
MockSeeder.return_value.run_specific_seed.assert_awaited_once_with("posts_table_seeder.PostsTableSeeder")
7853

7954
def test_class_option_resolves_plain_class_name(self):
80-
FakeSeeder.instances = []
81-
with mock.patch("fastapi_startkit.masoniteorm.seeders.Seeder", FakeSeeder):
55+
with mock.patch("fastapi_startkit.masoniteorm.seeders.Seeder", autospec=True) as MockSeeder:
8256
output = self._run("--class PostSeeder")
8357

8458
self.assertIn("PostSeeder seeded!", output)
85-
seeder = FakeSeeder.instances[-1]
86-
self.assertEqual(
87-
seeder.calls,
88-
[("run_specific_seed", "post_seeder.PostSeeder")],
89-
)
59+
MockSeeder.return_value.run_specific_seed.assert_awaited_once_with("post_seeder.PostSeeder")
9060

9161
def test_class_option_resolves_table_seeder_suffix(self):
92-
FakeSeeder.instances = []
93-
with mock.patch("fastapi_startkit.masoniteorm.seeders.Seeder", FakeSeeder):
62+
with mock.patch("fastapi_startkit.masoniteorm.seeders.Seeder", autospec=True) as MockSeeder:
9463
output = self._run("--class PostTableSeeder")
9564

9665
self.assertIn("PostTableSeeder seeded!", output)
97-
seeder = FakeSeeder.instances[-1]
98-
self.assertEqual(
99-
seeder.calls,
100-
[("run_specific_seed", "post_table_seeder.PostTableSeeder")],
101-
)
66+
MockSeeder.return_value.run_specific_seed.assert_awaited_once_with("post_table_seeder.PostTableSeeder")
10267

10368
def test_class_option_accepts_dotted_path(self):
104-
FakeSeeder.instances = []
105-
with mock.patch("fastapi_startkit.masoniteorm.seeders.Seeder", FakeSeeder):
69+
with mock.patch("fastapi_startkit.masoniteorm.seeders.Seeder", autospec=True) as MockSeeder:
10670
output = self._run("--class custom.MySeeder")
10771

10872
self.assertIn("MySeeder seeded!", output)
109-
seeder = FakeSeeder.instances[-1]
110-
self.assertEqual(seeder.calls, [("run_specific_seed", "custom.MySeeder")])
73+
MockSeeder.return_value.run_specific_seed.assert_awaited_once_with("custom.MySeeder")
11174

11275
def test_connection_and_directory_options_are_forwarded(self):
113-
FakeSeeder.instances = []
114-
with mock.patch("fastapi_startkit.masoniteorm.seeders.Seeder", FakeSeeder):
76+
with mock.patch("fastapi_startkit.masoniteorm.seeders.Seeder", autospec=True) as MockSeeder:
11577
self._run("--connection sqlite --directory db/seeds")
11678

117-
seeder = FakeSeeder.instances[-1]
118-
self.assertEqual(seeder.seed_path, "db/seeds")
119-
self.assertEqual(seeder.connection, "sqlite")
79+
MockSeeder.assert_called_once_with(seed_path="db/seeds", connection="sqlite")
12080

12181
# -- end-to-end, driven through the registered console app against real fixture seeders --
12282

0 commit comments

Comments
 (0)