def test_fetch_story(self): dog: Dog = fetch_dog('id_public_1') self.assertIsNone(fetch_story(dog)) create_story(dog) self.assertIsNotNone(fetch_story(dog)) self.assertIsNone(fetch_story(fetch_dog('id_public_2'))) fetch_story(dog).delete() self.assertIsNone(fetch_story(dog))
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 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}))
def display_dog(request: HttpRequest, dog: Dog, account: Account, now: datetime) -> HttpResponse: left_dog: Optional[Dog] = None right_dog: Optional[Dog] = None is_current_owner: bool = dog.is_owner(account) if is_current_owner: story: Optional[Story] = fetch_story(dog=dog) if story is None: dogs: List[Dog] = fetch_dogs(account.id, now, False) current_dog_index: int = dogs.index(dog) left_dog = list_get_or_none(dogs, current_dog_index - 1) right_dog = list_get_or_none(dogs, current_dog_index + 1) else: return display_story(request, dog, account, story) dog_action_events: List[DogActionEvent] = get_last_dog_action_events(dog) return render(request, 'dog.html', context={ 'account': account, 'dog': dog, 'dog_age': dog.age(now), 'DogStatus': DogStatus, 'is_current_owner': is_current_owner, 'extended_description_status': dog.extended_description_status(now), 'left_dog': left_dog, 'right_dog': right_dog, 'formatted_dog_action_events': list(map(render_dog_action_event, dog_action_events)) })
def test_create_story(self): dog: Dog = fetch_dog('id_public_1') create_story(dog) story: Story = fetch_story(dog) self.assertEquals(story.state, START_WALK_NODE) self.assertEquals(story.dog.id, dog.id)
def action_allowed(dog: Dog, account: Account) -> bool: return dog.status == DogStatus.AVAILABLE and dog.is_owner( account) and fetch_story(dog) is None