diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/matrix_app_service/bridge_test.exs | 141 | ||||
-rw-r--r-- | test/support/conn_case.ex | 6 | ||||
-rw-r--r-- | test/support/data_case.ex | 55 | ||||
-rw-r--r-- | test/test_helper.exs | 1 |
4 files changed, 203 insertions, 0 deletions
diff --git a/test/matrix_app_service/bridge_test.exs b/test/matrix_app_service/bridge_test.exs new file mode 100644 index 0000000..0644f39 --- /dev/null +++ b/test/matrix_app_service/bridge_test.exs @@ -0,0 +1,141 @@ +defmodule MatrixAppService.BridgeTest do + use MatrixAppService.DataCase + + alias MatrixAppService.Bridge + + describe "users" do + alias MatrixAppService.Bridge.User + + @valid_attrs %{data: %{}, local_id: "some local_id", remote_id: "some remote_id"} + @update_attrs %{ + data: %{}, + local_id: "some updated local_id", + remote_id: "some updated remote_id" + } + + # @invalid_attrs %{data: nil, local_id: nil, remote_id: nil} + + def user_fixture(attrs \\ %{}) do + {:ok, user} = + attrs + |> Enum.into(@valid_attrs) + |> Bridge.create_user() + + user + end + + test "list_users/0 returns all users" do + user = user_fixture() + assert Bridge.list_users() == [user] + end + + test "get_user!/1 returns the user with given id" do + user = user_fixture() + assert Bridge.get_user!(user.id) == user + end + + test "create_user/1 with valid data creates a user" do + assert {:ok, %User{} = user} = Bridge.create_user(@valid_attrs) + assert user.data == %{} + assert user.local_id == "some local_id" + assert user.remote_id == "some remote_id" + end + + # test "create_user/1 with invalid data returns error changeset" do + # assert {:error, %Ecto.Changeset{}} = Bridge.create_user(@invalid_attrs) + # end + + test "update_user/2 with valid data updates the user" do + user = user_fixture() + assert {:ok, %User{} = user} = Bridge.update_user(user, @update_attrs) + assert user.data == %{} + assert user.local_id == "some updated local_id" + assert user.remote_id == "some updated remote_id" + end + + # test "update_user/2 with invalid data returns error changeset" do + # user = user_fixture() + # assert {:error, %Ecto.Changeset{}} = Bridge.update_user(user, @invalid_attrs) + # assert user == Bridge.get_user!(user.id) + # end + + test "delete_user/1 deletes the user" do + user = user_fixture() + assert {:ok, %User{}} = Bridge.delete_user(user) + assert_raise Ecto.NoResultsError, fn -> Bridge.get_user!(user.id) end + end + + test "change_user/1 returns a user changeset" do + user = user_fixture() + assert %Ecto.Changeset{} = Bridge.change_user(user) + end + end + + describe "rooms" do + alias MatrixAppService.Bridge.Room + + @valid_attrs %{data: %{}, local_id: "some local_id", remote_id: "some remote_id"} + @update_attrs %{ + data: %{}, + local_id: "some updated local_id", + remote_id: "some updated remote_id" + } + + # @invalid_attrs %{data: nil, local_id: nil, remote_id: nil} + + def room_fixture(attrs \\ %{}) do + {:ok, room} = + attrs + |> Enum.into(@valid_attrs) + |> Bridge.create_room() + + room + end + + test "list_rooms/0 returns all rooms" do + room = room_fixture() + assert Bridge.list_rooms() == [room] + end + + test "get_room!/1 returns the room with given id" do + room = room_fixture() + assert Bridge.get_room!(room.id) == room + end + + test "create_room/1 with valid data creates a room" do + assert {:ok, %Room{} = room} = Bridge.create_room(@valid_attrs) + assert room.data == %{} + assert room.local_id == "some local_id" + assert room.remote_id == "some remote_id" + end + + # test "create_room/1 with invalid data returns error changeset" do + # assert {:error, %Ecto.Changeset{}} = Bridge.create_room(@invalid_attrs) + # end + + test "update_room/2 with valid data updates the room" do + room = room_fixture() + assert {:ok, %Room{} = room} = Bridge.update_room(room, @update_attrs) + assert room.data == %{} + assert room.local_id == "some updated local_id" + assert room.remote_id == "some updated remote_id" + end + + # test "update_room/2 with invalid data returns error changeset" do + # room = room_fixture() + # assert {:error, %Ecto.Changeset{}} = Bridge.update_room(room, @invalid_attrs) + # assert room == Bridge.get_room!(room.id) + # end + + test "delete_room/1 deletes the room" do + room = room_fixture() + assert {:ok, %Room{}} = Bridge.delete_room(room) + assert_raise Ecto.NoResultsError, fn -> Bridge.get_room!(room.id) end + end + + test "change_room/1 returns a room changeset" do + room = room_fixture() + assert %Ecto.Changeset{} = Bridge.change_room(room) + end + end +end diff --git a/test/support/conn_case.ex b/test/support/conn_case.ex index e1ce056..582801d 100644 --- a/test/support/conn_case.ex +++ b/test/support/conn_case.ex @@ -32,6 +32,12 @@ defmodule MatrixAppServiceWeb.ConnCase do end setup tags do + :ok = Ecto.Adapters.SQL.Sandbox.checkout(MatrixAppService.Repo) + + unless tags[:async] do + Ecto.Adapters.SQL.Sandbox.mode(MatrixAppService.Repo, {:shared, self()}) + end + conn = if tags[:authenticated] do Phoenix.ConnTest.build_conn(:get, "/", %{ diff --git a/test/support/data_case.ex b/test/support/data_case.ex new file mode 100644 index 0000000..76994a7 --- /dev/null +++ b/test/support/data_case.ex @@ -0,0 +1,55 @@ +defmodule MatrixAppService.DataCase do + @moduledoc """ + This module defines the setup for tests requiring + access to the application's data layer. + + You may define functions here to be used as helpers in + your tests. + + 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 MatrixAppService.DataCase, async: true`, although + this option is not recommended for other databases. + """ + + use ExUnit.CaseTemplate + + using do + quote do + alias MatrixAppService.Repo + + import Ecto + import Ecto.Changeset + import Ecto.Query + import MatrixAppService.DataCase + end + end + + setup tags do + :ok = Ecto.Adapters.SQL.Sandbox.checkout(MatrixAppService.Repo) + + unless tags[:async] do + Ecto.Adapters.SQL.Sandbox.mode(MatrixAppService.Repo, {:shared, self()}) + end + + :ok + end + + @doc """ + A helper that transforms changeset errors into a map of messages. + + assert {:error, changeset} = Accounts.create_user(%{password: "short"}) + assert "password is too short" in errors_on(changeset).password + assert %{password: ["password is too short"]} = errors_on(changeset) + + """ + def errors_on(changeset) do + Ecto.Changeset.traverse_errors(changeset, fn {message, opts} -> + Regex.replace(~r"%{(\w+)}", message, fn _, key -> + opts |> Keyword.get(String.to_existing_atom(key), key) |> to_string() + end) + end) + end +end diff --git a/test/test_helper.exs b/test/test_helper.exs index 3140500..baf9e64 100644 --- a/test/test_helper.exs +++ b/test/test_helper.exs @@ -1,2 +1,3 @@ +Ecto.Adapters.SQL.Sandbox.mode(MatrixAppService.Repo, :manual) ExUnit.configure(formatters: [JUnitFormatter, ExUnit.CLIFormatter]) ExUnit.start() |