Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from fastapi_startkit.masoniteorm.seeds import Seeder
from fastapi_startkit.masoniteorm.seeders import Seeder
from app.models.category import Category


Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from fastapi_startkit.masoniteorm.seeds import Seeder
from fastapi_startkit.masoniteorm.seeders import Seeder
from app.models.category import Category
from app.models.course import Course
from app.models.user import User
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from fastapi_startkit.masoniteorm.seeds import Seeder
from fastapi_startkit.masoniteorm.seeders import Seeder
from .category_seeder import CategorySeeder
from .user_seeder import UserSeeder
from .course_seeder import CourseSeeder
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from fastapi_startkit.masoniteorm.seeds import Seeder
from fastapi_startkit.masoniteorm.seeders import Seeder

from app.models import Post, User, Tag, PostTag

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from fastapi_startkit.masoniteorm.seeds import Seeder
from fastapi_startkit.masoniteorm.seeders import Seeder
from app.models.course import Course
from app.models.review import Review

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from fastapi_startkit.masoniteorm.seeds import Seeder
from fastapi_startkit.masoniteorm.seeders import Seeder
from app.models.user import User
from app.models.profile import Profile

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from fastapi_startkit.masoniteorm.seeds import Seeder
from fastapi_startkit.masoniteorm.seeders import Seeder
from app.models.Account import Account
from app.models.User import User
from app.models.Organization import Organization
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class DBSeedCommand(Command):
"directory",
"d",
flag=False,
default="databases/seeds",
default="databases/seeders",
description="The location of the seed directory",
),
option(
Expand All @@ -46,7 +46,7 @@ def handle(self):
return asyncio.run(self.handle_async())

async def handle_async(self):
from ..seeds import Seeder
from ..seeders import Seeder

seeder = Seeder(
seed_path=self.option("directory"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ class MakeModelCommand(Command):
"seeders-directory",
"S",
flag=False,
default="databases/seeds",
default="databases/seeders",
description="The location of the seeders directory",
),
]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class MakeSeedCommand(Command):
"directory",
"d",
flag=False,
default="databases/seeds",
default="databases/seeders",
description="The location of the seed directory",
),
]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ class MigrateFreshCommand(Command):
"seed-directory",
None,
flag=False,
default="databases/seeds",
default="databases/seeders",
description="The location of the seed directory",
),
]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ class MigrateRefreshCommand(Command):
"seed-directory",
None,
flag=False,
default="databases/seeds",
default="databases/seeders",
description="The location of the seed directory",
),
]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"""__SEEDER_NAME__ Seeder."""

from masoniteorm.seeds import Seeder
from fastapi_startkit.masoniteorm.seeders import Seeder


class __SEEDER_NAME__(Seeder):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@


class Seeder:
def __init__(self, seed_path="databases/seeds", connection=None):
def __init__(self, seed_path="databases/seeders", connection=None):
self.ran_seeds = []
self.seed_path = seed_path
self.connection = connection
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ class CreateLessonsTable(Migration):

