diff --git a/src/client.gleam b/src/client.gleam index c564154..c5e8489 100644 --- a/src/client.gleam +++ b/src/client.gleam @@ -37,14 +37,14 @@ pub fn main() -> Nil { let assert Ok(uri) = modem.initial_uri() let app = lustre.application(init:, update:, view:) - let assert Ok(_runtime) = lustre.start(app, "#app", InitOpts(uri)) + let assert Ok(_runtime) = lustre.start(app, "#app", Init(uri)) Nil } /// Data passed to our application during startup -pub type InitOpts { - InitOpts( +pub type Init { + Init( /// Uri of the page when it first loaded. uri: uri.Uri, ) @@ -75,7 +75,7 @@ pub type Msg { // INIT ------------------------------------------------------------------------ /// Build initial application Model -pub fn init(opts: InitOpts) -> #(Model, Effect(Msg)) { +pub fn init(opts: Init) -> #(Model, Effect(Msg)) { let route = route.parse(opts.uri) let page = page.init(route) let is_protected = route.is_protected(route) diff --git a/test/client_test/dummy.gleam b/test/client_test/dummy.gleam index 291dfba..be66fa0 100644 --- a/test/client_test/dummy.gleam +++ b/test/client_test/dummy.gleam @@ -9,7 +9,7 @@ import client/user/role import gleam/json pub fn user(role: role.Role) -> User { - User(id: "", role:, full_name: "Dummy", email: "dummy@lustre.dev") + User(id: "000", role:, full_name: "Dummy", email: "dummy@lustre.dev") } ///  Authenticated session used for testing purposes. diff --git a/test/client_test/page_test/login_test.gleam b/test/client_test/page_test/login_test.gleam index 41a7ebe..1d7032c 100644 --- a/test/client_test/page_test/login_test.gleam +++ b/test/client_test/page_test/login_test.gleam @@ -1,16 +1,49 @@ -import client/language +import client +import client/language as lang import client/page/login import client/session +import client/session/token import client/user/role import client_test/dummy import gleam/list +import gleam/uri import lustre/dev/query +import lustre/dev/simulate import lustre/effect import rsvp +fn app() -> simulate.App(client.Init, client.Model, client.Msg) { + simulate.application(client.init, client.update, client.view) +} + +fn init() -> client.Init { + uri.Uri(..uri.empty, path: "/login") |> client.Init +} + +pub fn authentication_test() -> Nil { + let session = + role.Default + |> dummy.session + + let msg = + Ok(session) + |> login.ApiReturnedSession + |> client.LoginMsg + + let sim = + simulate.start(app(), init()) + |> simulate.message(msg) + + let model = simulate.model(sim) + let assert session.Authenticated(token) = model.session as "authenticated" + assert token.user(token).role == role.Default as "default role" + + Nil +} + pub fn disable_button_test() -> Nil { let model = login.init - let html = login.view(model, language.English) + let html = login.view(model, lang.English) let button = query.id("submit") let disabled = query.attribute("disabled", "") @@ -42,7 +75,7 @@ pub fn submit_test() -> Nil { assert model.password == password assert model.loading == True - let html = login.view(model, language.English) + let html = login.view(model, lang.English) let button = query.id("submit") let busy = query.aria("busy", "true") assert query.has(in: html, matching: query.and(button, busy)) @@ -50,7 +83,7 @@ pub fn submit_test() -> Nil { Nil } -pub fn auth_success_test() -> Nil { +pub fn success_step_test() -> Nil { let want = dummy.token(role.Default) let login_step = @@ -65,7 +98,7 @@ pub fn auth_success_test() -> Nil { Nil } -pub fn auth_failure_test() -> Nil { +pub fn failure_step_test() -> Nil { let want = rsvp.NetworkError let login_step =