defmodule OhMyExOhIrcd.ChannelsTest do
use OhMyExOhIrcd.DataCase, async: true
import OhMyExOhIrcd.AccountsFixtures
alias OhMyExOhIrcd.Channels
alias OhMyExOhIrcd.Channels.ChannelRecord
describe "register/2" do
test "creates a channel registration tied to a founder" do
user = user_fixture()
assert {:ok, %ChannelRecord{} = rec} = Channels.register("#hello", user)
assert rec.name == "#hello"
assert rec.founder_user_id == user.id
end
test "downcases the channel name" do
user = user_fixture()
{:ok, rec} = Channels.register("#HELLO", user)
assert rec.name == "#hello"
assert Channels.get("#Hello").id == rec.id
end
test "is idempotent for the same founder" do
user = user_fixture()
{:ok, a} = Channels.register("#again", user)
{:ok, b} = Channels.register("#again", user)
assert a.id == b.id
end
test "returns :taken when a different user already owns the name" do
u1 = user_fixture()
u2 = user_fixture()
{:ok, _} = Channels.register("#mine", u1)
assert {:error, :taken} = Channels.register("#mine", u2)
end
test "rejects names that don't start with # or &" do
user = user_fixture()
assert {:error, %Ecto.Changeset{}} = Channels.register("nohash", user)
end
end
describe "unregister/2" do
test "founder can drop their registration" do
user = user_fixture()
{:ok, _} = Channels.register("#drop", user)
assert {:ok, _} = Channels.unregister("#drop", user)
assert Channels.get("#drop") == nil
end
test "non-founder cannot drop someone else's channel" do
u1 = user_fixture()
u2 = user_fixture()
{:ok, _} = Channels.register("#u1ch", u1)
assert {:error, :not_founder} = Channels.unregister("#u1ch", u2)
end
end
end
neiam
/oh-my-ex-oh-ircd
public · Issues · Pulls · Labels · Forks · Compare · Actions success · Badges · Packages
⭐
Log in to mark this repository.
1.8 KiB · text
History
4b6fe3b