total rebase
[anni] / test / pleroma / user / backup_async_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2023 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.User.BackupAsyncTest do
6   use Pleroma.DataCase, async: true
7
8   import Pleroma.Factory
9   import Mox
10
11   alias Pleroma.UnstubbedConfigMock, as: ConfigMock
12   alias Pleroma.User.Backup
13   alias Pleroma.User.Backup.ProcessorMock
14
15   setup do
16     user = insert(:user, %{nickname: "cofe", name: "Cofe", ap_id: "http://cofe.io/users/cofe"})
17
18     {:ok, backup} = user |> Backup.new() |> Repo.insert()
19     %{backup: backup}
20   end
21
22   @tag capture_log: true
23   test "it handles unrecoverable exceptions", %{backup: backup} do
24     ProcessorMock
25     |> expect(:do_process, fn _, _ ->
26       raise "mock exception"
27     end)
28
29     ConfigMock
30     |> stub_with(Pleroma.Config)
31
32     {:error, %{backup: backup, reason: :exit}} = Backup.process(backup, ProcessorMock)
33
34     assert backup.state == :failed
35   end
36
37   @tag capture_log: true
38   test "it handles timeouts", %{backup: backup} do
39     ProcessorMock
40     |> expect(:do_process, fn _, _ ->
41       Process.sleep(:timer.seconds(4))
42     end)
43
44     ConfigMock
45     |> expect(:get, fn [Pleroma.User.Backup, :process_wait_time] -> :timer.seconds(2) end)
46
47     {:error, %{backup: backup, reason: :timeout}} = Backup.process(backup, ProcessorMock)
48
49     assert backup.state == :failed
50   end
51 end