From 9dba1e8ed1c41a54cd13f3fc65953df2f580c6a4 Mon Sep 17 00:00:00 2001 From: "kacaii.dev" Date: Mon, 6 Apr 2026 20:06:10 -0300 Subject: [PATCH] :green_check_mark: add tests to the client nice video about it: https://youtu.be/lnvmbzwIt94 --- client/justfile | 3 ++ client/src/client.gleam | 6 +-- client/src/client/page/login.gleam | 1 - client/test/client_test.gleam | 5 +++ client/test/page/login_test.gleam | 64 ++++++++++++++++++++++++++++++ justfile | 1 + 6 files changed, 76 insertions(+), 4 deletions(-) create mode 100644 client/test/client_test.gleam create mode 100644 client/test/page/login_test.gleam diff --git a/client/justfile b/client/justfile index 10d45a8..9d749df 100644 --- a/client/justfile +++ b/client/justfile @@ -5,6 +5,9 @@ build: gleam run -m lustre/dev build +test: + gleam test + # Update project dependencies deps-update: gleam deps update diff --git a/client/src/client.gleam b/client/src/client.gleam index b6731cb..874aac5 100644 --- a/client/src/client.gleam +++ b/client/src/client.gleam @@ -63,7 +63,7 @@ pub type Msg { ServerRemovedToken(Result(response.Response(String), rsvp.Error)) } -fn init(_props: Nil) -> #(Model, Effect(Msg)) { +pub fn init(_props: Nil) -> #(Model, Effect(Msg)) { let assert Ok(uri) = modem.initial_uri() let route = route.parse(uri) let page = page.init(route) @@ -94,7 +94,7 @@ fn init_session(route: route.Route, is_protected: Bool) -> session.Session { } } -fn update(model: Model, msg: Msg) -> #(Model, Effect(Msg)) { +pub fn update(model: Model, msg: Msg) -> #(Model, Effect(Msg)) { case model, msg { // NAVIGATION -------------------------------------------------------------- // @@ -198,7 +198,7 @@ fn layout( ]) } -fn view(model: Model) -> element.Element(Msg) { +pub fn view(model: Model) -> element.Element(Msg) { case model { // LANDING PAGE ------------------------------------------------------------ Model(session:, route: route.Landing, page: page.Landing(page_model)) -> diff --git a/client/src/client/page/login.gleam b/client/src/client/page/login.gleam index f77b5d0..77ce37d 100644 --- a/client/src/client/page/login.gleam +++ b/client/src/client/page/login.gleam @@ -65,7 +65,6 @@ pub fn update(model: Model, msg: Msg) -> LoginStep { // auth ApiReturnedSession(Ok(session)) -> ServerAuthenticatedUser(session) - ApiReturnedSession(Error(reason)) -> ServerFailedToAuthenticate(reason) } } diff --git a/client/test/client_test.gleam b/client/test/client_test.gleam new file mode 100644 index 0000000..ecd12ad --- /dev/null +++ b/client/test/client_test.gleam @@ -0,0 +1,5 @@ +import gleeunit + +pub fn main() { + gleeunit.main() +} diff --git a/client/test/page/login_test.gleam b/client/test/page/login_test.gleam new file mode 100644 index 0000000..627693a --- /dev/null +++ b/client/test/page/login_test.gleam @@ -0,0 +1,64 @@ +import client/page/login +import gleam/list +import lustre/effect +import rsvp +import shared/role +import shared/session +import shared/user.{User} +import youid/uuid + +pub fn login_test() { + let email = "sigo@email.dev" + let password = "root" + + let sequence = [ + login.UserTypedEmail(email), + login.UserTypedPassword(password), + login.UserClickedSubmit, + ] + + let #(model, _) = + list.fold( + over: sequence, + from: #(login.empty, effect.none()), + with: fn(acc, msg) { + let assert login.Continue(model, _) = login.update(acc.0, msg) + #(model, effect.none()) + }, + ) + + assert model.email == email + assert model.password == password + assert model.loading +} + +pub fn login_success_test() { + let want = + User( + id: uuid.v7(), + role: role.None, + full_name: "", + email: "", + phone: "", + is_active: True, + ) + + let model = + Ok(session.Authenticated(want)) + |> login.ApiReturnedSession + |> login.update(login.empty, _) + + let assert login.ServerAuthenticatedUser(resp) = model + let assert session.Authenticated(got) = resp + + assert got == want +} + +pub fn login_failure_test() { + let model = + Error(rsvp.NetworkError) + |> login.ApiReturnedSession + |> login.update(login.empty, _) + + let assert login.ServerFailedToAuthenticate(_) = model +} diff --git a/justfile b/justfile index a18c3a0..68cbdee 100644 --- a/justfile +++ b/justfile @@ -33,6 +33,7 @@ lint: # 󰙨 Run unit tests [group("dev")] test: + just client::test just server::test #  Starts the server and database -- 2.51.2