add e2e tests for lists and meals

This commit is contained in:
2026-08-01 22:40:43 -04:00
parent 2e0d76a9c2
commit 77a9d49eb4
4 changed files with 214 additions and 40 deletions
+26 -26
View File
@@ -305,10 +305,10 @@ pub fn meal_page(
form method="post" action=(format!("/meals/{}/edit", meal.id)) class="stack" {
input type="hidden" name="csrf" value=(csrf_token);
label { "Name" }
input name="name" value=(meal.name) maxlength="120" required;
input id="meal-edit-name" name="name" value=(meal.name) maxlength="120" required;
label { "Description (markdown)" }
textarea name="description" rows="8" { (meal.description) }
button class="button button-primary" type="submit" { "Save meal" }
textarea id="meal-edit-description" name="description" rows="8" { (meal.description) }
button id="meal-edit-save" class="button button-primary" type="submit" { "Save meal" }
}
}
}
@@ -339,19 +339,19 @@ pub fn meal_page(
aside class="side-column" {
section class="panel" {
div class="panel-heading" { h2 { "Add ingredient" } }
form method="post" action=(format!("/meals/{}/ingredients", meal.id)) class="stack" {
form id="add-ingredient-form" method="post" action=(format!("/meals/{}/ingredients", meal.id)) class="stack" {
input type="hidden" name="csrf" value=(csrf_token);
label { "Name" }
input name="name" type="text" maxlength="120" required;
input id="ingredient-name" name="name" type="text" maxlength="120" required;
label { "Quantity" }
input name="quantity" type="text" maxlength="40";
input id="ingredient-quantity" name="quantity" type="text" maxlength="40";
label { "Note" }
input name="note" type="text" maxlength="120";
input id="ingredient-note" name="note" type="text" maxlength="120";
label { "Category" }
select name="category_id" {
select id="ingredient-category" name="category_id" {
(category_options(categories, None))
}
button class="button button-primary" type="submit" { "Add ingredient" }
button id="add-ingredient-button" class="button button-primary" type="submit" { "Add ingredient" }
}
}
}
@@ -391,20 +391,20 @@ fn ingredient_row(
{
input type="hidden" name="csrf" value=(csrf_token);
label { "Name" }
input name="name" value=(ingredient.name) maxlength="120" required;
input id=(format!("ingredient-edit-name-{}", ingredient.id)) name="name" value=(ingredient.name) maxlength="120" required;
label { "Quantity" }
input name="quantity" value=(ingredient.quantity) maxlength="40";
input id=(format!("ingredient-edit-quantity-{}", ingredient.id)) name="quantity" value=(ingredient.quantity) maxlength="40";
label { "Note" }
input name="note" value=(ingredient.note) maxlength="120";
input id=(format!("ingredient-edit-note-{}", ingredient.id)) name="note" value=(ingredient.note) maxlength="120";
label { "Category" }
select name="category_id" {
select id=(format!("ingredient-edit-category-{}", ingredient.id)) name="category_id" {
(category_options(categories, ingredient.category_id))
}
button class="button button-primary" type="submit" { "Save" }
button id=(format!("ingredient-edit-save-{}", ingredient.id)) class="button button-primary" type="submit" { "Save" }
}
form method="post" action=(format!("/meals/{}/ingredients/{}/delete", meal_id, ingredient.id)) {
input type="hidden" name="csrf" value=(csrf_token);
button class="danger-link" type="submit" { "Remove" }
button id=(format!("ingredient-edit-delete-{}", ingredient.id)) class="danger-link" type="submit" { "Remove" }
}
}
}
@@ -573,11 +573,11 @@ fn list_content(
input type="hidden" name="csrf" value=(csrf_token);
label class="sr-only" for="item-name" { "Item name" }
input id="item-name" name="name" type="text" maxlength="120" placeholder="Add an item..." autocomplete="off" required;
input name="quantity" type="text" maxlength="40" placeholder="Qty" aria-label="Quantity";
select name="category_id" aria-label="Category" {
input id="item-quantity" name="quantity" type="text" maxlength="40" placeholder="Qty" aria-label="Quantity";
select id="item-category" name="category_id" aria-label="Category" {
(category_options(categories, None))
}
button class="button button-primary add-button" type="submit" { "+ Add" }
button id="add-item-button" class="button button-primary add-button" type="submit" { "+ Add" }
}
(list_items_fragment(list, items, categories, csrf_token, false))
}
@@ -701,16 +701,16 @@ fn item_row(item: &Item, categories: &[Category], csrf_token: &str) -> Markup {
{
input type="hidden" name="csrf" value=(csrf_token);
label { "Name" }
input name="name" value=(item.name) maxlength="120" required;
input id=(format!("item-edit-name-{}", item.id)) name="name" value=(item.name) maxlength="120" required;
label { "Quantity" }
input name="quantity" value=(item.quantity) maxlength="40";
input id=(format!("item-edit-quantity-{}", item.id)) name="quantity" value=(item.quantity) maxlength="40";
label { "Note" }
input name="note" value=(item.note) maxlength="120";
input id=(format!("item-edit-note-{}", item.id)) name="note" value=(item.note) maxlength="120";
label { "Category" }
select name="category_id" {
select id=(format!("item-edit-category-{}", item.id)) name="category_id" {
(category_options(categories, item.category_id))
}
button class="button button-primary" type="submit" { "Save" }
button id=(format!("item-edit-save-{}", item.id)) class="button button-primary" type="submit" { "Save" }
}
form
hx-post=(format!("/lists/{}/items/{}/delete", item.list_id, item.id))
@@ -718,7 +718,7 @@ fn item_row(item: &Item, categories: &[Category], csrf_token: &str) -> Markup {
hx-swap="outerHTML"
{
input type="hidden" name="csrf" value=(csrf_token);
button class="danger-link" type="submit" { "Remove item" }
button id=(format!("item-edit-delete-{}", item.id)) class="danger-link" type="submit" { "Remove item" }
}
}
}
@@ -762,8 +762,8 @@ pub fn categories_panel(
class="category-form"
{
input type="hidden" name="csrf" value=(csrf_token);
input name="name" type="text" maxlength="60" placeholder="Add a category" required;
button class="button button-small button-secondary" type="submit" { "Add" }
input id="category-name" name="name" type="text" maxlength="60" placeholder="Add a category" required;
button id="add-category-button" class="button button-small button-secondary" type="submit" { "Add" }
}
@if categories.is_empty() {
p class="muted category-empty" { "No categories yet." }