user_test.exs 3.66 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
90
91
92
93
94
95
96
97

  describe "fetching a user from nickname or trying to build one" do
    test "gets an existing user" do
      user = insert(:user)
      fetched_user = User.get_or_fetch_by_nickname(user.nickname)

      assert user == fetched_user
    end

lain's avatar
lain committed
98
    # TODO: Make the test local.
lain's avatar
lain committed
99
100
101
102
103
104
105
106
107
    test "fetches an external user via ostatus if no user exists" do
      fetched_user = User.get_or_fetch_by_nickname("shp@social.heldscal.la")
      assert fetched_user.nickname == "shp@social.heldscal.la"
    end

    test "returns nil if no user could be fetched" do
      fetched_user = User.get_or_fetch_by_nickname("nonexistant@social.heldscal.la")
      assert fetched_user == nil
    end
lain's avatar
lain committed
108
109
110
111
112

    test "returns nil for nonexistant local user" do
      fetched_user = User.get_or_fetch_by_nickname("nonexistant")
      assert fetched_user == nil
    end
lain's avatar
lain committed
113
  end
114
115
116
117
118
119
120
121
122
123

  test "returns an ap_id for a user" do
    user = insert(:user)
    assert User.ap_id(user) == Pleroma.Web.Router.Helpers.o_status_url(Pleroma.Web.Endpoint, :feed_redirect, user.nickname)
  end

  test "returns an ap_followers link for a user" do
    user = insert(:user)
    assert User.ap_followers(user) == Pleroma.Web.Router.Helpers.o_status_url(Pleroma.Web.Endpoint, :feed_redirect, user.nickname) <> "/followers"
  end
lain's avatar
lain committed
124
end
lain's avatar
lain committed
125