summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/matrix_app_service/bridge_test.exs131
-rw-r--r--test/support/data_case.ex53
2 files changed, 184 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..46acffb
--- /dev/null
+++ b/test/matrix_app_service/bridge_test.exs
@@ -0,0 +1,131 @@
+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/data_case.ex b/test/support/data_case.ex
new file mode 100644
index 0000000..475f748
--- /dev/null
+++ b/test/support/data_case.ex
@@ -0,0 +1,53 @@
+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,
+ it cannot be async. For this reason, every test runs
+ inside a transaction which is reset at the beginning
+ of the test unless the test case is marked as async.
+ """
+
+ use ExUnit.CaseTemplate
+
+ alias Ecto.Adapters.SQL.Sandbox
+ alias Ecto.Changeset
+ alias MatrixAppService.Repo
+
+ using do
+ quote do
+ alias MatrixAppService.Repo
+
+ import Ecto
+ import Ecto.Changeset
+ import Ecto.Query
+ import MatrixAppService.DataCase
+ end
+ end
+
+ setup tags do
+ :ok = Sandbox.checkout(Repo)
+
+ unless tags[:async] do
+ Sandbox.mode(Repo, {:shared, self()})
+ end
+
+ :ok
+ end
+
+ @doc """
+ A helper that transform changeset errors to 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
+ Changeset.traverse_errors(changeset, fn {message, opts} ->
+ Enum.reduce(opts, message, fn {key, value}, acc ->
+ String.replace(acc, "%{#{key}}", to_string(value))
+ end)
+ end)
+ end
+end