mirror of
https://github.com/Crocmagnon/charasheet.git
synced 2024-12-22 22:01:48 +01:00
parent
5456b02fd6
commit
45101d0127
5 changed files with 58 additions and 1 deletions
18
src/character/templates/character/character_delete.html
Normal file
18
src/character/templates/character/character_delete.html
Normal file
|
@ -0,0 +1,18 @@
|
|||
{% extends "common/base.html" %}
|
||||
{% load character_extras %}
|
||||
|
||||
{% block title %}Suppression personnage {{ character.name }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Suppression personnage {{ character.name }}</h1>
|
||||
<form action="{% url "character:delete" pk=character.pk %}" method=post>
|
||||
{% csrf_token %}
|
||||
<p>
|
||||
Êtes-vous certain de vouloir supprimer le personnage {{ character.name }} ?<br>
|
||||
Cette action est irréversible.
|
||||
</p>
|
||||
<button class="btn btn-danger" type="submit">
|
||||
<i class="fa-solid fa-user-minus"></i> Supprimer le personnage
|
||||
</button>
|
||||
</form>
|
||||
{% endblock %}
|
|
@ -1,6 +1,6 @@
|
|||
{% load character_extras %}
|
||||
<div class="col">
|
||||
<div class="card character">
|
||||
<div class="card character" data-id="{{ character.pk }}">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">
|
||||
{% if character.private %}
|
||||
|
@ -54,6 +54,10 @@
|
|||
<i class="fa-solid fa-person-walking-arrow-right"></i> Refuser l'invitation
|
||||
</a>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<a href="{% url "character:delete" pk=character.pk %}" class="btn btn-danger delete">
|
||||
<i class="fa-solid fa-user-minus"></i> Supprimer
|
||||
</a>
|
||||
{% endif %}
|
||||
{% elif character|managed_by:user %}
|
||||
<a href="{% url "character:view" pk=character.pk %}{% if party %}?party={{ party.pk }}{% endif %}" class="btn btn-primary">
|
||||
|
|
|
@ -125,6 +125,28 @@ def test_list_characters(selenium: WebDriver, live_server: LiveServer):
|
|||
assert names == expected_names
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_delete_character(selenium: WebDriver, live_server: LiveServer):
|
||||
call_command("loaddata", "initial_data")
|
||||
|
||||
username, password = "user", "some_password"
|
||||
player = User.objects.create_user(username, password=password)
|
||||
characters = baker.make(Character, _quantity=2, player=player)
|
||||
|
||||
selenium.get(live_server.url)
|
||||
login(selenium, username, password)
|
||||
|
||||
assert Character.objects.count() == 2
|
||||
selenium.find_element(
|
||||
By.CSS_SELECTOR, f".character.card[data-id='{characters[0].pk}'] .delete"
|
||||
).click()
|
||||
selenium.find_element(By.CSS_SELECTOR, "[type=submit]").click()
|
||||
|
||||
assert selenium.current_url == live_server.url + reverse("character:list")
|
||||
assert Character.objects.count() == 1
|
||||
assert Character.objects.filter(pk=characters[0].pk).first() is None
|
||||
|
||||
|
||||
def login(selenium, username, password):
|
||||
selenium.find_element(By.ID, "login").click()
|
||||
selenium.find_element(By.ID, "id_username").send_keys(username)
|
||||
|
|
|
@ -8,6 +8,7 @@ urlpatterns = [
|
|||
path("create/", views.character_create, name="create"),
|
||||
path("<int:pk>/", views.character_view, name="view"),
|
||||
path("<int:pk>/change/", views.character_change, name="change"),
|
||||
path("<int:pk>/delete/", views.character_delete, name="delete"),
|
||||
path(
|
||||
"<int:pk>/health_change/", views.character_health_change, name="health_change"
|
||||
),
|
||||
|
|
|
@ -57,6 +57,18 @@ def character_change(request, pk: int):
|
|||
return render(request, "character/character_form.html", context)
|
||||
|
||||
|
||||
@login_required
|
||||
def character_delete(request, pk: int):
|
||||
character = get_object_or_404(Character.objects.owned_by(request.user), pk=pk)
|
||||
context = {"character": character}
|
||||
if request.method == "POST":
|
||||
name = character.name
|
||||
character.delete()
|
||||
messages.success(request, f"Le personnage {name} a été supprimé.")
|
||||
return redirect("character:list")
|
||||
return render(request, "character/character_delete.html", context)
|
||||
|
||||
|
||||
@login_required
|
||||
def character_view(request, pk: int):
|
||||
character = get_object_or_404(
|
||||
|
|
Loading…
Reference in a new issue