I managed to make it work using the setup
macro as following:
setup do
# Get the pids of all currently alive processes
accounts_used_pids =
DynamicSupervisor.which_children(Account.Cache)
|> Stream.map(fn entry ->
case entry do
{_, pid, :worker, [Account.Server]} -> pid
_ -> nil
end
end)
|> Enum.filter(fn ele -> ele !== nil end)
# Terminate all processes
Enum.each(accounts_used_pids, &Process.exit(&1, :clean_up))
# Reset the "database"
File.rm_rf(Account.Database.folder_path())
File.mkdir_p!(Account.Database.folder_path())
:ok
end
The setup macro runs the code inside it after each test case. So I clean up the database and terminate all processes related to the account, after every test case.
It might not be the optimal solution, but work for me! Thank you so much for the help!