|
@@ -1,9 +1,117 @@
|
|
from io import StringIO
|
|
from io import StringIO
|
|
|
|
|
|
|
|
+import pytest
|
|
|
|
+from django.contrib.auth import get_user_model
|
|
from django.core.management import call_command
|
|
from django.core.management import call_command
|
|
|
|
+from django.utils import timezone
|
|
|
|
|
|
|
|
+from ...categories.models import Category
|
|
|
|
+from ...threads.models import Thread
|
|
|
|
+from ...users.models import Rank
|
|
from ..management.commands import createfakehistory
|
|
from ..management.commands import createfakehistory
|
|
|
|
+from ..threads import get_fake_thread
|
|
|
|
+from ..users import get_fake_admin_activated_user, get_fake_inactive_user, get_fake_user
|
|
|
|
+
|
|
|
|
+User = get_user_model()
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+@pytest.fixture
|
|
|
|
+def command(db):
|
|
|
|
+ return createfakehistory.Command(stdout=StringIO())
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+@pytest.fixture
|
|
|
|
+def date():
|
|
|
|
+ return timezone.now()
|
|
|
|
|
|
|
|
|
|
def test_management_command_has_no_errors(db):
|
|
def test_management_command_has_no_errors(db):
|
|
- call_command(createfakehistory.Command(), stdout=StringIO())
|
|
|
|
|
|
+ call_command(createfakehistory.Command(), max_actions=3, stdout=StringIO())
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def test_management_command_creates_fake_user(fake, command, date):
|
|
|
|
+ ranks = list(Rank.objects.all())
|
|
|
|
+ command.create_fake_user(fake, date, ranks)
|
|
|
|
+ assert User.objects.exists()
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def test_fake_user_join_date_is_overridden_by_command(fake, command, date):
|
|
|
|
+ ranks = list(Rank.objects.all())
|
|
|
|
+ command.create_fake_user(fake, date, ranks)
|
|
|
|
+ user = User.objects.order_by("-pk").last()
|
|
|
|
+ assert user.joined_on == date
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def test_fake_user_rank_is_one_from_the_choices(fake, command, date):
|
|
|
|
+ ranks = list(Rank.objects.all())
|
|
|
|
+ command.create_fake_user(fake, date, ranks)
|
|
|
|
+ user = User.objects.order_by("-pk").last()
|
|
|
|
+ assert user.rank in ranks
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def test_none_is_returned_for_random_user_if_no_users_exist(command, date):
|
|
|
|
+ user = command.get_random_user(date)
|
|
|
|
+ assert user is None
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def test_users_created_after_given_date_are_excluded_from_random_user_pick(
|
|
|
|
+ command, date, other_user
|
|
|
|
+):
|
|
|
|
+ other_user.joined_on = timezone.now()
|
|
|
|
+ other_user.save()
|
|
|
|
+
|
|
|
|
+ user = command.get_random_user(date)
|
|
|
|
+ assert user is None
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def test_inactive_users_are_excluded_from_random_user_pick(fake, command):
|
|
|
|
+ get_fake_admin_activated_user(fake)
|
|
|
|
+ get_fake_inactive_user(fake)
|
|
|
|
+
|
|
|
|
+ user = command.get_random_user(timezone.now())
|
|
|
|
+ assert user is None
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def test_random_user_pick_returns_random_user(fake, command):
|
|
|
|
+ valid_choices = [get_fake_user(fake) for _ in range(5)]
|
|
|
|
+ user = command.get_random_user(timezone.now())
|
|
|
|
+ assert user in valid_choices
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def test_management_command_creates_fake_thread(fake, command, date):
|
|
|
|
+ categories = list(Category.objects.all_categories())
|
|
|
|
+ command.create_fake_thread(fake, date, categories)
|
|
|
|
+ assert Thread.objects.exists()
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def test_fake_thread_start_date_is_overridden_by_command(fake, command, date):
|
|
|
|
+ categories = list(Category.objects.all_categories())
|
|
|
|
+ command.create_fake_thread(fake, date, categories)
|
|
|
|
+ thread = Thread.objects.last()
|
|
|
|
+ assert thread.started_on == date
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def test_fake_thread_was_created_in_one_of_valid_categories(fake, command, date):
|
|
|
|
+ categories = list(Category.objects.all_categories())
|
|
|
|
+ command.create_fake_thread(fake, date, categories)
|
|
|
|
+ thread = Thread.objects.last()
|
|
|
|
+ assert thread.category in categories
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def test_none_is_returned_for_random_thread_if_no_threads_exist(command, date):
|
|
|
|
+ thread = command.get_random_thread(date)
|
|
|
|
+ assert thread is None
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def test_threads_created_after_given_date_are_excluded_from_random_thread_pick(
|
|
|
|
+ fake, command, date, default_category
|
|
|
|
+):
|
|
|
|
+ get_fake_thread(fake, default_category)
|
|
|
|
+ thread = command.get_random_thread(date)
|
|
|
|
+ assert thread is None
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def test_random_thread_pick_returns_random_thread(fake, command, default_category):
|
|
|
|
+ valid_choices = [get_fake_thread(fake, default_category) for _ in range(5)]
|
|
|
|
+ thread = command.get_random_thread(timezone.now())
|
|
|
|
+ assert thread in valid_choices
|