farmbot_os/farmbot_ext/test/farmbot_ext/amqp/auto_sync_channel_test.exs

69 lines
2.6 KiB
Elixir

defmodule AutoSyncChannelTest do
alias FarmbotExt.AMQP.AutoSyncChannel
use ExUnit.Case, async: true
use Mimic
alias FarmbotExt.{
JWT,
API.Preloader,
AMQP.ConnectionWorker
}
setup :verify_on_exit!
setup :set_mimic_global
@fake_jwt "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZ" <>
"G1pbkBhZG1pbi5jb20iLCJpYXQiOjE1MDIxMjcxMTcsImp0a" <>
"SI6IjlhZjY2NzJmLTY5NmEtNDhlMy04ODVkLWJiZjEyZDlhY" <>
"ThjMiIsImlzcyI6Ii8vbG9jYWxob3N0OjMwMDAiLCJleHAiO" <>
"jE1MDU1ODMxMTcsIm1xdHQiOiJsb2NhbGhvc3QiLCJvc191c" <>
"GRhdGVfc2VydmVyIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvb" <>
"S9yZXBvcy9mYXJtYm90L2Zhcm1ib3Rfb3MvcmVsZWFzZXMvb" <>
"GF0ZXN0IiwiZndfdXBkYXRlX3NlcnZlciI6Imh0dHBzOi8vY" <>
"XBpLmdpdGh1Yi5jb20vcmVwb3MvRmFybUJvdC9mYXJtYm90L" <>
"WFyZHVpbm8tZmlybXdhcmUvcmVsZWFzZXMvbGF0ZXN0IiwiY" <>
"m90IjoiZGV2aWNlXzE1In0.XidSeTKp01ngtkHzKD_zklMVr" <>
"9ZUHX-U_VDlwCSmNA8ahOHxkwCtx8a3o_McBWvOYZN8RRzQV" <>
"LlHJugHq1Vvw2KiUktK_1ABQ4-RuwxOyOBqqc11-6H_GbkM8" <>
"dyzqRaWDnpTqHzkHGxanoWVTTgGx2i_MZLr8FPZ8prnRdwC1" <>
"x9zZ6xY7BtMPtHW0ddvMtXU8ZVF4CWJwKSaM0Q2pTxI9GRqr" <>
"p5Y8UjaKufif7bBPOUbkEHLNOiaux4MQr-OWAC8TrYMyFHzt" <>
"eXTEVkqw7rved84ogw6EKBSFCVqwRA-NKWLpPMV_q7fRwiEG" <>
"Wj7R-KZqRweALXuvCLF765E6-ENxA"
def generate_pid do
jwt = JWT.decode!(@fake_jwt)
ok = fn -> :ok end
ok1 = fn _ -> :ok end
# Test output will fill with huge termination errors
# if this is not stubbed.
stub(ConnectionWorker, :close_channel, ok1)
# Happy Path: Pretend preloading went OK
expect(Preloader, :preload_all, 1, ok)
# Happy Path: Pretend autosync is enabled
expect(FarmbotCore.Asset.Query, :auto_sync?, 1, fn -> true end)
# Happy Path: Set status to "synced" and only that.
expect(FarmbotCore.BotState, :set_sync_status, 1, fn "synced" -> :ok end)
# It will try to connect to authsync channel after init.
# we're not going to actually connect to a server in our
# test suite except under limited circumstances.
expect(ConnectionWorker, :maybe_connect_autosync, ok1)
expect(FarmbotExt.API.EagerLoader.Supervisor, :drop_all_cache, ok)
{:ok, pid} = AutoSyncChannel.start_link([jwt: jwt], [])
pid
end
test "init / terminate" do
# Most assertions are handled by `gnerate_pid`:
pid = generate_pid()
assert %{chan: nil, conn: nil, preloaded: true} == AutoSyncChannel.network_status(pid)
GenServer.stop(pid, :normal)
end
end