forked from mirrors/akkoma
60 lines
1.9 KiB
Elixir
60 lines
1.9 KiB
Elixir
# Pleroma: A lightweight social networking server
|
|
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
|
|
# SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
defmodule Pleroma.RegistrationTest do
|
|
use Pleroma.DataCase
|
|
|
|
import Pleroma.Factory
|
|
|
|
alias Pleroma.Registration
|
|
alias Pleroma.Repo
|
|
|
|
describe "generic changeset" do
|
|
test "requires :provider, :uid" do
|
|
registration = build(:registration, provider: nil, uid: nil)
|
|
|
|
cs = Registration.changeset(registration, %{})
|
|
refute cs.valid?
|
|
|
|
assert [
|
|
provider: {"can't be blank", [validation: :required]},
|
|
uid: {"can't be blank", [validation: :required]}
|
|
] == cs.errors
|
|
end
|
|
|
|
test "ensures uniqueness of [:provider, :uid]" do
|
|
registration = insert(:registration)
|
|
registration2 = build(:registration, provider: registration.provider, uid: registration.uid)
|
|
|
|
cs = Registration.changeset(registration2, %{})
|
|
assert cs.valid?
|
|
|
|
assert {:error,
|
|
%Ecto.Changeset{
|
|
errors: [
|
|
uid:
|
|
{"has already been taken",
|
|
[constraint: :unique, constraint_name: "registrations_provider_uid_index"]}
|
|
]
|
|
}} = Repo.insert(cs)
|
|
|
|
# Note: multiple :uid values per [:user_id, :provider] are intentionally allowed
|
|
cs2 = Registration.changeset(registration2, %{uid: "available.uid"})
|
|
assert cs2.valid?
|
|
assert {:ok, _} = Repo.insert(cs2)
|
|
|
|
cs3 = Registration.changeset(registration2, %{provider: "provider2"})
|
|
assert cs3.valid?
|
|
assert {:ok, _} = Repo.insert(cs3)
|
|
end
|
|
|
|
test "allows `nil` :user_id (user-unbound registration)" do
|
|
registration = build(:registration, user_id: nil)
|
|
cs = Registration.changeset(registration, %{})
|
|
assert cs.valid?
|
|
assert {:ok, _} = Repo.insert(cs)
|
|
end
|
|
end
|
|
end
|