Skip to content

Commit

Permalink
More on examples
Browse files Browse the repository at this point in the history
  • Loading branch information
barseghyanartur committed Dec 16, 2023
1 parent 21ee709 commit c823382
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 5 deletions.
2 changes: 1 addition & 1 deletion examples/django/article/factories.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,11 @@ class UserFactory(DjangoModelFactory):
first_name = FACTORY.first_name()
last_name = FACTORY.last_name()
email = FACTORY.email()
date_joined = FACTORY.date_time(tzinfo=timezone.get_current_timezone())
last_login = FACTORY.date_time(tzinfo=timezone.get_current_timezone())
is_superuser = False
is_staff = False
is_active = FACTORY.pybool()
date_joined = FACTORY.date_time(tzinfo=timezone.get_current_timezone())
password = PreSave(set_password, password="test1234")
group = PostSave(add_to_group, name="TestGroup1234")

Expand Down
34 changes: 32 additions & 2 deletions examples/tortoise/article/factories.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,24 @@
from fake import (
FACTORY,
FileSystemStorage,
PostSave,
PreSave,
SubFactory,
TortoiseModelFactory,
post_save,
pre_save,
run_async_in_thread,
trait,
)

from article.models import Article, User
from article.models import Article, Group, User

__author__ = "Artur Barseghyan <artur.barseghyan@gmail.com>"
__copyright__ = "2023 Artur Barseghyan"
__license__ = "MIT"
__all__ = (
"ArticleFactory",
"GroupFactory",
"UserFactory",
)

Expand All @@ -27,18 +31,44 @@
STORAGE = FileSystemStorage(root_path=MEDIA_ROOT, rel_path="tmp")


class GroupFactory(TortoiseModelFactory):
"""Group factory."""

name = FACTORY.word()

class Meta:
model = Group
get_or_create = ("name",)


def set_password(user: User, password: str) -> None:
user.set_password(password)


def add_to_group(user: User, name: str) -> None:
group = GroupFactory(name=name)

async def _add_to_group():
await user.groups.add(group)
await user.save()

run_async_in_thread(_add_to_group())


class UserFactory(TortoiseModelFactory):
"""User factory."""

username = FACTORY.username()
first_name = FACTORY.first_name()
last_name = FACTORY.last_name()
email = FACTORY.email()
date_joined = FACTORY.date_time()
last_login = FACTORY.date_time()
is_superuser = False
is_staff = False
is_active = FACTORY.pybool()
date_joined = FACTORY.date_time()
password = PreSave(set_password, password="test1234")
group = PostSave(add_to_group, name="TestGroup1234")

class Meta:
model = User
Expand Down
16 changes: 16 additions & 0 deletions examples/tortoise/article/models.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from datetime import date

from fake import xor_transform
from tortoise import fields
from tortoise.models import Model

Expand All @@ -8,10 +9,21 @@
__license__ = "MIT"
__all__ = (
"Article",
"Group",
"User",
)


class Group(Model):
"""Group model."""

id = fields.IntField(pk=True)
name = fields.CharField(max_length=255, unique=True)

def __str__(self):
return self.name


class User(Model):
"""User model."""

Expand All @@ -26,10 +38,14 @@ class User(Model):
is_staff = fields.BooleanField(default=False)
is_active = fields.BooleanField(default=True)
date_joined = fields.DatetimeField(null=True, blank=True)
groups = fields.ManyToManyField("models.Group", on_delete=fields.CASCADE)

def __str__(self):
return self.title

def set_password(self, password: str) -> None:
self.password = xor_transform(password)


class Article(Model):
"""Article model."""
Expand Down
21 changes: 19 additions & 2 deletions examples/tortoise/article/tests.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
from datetime import datetime

from fake import FILE_REGISTRY
from fake import FILE_REGISTRY, run_async_in_thread, xor_transform
from tortoise.contrib import test
from tortoise.contrib.test import finalizer, initializer

from article.factories import ArticleFactory
from article.factories import ArticleFactory, UserFactory
from article.models import Article, User

__author__ = "Artur Barseghyan <artur.barseghyan@gmail.com>"
Expand Down Expand Up @@ -98,3 +98,20 @@ def test_sub_factory(self) -> None:
articles = ArticleFactory.create_batch(5)
self.assertEqual(len(articles), 5)
self.assertIsInstance(articles[0], Article)

def test_pre_save_and_post_save(self) -> None:
"""Test PreSave and PostSave."""
user = UserFactory(is_staff=True, is_active=True)
self.assertEqual(
xor_transform(user.password),
"test1234",
)

async def get_first_group_name():
first_group = await user.groups.all().first()
if first_group:
return first_group.name
return None

group_name = run_async_in_thread(get_first_group_name())
self.assertEqual(group_name, "TestGroup1234")

0 comments on commit c823382

Please sign in to comment.