```python
# databases/seeders/course_seeder.py
from fastapi_startkit.masoniteorm.seeds import Seeder
from fastapi_startkit.masoniteorm.seeders import Seeder
from app.models.course import Course


Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from fastapi_startkit.masoniteorm.seeders import Seeder

from .recorder import CALLS


class DatabaseSeeder(Seeder):
async def run(self):
CALLS.append(("database", self.connection))
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
"""Shared call recorder used by the fixture seeder classes below."""

CALLS = []
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from fastapi_startkit.masoniteorm.seeders import Seeder

from .recorder import CALLS


class SampleSeeder(Seeder):
async def run(self):
CALLS.append(("sample", self.connection))
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from fastapi_startkit.masoniteorm.seeders import Seeder

from .recorder import CALLS


class SpecialSeeder(Seeder):
async def run(self):
CALLS.append(("special", self.connection))
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from fastapi_startkit.masoniteorm.seeders import Seeder

from .recorder import CALLS


class UserTableSeeder(Seeder):
async def run(self):
CALLS.append(("user_table", self.connection))
87 changes: 87 additions & 0 deletions fastapi_startkit/tests/masoniteorm/commands/test_seed_commands.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
import unittest

from cleo.testers.command_tester import CommandTester

from fastapi_startkit.masoniteorm.commands.DBSeedCommand import DBSeedCommand

from .fixtures.databases.seeders.recorder import CALLS

FIXTURE_SEED_PATH = "tests.masoniteorm.commands.fixtures.databases.seeders"


class TestDBSeedCommand(unittest.TestCase):
def setUp(self):
CALLS.clear()

def tearDown(self):
CALLS.clear()

def _make_tester(self):
command = DBSeedCommand()
return CommandTester(command)

def test_runs_database_seeder_by_default(self):
tester = self._make_tester()
tester.execute(f"--directory {FIXTURE_SEED_PATH} --connection sqlite")

output = tester.io.fetch_output()
self.assertIn("Database Seeder seeded!", output)
self.assertEqual(CALLS, [("database", "sqlite")])

def test_runs_seeder_for_table_argument(self):
tester = self._make_tester()
tester.execute(f"user --directory {FIXTURE_SEED_PATH} --connection sqlite")

output = tester.io.fetch_output()
self.assertIn("UserTableSeeder seeded!", output)
self.assertEqual(CALLS, [("user_table", "sqlite")])

def test_runs_seeder_for_class_option_without_table_suffix(self):
tester = self._make_tester()
tester.execute(f"--directory {FIXTURE_SEED_PATH} --class SampleSeeder --connection sqlite")

output = tester.io.fetch_output()
self.assertIn("SampleSeeder seeded!", output)
self.assertEqual(CALLS, [("sample", "sqlite")])

def test_runs_seeder_for_class_option_with_table_suffix(self):
tester = self._make_tester()
tester.execute(f"--directory {FIXTURE_SEED_PATH} --class UserTableSeeder --connection sqlite")

output = tester.io.fetch_output()
self.assertIn("UserTableSeeder seeded!", output)
self.assertEqual(CALLS, [("user_table", "sqlite")])

def test_runs_seeder_for_fully_qualified_class_option(self):
tester = self._make_tester()
tester.execute(f"--directory {FIXTURE_SEED_PATH} --class special_seeder.SpecialSeeder --connection sqlite")

output = tester.io.fetch_output()
self.assertIn("SpecialSeeder seeded!", output)
self.assertEqual(CALLS, [("special", "sqlite")])

def test_class_option_takes_precedence_over_table_argument(self):
tester = self._make_tester()
tester.execute(f"user --directory {FIXTURE_SEED_PATH} --class SampleSeeder --connection sqlite")

output = tester.io.fetch_output()
self.assertIn("SampleSeeder seeded!", output)
self.assertEqual(CALLS, [("sample", "sqlite")])

def test_raises_when_seeder_class_cannot_be_found(self):
tester = self._make_tester()

with self.assertRaises(ValueError):
tester.execute(f"--directory {FIXTURE_SEED_PATH} --class does_not_exist.NopeSeeder --connection sqlite")

def test_raises_when_database_seeder_missing_from_directory(self):
tester = self._make_tester()

with self.assertRaises(ValueError):
tester.execute("--directory tests.masoniteorm.commands.fixtures.databases.migrations --connection sqlite")

def test_uses_default_connection_option(self):
tester = self._make_tester()
tester.execute(f"--directory {FIXTURE_SEED_PATH}")

self.assertEqual(CALLS, [("database", "default")])
Empty file.
Empty file.
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from fastapi_startkit.masoniteorm.seeders import Seeder

from .first_seeder import FirstSeeder
from .recorder import CALLS
from .second_seeder import SecondSeeder


class DatabaseSeeder(Seeder):
async def run(self):
CALLS.append(("database_seeder_start", self.connection))
await self.call(FirstSeeder, SecondSeeder)
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from fastapi_startkit.masoniteorm.seeders import Seeder

from .recorder import CALLS


class FirstSeeder(Seeder):
async def run(self):
CALLS.append(("first", self.connection))
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
"""Shared call recorder used by the fixture seeder classes below.

Keeping this as module-level state lets tests assert both that a seeder
ran and the order in which it ran relative to others, without touching a
real database.
"""

CALLS = []
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from fastapi_startkit.masoniteorm.seeders import Seeder

from .recorder import CALLS


class SampleSeeder(Seeder):
async def run(self):
CALLS.append(("sample", self.connection))
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from fastapi_startkit.masoniteorm.seeders import Seeder

from .recorder import CALLS


class SecondSeeder(Seeder):
async def run(self):
CALLS.append(("second", self.connection))
91 changes: 91 additions & 0 deletions fastapi_startkit/tests/masoniteorm/seeders/test_seeder.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
import pytest

from fastapi_startkit.masoniteorm.seeders import Seeder

from .fixtures.seeders.database_seeder import DatabaseSeeder
from .fixtures.seeders.first_seeder import FirstSeeder
from .fixtures.seeders.recorder import CALLS
from .fixtures.seeders.sample_seeder import SampleSeeder
from .fixtures.seeders.second_seeder import SecondSeeder

FIXTURE_SEED_PATH = "tests.masoniteorm.seeders.fixtures.seeders"


@pytest.fixture(autouse=True)
def reset_recorder():
CALLS.clear()
yield
CALLS.clear()


def test_seed_module_replaces_forward_slashes_with_dots():
seeder = Seeder(seed_path="databases/seeders")

assert seeder.seed_module == "databases.seeders"


def test_seed_module_replaces_backslashes_with_dots():
seeder = Seeder(seed_path="databases\\seeders")

assert seeder.seed_module == "databases.seeders"


def test_defaults_have_no_ran_seeds():
seeder = Seeder()

assert seeder.ran_seeds == []
assert seeder.connection is None


async def test_call_runs_seeders_in_order_with_connection():
seeder = Seeder(connection="sqlite")

await seeder.call(FirstSeeder, SecondSeeder)

assert CALLS == [("first", "sqlite"), ("second", "sqlite")]
assert seeder.ran_seeds == [FirstSeeder, SecondSeeder]


async def test_call_appends_to_ran_seeds_for_each_invocation():
seeder = Seeder()

await seeder.call(FirstSeeder)
await seeder.call(SecondSeeder)

assert seeder.ran_seeds == [FirstSeeder, SecondSeeder]


async def test_run_database_seed_locates_and_runs_database_seeder():
seeder = Seeder(seed_path=FIXTURE_SEED_PATH, connection="sqlite")

await seeder.run_database_seed()

assert CALLS == [
("database_seeder_start", "sqlite"),
("first", "sqlite"),
("second", "sqlite"),
]
assert seeder.ran_seeds == [DatabaseSeeder]


async def test_run_database_seed_raises_when_module_missing():
seeder = Seeder(seed_path="tests.masoniteorm.seeders.fixtures.does_not_exist")

with pytest.raises(ValueError, match="Could not find the DatabaseSeeder class"):
await seeder.run_database_seed()


async def test_run_specific_seed_locates_and_runs_seeder():
seeder = Seeder(seed_path=FIXTURE_SEED_PATH, connection="sqlite")

await seeder.run_specific_seed("sample_seeder.SampleSeeder")

assert CALLS == [("sample", "sqlite")]
assert seeder.ran_seeds == [SampleSeeder]


async def test_run_specific_seed_raises_when_missing():
seeder = Seeder(seed_path=FIXTURE_SEED_PATH)

with pytest.raises(ValueError, match="Could not find the .* seeder file"):
await seeder.run_specific_seed("does_not_exist.NopeSeeder")
Loading