import gleam/string import gleeunit import lightspeed/testing/liveview import star/live import star/ws pub fn main() -> Nil { gleeunit.main() } pub fn mount_renders_counter_test() { let session = liveview.mount_disconnected( live.definition(), "star-root", "/", live.Assigns, live.target, ) let html = liveview.html(session) assert string.contains(html, "Counter") assert string.contains(html, "data-ls-click=\"inc\"") } pub fn inc_event_updates_count_test() { let session = liveview.mount_connected( live.definition(), "star-root", "/", live.Assigns, live.target, ) let #(session, routed) = liveview.render_event(session, "inc", "") assert routed == Ok(live.Inc) let html = liveview.html(session) assert string.contains(html, ">1") } pub fn greet_event_test() { let session = liveview.mount_connected( live.definition(), "star-root", "/", live.Assigns, live.target, ) let #(session, routed) = liveview.render_event(session, "greet", "name=Nandi") assert routed == Ok(live.Greet("Nandi")) let html = liveview.html(session) assert string.contains(html, "Welcome back, architect.") let _ = session } pub fn save_and_delete_note_test() { let session = liveview.mount_connected( live.definition(), "star-root", "/", live.Assigns, live.target, ) let #(session, routed) = liveview.render_event( session, "save_note", "notetitle=Hello¬ebody=World", ) assert routed == Ok(live.SaveNote("Hello", "World")) assert string.contains(liveview.html(session), "Hello") let #(session, routed) = liveview.render_event(session, "delete_note", "id=1") assert routed == Ok(live.DeleteNote(1)) // seeded note 1 title assert !string.contains(liveview.html(session), "First note") } pub fn ws_protocol_inc_test() { let #(session, hello) = ws.mount("/") assert hello != [] let #(session, frames) = ws.handle_frame(session, "event|1|inc|") assert frames != [] let model = ws.model(session) assert model.count == 1 }