import app import app/http_router import app/web/context.{type Context, Context} import envoy import gleam/erlang/process import gleam/http import gleam/json import gleeunit import global_value import pog import wisp import wisp/simulate pub const n_tests = 1 pub fn main() -> Nil { gleeunit.main() } /// Global context data used in unit tests pub fn global_data(next: fn(Context) -> a) -> a { use <- global_value.create_with_unique_name("global_context") let db_process_name = process.new_name("db_conn") let registry_name = process.new_name("registry") let env = context.Dev let assert Ok(config) = app.read_connection_url(db_process_name, env) let assert Ok(secret_key_base) = envoy.get("COOKIE_TOKEN") let db = pog.named_connection(db_process_name) let assert Ok(_) = pog.start(config) let static_directory = app.static_directory() next(Context(static_directory:, db:, registry_name:, secret_key_base:, env:)) } ///  Create a request with admin privileges pub fn with_authorization(next req: wisp.Request) -> wisp.Request { use ctx <- global_data() let login_req = simulate.browser_request(http.Post, "/user/login") |> simulate.json_body( json.object([ #("matricula", json.string("000")), #("senha", json.string("aluno")), ]), ) let login_resp = http_router.handle_request(login_req, ctx) // Continue the session after being logged in simulate.session(req, login_req, login_resp) }