def test_render_dog_action_event_5(self): """ Test meet another dog :return: """ created_at: datetime = datetime(year=2000, month=1, day=1, tzinfo=UTC) self.assertEqual(render_dog_action_event(DogActionEvent( dog_from=fetch_dog('public_dog_id'), dog_to=fetch_dog('public_dog_id_2'), context=DogStatus.WALKING, type=DogActionEventType.MEET_ANOTHER_DOG, created_at=created_at )), '2000-01-01 - While walking, name has met <a href="/dog/public_dog_id_2">toto</a>.')
def test_add_dog_action_event(self): event1: DogActionEvent = add_dog_action_event( fetch_dog('id_public_1'), fetch_dog('id_public_2'), 'TEST_CONTEXT', 'TEST_TYPE', datetime(year=2000, month=1, day=3, tzinfo=UTC)) self.assertNotEqual(event1.id, None) self.assertEqual(event1, DogActionEvent.objects.filter(id=event1.id).first()) self.assertEqual(1, DogActionEvent.objects.count()) event2: DogActionEvent = add_dog_action_event( fetch_dog('id_public_1'), None, 'TEST_CONTEXT', 'TEST_TYPE', datetime(year=2000, month=1, day=3, tzinfo=UTC)) self.assertNotEqual(event2.id, None) self.assertEqual(event2, DogActionEvent.objects.filter(id=event2.id).first()) self.assertEqual(2, DogActionEvent.objects.count())
def test_render_dog_action_event_3(self): """ Test magic bone :return: """ created_at: datetime = datetime(year=2000, month=1, day=1, tzinfo=UTC) self.assertEqual(render_dog_action_event(DogActionEvent( dog_from=fetch_dog('public_dog_id'), dog_to=None, context=DogStatus.WALKING, type=DogActionEventType.FIND_MAGIC_BONE, created_at=created_at )), '2000-01-01 - While walking, name has found a magic bone.')
def render_cancel_story(request: HttpRequest, dog_id: str = '') -> HttpResponse: account: Optional[Account] = fetch_account(request) dog: Optional[Dog] = fetch_dog(dog_id) if account is None: return render_error(request, "Account not found.") if dog is None: return render_error(request, "Dog not found.") if not dog.is_owner(account): return render_error(request, "This doggo is not yours!") story: Optional[Story] = fetch_story(dog) if story is None: return render_error(request, "Story not found.") story.delete() return redirect(reverse('dog', kwargs={'id': dog.id_public}))
def test_use_magic_bone_3(self): """ Test use_magic_bone :return: """ dog: Dog = fetch_dog('public_dog_id') dog.set_status(DogStatus.AVAILABLE, datetime(year=2000, month=1, day=1, tzinfo=UTC)) dog.save() account: Account = fetch_account('secret_toto') account.number_magic_bone = 1 account.save() self.assertFalse(use_magic_bone( dog, account, datetime(year=2000, month=1, day=2, tzinfo=UTC) ))
def fetch_update_dog( request: HttpRequest, id_public: str, updater: Optional[Callable[[Dog, Account, datetime], bool]]) -> HttpResponse: now: datetime = timezone.now() dog: Optional[Dog] = fetch_dog(id_public) if dog is not None: dog_updater.update(dog, now) account: Account = fetch_account(request) if updater is not None: # TODO redirect to error page if the updater returns false (and test) updater(dog, account, now) if updater is None: return display_dog(request, dog, account, now) else: return redirect(reverse('dog', kwargs={'id': dog.id_public})) else: return render(request, 'dog_not_found.html', status=404)
def render_story_choice(request: HttpRequest, dog_id: str = '', choice_id: str = '') -> HttpResponse: """ TODO add security check that the account is the owner :param request: :param dog_id: :param choice_id: :return: """ account: Optional[Account] = fetch_account(request) dog: Optional[Dog] = fetch_dog(dog_id) if account is None: return render_error(request, "Account not found.") if dog is None: return render_error(request, "Dog not found.") if not dog.is_owner(account): return render_error(request, "This doggo is not yours!") story: Optional[Story] = fetch_story(dog) if story is None: return render_error(request, "Story not found.") apply_story_choice(story, choice_id, account, dog) return redirect(reverse('dog', kwargs={'id': dog.id_public}))