mirror of
https://github.com/Crocmagnon/charasheet.git
synced 2024-11-05 14:23:53 +01:00
Add feature test for pet (#48)
This commit is contained in:
parent
93bce05b7f
commit
738ddb7e7b
1 changed files with 90 additions and 0 deletions
90
src/character/tests/test_pet.py
Normal file
90
src/character/tests/test_pet.py
Normal file
|
@ -0,0 +1,90 @@
|
||||||
|
from django.core.management import call_command
|
||||||
|
from model_bakery import baker
|
||||||
|
from pytest_django.live_server_helper import LiveServer
|
||||||
|
from selenium.webdriver.common.by import By
|
||||||
|
from selenium.webdriver.firefox.webdriver import WebDriver
|
||||||
|
|
||||||
|
from character.models import Character
|
||||||
|
from common.models import User
|
||||||
|
|
||||||
|
|
||||||
|
def test_pet_happy_path(selenium: WebDriver, live_server: LiveServer):
|
||||||
|
# Load fixtures
|
||||||
|
call_command("loaddata", "initial_data")
|
||||||
|
|
||||||
|
# Create a user
|
||||||
|
username, password = "user", "some_password"
|
||||||
|
player = User.objects.create_user(username, password=password)
|
||||||
|
character = baker.make(Character, player=player)
|
||||||
|
|
||||||
|
# Starting on the character's sheet.
|
||||||
|
selenium.get(live_server.url + character.get_absolute_url())
|
||||||
|
|
||||||
|
# Click on the button to add a pet.
|
||||||
|
selenium.find_element(By.ID, "add-pet").click()
|
||||||
|
|
||||||
|
pet_start_health = 10
|
||||||
|
|
||||||
|
# A form appears, asking the pet's details.
|
||||||
|
# Fill the form.
|
||||||
|
# Fields are: name, health_max, health_remaining, modifier_strength,
|
||||||
|
# modifier_dexterity, modifier_constitution, modifier_intelligence,
|
||||||
|
# modifier_wisdom, modifier_charisma, damage, initiative, defense, attack,
|
||||||
|
# recovery and notes.
|
||||||
|
selenium.find_element(By.ID, "id_name").send_keys("My pet")
|
||||||
|
selenium.find_element(By.ID, "id_health_max").send_keys(str(pet_start_health))
|
||||||
|
selenium.find_element(By.ID, "id_health_remaining").send_keys(str(pet_start_health))
|
||||||
|
selenium.find_element(By.ID, "id_modifier_strength").send_keys("-3")
|
||||||
|
selenium.find_element(By.ID, "id_modifier_dexterity").send_keys("-2")
|
||||||
|
selenium.find_element(By.ID, "id_modifier_constitution").send_keys("-1")
|
||||||
|
selenium.find_element(By.ID, "id_modifier_intelligence").send_keys("1")
|
||||||
|
selenium.find_element(By.ID, "id_modifier_wisdom").send_keys("2")
|
||||||
|
selenium.find_element(By.ID, "id_modifier_charisma").send_keys("3")
|
||||||
|
selenium.find_element(By.ID, "id_damage").send_keys("4")
|
||||||
|
selenium.find_element(By.ID, "id_initiative").send_keys("5")
|
||||||
|
selenium.find_element(By.ID, "id_defense").send_keys("6")
|
||||||
|
selenium.find_element(By.ID, "id_attack").send_keys("7")
|
||||||
|
selenium.find_element(By.ID, "id_recovery").send_keys("1 heure 1 dé de vie")
|
||||||
|
selenium.find_element(By.ID, "id_notes").send_keys("My pet's notes")
|
||||||
|
|
||||||
|
# Save & check redirected to character's sheet.
|
||||||
|
selenium.find_element(By.ID, "save-pet").click()
|
||||||
|
assert selenium.current_url == live_server.url + character.get_absolute_url()
|
||||||
|
|
||||||
|
# Fetch pet
|
||||||
|
pet = character.pets.first()
|
||||||
|
|
||||||
|
# It now displays the pet's information.
|
||||||
|
# There can be multiple pets.
|
||||||
|
assert (
|
||||||
|
selenium.find_element(By.CSS_SELECTOR, f".pet[data-id='{pet.pk}'] .name").text
|
||||||
|
== "My pet"
|
||||||
|
)
|
||||||
|
|
||||||
|
# The GM and I can edit my pet's life points,
|
||||||
|
# in order to follow them during the fight.
|
||||||
|
selenium.find_element(
|
||||||
|
By.CSS_SELECTOR,
|
||||||
|
f".pet[data-id='{pet.pk}'] .health .decrease",
|
||||||
|
).click()
|
||||||
|
pet.refresh_from_db()
|
||||||
|
assert pet.health_remaining == pet_start_health - 1
|
||||||
|
|
||||||
|
# I can edit my pets. When I click on the edit button of a pet,
|
||||||
|
# I have the same form as previously, pre-filled with the current values of my pet.
|
||||||
|
selenium.find_element(By.CSS_SELECTOR, f".pet[data-id='{pet.pk}'] .edit").click()
|
||||||
|
assert selenium.find_element(By.ID, "id_name").get_attribute("value") == "My pet"
|
||||||
|
assert selenium.find_element(By.ID, "id_health_max").get_attribute("value") == "10"
|
||||||
|
assert (
|
||||||
|
selenium.find_element(By.ID, "id_health_remaining").get_attribute("value")
|
||||||
|
== "10"
|
||||||
|
)
|
||||||
|
|
||||||
|
# I can delete my pets. When I click on the pet's delete button,
|
||||||
|
# I'm redirected to a page asking confirmation of my action,
|
||||||
|
# in order to avoid mistakes.
|
||||||
|
selenium.find_element(By.CSS_SELECTOR, f".pet[data-id='{pet.pk}'] .delete").click()
|
||||||
|
assert character.pets.count() == 1
|
||||||
|
selenium.find_element(By.ID, "delete-pet").click()
|
||||||
|
assert selenium.current_url == live_server.url + character.get_absolute_url()
|
||||||
|
assert character.pets.count() == 0
|
Loading…
Reference in a new issue