summaryrefslogtreecommitdiff
path: root/test/registration_test.exs
blob: 7db8e3664ab92e5f02a29b0223d397fbe08ca9cc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# Pleroma: A lightweight social networking server
# Copyright © 2017-2020 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