Fork of Pleroma with site-specific changes and feature branches https://git.pleroma.social/pleroma/pleroma
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

878 líneas
25KB

  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.UserTest do
  5. alias Pleroma.Builders.UserBuilder
  6. alias Pleroma.{User, Repo, Activity}
  7. alias Pleroma.Web.CommonAPI
  8. use Pleroma.DataCase
  9. import Pleroma.Factory
  10. setup_all do
  11. Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end)
  12. :ok
  13. end
  14. describe "when tags are nil" do
  15. test "tagging a user" do
  16. user = insert(:user, %{tags: nil})
  17. user = User.tag(user, ["cool", "dude"])
  18. assert "cool" in user.tags
  19. assert "dude" in user.tags
  20. end
  21. test "untagging a user" do
  22. user = insert(:user, %{tags: nil})
  23. user = User.untag(user, ["cool", "dude"])
  24. assert user.tags == []
  25. end
  26. end
  27. test "ap_id returns the activity pub id for the user" do
  28. user = UserBuilder.build()
  29. expected_ap_id = "#{Pleroma.Web.base_url()}/users/#{user.nickname}"
  30. assert expected_ap_id == User.ap_id(user)
  31. end
  32. test "ap_followers returns the followers collection for the user" do
  33. user = UserBuilder.build()
  34. expected_followers_collection = "#{User.ap_id(user)}/followers"
  35. assert expected_followers_collection == User.ap_followers(user)
  36. end
  37. test "follow_all follows mutliple users" do
  38. user = insert(:user)
  39. followed_one = insert(:user)
  40. followed_two = insert(:user)
  41. {:ok, user} = User.follow_all(user, [followed_one, followed_two])
  42. assert User.following?(user, followed_one)
  43. assert User.following?(user, followed_two)
  44. end
  45. test "follow takes a user and another user" do
  46. user = insert(:user)
  47. followed = insert(:user)
  48. {:ok, user} = User.follow(user, followed)
  49. user = Repo.get(User, user.id)
  50. followed = User.get_by_ap_id(followed.ap_id)
  51. assert followed.info.follower_count == 1
  52. assert User.ap_followers(followed) in user.following
  53. end
  54. test "can't follow a deactivated users" do
  55. user = insert(:user)
  56. followed = insert(:user, info: %{deactivated: true})
  57. {:error, _} = User.follow(user, followed)
  58. end
  59. test "can't follow a user who blocked us" do
  60. blocker = insert(:user)
  61. blockee = insert(:user)
  62. {:ok, blocker} = User.block(blocker, blockee)
  63. {:error, _} = User.follow(blockee, blocker)
  64. end
  65. test "local users do not automatically follow local locked accounts" do
  66. follower = insert(:user, info: %{locked: true})
  67. followed = insert(:user, info: %{locked: true})
  68. {:ok, follower} = User.maybe_direct_follow(follower, followed)
  69. refute User.following?(follower, followed)
  70. end
  71. # This is a somewhat useless test.
  72. # test "following a remote user will ensure a websub subscription is present" do
  73. # user = insert(:user)
  74. # {:ok, followed} = OStatus.make_user("shp@social.heldscal.la")
  75. # assert followed.local == false
  76. # {:ok, user} = User.follow(user, followed)
  77. # assert User.ap_followers(followed) in user.following
  78. # query = from w in WebsubClientSubscription,
  79. # where: w.topic == ^followed.info["topic"]
  80. # websub = Repo.one(query)
  81. # assert websub
  82. # end
  83. test "unfollow takes a user and another user" do
  84. followed = insert(:user)
  85. user = insert(:user, %{following: [User.ap_followers(followed)]})
  86. {:ok, user, _activity} = User.unfollow(user, followed)
  87. user = Repo.get(User, user.id)
  88. assert user.following == []
  89. end
  90. test "unfollow doesn't unfollow yourself" do
  91. user = insert(:user)
  92. {:error, _} = User.unfollow(user, user)
  93. user = Repo.get(User, user.id)
  94. assert user.following == [user.ap_id]
  95. end
  96. test "test if a user is following another user" do
  97. followed = insert(:user)
  98. user = insert(:user, %{following: [User.ap_followers(followed)]})
  99. assert User.following?(user, followed)
  100. refute User.following?(followed, user)
  101. end
  102. describe "user registration" do
  103. @full_user_data %{
  104. bio: "A guy",
  105. name: "my name",
  106. nickname: "nick",
  107. password: "test",
  108. password_confirmation: "test",
  109. email: "email@example.com"
  110. }
  111. test "it autofollows accounts that are set for it" do
  112. user = insert(:user)
  113. remote_user = insert(:user, %{local: false})
  114. Pleroma.Config.put([:instance, :autofollowed_nicknames], [
  115. user.nickname,
  116. remote_user.nickname
  117. ])
  118. cng = User.register_changeset(%User{}, @full_user_data)
  119. {:ok, registered_user} = User.register(cng)
  120. assert User.following?(registered_user, user)
  121. refute User.following?(registered_user, remote_user)
  122. end
  123. test "it requires an email, name, nickname and password, bio is optional" do
  124. @full_user_data
  125. |> Map.keys()
  126. |> Enum.each(fn key ->
  127. params = Map.delete(@full_user_data, key)
  128. changeset = User.register_changeset(%User{}, params)
  129. assert if key == :bio, do: changeset.valid?, else: not changeset.valid?
  130. end)
  131. end
  132. test "it restricts certain nicknames" do
  133. [restricted_name | _] = Pleroma.Config.get([Pleroma.User, :restricted_nicknames])
  134. assert is_bitstring(restricted_name)
  135. params =
  136. @full_user_data
  137. |> Map.put(:nickname, restricted_name)
  138. changeset = User.register_changeset(%User{}, params)
  139. refute changeset.valid?
  140. end
  141. test "it sets the password_hash, ap_id and following fields" do
  142. changeset = User.register_changeset(%User{}, @full_user_data)
  143. assert changeset.valid?
  144. assert is_binary(changeset.changes[:password_hash])
  145. assert changeset.changes[:ap_id] == User.ap_id(%User{nickname: @full_user_data.nickname})
  146. assert changeset.changes[:following] == [
  147. User.ap_followers(%User{nickname: @full_user_data.nickname})
  148. ]
  149. assert changeset.changes.follower_address == "#{changeset.changes.ap_id}/followers"
  150. end
  151. test "it ensures info is not nil" do
  152. changeset = User.register_changeset(%User{}, @full_user_data)
  153. assert changeset.valid?
  154. {:ok, user} =
  155. changeset
  156. |> Repo.insert()
  157. refute is_nil(user.info)
  158. end
  159. end
  160. describe "user registration, with :account_activation_required" do
  161. @full_user_data %{
  162. bio: "A guy",
  163. name: "my name",
  164. nickname: "nick",
  165. password: "test",
  166. password_confirmation: "test",
  167. email: "email@example.com"
  168. }
  169. setup do
  170. setting = Pleroma.Config.get([:instance, :account_activation_required])
  171. unless setting do
  172. Pleroma.Config.put([:instance, :account_activation_required], true)
  173. on_exit(fn -> Pleroma.Config.put([:instance, :account_activation_required], setting) end)
  174. end
  175. :ok
  176. end
  177. test "it creates unconfirmed user" do
  178. changeset = User.register_changeset(%User{}, @full_user_data)
  179. assert changeset.valid?
  180. {:ok, user} = Repo.insert(changeset)
  181. assert user.info.confirmation_pending
  182. assert user.info.confirmation_token
  183. end
  184. test "it creates confirmed user if :confirmed option is given" do
  185. changeset = User.register_changeset(%User{}, @full_user_data, confirmed: true)
  186. assert changeset.valid?
  187. {:ok, user} = Repo.insert(changeset)
  188. refute user.info.confirmation_pending
  189. refute user.info.confirmation_token
  190. end
  191. end
  192. describe "get_or_fetch/1" do
  193. test "gets an existing user by nickname" do
  194. user = insert(:user)
  195. fetched_user = User.get_or_fetch(user.nickname)
  196. assert user == fetched_user
  197. end
  198. test "gets an existing user by ap_id" do
  199. ap_id = "http://mastodon.example.org/users/admin"
  200. user =
  201. insert(
  202. :user,
  203. local: false,
  204. nickname: "admin@mastodon.example.org",
  205. ap_id: ap_id,
  206. info: %{}
  207. )
  208. fetched_user = User.get_or_fetch(ap_id)
  209. freshed_user = refresh_record(user)
  210. assert freshed_user == fetched_user
  211. end
  212. end
  213. describe "fetching a user from nickname or trying to build one" do
  214. test "gets an existing user" do
  215. user = insert(:user)
  216. fetched_user = User.get_or_fetch_by_nickname(user.nickname)
  217. assert user == fetched_user
  218. end
  219. test "gets an existing user, case insensitive" do
  220. user = insert(:user, nickname: "nick")
  221. fetched_user = User.get_or_fetch_by_nickname("NICK")
  222. assert user == fetched_user
  223. end
  224. test "gets an existing user by fully qualified nickname" do
  225. user = insert(:user)
  226. fetched_user =
  227. User.get_or_fetch_by_nickname(user.nickname <> "@" <> Pleroma.Web.Endpoint.host())
  228. assert user == fetched_user
  229. end
  230. test "gets an existing user by fully qualified nickname, case insensitive" do
  231. user = insert(:user, nickname: "nick")
  232. casing_altered_fqn = String.upcase(user.nickname <> "@" <> Pleroma.Web.Endpoint.host())
  233. fetched_user = User.get_or_fetch_by_nickname(casing_altered_fqn)
  234. assert user == fetched_user
  235. end
  236. test "fetches an external user via ostatus if no user exists" do
  237. fetched_user = User.get_or_fetch_by_nickname("shp@social.heldscal.la")
  238. assert fetched_user.nickname == "shp@social.heldscal.la"
  239. end
  240. test "returns nil if no user could be fetched" do
  241. fetched_user = User.get_or_fetch_by_nickname("nonexistant@social.heldscal.la")
  242. assert fetched_user == nil
  243. end
  244. test "returns nil for nonexistant local user" do
  245. fetched_user = User.get_or_fetch_by_nickname("nonexistant")
  246. assert fetched_user == nil
  247. end
  248. test "updates an existing user, if stale" do
  249. a_week_ago = NaiveDateTime.add(NaiveDateTime.utc_now(), -604_800)
  250. orig_user =
  251. insert(
  252. :user,
  253. local: false,
  254. nickname: "admin@mastodon.example.org",
  255. ap_id: "http://mastodon.example.org/users/admin",
  256. last_refreshed_at: a_week_ago,
  257. info: %{}
  258. )
  259. assert orig_user.last_refreshed_at == a_week_ago
  260. user = User.get_or_fetch_by_ap_id("http://mastodon.example.org/users/admin")
  261. assert user.info.source_data["endpoints"]
  262. refute user.last_refreshed_at == orig_user.last_refreshed_at
  263. end
  264. end
  265. test "returns an ap_id for a user" do
  266. user = insert(:user)
  267. assert User.ap_id(user) ==
  268. Pleroma.Web.Router.Helpers.o_status_url(
  269. Pleroma.Web.Endpoint,
  270. :feed_redirect,
  271. user.nickname
  272. )
  273. end
  274. test "returns an ap_followers link for a user" do
  275. user = insert(:user)
  276. assert User.ap_followers(user) ==
  277. Pleroma.Web.Router.Helpers.o_status_url(
  278. Pleroma.Web.Endpoint,
  279. :feed_redirect,
  280. user.nickname
  281. ) <> "/followers"
  282. end
  283. describe "remote user creation changeset" do
  284. @valid_remote %{
  285. bio: "hello",
  286. name: "Someone",
  287. nickname: "a@b.de",
  288. ap_id: "http...",
  289. info: %{some: "info"},
  290. avatar: %{some: "avatar"}
  291. }
  292. test "it confirms validity" do
  293. cs = User.remote_user_creation(@valid_remote)
  294. assert cs.valid?
  295. end
  296. test "it sets the follower_adress" do
  297. cs = User.remote_user_creation(@valid_remote)
  298. # remote users get a fake local follower address
  299. assert cs.changes.follower_address ==
  300. User.ap_followers(%User{nickname: @valid_remote[:nickname]})
  301. end
  302. test "it enforces the fqn format for nicknames" do
  303. cs = User.remote_user_creation(%{@valid_remote | nickname: "bla"})
  304. assert cs.changes.local == false
  305. assert cs.changes.avatar
  306. refute cs.valid?
  307. end
  308. test "it has required fields" do
  309. [:name, :ap_id]
  310. |> Enum.each(fn field ->
  311. cs = User.remote_user_creation(Map.delete(@valid_remote, field))
  312. refute cs.valid?
  313. end)
  314. end
  315. test "it restricts some sizes" do
  316. [bio: 5000, name: 100]
  317. |> Enum.each(fn {field, size} ->
  318. string = String.pad_leading(".", size)
  319. cs = User.remote_user_creation(Map.put(@valid_remote, field, string))
  320. assert cs.valid?
  321. string = String.pad_leading(".", size + 1)
  322. cs = User.remote_user_creation(Map.put(@valid_remote, field, string))
  323. refute cs.valid?
  324. end)
  325. end
  326. end
  327. describe "followers and friends" do
  328. test "gets all followers for a given user" do
  329. user = insert(:user)
  330. follower_one = insert(:user)
  331. follower_two = insert(:user)
  332. not_follower = insert(:user)
  333. {:ok, follower_one} = User.follow(follower_one, user)
  334. {:ok, follower_two} = User.follow(follower_two, user)
  335. {:ok, res} = User.get_followers(user)
  336. assert Enum.member?(res, follower_one)
  337. assert Enum.member?(res, follower_two)
  338. refute Enum.member?(res, not_follower)
  339. end
  340. test "gets all friends (followed users) for a given user" do
  341. user = insert(:user)
  342. followed_one = insert(:user)
  343. followed_two = insert(:user)
  344. not_followed = insert(:user)
  345. {:ok, user} = User.follow(user, followed_one)
  346. {:ok, user} = User.follow(user, followed_two)
  347. {:ok, res} = User.get_friends(user)
  348. followed_one = User.get_by_ap_id(followed_one.ap_id)
  349. followed_two = User.get_by_ap_id(followed_two.ap_id)
  350. assert Enum.member?(res, followed_one)
  351. assert Enum.member?(res, followed_two)
  352. refute Enum.member?(res, not_followed)
  353. end
  354. end
  355. describe "updating note and follower count" do
  356. test "it sets the info->note_count property" do
  357. note = insert(:note)
  358. user = User.get_by_ap_id(note.data["actor"])
  359. assert user.info.note_count == 0
  360. {:ok, user} = User.update_note_count(user)
  361. assert user.info.note_count == 1
  362. end
  363. test "it increases the info->note_count property" do
  364. note = insert(:note)
  365. user = User.get_by_ap_id(note.data["actor"])
  366. assert user.info.note_count == 0
  367. {:ok, user} = User.increase_note_count(user)
  368. assert user.info.note_count == 1
  369. {:ok, user} = User.increase_note_count(user)
  370. assert user.info.note_count == 2
  371. end
  372. test "it decreases the info->note_count property" do
  373. note = insert(:note)
  374. user = User.get_by_ap_id(note.data["actor"])
  375. assert user.info.note_count == 0
  376. {:ok, user} = User.increase_note_count(user)
  377. assert user.info.note_count == 1
  378. {:ok, user} = User.decrease_note_count(user)
  379. assert user.info.note_count == 0
  380. {:ok, user} = User.decrease_note_count(user)
  381. assert user.info.note_count == 0
  382. end
  383. test "it sets the info->follower_count property" do
  384. user = insert(:user)
  385. follower = insert(:user)
  386. User.follow(follower, user)
  387. assert user.info.follower_count == 0
  388. {:ok, user} = User.update_follower_count(user)
  389. assert user.info.follower_count == 1
  390. end
  391. end
  392. describe "follow_import" do
  393. test "it imports user followings from list" do
  394. [user1, user2, user3] = insert_list(3, :user)
  395. identifiers = [
  396. user2.ap_id,
  397. user3.nickname
  398. ]
  399. result = User.follow_import(user1, identifiers)
  400. assert is_list(result)
  401. assert result == [user2, user3]
  402. end
  403. end
  404. describe "blocks" do
  405. test "it blocks people" do
  406. user = insert(:user)
  407. blocked_user = insert(:user)
  408. refute User.blocks?(user, blocked_user)
  409. {:ok, user} = User.block(user, blocked_user)
  410. assert User.blocks?(user, blocked_user)
  411. end
  412. test "it unblocks users" do
  413. user = insert(:user)
  414. blocked_user = insert(:user)
  415. {:ok, user} = User.block(user, blocked_user)
  416. {:ok, user} = User.unblock(user, blocked_user)
  417. refute User.blocks?(user, blocked_user)
  418. end
  419. test "blocks tear down cyclical follow relationships" do
  420. blocker = insert(:user)
  421. blocked = insert(:user)
  422. {:ok, blocker} = User.follow(blocker, blocked)
  423. {:ok, blocked} = User.follow(blocked, blocker)
  424. assert User.following?(blocker, blocked)
  425. assert User.following?(blocked, blocker)
  426. {:ok, blocker} = User.block(blocker, blocked)
  427. blocked = Repo.get(User, blocked.id)
  428. assert User.blocks?(blocker, blocked)
  429. refute User.following?(blocker, blocked)
  430. refute User.following?(blocked, blocker)
  431. end
  432. test "blocks tear down blocker->blocked follow relationships" do
  433. blocker = insert(:user)
  434. blocked = insert(:user)
  435. {:ok, blocker} = User.follow(blocker, blocked)
  436. assert User.following?(blocker, blocked)
  437. refute User.following?(blocked, blocker)
  438. {:ok, blocker} = User.block(blocker, blocked)
  439. blocked = Repo.get(User, blocked.id)
  440. assert User.blocks?(blocker, blocked)
  441. refute User.following?(blocker, blocked)
  442. refute User.following?(blocked, blocker)
  443. end
  444. test "blocks tear down blocked->blocker follow relationships" do
  445. blocker = insert(:user)
  446. blocked = insert(:user)
  447. {:ok, blocked} = User.follow(blocked, blocker)
  448. refute User.following?(blocker, blocked)
  449. assert User.following?(blocked, blocker)
  450. {:ok, blocker} = User.block(blocker, blocked)
  451. blocked = Repo.get(User, blocked.id)
  452. assert User.blocks?(blocker, blocked)
  453. refute User.following?(blocker, blocked)
  454. refute User.following?(blocked, blocker)
  455. end
  456. end
  457. describe "domain blocking" do
  458. test "blocks domains" do
  459. user = insert(:user)
  460. collateral_user = insert(:user, %{ap_id: "https://awful-and-rude-instance.com/user/bully"})
  461. {:ok, user} = User.block_domain(user, "awful-and-rude-instance.com")
  462. assert User.blocks?(user, collateral_user)
  463. end
  464. test "unblocks domains" do
  465. user = insert(:user)
  466. collateral_user = insert(:user, %{ap_id: "https://awful-and-rude-instance.com/user/bully"})
  467. {:ok, user} = User.block_domain(user, "awful-and-rude-instance.com")
  468. {:ok, user} = User.unblock_domain(user, "awful-and-rude-instance.com")
  469. refute User.blocks?(user, collateral_user)
  470. end
  471. end
  472. describe "blocks_import" do
  473. test "it imports user blocks from list" do
  474. [user1, user2, user3] = insert_list(3, :user)
  475. identifiers = [
  476. user2.ap_id,
  477. user3.nickname
  478. ]
  479. result = User.blocks_import(user1, identifiers)
  480. assert is_list(result)
  481. assert result == [user2, user3]
  482. end
  483. end
  484. test "get recipients from activity" do
  485. actor = insert(:user)
  486. user = insert(:user, local: true)
  487. user_two = insert(:user, local: false)
  488. addressed = insert(:user, local: true)
  489. addressed_remote = insert(:user, local: false)
  490. {:ok, activity} =
  491. CommonAPI.post(actor, %{
  492. "status" => "hey @#{addressed.nickname} @#{addressed_remote.nickname}"
  493. })
  494. assert [addressed] == User.get_recipients_from_activity(activity)
  495. {:ok, user} = User.follow(user, actor)
  496. {:ok, _user_two} = User.follow(user_two, actor)
  497. recipients = User.get_recipients_from_activity(activity)
  498. assert length(recipients) == 2
  499. assert user in recipients
  500. assert addressed in recipients
  501. end
  502. test ".deactivate can de-activate then re-activate a user" do
  503. user = insert(:user)
  504. assert false == user.info.deactivated
  505. {:ok, user} = User.deactivate(user)
  506. assert true == user.info.deactivated
  507. {:ok, user} = User.deactivate(user, false)
  508. assert false == user.info.deactivated
  509. end
  510. test ".delete deactivates a user, all follow relationships and all create activities" do
  511. user = insert(:user)
  512. followed = insert(:user)
  513. follower = insert(:user)
  514. {:ok, user} = User.follow(user, followed)
  515. {:ok, follower} = User.follow(follower, user)
  516. {:ok, activity} = CommonAPI.post(user, %{"status" => "2hu"})
  517. {:ok, activity_two} = CommonAPI.post(follower, %{"status" => "3hu"})
  518. {:ok, _, _} = CommonAPI.favorite(activity_two.id, user)
  519. {:ok, _, _} = CommonAPI.favorite(activity.id, follower)
  520. {:ok, _, _} = CommonAPI.repeat(activity.id, follower)
  521. {:ok, _} = User.delete(user)
  522. followed = Repo.get(User, followed.id)
  523. follower = Repo.get(User, follower.id)
  524. user = Repo.get(User, user.id)
  525. assert user.info.deactivated
  526. refute User.following?(user, followed)
  527. refute User.following?(followed, follower)
  528. # TODO: Remove favorites, repeats, delete activities.
  529. refute Repo.get(Activity, activity.id)
  530. end
  531. test "get_public_key_for_ap_id fetches a user that's not in the db" do
  532. assert {:ok, _key} = User.get_public_key_for_ap_id("http://mastodon.example.org/users/admin")
  533. end
  534. test "insert or update a user from given data" do
  535. user = insert(:user, %{nickname: "nick@name.de"})
  536. data = %{ap_id: user.ap_id <> "xxx", name: user.name, nickname: user.nickname}
  537. assert {:ok, %User{}} = User.insert_or_update_user(data)
  538. end
  539. describe "per-user rich-text filtering" do
  540. test "html_filter_policy returns default policies, when rich-text is enabled" do
  541. user = insert(:user)
  542. assert Pleroma.Config.get([:markup, :scrub_policy]) == User.html_filter_policy(user)
  543. end
  544. test "html_filter_policy returns TwitterText scrubber when rich-text is disabled" do
  545. user = insert(:user, %{info: %{no_rich_text: true}})
  546. assert Pleroma.HTML.Scrubber.TwitterText == User.html_filter_policy(user)
  547. end
  548. end
  549. describe "caching" do
  550. test "invalidate_cache works" do
  551. user = insert(:user)
  552. _user_info = User.get_cached_user_info(user)
  553. User.invalidate_cache(user)
  554. {:ok, nil} = Cachex.get(:user_cache, "ap_id:#{user.ap_id}")
  555. {:ok, nil} = Cachex.get(:user_cache, "nickname:#{user.nickname}")
  556. {:ok, nil} = Cachex.get(:user_cache, "user_info:#{user.id}")
  557. end
  558. test "User.delete() plugs any possible zombie objects" do
  559. user = insert(:user)
  560. {:ok, _} = User.delete(user)
  561. {:ok, cached_user} = Cachex.get(:user_cache, "ap_id:#{user.ap_id}")
  562. assert cached_user != user
  563. {:ok, cached_user} = Cachex.get(:user_cache, "nickname:#{user.ap_id}")
  564. assert cached_user != user
  565. end
  566. end
  567. describe "User.search" do
  568. test "finds a user, ranking by similarity" do
  569. _user = insert(:user, %{name: "lain"})
  570. _user_two = insert(:user, %{name: "ean"})
  571. _user_three = insert(:user, %{name: "ebn", nickname: "lain@mastodon.social"})
  572. user_four = insert(:user, %{nickname: "lain@pleroma.soykaf.com"})
  573. assert user_four ==
  574. User.search("lain@ple") |> List.first() |> Map.put(:search_distance, nil)
  575. end
  576. test "finds a user whose name is nil" do
  577. _user = insert(:user, %{name: "notamatch", nickname: "testuser@pleroma.amplifie.red"})
  578. user_two = insert(:user, %{name: nil, nickname: "lain@pleroma.soykaf.com"})
  579. assert user_two ==
  580. User.search("lain@pleroma.soykaf.com")
  581. |> List.first()
  582. |> Map.put(:search_distance, nil)
  583. end
  584. end
  585. test "auth_active?/1 works correctly" do
  586. Pleroma.Config.put([:instance, :account_activation_required], true)
  587. local_user = insert(:user, local: true, info: %{confirmation_pending: true})
  588. confirmed_user = insert(:user, local: true, info: %{confirmation_pending: false})
  589. remote_user = insert(:user, local: false)
  590. refute User.auth_active?(local_user)
  591. assert User.auth_active?(confirmed_user)
  592. assert User.auth_active?(remote_user)
  593. Pleroma.Config.put([:instance, :account_activation_required], false)
  594. end
  595. describe "superuser?/1" do
  596. test "returns false for unprivileged users" do
  597. user = insert(:user, local: true)
  598. refute User.superuser?(user)
  599. end
  600. test "returns false for remote users" do
  601. user = insert(:user, local: false)
  602. remote_admin_user = insert(:user, local: false, info: %{is_admin: true})
  603. refute User.superuser?(user)
  604. refute User.superuser?(remote_admin_user)
  605. end
  606. test "returns true for local moderators" do
  607. user = insert(:user, local: true, info: %{is_moderator: true})
  608. assert User.superuser?(user)
  609. end
  610. test "returns true for local admins" do
  611. user = insert(:user, local: true, info: %{is_admin: true})
  612. assert User.superuser?(user)
  613. end
  614. end
  615. describe "visible_for?/2" do
  616. test "returns true when the account is itself" do
  617. user = insert(:user, local: true)
  618. assert User.visible_for?(user, user)
  619. end
  620. test "returns false when the account is unauthenticated and auth is required" do
  621. Pleroma.Config.put([:instance, :account_activation_required], true)
  622. user = insert(:user, local: true, info: %{confirmation_pending: true})
  623. other_user = insert(:user, local: true)
  624. refute User.visible_for?(user, other_user)
  625. Pleroma.Config.put([:instance, :account_activation_required], false)
  626. end
  627. test "returns true when the account is unauthenticated and auth is not required" do
  628. user = insert(:user, local: true, info: %{confirmation_pending: true})
  629. other_user = insert(:user, local: true)
  630. assert User.visible_for?(user, other_user)
  631. end
  632. test "returns true when the account is unauthenticated and being viewed by a privileged account (auth required)" do
  633. Pleroma.Config.put([:instance, :account_activation_required], true)
  634. user = insert(:user, local: true, info: %{confirmation_pending: true})
  635. other_user = insert(:user, local: true, info: %{is_admin: true})
  636. assert User.visible_for?(user, other_user)
  637. Pleroma.Config.put([:instance, :account_activation_required], false)
  638. end
  639. end
  640. end