Skip to content

Instantly share code, notes, and snippets.

View lasseebert's full-sized avatar

Lasse Skindstad Ebert lasseebert

View GitHub Profile
$ mix test test/contexts
.
Finished in 0.05 seconds
1 test, 0 failures
Randomized with seed 163288
$ mix test
...
1) test inviting a user responds with the new user (MyApp.UserController.InviteTest)
test/controllers/user_controller/invite_test.exs:4
** (FunctionClauseError) no function clause matching in MyApp.Users.Invite.call/1
stacktrace:
(my_app) lib/my_app/contexts/users/invite.ex:8: MyApp.Users.Invite.call(%{"email" => "alice@example.com"})
(my_app) web/controllers/user_controller.ex:5: MyApp.UserController.create/2
(my_app) web/controllers/user_controller.ex:1: MyApp.UserController.action/2
$ mix test
Compiling 1 file (.ex)
warning: variable user is unused
web/controllers/user_controller.ex:6
....
1) test inviting a user responds with the new user (MyApp.UserController.InviteTest)
test/controllers/user_controller/invite_test.exs:4
Expected truthy, got false
defmodule MyApp.UserController do
use MyApp.Web, :controller
def create(conn, params) do
attrs = %{email: params["email"]}
{:ok, user} = MyApp.Users.Invite.call(attrs)
{:ok, body} = %{
id: user.id,
email: user.email
$ mix test
Compiling 1 file (.ex)
.....
Finished in 0.08 seconds
5 tests, 0 failures
Randomized with seed 174980
test "invalid email gives a 400 response" do
conn =
build_conn
|> post("/users", email: "Alice and Bob")
body = conn |> response(400) |> Poison.decode!
assert body["message"] == "email is invalid"
end
test "it handles invalid email" do
{:error, :invalid_email} = Invite.call(%{email: "Alice and Bob"})
end
def call(%{email: email}) do
with :ok <- validate_email(email) do
email
|> build_changeset
|> create_user
end
end
#...
defmodule MyApp.UserController do
use MyApp.Web, :controller
def create(conn, params) do
attrs = %{email: params["email"]}
case MyApp.Users.Invite.call(attrs) do
{:ok, user} ->
render_user(conn, user)
{:error, :invalid_email} ->
defmodule MyApp.UserController do
use MyApp.Web, :controller
def create(conn, params) do
attrs = %{email: params["email"]}
case MyApp.Users.Invite.call(attrs) do
{:ok, user} ->
render_user(conn, user)
{:error, :invalid_email} ->