Add start of controller testing
This commit is contained in:
parent
598af7a884
commit
096c99df92
14 changed files with 106 additions and 87 deletions
29
test/controllers/auth_controller_test.exs
Normal file
29
test/controllers/auth_controller_test.exs
Normal file
|
@ -0,0 +1,29 @@
|
|||
defmodule MatrixServerWeb.AuthControllerTest do
|
||||
use MatrixServerWeb.ConnCase
|
||||
|
||||
alias MatrixServerWeb.Endpoint
|
||||
|
||||
describe "register endpoint" do
|
||||
test "renders the auth flow when no auth parameter is given", %{conn: conn} do
|
||||
conn = post(conn, Routes.auth_path(conn, :register))
|
||||
|
||||
assert %{"flows" => flows, "params" => _} = json_response(conn, 401)
|
||||
assert is_list(flows)
|
||||
end
|
||||
|
||||
test "registers account with minimal information", %{conn: conn} do
|
||||
params = %{
|
||||
"username" => "user",
|
||||
"password" => "lemmein",
|
||||
"auth" => %{"type" => "m.login.dummy"}
|
||||
}
|
||||
|
||||
conn = post_json(conn, Routes.auth_path(Endpoint, :register), params)
|
||||
|
||||
user_id = MatrixServer.get_mxid("user")
|
||||
|
||||
assert %{"access_token" => _, "device_id" => _, "user_id" => ^user_id} =
|
||||
json_response(conn, 200)
|
||||
end
|
||||
end
|
||||
end
|
16
test/controllers/info_controller_test.exs
Normal file
16
test/controllers/info_controller_test.exs
Normal file
|
@ -0,0 +1,16 @@
|
|||
defmodule MatrixServerWeb.InfoControllerTest do
|
||||
use MatrixServerWeb.ConnCase
|
||||
|
||||
test "versions endpoint returns a list of supported Matrix spec versions", %{conn: conn} do
|
||||
conn = get(conn, Routes.info_path(conn, :versions))
|
||||
|
||||
assert %{"versions" => versions} = json_response(conn, 200)
|
||||
assert is_list(versions)
|
||||
end
|
||||
|
||||
test "unrecognized route renders M_UNRECOGNIZED error", %{conn: conn} do
|
||||
conn = get(conn, MatrixServerWeb.Endpoint.url() <> "/sneed")
|
||||
|
||||
assert %{"errcode" => "M_UNRECOGNIZED"} = json_response(conn, 400)
|
||||
end
|
||||
end
|
|
@ -1,15 +0,0 @@
|
|||
defmodule MatrixServerWeb.ErrorViewTest do
|
||||
use MatrixServerWeb.ConnCase, async: true
|
||||
|
||||
# Bring render/3 and render_to_string/3 for testing custom views
|
||||
import Phoenix.View
|
||||
|
||||
test "renders 404.json" do
|
||||
assert render(MatrixServerWeb.ErrorView, "404.json", []) == %{errors: %{detail: "Not Found"}}
|
||||
end
|
||||
|
||||
test "renders 500.json" do
|
||||
assert render(MatrixServerWeb.ErrorView, "500.json", []) ==
|
||||
%{errors: %{detail: "Internal Server Error"}}
|
||||
end
|
||||
end
|
|
@ -1,40 +0,0 @@
|
|||
defmodule MatrixServerWeb.ChannelCase do
|
||||
@moduledoc """
|
||||
This module defines the test case to be used by
|
||||
channel tests.
|
||||
|
||||
Such tests rely on `Phoenix.ChannelTest` and also
|
||||
import other functionality to make it easier
|
||||
to build common data structures and query the data layer.
|
||||
|
||||
Finally, if the test case interacts with the database,
|
||||
we enable the SQL sandbox, so changes done to the database
|
||||
are reverted at the end of every test. If you are using
|
||||
PostgreSQL, you can even run database tests asynchronously
|
||||
by setting `use MatrixServerWeb.ChannelCase, async: true`, although
|
||||
this option is not recommended for other databases.
|
||||
"""
|
||||
|
||||
use ExUnit.CaseTemplate
|
||||
|
||||
using do
|
||||
quote do
|
||||
# Import conveniences for testing with channels
|
||||
import Phoenix.ChannelTest
|
||||
import MatrixServerWeb.ChannelCase
|
||||
|
||||
# The default endpoint for testing
|
||||
@endpoint MatrixServerWeb.Endpoint
|
||||
end
|
||||
end
|
||||
|
||||
setup tags do
|
||||
:ok = Ecto.Adapters.SQL.Sandbox.checkout(MatrixServer.Repo)
|
||||
|
||||
unless tags[:async] do
|
||||
Ecto.Adapters.SQL.Sandbox.mode(MatrixServer.Repo, {:shared, self()})
|
||||
end
|
||||
|
||||
:ok
|
||||
end
|
||||
end
|
|
@ -40,4 +40,12 @@ defmodule MatrixServerWeb.ConnCase do
|
|||
|
||||
{:ok, conn: Phoenix.ConnTest.build_conn()}
|
||||
end
|
||||
|
||||
defmacro post_json(conn, path, params) do
|
||||
quote do
|
||||
unquote(conn)
|
||||
|> put_req_header("content-type", "application/json")
|
||||
|> post(unquote(path), Jason.encode!(unquote(params)))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
24
test/support/factory.ex
Normal file
24
test/support/factory.ex
Normal file
|
@ -0,0 +1,24 @@
|
|||
defmodule MatrixServer.Factory do
|
||||
use ExMachina.Ecto, repo: MatrixServer.Repo
|
||||
|
||||
alias MatrixServer.{Account, Device}
|
||||
|
||||
def account_factory do
|
||||
%Account{
|
||||
localpart: sequence(:localpart, &"account#{&1}"),
|
||||
password_hash: Bcrypt.hash_pwd_salt("lemmein")
|
||||
}
|
||||
end
|
||||
|
||||
def device_factory do
|
||||
%Account{localpart: localpart} = account = build(:account)
|
||||
device_id = sequence(:device_id, &"device#{&1}")
|
||||
|
||||
%Device{
|
||||
device_id: device_id,
|
||||
access_token: Device.generate_access_token(localpart, device_id),
|
||||
display_name: sequence(:display_name, &"Device #{&1}"),
|
||||
account: account
|
||||
}
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue