user_test.exs 2.42 KB
Newer Older
lain's avatar
lain committed
1
2
3
4
5
defmodule Pleroma.UserTest do
  alias Pleroma.Builders.UserBuilder
  alias Pleroma.User
  use Pleroma.DataCase

lain's avatar
lain committed
6
7
  import Pleroma.Factory

lain's avatar
lain committed
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
  test "ap_id returns the activity pub id for the user" do
    host =
      Application.get_env(:pleroma, Pleroma.Web.Endpoint)
      |> Keyword.fetch!(:url)
      |> Keyword.fetch!(:host)

    user = UserBuilder.build

    expected_ap_id = "https://#{host}/users/#{user.nickname}"

    assert expected_ap_id == User.ap_id(user)
  end

  test "ap_followers returns the followers collection for the user" do
    user = UserBuilder.build

    expected_followers_collection = "#{User.ap_id(user)}/followers"

    assert expected_followers_collection == User.ap_followers(user)
  end
lain's avatar
lain committed
28

lain's avatar
lain committed
29
  test "follow takes a user and another user" do
lain's avatar
lain committed
30
31
    user = insert(:user)
    followed = insert(:user)
lain's avatar
lain committed
32

lain's avatar
lain committed
33
    {:ok, user } = User.follow(user, followed)
lain's avatar
lain committed
34
35
36

    user = Repo.get(User, user.id)

lain's avatar
lain committed
37
    assert user.following == [User.ap_followers(followed)]
lain's avatar
lain committed
38
  end
lain's avatar
lain committed
39
40

  test "unfollow takes a user and another user" do
lain's avatar
lain committed
41
42
    followed = insert(:user)
    user = insert(:user, %{following: [User.ap_followers(followed)]})
lain's avatar
lain committed
43

lain's avatar
lain committed
44
    {:ok, user } = User.unfollow(user, followed)
lain's avatar
lain committed
45
46
47
48
49

    user = Repo.get(User, user.id)

    assert user.following == []
  end
50
51

  test "test if a user is following another user" do
lain's avatar
lain committed
52
53
    followed = insert(:user)
    user = insert(:user, %{following: [User.ap_followers(followed)]})
54
55
56
57

    assert User.following?(user, followed)
    refute User.following?(followed, user)
  end
lain's avatar
lain committed
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88

  describe "user registration" do
    @full_user_data %{
      bio: "A guy",
      name: "my name",
      nickname: "nick",
      password: "test",
      password_confirmation: "test",
      email: "email@example.com"
    }

    test "it requires a bio, email, name, nickname and password" do
      @full_user_data
      |> Map.keys
      |> Enum.each(fn (key) ->
        params = Map.delete(@full_user_data, key)
        changeset = User.register_changeset(%User{}, params)
        assert changeset.valid? == false
      end)
    end

    test "it sets the password_hash, ap_id and following fields" do
      changeset = User.register_changeset(%User{}, @full_user_data)

      assert changeset.valid?

      assert is_binary(changeset.changes[:password_hash])
      assert changeset.changes[:ap_id] == User.ap_id(%User{nickname: @full_user_data.nickname})
      assert changeset.changes[:following] == [User.ap_followers(%User{nickname: @full_user_data.nickname})]
    end
  end
lain's avatar
lain committed
89
end