Beispiel #1
0
 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>.')
Beispiel #2
0
 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())
Beispiel #3
0
 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.')
Beispiel #4
0
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}))
Beispiel #5
0
 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)
     ))
Beispiel #6
0
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)
Beispiel #7
0
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}))