this repo has no description
lustre frontent oat-ui gleam
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

:white_check_mark: add login page tests

+82 -4
+1
client/gleam.toml
··· 9 9 shared = { path = "../shared" } 10 10 rsvp = ">= 1.2.0 and < 2.0.0" 11 11 gleam_http = ">= 4.3.0 and < 5.0.0" 12 + youid = ">= 1.6.0 and < 2.0.0" 12 13 13 14 [dev_dependencies] 14 15 gleeunit = ">= 1.0.0 and < 2.0.0"
+3 -1
client/manifest.toml
··· 38 38 { name = "platform", version = "1.0.0", build_tools = ["gleam"], requirements = [], otp_app = "platform", source = "hex", outer_checksum = "8339420A95AD89AAC0F82F4C3DB8DD401041742D6C3F46132A8739F6AEB75391" }, 39 39 { name = "polly", version = "3.1.0", build_tools = ["gleam"], requirements = ["filepath", "gleam_erlang", "gleam_otp", "gleam_stdlib", "simplifile"], otp_app = "polly", source = "hex", outer_checksum = "51FB565D81FF6212FDF3306D44419601F2A7C4EDD1F00FC9DA5C376A00AED4FE" }, 40 40 { name = "rsvp", version = "1.2.0", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_fetch", "gleam_http", "gleam_httpc", "gleam_javascript", "gleam_json", "gleam_stdlib", "lustre"], otp_app = "rsvp", source = "hex", outer_checksum = "40F9E0E662FF258E10C7041A9591261FE802D56625FB444B91510969644F7722" }, 41 - { name = "shared", version = "1.0.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], source = "local", path = "../shared" }, 41 + { name = "shared", version = "1.0.0", build_tools = ["gleam"], requirements = ["gleam_stdlib", "youid"], source = "local", path = "../shared" }, 42 42 { name = "simplifile", version = "2.4.0", build_tools = ["gleam"], requirements = ["filepath", "gleam_stdlib"], otp_app = "simplifile", source = "hex", outer_checksum = "7C18AFA4FED0B4CE1FA5B0B4BAC1FA1744427054EA993565F6F3F82E5453170D" }, 43 43 { name = "snag", version = "1.2.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "snag", source = "hex", outer_checksum = "274F41D6C3ECF99F7686FDCE54183333E41D2C1CA5A3A673F9A8B2C7A4401077" }, 44 44 { name = "tom", version = "2.0.2", build_tools = ["gleam"], requirements = ["gleam_stdlib", "gleam_time"], otp_app = "tom", source = "hex", outer_checksum = "234A842F3D087D35737483F5DFB6DE9839E3366EF0CAF8726D2D094210227670" }, 45 45 { name = "wisp", version = "2.2.2", build_tools = ["gleam"], requirements = ["directories", "exception", "filepath", "gleam_crypto", "gleam_erlang", "gleam_http", "gleam_json", "gleam_stdlib", "houdini", "logging", "marceau", "mist", "simplifile"], otp_app = "wisp", source = "hex", outer_checksum = "5FF5F1E288C3437252ABB93D8F9CF42FF652CE7AD54480CFE736038DC09C4F22" }, 46 + { name = "youid", version = "1.6.0", build_tools = ["gleam"], requirements = ["gleam_crypto", "gleam_stdlib", "gleam_time"], otp_app = "youid", source = "hex", outer_checksum = "7A3ABA44B1B38BC2BDCB5474C5317AA372BE58DFBC649815EE08B03526DDA18D" }, 46 47 ] 47 48 48 49 [requirements] ··· 54 55 modem = { version = ">= 2.1.2 and < 3.0.0" } 55 56 rsvp = { version = ">= 1.2.0 and < 2.0.0" } 56 57 shared = { path = "../shared" } 58 + youid = { version = ">= 1.6.0 and < 2.0.0" }
+4 -2
client/src/client/page/login.gleam
··· 41 41 } 42 42 43 43 UserClickedSubmit -> { 44 - let model = Model(..empty, loading: True) 45 - Continue(model, todo as "send request") 44 + todo as "send request" 45 + 46 + let model = Model(..model, loading: True) 47 + Continue(model, effect.none()) 46 48 } 47 49 48 50 ApiReturnedSession(Ok(session)) -> ServerAuthenticatedUser(session)
+5
client/test/client_test.gleam
··· 1 + import gleeunit 2 + 3 + pub fn main() { 4 + gleeunit.main() 5 + }
+6
client/test/dummy.gleam
··· 1 + import shared/user.{type User, User} 2 + import youid/uuid 3 + 4 + pub fn user() -> User { 5 + User(id: uuid.v7(), full_name: "Dummy", email: "dummy@lustre.dev") 6 + }
+51
client/test/page/login_test.gleam
··· 1 + import client/page/login 2 + import dummy 3 + import gleam/list 4 + import lustre/effect 5 + import rsvp 6 + import shared/session 7 + 8 + pub fn submit_test() { 9 + let user_email = "bfd@email.dev" 10 + let user_password = "root" 11 + 12 + let sequence = [ 13 + login.UserTypedEmail(user_email), 14 + login.UserTypedPassword(user_password), 15 + login.UserClickedSubmit, 16 + ] 17 + 18 + let #(model, _) = { 19 + use acc, msg <- list.fold(sequence, #(login.empty, effect.none())) 20 + let assert login.Continue(model, _) = login.update(acc.0, msg) 21 + 22 + #(model, effect.none()) 23 + } 24 + 25 + assert model.email == user_email 26 + assert model.password == user_password 27 + assert model.loading == True 28 + } 29 + 30 + pub fn auth_success_test() { 31 + let want = dummy.user() 32 + 33 + let model = 34 + Ok(session.Authenticated(want)) 35 + |> login.ApiReturnedSession 36 + |> login.update(login.empty, _) 37 + 38 + let assert login.ServerAuthenticatedUser(resp) = model 39 + let assert session.Authenticated(got) = resp 40 + 41 + assert got == want 42 + } 43 + 44 + pub fn auth_failure_test() { 45 + let model = 46 + Error(rsvp.NetworkError) 47 + |> login.ApiReturnedSession 48 + |> login.update(login.empty, _) 49 + 50 + let assert login.ServerFailedToAuthenticate(_) = model 51 + }
+1
server/gleam.toml
··· 21 21 gleam_erlang = ">= 1.3.0 and < 2.0.0" 22 22 filepath = ">= 1.1.2 and < 2.0.0" 23 23 envoy = ">= 1.2.0 and < 2.0.0" 24 + youid = ">= 1.6.0 and < 2.0.0" 24 25 25 26 [dev_dependencies] 26 27 gleeunit = ">= 1.0.0 and < 2.0.0"
+3
server/manifest.toml
··· 12 12 { name = "gleam_json", version = "3.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_json", source = "hex", outer_checksum = "44FDAA8847BE8FC48CA7A1C089706BD54BADCC4C45B237A992EDDF9F2CDB2836" }, 13 13 { name = "gleam_otp", version = "1.2.0", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_stdlib"], otp_app = "gleam_otp", source = "hex", outer_checksum = "BA6A294E295E428EC1562DC1C11EA7530DCB981E8359134BEABC8493B7B2258E" }, 14 14 { name = "gleam_stdlib", version = "1.0.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "960090C2FB391784BB34267B099DC9315CC1B1F6013E7415BC763CEF1905D7D3" }, 15 + { name = "gleam_time", version = "1.8.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_time", source = "hex", outer_checksum = "533D8723774D61AD4998324F5DD1DABDCDBFABAFB9E87CB5D03C6955448FC97D" }, 15 16 { name = "gleeunit", version = "1.10.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "254B697FE72EEAD7BF82E941723918E421317813AC49923EE76A18C788C61E72" }, 16 17 { name = "glisten", version = "9.0.1", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_otp", "gleam_stdlib", "logging"], otp_app = "glisten", source = "hex", outer_checksum = "7795AA50830656F3A0316A6B26595F893C83272DA901B3405E31339CAA31A10B" }, 17 18 { name = "gramps", version = "6.0.1", build_tools = ["gleam"], requirements = ["gleam_crypto", "gleam_erlang", "gleam_http", "gleam_stdlib"], otp_app = "gramps", source = "hex", outer_checksum = "D55636072DEE173F6586A5679D3C02EC7A0DE3F8646B78C351B72908FF223DF7" }, ··· 24 25 { name = "platform", version = "1.0.0", build_tools = ["gleam"], requirements = [], otp_app = "platform", source = "hex", outer_checksum = "8339420A95AD89AAC0F82F4C3DB8DD401041742D6C3F46132A8739F6AEB75391" }, 25 26 { name = "simplifile", version = "2.4.0", build_tools = ["gleam"], requirements = ["filepath", "gleam_stdlib"], otp_app = "simplifile", source = "hex", outer_checksum = "7C18AFA4FED0B4CE1FA5B0B4BAC1FA1744427054EA993565F6F3F82E5453170D" }, 26 27 { name = "wisp", version = "2.2.2", build_tools = ["gleam"], requirements = ["directories", "exception", "filepath", "gleam_crypto", "gleam_erlang", "gleam_http", "gleam_json", "gleam_stdlib", "houdini", "logging", "marceau", "mist", "simplifile"], otp_app = "wisp", source = "hex", outer_checksum = "5FF5F1E288C3437252ABB93D8F9CF42FF652CE7AD54480CFE736038DC09C4F22" }, 28 + { name = "youid", version = "1.6.0", build_tools = ["gleam"], requirements = ["gleam_crypto", "gleam_stdlib", "gleam_time"], otp_app = "youid", source = "hex", outer_checksum = "7A3ABA44B1B38BC2BDCB5474C5317AA372BE58DFBC649815EE08B03526DDA18D" }, 27 29 ] 28 30 29 31 [requirements] ··· 36 38 lustre = { version = ">= 5.6.0 and < 6.0.0" } 37 39 mist = { version = ">= 6.0.3 and < 7.0.0" } 38 40 wisp = { version = ">= 2.2.2 and < 3.0.0" } 41 + youid = { version = ">= 1.6.0 and < 2.0.0" }
+1
shared/gleam.toml
··· 14 14 15 15 [dependencies] 16 16 gleam_stdlib = ">= 0.44.0 and < 2.0.0" 17 + youid = ">= 1.6.0 and < 2.0.0" 17 18 18 19 [dev_dependencies] 19 20 gleeunit = ">= 1.0.0 and < 2.0.0"
+4
shared/manifest.toml
··· 2 2 # You typically do not need to edit this file 3 3 4 4 packages = [ 5 + { name = "gleam_crypto", version = "1.6.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_crypto", source = "hex", outer_checksum = "2DE9E4EF53CF6FEE049D4F765731F7178F7A11AEFAE00EEE63BF7536B354AD3F" }, 5 6 { name = "gleam_stdlib", version = "1.0.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "960090C2FB391784BB34267B099DC9315CC1B1F6013E7415BC763CEF1905D7D3" }, 7 + { name = "gleam_time", version = "1.8.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_time", source = "hex", outer_checksum = "533D8723774D61AD4998324F5DD1DABDCDBFABAFB9E87CB5D03C6955448FC97D" }, 6 8 { name = "gleeunit", version = "1.10.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "254B697FE72EEAD7BF82E941723918E421317813AC49923EE76A18C788C61E72" }, 9 + { name = "youid", version = "1.6.0", build_tools = ["gleam"], requirements = ["gleam_crypto", "gleam_stdlib", "gleam_time"], otp_app = "youid", source = "hex", outer_checksum = "7A3ABA44B1B38BC2BDCB5474C5317AA372BE58DFBC649815EE08B03526DDA18D" }, 7 10 ] 8 11 9 12 [requirements] 10 13 gleam_stdlib = { version = ">= 0.44.0 and < 2.0.0" } 11 14 gleeunit = { version = ">= 1.0.0 and < 2.0.0" } 15 + youid = { version = ">= 1.6.0 and < 2.0.0" }
+3 -1
shared/src/shared/user.gleam
··· 1 + import youid/uuid 2 + 1 3 pub type User { 2 - User 4 + User(id: uuid.Uuid, full_name: String, email: String) 3 5 }