From 7e16cd9ae0abd45afe27328083c9457e09fb3577 Mon Sep 17 00:00:00 2001 From: njms Date: Mon, 12 Jun 2023 16:39:22 -0700 Subject: [PATCH] Add case for unknown token in Token.get/1 --- lib/hostas/token.ex | 19 ++++++++++++------- test/hostas/token_test.exs | 8 ++++++-- test/support/data_case.ex | 10 ++++++++++ 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/lib/hostas/token.ex b/lib/hostas/token.ex index 0be40dd..836278c 100644 --- a/lib/hostas/token.ex +++ b/lib/hostas/token.ex @@ -48,15 +48,20 @@ defmodule Hostas.Token do end @doc """ - Returns {:ok, struct} if the token hasn't expired. Otherwise, returns :expired + Returns: + * `{:ok, struct}` if the token exists and is not expired + * `{:error, :unknown}` if the token was not found + * `{:error, :expired}` if the token exists, but is expired """ def get(key) do - struct = Repo.one!(from t in Token, where: t.token == ^key) - - unless expired?(struct) do - {:ok, struct} - else - :expired + case Repo.one(from t in Token, where: t.token == ^key) do + nil -> {:error, :unknown} + struct -> + unless expired?(struct) do + {:ok, struct} + else + {:error, :expired} + end end end diff --git a/test/hostas/token_test.exs b/test/hostas/token_test.exs index bbec192..6985b80 100644 --- a/test/hostas/token_test.exs +++ b/test/hostas/token_test.exs @@ -33,12 +33,16 @@ defmodule Hostas.TokenTest do test "indicates the token is expired" do {:ok, struct} = Token.new(create_denizen().id, -30) - assert Token.get(struct.token) == :expired + assert Token.get(struct.token) == {:error, :expired} end test "by key" do {:ok, struct} = Token.new(create_denizen().id, -30) - assert Token.expired?(struct.token) + assert Token.get(struct.token) == {:error, :expired} + end + + test "doesn't exist" do + assert Token.get("unknown token") == {:error, :unknown} end end diff --git a/test/support/data_case.ex b/test/support/data_case.ex index 7476fbe..4a5e72f 100644 --- a/test/support/data_case.ex +++ b/test/support/data_case.ex @@ -16,6 +16,9 @@ defmodule Hostas.DataCase do use ExUnit.CaseTemplate + alias Hostas.Repo + alias Hostas.Denizen + using do quote do alias Hostas.Repo @@ -55,4 +58,11 @@ defmodule Hostas.DataCase do end) end) end + + def create_denizen(handle \\ "denizen") do + Repo.insert!( + Denizen.changeset(%Denizen{}, %{handle: handle, name: "Test Denizen", password: "password"}) + ) + end + end