e463200ca6f56d7c3c000efdd8e34fbdbac8d780
[akkoma] / test / web / instances / instance_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Instances.InstanceTest do
6 alias Pleroma.Instances.Instance
7 alias Pleroma.Repo
8
9 use Pleroma.DataCase
10
11 import Pleroma.Factory
12
13 setup_all do: clear_config([:instance, :federation_reachability_timeout_days], 1)
14
15 describe "set_reachable/1" do
16 test "clears `unreachable_since` of existing matching Instance record having non-nil `unreachable_since`" do
17 unreachable_since = NaiveDateTime.to_iso8601(NaiveDateTime.utc_now())
18 instance = insert(:instance, unreachable_since: unreachable_since)
19
20 assert {:ok, instance} = Instance.set_reachable(instance.host)
21 refute instance.unreachable_since
22 end
23
24 test "keeps nil `unreachable_since` of existing matching Instance record having nil `unreachable_since`" do
25 instance = insert(:instance, unreachable_since: nil)
26
27 assert {:ok, instance} = Instance.set_reachable(instance.host)
28 refute instance.unreachable_since
29 end
30
31 test "does NOT create an Instance record in case of no existing matching record" do
32 host = "domain.org"
33 assert nil == Instance.set_reachable(host)
34
35 assert [] = Repo.all(Ecto.Query.from(i in Instance))
36 assert Instance.reachable?(host)
37 end
38 end
39
40 describe "set_unreachable/1" do
41 test "creates new record having `unreachable_since` to current time if record does not exist" do
42 assert {:ok, instance} = Instance.set_unreachable("https://domain.com/path")
43
44 instance = Repo.get(Instance, instance.id)
45 assert instance.unreachable_since
46 assert "domain.com" == instance.host
47 end
48
49 test "sets `unreachable_since` of existing record having nil `unreachable_since`" do
50 instance = insert(:instance, unreachable_since: nil)
51 refute instance.unreachable_since
52
53 assert {:ok, _} = Instance.set_unreachable(instance.host)
54
55 instance = Repo.get(Instance, instance.id)
56 assert instance.unreachable_since
57 end
58
59 test "does NOT modify `unreachable_since` value of existing record in case it's present" do
60 instance =
61 insert(:instance, unreachable_since: NaiveDateTime.add(NaiveDateTime.utc_now(), -10))
62
63 assert instance.unreachable_since
64 initial_value = instance.unreachable_since
65
66 assert {:ok, _} = Instance.set_unreachable(instance.host)
67
68 instance = Repo.get(Instance, instance.id)
69 assert initial_value == instance.unreachable_since
70 end
71 end
72
73 describe "set_unreachable/2" do
74 test "sets `unreachable_since` value of existing record in case it's newer than supplied value" do
75 instance =
76 insert(:instance, unreachable_since: NaiveDateTime.add(NaiveDateTime.utc_now(), -10))
77
78 assert instance.unreachable_since
79
80 past_value = NaiveDateTime.add(NaiveDateTime.utc_now(), -100)
81 assert {:ok, _} = Instance.set_unreachable(instance.host, past_value)
82
83 instance = Repo.get(Instance, instance.id)
84 assert past_value == instance.unreachable_since
85 end
86
87 test "does NOT modify `unreachable_since` value of existing record in case it's equal to or older than supplied value" do
88 instance =
89 insert(:instance, unreachable_since: NaiveDateTime.add(NaiveDateTime.utc_now(), -10))
90
91 assert instance.unreachable_since
92 initial_value = instance.unreachable_since
93
94 assert {:ok, _} = Instance.set_unreachable(instance.host, NaiveDateTime.utc_now())
95
96 instance = Repo.get(Instance, instance.id)
97 assert initial_value == instance.unreachable_since
98 end
99 end
100 end