summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/matrix_app_service/bridge_test.exs141
-rw-r--r--test/support/conn_case.ex6
-rw-r--r--test/support/data_case.ex55
-rw-r--r--test/test_helper.exs1
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()