tests/e2e/detail_tests.rs
Rama main · réplica de lectura del repositorio original.
use thirtyfour::prelude::*;
use crate::helpers::auth::authenticate_browser;
use crate::helpers::browser::BrowserSession;
use crate::helpers::server_helpers::{
create_default_bag, create_default_cafe, create_default_gear, create_default_roast,
create_default_roaster, create_roaster_with_payload, spawn_app_with_auth,
};
use crate::helpers::wait::wait_for_visible;
use brewlog::domain::coffee::roasters::NewRoaster;
#[tokio::test]
async fn roaster_detail_shows_all_fields() {
let app = spawn_app_with_auth().await;
let roaster = create_roaster_with_payload(
&app,
NewRoaster {
name: "Detail Roasters".to_string(),
country: "JP".to_string(),
city: Some("Tokyo".to_string()),
homepage: Some("https://example.com".to_string()),
created_at: None,
},
)
.await;
let session = BrowserSession::new(&app.address).await.unwrap();
authenticate_browser(&session, &app).await.unwrap();
session
.goto(&format!("/roasters/{}", roaster.slug))
.await
.unwrap();
wait_for_visible(&session.driver, "h1").await.unwrap();
let body = session.driver.find(By::Css("body")).await.unwrap();
let text = body.text().await.unwrap();
assert!(text.contains("Detail Roasters"), "Should show roaster name");
assert!(text.contains("JP"), "Should show country code");
assert!(text.contains("Tokyo"), "Should show city");
assert!(text.contains("Visit Website"), "Should show homepage link");
session.quit().await;
}
#[tokio::test]
async fn roast_detail_shows_coffee_info() {
let app = spawn_app_with_auth().await;
let roaster = create_default_roaster(&app).await;
let roast = create_default_roast(&app, roaster.id).await;
let session = BrowserSession::new(&app.address).await.unwrap();
authenticate_browser(&session, &app).await.unwrap();
session
.goto(&format!("/roasters/{}/roasts/{}", roaster.slug, roast.slug))
.await
.unwrap();
wait_for_visible(&session.driver, "h1").await.unwrap();
let body = session.driver.find(By::Css("body")).await.unwrap();
let text = body.text().await.unwrap();
assert!(text.contains("Test Roast"), "Should show roast name");
assert!(text.contains("Ethiopia"), "Should show origin");
assert!(text.contains("Yirgacheffe"), "Should show region");
assert!(text.contains("Washed"), "Should show process");
assert!(text.contains("Blueberry"), "Should show tasting notes");
session.quit().await;
}
#[tokio::test]
async fn bag_detail_shows_status_and_close_button() {
let app = spawn_app_with_auth().await;
let roaster = create_default_roaster(&app).await;
let roast = create_default_roast(&app, roaster.id).await;
let bag = create_default_bag(&app, roast.id).await;
let session = BrowserSession::new(&app.address).await.unwrap();
authenticate_browser(&session, &app).await.unwrap();
session.goto(&format!("/bags/{}", bag.id)).await.unwrap();
wait_for_visible(&session.driver, "h1").await.unwrap();
let body = session.driver.find(By::Css("body")).await.unwrap();
let text = body.text().await.unwrap();
assert!(text.contains("Test Roast"), "Should show roast name");
assert!(text.contains("250"), "Should show bag amount");
// Close Bag button should be visible (bag is open)
assert!(text.contains("Close Bag"), "Should show Close Bag button");
session.quit().await;
}
#[tokio::test]
async fn gear_detail_shows_fields() {
let app = spawn_app_with_auth().await;
let gear = create_default_gear(&app, "grinder", "Comandante", "C40 MK4").await;
let session = BrowserSession::new(&app.address).await.unwrap();
authenticate_browser(&session, &app).await.unwrap();
session.goto(&format!("/gear/{}", gear.id)).await.unwrap();
wait_for_visible(&session.driver, "h1").await.unwrap();
let body = session.driver.find(By::Css("body")).await.unwrap();
let text = body.text().await.unwrap();
assert!(text.contains("Comandante"), "Should show make");
assert!(text.contains("C40 MK4"), "Should show model");
session.quit().await;
}
#[tokio::test]
async fn cafe_detail_shows_location() {
let app = spawn_app_with_auth().await;
let cafe = create_default_cafe(&app).await;
let session = BrowserSession::new(&app.address).await.unwrap();
authenticate_browser(&session, &app).await.unwrap();
session
.goto(&format!("/cafes/{}", cafe.slug))
.await
.unwrap();
wait_for_visible(&session.driver, "h1").await.unwrap();
let body = session.driver.find(By::Css("body")).await.unwrap();
let text = body.text().await.unwrap();
assert!(text.contains("Blue Bottle"), "Should show cafe name");
assert!(text.contains("San Francisco"), "Should show city");
session.quit().await;
}