2022-11-16 12:42:41 +01:00
|
|
|
import pytest
|
|
|
|
from django.core.management import call_command
|
|
|
|
from django.urls import reverse
|
|
|
|
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 selenium.webdriver.support.select import Select
|
|
|
|
|
|
|
|
from character.models import Character
|
|
|
|
from character.tests.test_interactions import login
|
|
|
|
from common.models import User
|
|
|
|
from party.models import Party
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.django_db
|
|
|
|
def test_add_character_to_existing_group(selenium: WebDriver, live_server: LiveServer):
|
|
|
|
call_command("loaddata", "initial_data")
|
|
|
|
|
|
|
|
username, password = "gm", "password"
|
|
|
|
gm = User.objects.create_user(username, password=password)
|
|
|
|
player = User.objects.create_user("player")
|
|
|
|
character = baker.make(Character, player=player)
|
|
|
|
party = baker.make(Party, game_master=gm)
|
|
|
|
|
2022-11-19 09:45:30 +01:00
|
|
|
login(selenium, live_server, username, password)
|
2022-11-16 12:42:41 +01:00
|
|
|
|
|
|
|
selenium.get(live_server.url + reverse("party:list"))
|
|
|
|
selenium.find_element(
|
|
|
|
By.CSS_SELECTOR, f".party[data-id='{party.pk}'] .edit"
|
|
|
|
).click()
|
|
|
|
invited = Select(selenium.find_element(By.ID, "id_invited_characters"))
|
|
|
|
invited.select_by_index(0)
|
|
|
|
selenium.find_element(By.CSS_SELECTOR, "[type=submit]").click()
|
|
|
|
|
|
|
|
assert selenium.current_url == live_server.url + reverse("party:list")
|
|
|
|
party.refresh_from_db()
|
|
|
|
assert set(party.invited_characters.all()) == {character}
|
2022-11-16 12:47:56 +01:00
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.django_db
|
|
|
|
def test_gm_observe_invited_character_in_group(
|
|
|
|
selenium: WebDriver, live_server: LiveServer
|
|
|
|
):
|
|
|
|
call_command("loaddata", "initial_data")
|
|
|
|
|
|
|
|
username, password = "gm", "password"
|
|
|
|
gm = User.objects.create_user(username, password=password)
|
|
|
|
player = User.objects.create_user("player")
|
|
|
|
party = baker.make(Party, game_master=gm)
|
|
|
|
character = baker.make(Character, player=player)
|
|
|
|
party.invited_characters.add(character)
|
|
|
|
|
2022-11-19 09:45:30 +01:00
|
|
|
login(selenium, live_server, username, password)
|
2022-11-16 12:47:56 +01:00
|
|
|
|
|
|
|
selenium.get(live_server.url + reverse("party:list"))
|
|
|
|
selenium.find_element(
|
|
|
|
By.CSS_SELECTOR, f".party[data-id='{party.pk}'] .access"
|
|
|
|
).click()
|
|
|
|
selenium.find_element(
|
|
|
|
By.CSS_SELECTOR, f".character[data-id='{character.pk}'] .observe"
|
|
|
|
).click()
|
|
|
|
title = selenium.find_element(By.TAG_NAME, "h1").text.strip()
|
|
|
|
assert title == character.name
|
2022-11-16 15:21:29 +01:00
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.django_db
|
|
|
|
def test_gm_observe_invited_character_in_two_groups(
|
|
|
|
selenium: WebDriver, live_server: LiveServer
|
|
|
|
):
|
|
|
|
call_command("loaddata", "initial_data")
|
|
|
|
|
|
|
|
username, password = "gm", "password"
|
|
|
|
gm = User.objects.create_user(username, password=password)
|
|
|
|
player = User.objects.create_user("player")
|
|
|
|
party = baker.make(Party, game_master=gm)
|
|
|
|
other_party = baker.make(Party, game_master=gm)
|
|
|
|
character = baker.make(Character, player=player)
|
|
|
|
party.invited_characters.add(character)
|
|
|
|
other_party.invited_characters.add(character)
|
|
|
|
|
2022-11-19 09:45:30 +01:00
|
|
|
login(selenium, live_server, username, password)
|
2022-11-16 15:21:29 +01:00
|
|
|
|
|
|
|
selenium.get(live_server.url + reverse("party:list"))
|
|
|
|
selenium.find_element(
|
|
|
|
By.CSS_SELECTOR, f".party[data-id='{party.pk}'] .access"
|
|
|
|
).click()
|
|
|
|
selenium.find_element(
|
|
|
|
By.CSS_SELECTOR, f".character[data-id='{character.pk}'] .observe"
|
|
|
|
).click()
|
|
|
|
title = selenium.find_element(By.TAG_NAME, "h1").text.strip()
|
|
|
|
assert title == character.name
|