Native Lightspeed LiveView app on Mist (Gleam)
1import gleam/string
2import gleeunit
3import lightspeed/testing/liveview
4import star/live
5import star/ws
6
7pub fn main() -> Nil {
8 gleeunit.main()
9}
10
11pub fn mount_renders_counter_test() {
12 let session =
13 liveview.mount_disconnected(
14 live.definition(),
15 "star-root",
16 "/",
17 live.Assigns,
18 live.target,
19 )
20 let html = liveview.html(session)
21 assert string.contains(html, "Counter")
22 assert string.contains(html, "data-ls-click=\"inc\"")
23}
24
25pub fn inc_event_updates_count_test() {
26 let session =
27 liveview.mount_connected(
28 live.definition(),
29 "star-root",
30 "/",
31 live.Assigns,
32 live.target,
33 )
34 let #(session, routed) = liveview.render_event(session, "inc", "")
35 assert routed == Ok(live.Inc)
36 let html = liveview.html(session)
37 assert string.contains(html, ">1</div>")
38}
39
40pub fn greet_event_test() {
41 let session =
42 liveview.mount_connected(
43 live.definition(),
44 "star-root",
45 "/",
46 live.Assigns,
47 live.target,
48 )
49 let #(session, routed) =
50 liveview.render_event(session, "greet", "name=Nandi")
51 assert routed == Ok(live.Greet("Nandi"))
52 let html = liveview.html(session)
53 assert string.contains(html, "Welcome back, architect.")
54 let _ = session
55}
56
57pub fn save_and_delete_note_test() {
58 let session =
59 liveview.mount_connected(
60 live.definition(),
61 "star-root",
62 "/",
63 live.Assigns,
64 live.target,
65 )
66 let #(session, routed) =
67 liveview.render_event(
68 session,
69 "save_note",
70 "notetitle=Hello¬ebody=World",
71 )
72 assert routed == Ok(live.SaveNote("Hello", "World"))
73 assert string.contains(liveview.html(session), "Hello")
74
75 let #(session, routed) =
76 liveview.render_event(session, "delete_note", "id=1")
77 assert routed == Ok(live.DeleteNote(1))
78 // seeded note 1 title
79 assert !string.contains(liveview.html(session), "First note")
80}
81
82pub fn ws_protocol_inc_test() {
83 let #(session, hello) = ws.mount("/")
84 assert hello != []
85
86 let #(session, frames) = ws.handle_frame(session, "event|1|inc|")
87 assert frames != []
88 let model = ws.model(session)
89 assert model.count == 1
90}