59 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
| # 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
 | 
