From 92211473094bc2ca6c516a0896c399613ff0af5e Mon Sep 17 00:00:00 2001 From: Jonathan Math Date: Wed, 30 Jun 2021 21:09:24 -0600 Subject: [PATCH] build factories for testing for profile, reader, rss_feeds models --- apps/profile/factories.py | 20 +++++++++++++ apps/reader/factories.py | 56 +++++++++++++++++++++++++++++++++++++ apps/rss_feeds/factories.py | 31 ++++++++++++++++++++ 3 files changed, 107 insertions(+) create mode 100644 apps/profile/factories.py create mode 100644 apps/reader/factories.py create mode 100644 apps/rss_feeds/factories.py diff --git a/apps/profile/factories.py b/apps/profile/factories.py new file mode 100644 index 000000000..b5b57d51b --- /dev/null +++ b/apps/profile/factories.py @@ -0,0 +1,20 @@ +import factory +from factory.django import DjangoModelFactory +from django.contrib.auth.models import User +from apps.profile.models import Profile + +class UserFactory(DjangoModelFactory): + first_name = factory.Faker('first_name') + last_name = factory.Faker('last_name') + username = factory.Faker('email') + date_joined = factory.Faker('date_time') + + class Meta: + model = User + + + +class ProfileFactory(DjangoModelFactory): + user = factory.SubFactory(UserFactory) + class Meta: + model = Profile diff --git a/apps/reader/factories.py b/apps/reader/factories.py new file mode 100644 index 000000000..ba7f22c22 --- /dev/null +++ b/apps/reader/factories.py @@ -0,0 +1,56 @@ +import factory +from factory.fuzzy import FuzzyAttribute +from factory.django import DjangoModelFactory +from faker import Faker +from apps.rss_feeds.factories import FeedFactory +from apps.reader.models import Feature, UserSubscription, UserSubscriptionFolders +from apps.profile.factories import UserFactory + +fake = Faker() + +def generate_folder(): + string = '{"' + string += " ".join(fake.words(2)) + string += '": [' + for _ in range(3): + string += f"{fake.pyint()}, " + string = string[:-2] + string += "]}," + return string + +def generate_folders(): + """ + "folders": "[5299728, 644144, 1187026, {\"Brainiacs & Opinion\": [569, 38, 3581, 183139, 1186180, 15]}, {\"Science & Technology\": [731503, 140145, 1272495, 76, 161, 39, {\"Hacker\": [5985150, 3323431]}]}, {\"Humor\": [212379, 3530, 5994357]}, {\"Videos\": [3240, 5168]}]" + """ + string = '"folders":[' + + for _ in range(3): + string += f"{fake.pyint()}, " + for _ in range(3): + string += generate_folder() + + string = string[:-1] + "]" + return string + +class UserSubscriptionFoldersFactory(DjangoModelFactory): + user = factory.SubFactory(UserFactory) + folders = FuzzyAttribute(generate_folders) + + class Meta: + model = UserSubscriptionFolders + + +class UserSubscriptionFactory(DjangoModelFactory): + user = factory.SubFactory(UserFactory) + feed = FuzzyAttribute(FeedFactory) + last_read_date = factory.Faker('date_time') + + class Meta: + model = UserSubscription + + +class FeatureFactory(DjangoModelFactory): + description = factory.Faker('text') + date = factory.Faker('date_time') + class Meta: + model = Feature diff --git a/apps/rss_feeds/factories.py b/apps/rss_feeds/factories.py new file mode 100644 index 000000000..74abbdcc7 --- /dev/null +++ b/apps/rss_feeds/factories.py @@ -0,0 +1,31 @@ +from faker import Faker +import factory +from factory.django import DjangoModelFactory +from factory.fuzzy import FuzzyAttribute +from apps.rss_feeds.models import DuplicateFeed, Feed +from django.conf import settings + +NEWSBLUR_DIR = settings.NEWSBLUR_DIR +fake = Faker() + +def generate_address(): + return f"{NEWSBLUR_DIR}/apps/analyzer/fixtures/{fake.word()}.xml" + +class FeedFactory(DjangoModelFactory): + feed_address = FuzzyAttribute(generate_address) + feed_link = FuzzyAttribute(generate_address) + creation = factory.Faker('date') + feed_title = factory.Faker('sentence') + last_update = factory.Faker('date_time') + next_scheduled_update = factory.Faker('date_time') + last_story_date = factory.Faker('date_time') + min_to_decay = 1 + last_modified = factory.Faker('date_time') + hash_address_and_link = fake.sha1() + + class Meta: + model = Feed + +class DuplicateFeedFactory(DjangoModelFactory): + class Meta: + model = DuplicateFeed \ No newline at end of file