1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
5 defmodule Pleroma.Instances.InstanceTest do
6 alias Pleroma.Instances.Instance
11 import Pleroma.Factory
13 setup_all do: clear_config([:instance, :federation_reachability_timeout_days], 1)
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)
20 assert {:ok, instance} = Instance.set_reachable(instance.host)
21 refute instance.unreachable_since
24 test "keeps nil `unreachable_since` of existing matching Instance record having nil `unreachable_since`" do
25 instance = insert(:instance, unreachable_since: nil)
27 assert {:ok, instance} = Instance.set_reachable(instance.host)
28 refute instance.unreachable_since
31 test "does NOT create an Instance record in case of no existing matching record" do
33 assert nil == Instance.set_reachable(host)
35 assert [] = Repo.all(Ecto.Query.from(i in Instance))
36 assert Instance.reachable?(host)
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")
44 instance = Repo.get(Instance, instance.id)
45 assert instance.unreachable_since
46 assert "domain.com" == instance.host
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
53 assert {:ok, _} = Instance.set_unreachable(instance.host)
55 instance = Repo.get(Instance, instance.id)
56 assert instance.unreachable_since
59 test "does NOT modify `unreachable_since` value of existing record in case it's present" do
61 insert(:instance, unreachable_since: NaiveDateTime.add(NaiveDateTime.utc_now(), -10))
63 assert instance.unreachable_since
64 initial_value = instance.unreachable_since
66 assert {:ok, _} = Instance.set_unreachable(instance.host)
68 instance = Repo.get(Instance, instance.id)
69 assert initial_value == instance.unreachable_since
73 describe "set_unreachable/2" do
74 test "sets `unreachable_since` value of existing record in case it's newer than supplied value" do
76 insert(:instance, unreachable_since: NaiveDateTime.add(NaiveDateTime.utc_now(), -10))
78 assert instance.unreachable_since
80 past_value = NaiveDateTime.add(NaiveDateTime.utc_now(), -100)
81 assert {:ok, _} = Instance.set_unreachable(instance.host, past_value)
83 instance = Repo.get(Instance, instance.id)
84 assert past_value == instance.unreachable_since
87 test "does NOT modify `unreachable_since` value of existing record in case it's equal to or older than supplied value" do
89 insert(:instance, unreachable_since: NaiveDateTime.add(NaiveDateTime.utc_now(), -10))
91 assert instance.unreachable_since
92 initial_value = instance.unreachable_since
94 assert {:ok, _} = Instance.set_unreachable(instance.host, NaiveDateTime.utc_now())
96 instance = Repo.get(Instance, instance.id)
97 assert initial_value == instance.unreachable_since