Various refactoring and typespec improvements

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel
2021-09-24 16:46:42 +02:00
parent d235653876
commit 1893d9f55b
142 changed files with 1854 additions and 1297 deletions

View File

@@ -249,11 +249,11 @@ defmodule Mobilizon.Federation.ActivityPub.AudienceTest do
end
test "reply to a remote comment" do
%Actor{id: remote_actor_id, url: remote_actor_url} =
%Actor{} =
remote_actor =
insert(:actor, domain: "somewhere.else", url: "https://somewhere.else/@someone")
%Actor{id: remote_group_id, url: remote_group_url} =
%Actor{} =
remote_group =
insert(:group, domain: "somewhere.else", url: "https://somewhere.else/@somegroup")

View File

@@ -88,10 +88,10 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier.DeleteTest do
%Actor{url: url} =
actor = insert(:actor, url: "https://framapiaf.org/users/admin", domain: "framapiaf.org")
%Event{url: event1_url} = event1 = insert(:event, organizer_actor: actor)
%Event{} = event1 = insert(:event, organizer_actor: actor)
insert(:event, organizer_actor: actor)
%Comment{url: comment1_url} = comment1 = insert(:comment, actor: actor)
%Comment{} = comment1 = insert(:comment, actor: actor)
insert(:comment, actor: actor)
data =

View File

@@ -24,7 +24,7 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier.InviteTest do
|> Map.put("object", group_url)
|> Map.put("target", invitee_url)
assert {:ok, activity, %Member{}} = Transmogrifier.handle_incoming(invite_data)
assert {:ok, _activity, %Member{}} = Transmogrifier.handle_incoming(invite_data)
assert %Member{} = member = Actors.get_member_by_url(invite_data["id"])
assert member.actor.id == invitee_id
assert member.parent.id == group_id
@@ -49,7 +49,7 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier.InviteTest do
|> Map.put("object", group_url)
|> Map.put("target", invitee_url)
assert {:ok, activity, %Member{}} = Transmogrifier.handle_incoming(invite_data)
assert {:ok, _activity, %Member{}} = Transmogrifier.handle_incoming(invite_data)
assert %Member{} = member = Actors.get_member_by_url(invite_data["id"])
assert member.actor.id == invitee_id
assert member.parent.id == group_id

View File

@@ -120,7 +120,7 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier.UpdateTest do
)
group = insert(:group)
%Member{} = member = insert(:member, actor: remote_actor, parent: group, role: :moderator)
%Member{} = _member = insert(:member, actor: remote_actor, parent: group, role: :moderator)
%Post{} = post = insert(:post, attributed_to: group)
data = Convertible.model_to_as(post)
@@ -157,7 +157,7 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier.UpdateTest do
)
group = insert(:group)
%Member{} = member = insert(:member, actor: remote_actor, parent: group)
%Member{} = _member = insert(:member, actor: remote_actor, parent: group)
%Post{} = post = insert(:post, attributed_to: group)
data = Convertible.model_to_as(post)

View File

@@ -173,7 +173,7 @@ defmodule Mobilizon.Federation.ActivityPub.TransmogrifierTest do
get_or_fetch_actor_by_url: fn url ->
case url do
@mobilizon_group_url -> {:ok, group}
actor_url -> {:ok, actor}
^actor_url -> {:ok, actor}
end
end do
activity = %{
@@ -279,7 +279,7 @@ defmodule Mobilizon.Federation.ActivityPub.TransmogrifierTest do
get_or_fetch_actor_by_url: fn url ->
case url do
@mobilizon_group_url -> {:ok, group}
actor_url -> {:ok, actor}
^actor_url -> {:ok, actor}
end
end do
activity = %{
@@ -379,7 +379,7 @@ defmodule Mobilizon.Federation.ActivityPub.TransmogrifierTest do
}
}
assert {:ok, %Activity{data: data, local: false}, %Resource{} = resource} =
assert {:ok, %Activity{data: _data, local: false}, %Resource{} = resource} =
Transmogrifier.handle_incoming(activity)
assert resource.actor_id == group.id
@@ -420,7 +420,7 @@ defmodule Mobilizon.Federation.ActivityPub.TransmogrifierTest do
}
}
assert {:ok, %Activity{data: data, local: false}, %Resource{} = resource} =
assert {:ok, %Activity{data: _data, local: false}, %Resource{} = resource} =
Transmogrifier.handle_incoming(activity)
assert resource.actor_id == group.id
@@ -475,7 +475,7 @@ defmodule Mobilizon.Federation.ActivityPub.TransmogrifierTest do
}
}
assert {:ok, %Activity{data: data, local: false}, %Resource{} = resource} =
assert {:ok, %Activity{data: _data, local: false}, %Resource{} = resource} =
Transmogrifier.handle_incoming(activity)
assert resource.actor_id == group.id
@@ -643,7 +643,7 @@ defmodule Mobilizon.Federation.ActivityPub.TransmogrifierTest do
Mock
|> expect(:call, fn
%{method: :get, url: actor_url}, _opts ->
%{method: :get, url: ^actor_url}, _opts ->
{:ok, %Tesla.Env{status: 200, body: actor_data}}
end)

View File

@@ -406,7 +406,7 @@ defmodule Mobilizon.Federation.ActivityPub.Types.EventsTest do
%Actor{url: organizer_group_url, members_url: members_url, followers_url: followers_url} =
organizer_group = insert(:group, domain: nil)
%Actor{url: organizer_actor_url} =
%Actor{url: _organizer_actor_url} =
organizer_actor =
insert(:actor, domain: "somewhere.else", url: "https://somewhere.else/@someone")

View File

@@ -126,7 +126,7 @@ defmodule Mobilizon.GraphQL.API.ReportTest do
%Comment{id: comment_1_id} = _comment_1 = insert(:comment, actor: reported)
assert {:ok, %Activity{} = flag_activity, %Report{id: report_id} = _report} =
assert {:ok, %Activity{}, %Report{id: report_id} = _report} =
Reports.report(%{
reporter_id: reporter_id,
reported_id: reported_id,
@@ -152,7 +152,7 @@ defmodule Mobilizon.GraphQL.API.ReportTest do
%Comment{id: comment_1_id} = _comment_1 = insert(:comment, actor: reported)
assert {:ok, %Activity{} = flag_activity, %Report{id: report_id} = _report} =
assert {:ok, %Activity{}, %Report{id: report_id} = _report} =
Reports.report(%{
reporter_id: reporter_id,
reported_id: reported_id,

View File

@@ -34,7 +34,6 @@ defmodule Mobilizon.GraphQL.Resolvers.CommentTest do
test "create_comment/3 creates a comment", %{
conn: conn,
actor: actor,
user: user,
event: event
} do
@@ -51,7 +50,6 @@ defmodule Mobilizon.GraphQL.Resolvers.CommentTest do
test "create_comment/3 doesn't allow creating events if it's disabled", %{
conn: conn,
actor: actor,
user: user,
event: event
} do
@@ -93,8 +91,6 @@ defmodule Mobilizon.GraphQL.Resolvers.CommentTest do
conn: conn,
event: event
} do
actor = insert(:actor)
res =
conn
|> AbsintheHelpers.graphql_query(
@@ -108,7 +104,6 @@ defmodule Mobilizon.GraphQL.Resolvers.CommentTest do
test "create_comment/3 creates a reply to a comment", %{
conn: conn,
actor: actor,
user: user,
event: event
} do

View File

@@ -150,7 +150,7 @@ defmodule Mobilizon.GraphQL.Resolvers.MediaTest do
variables: %{id: media_id}
)
assert is_nil(res["errors"])
assert res["errors"] == nil
assert res["data"]["removeMedia"]["id"] == to_string(media_id)
res =

View File

@@ -298,10 +298,10 @@ defmodule Mobilizon.ActorsTest do
test "delete_actor/1 deletes the actor", %{
actor: %Actor{avatar: %{url: avatar_url}, banner: %{url: banner_url}, id: actor_id} = actor
} do
%Event{url: event1_url} = event1 = insert(:event, organizer_actor: actor)
%Event{} = event1 = insert(:event, organizer_actor: actor)
insert(:event, organizer_actor: actor)
%Comment{url: comment1_url} = comment1 = insert(:comment, actor: actor)
%Comment{} = comment1 = insert(:comment, actor: actor)
insert(:comment, actor: actor)
%URI{path: "/media/" <> avatar_path} = URI.parse(avatar_url)
@@ -386,25 +386,25 @@ defmodule Mobilizon.ActorsTest do
test "create_group/1 with an existing profile username fails" do
_actor = insert(:actor, preferred_username: @valid_attrs.preferred_username)
assert {:error, :insert_group,
assert {:error,
%Ecto.Changeset{
errors: [preferred_username: {"This username is already taken.", []}]
}, %{}} = Actors.create_group(@valid_attrs)
}} = Actors.create_group(@valid_attrs)
end
test "create_group/1 with an existing group username fails" do
%Actor{id: actor_id} = insert(:actor)
attrs = Map.put(@valid_attrs, :creator_actor_id, actor_id)
assert {:ok, %Actor{} = group} = Actors.create_group(attrs)
assert {:ok, %Actor{}} = Actors.create_group(attrs)
assert {:error, :insert_group,
assert {:error,
%Ecto.Changeset{
errors: [preferred_username: {"This username is already taken.", []}]
}, %{}} = Actors.create_group(attrs)
}} = Actors.create_group(attrs)
end
test "create_group/1 with invalid data returns error changeset" do
assert {:error, :insert_group, %Ecto.Changeset{}, %{}} = Actors.create_group(@invalid_attrs)
assert {:error, %Ecto.Changeset{}} = Actors.create_group(@invalid_attrs)
end
end
@@ -456,7 +456,7 @@ defmodule Mobilizon.ActorsTest do
test "update_bot/2 with invalid data returns error changeset" do
bot = insert(:bot)
assert {:error, %Ecto.Changeset{}} = Actors.update_bot(bot, @invalid_attrs)
assert bot = Actors.get_bot!(bot.id)
assert bot.id == Actors.get_bot!(bot.id).id
end
test "delete_bot/1 deletes the bot" do
@@ -483,7 +483,7 @@ defmodule Mobilizon.ActorsTest do
test "get_follower!/1 returns the follower with given id", context do
follower = create_test_follower(context)
assert follower = Actors.get_follower!(follower.id)
assert follower.id == Actors.get_follower!(follower.id).id
end
test "create_follower/1 with valid data creates a follower", %{
@@ -498,8 +498,12 @@ defmodule Mobilizon.ActorsTest do
assert {:ok, %Follower{} = follower} = Actors.create_follower(valid_attrs)
assert follower.approved == true
assert %{total: 1, elements: [target_actor]} = Actors.build_followings_for_actor(actor)
assert %{total: 1, elements: [actor]} = Actors.build_followers_for_actor(target_actor)
assert %{total: 1, elements: followings} = Actors.build_followings_for_actor(actor)
followings_ids = Enum.map(followings, & &1.id)
assert followings_ids == [target_actor.id]
assert %{total: 1, elements: followers} = Actors.build_followers_for_actor(target_actor)
followers_ids = Enum.map(followers, & &1.id)
assert followers_ids == [actor.id]
end
test "create_follower/1 with valid data but same actors fails to create a follower", %{
@@ -538,7 +542,7 @@ defmodule Mobilizon.ActorsTest do
test "update_follower/2 with invalid data returns error changeset", context do
follower = create_test_follower(context)
assert {:error, %Ecto.Changeset{}} = Actors.update_follower(follower, @invalid_attrs)
assert follower = Actors.get_follower!(follower.id)
assert follower.id == Actors.get_follower!(follower.id).id
end
test "delete_follower/1 deletes the follower", context do
@@ -563,13 +567,11 @@ defmodule Mobilizon.ActorsTest do
assert actor.followings |> Enum.map(& &1.target_actor_id) == [target_actor.id]
# Test if actor is already following target actor
assert {:error, :already_following, msg} = Actors.follow(target_actor, actor)
assert msg =~ "already following"
assert {:error, :already_following} = Actors.follow(target_actor, actor)
# Test if target actor is suspended
target_actor = %{target_actor | suspended: true}
assert {:error, :suspended, msg} = Actors.follow(target_actor, actor)
assert msg =~ "suspended"
assert {:error, :followed_suspended} = Actors.follow(target_actor, actor)
end
end
@@ -590,7 +592,7 @@ defmodule Mobilizon.ActorsTest do
test "get_member!/1 returns the member with given id", context do
member = create_test_member(context)
assert member = Actors.get_member!(member.id)
assert member.id == Actors.get_member!(member.id).id
end
test "create_member/1 with valid data creates a member", %{
@@ -606,7 +608,9 @@ defmodule Mobilizon.ActorsTest do
assert member.role == :member
assert [group] = Actors.list_groups_member_of(actor)
assert %Page{elements: [actor], total: 1} = Actors.list_members_for_group(group)
assert %Page{elements: members, total: 1} = Actors.list_members_for_group(group)
members_ids = Enum.map(members, & &1.id)
assert members_ids == [member.id]
end
test "create_member/1 with valid data but same actors just updates the member", %{

View File

@@ -19,28 +19,32 @@ defmodule Mobilizon.Service.Admin.ActionLogTest do
describe "action_log_creation" do
test "log a report update", %{moderator: moderator} do
%Report{id: _report_id} = report = insert(:report)
%Report{id: report_id} = report = insert(:report)
assert {:ok,
%ActionLog{
target_type: "Elixir.Mobilizon.Reports.Report",
target_id: report_id,
target_id: found_report_id,
action: :update,
actor: moderator
actor: _moderator
}} = Admin.log_action(moderator, "update", report)
assert found_report_id == report_id
end
test "log the creation of a report note", %{moderator: moderator} do
%Report{} = report = insert(:report)
%Note{id: _note_id} = report = insert(:report_note, report: report)
%Note{id: note_id} = report = insert(:report_note, report: report)
assert {:ok,
%ActionLog{
target_type: "Elixir.Mobilizon.Reports.Note",
target_id: note_id,
target_id: found_note_id,
action: :create,
actor: moderator
actor: _moderator
}} = Admin.log_action(moderator, "create", report)
assert found_note_id == note_id
end
end
end

View File

@@ -424,7 +424,7 @@ defmodule Mobilizon.EventsTest do
end
test "delete_participant/1 deletes the participant", %{participant: participant} do
assert {:ok, %Participant{}} = Events.delete_participant(participant)
assert {:ok, %{participant: %Participant{}}} = Events.delete_participant(participant)
end
end

View File

@@ -19,13 +19,13 @@ defmodule Mobilizon.UsersTest do
end
test "get_user!/1 returns the user with given id" do
user = insert(:user)
assert user = Users.get_user!(user.id)
%User{id: user_id} = user = insert(:user)
assert user == Users.get_user!(user_id)
end
# There's no create_user/1, just register/1
test "register/1 with valid data creates a user" do
assert {:ok, %User{email: email} = user} = Users.register(@valid_attrs)
assert {:ok, %User{email: email}} = Users.register(@valid_attrs)
assert email == @valid_attrs.email
end
@@ -48,9 +48,9 @@ defmodule Mobilizon.UsersTest do
end
test "update_user/2 with invalid data returns error changeset" do
user = insert(:user)
%User{id: user_id} = user = insert(:user)
assert {:error, %Ecto.Changeset{}} = Users.update_user(user, @invalid_attrs)
assert user = Users.get_user!(user.id)
assert user == Users.get_user!(user_id)
end
test "delete_user/1 empties the user" do
@@ -65,11 +65,6 @@ defmodule Mobilizon.UsersTest do
assert_raise Ecto.NoResultsError, fn -> Users.get_user!(user.id) end
end
# test "change_user/1 returns a user changeset" do
# user = insert(:user)
# assert %Ecto.Changeset{} = Users.change_user(user)
# end
@email "email@domain.tld"
@password "password"

View File

@@ -156,30 +156,30 @@ defmodule Mobilizon.Service.DateTimeTest do
describe "check if we're between hours" do
test "basic" do
refute DateTimeTools.is_between_hours(
refute DateTimeTools.is_between_hours?(
compare_to_datetime: ~U[2021-06-22 15:00:00Z],
compare_to_day: ~D[2021-06-22]
)
assert DateTimeTools.is_between_hours(
assert DateTimeTools.is_between_hours?(
compare_to_datetime: ~U[2021-06-22 08:00:00Z],
compare_to_day: ~D[2021-06-22]
)
assert DateTimeTools.is_between_hours(
assert DateTimeTools.is_between_hours?(
compare_to_datetime: ~U[2021-06-22 08:01:00Z],
compare_to_day: ~D[2021-06-22]
)
end
test "with special timezone" do
refute DateTimeTools.is_between_hours(
refute DateTimeTools.is_between_hours?(
compare_to_datetime: ~U[2021-06-22 08:01:00Z],
compare_to_day: ~D[2021-06-22],
timezone: "Asia/Brunei"
)
assert DateTimeTools.is_between_hours(
assert DateTimeTools.is_between_hours?(
compare_to_datetime: ~U[2021-06-22 00:01:00Z],
compare_to_day: ~D[2021-06-22],
timezone: "Asia/Brunei"
@@ -189,12 +189,12 @@ defmodule Mobilizon.Service.DateTimeTest do
describe "check if we're between hours on right day" do
test "basic" do
assert DateTimeTools.is_between_hours_on_first_day(
assert DateTimeTools.is_between_hours_on_first_day?(
compare_to_datetime: ~U[2021-06-20 08:00:00Z],
compare_to_day: ~D[2021-06-20]
)
assert DateTimeTools.is_between_hours_on_first_day(
assert DateTimeTools.is_between_hours_on_first_day?(
compare_to_datetime: ~U[2021-06-21 08:00:00Z],
compare_to_day: ~D[2021-06-21],
locale: "fr"
@@ -202,14 +202,14 @@ defmodule Mobilizon.Service.DateTimeTest do
end
test "with special timezone" do
refute DateTimeTools.is_between_hours_on_first_day(
refute DateTimeTools.is_between_hours_on_first_day?(
compare_to_datetime: ~U[2021-06-21 08:00:00Z],
compare_to_day: ~D[2021-06-21],
locale: "fr",
timezone: "Asia/Srednekolymsk"
)
assert DateTimeTools.is_between_hours_on_first_day(
assert DateTimeTools.is_between_hours_on_first_day?(
compare_to_datetime: ~U[2021-06-20 21:00:00Z],
compare_to_day: ~D[2021-06-21],
locale: "fr",

View File

@@ -56,7 +56,7 @@ defmodule Mobilizon.Service.Workers.NotificationTest do
actor = Map.put(participant.actor, :user, user)
participant = Map.put(participant, :actor, actor)
assert {:ok, %Participant{}} = Events.delete_participant(participant)
assert {:ok, %{participant: %Participant{}}} = Events.delete_participant(participant)
Notification.perform(%Oban.Job{
args: %{"op" => "before_event_notification", "participant_id" => participant_id}
@@ -131,7 +131,7 @@ defmodule Mobilizon.Service.Workers.NotificationTest do
actor = Map.put(participant.actor, :user, user)
participant = Map.put(participant, :actor, actor)
assert {:ok, %Participant{}} = Events.delete_participant(participant)
assert {:ok, %{participant: %Participant{}}} = Events.delete_participant(participant)
Notification.perform(%Oban.Job{
args: %{"op" => "on_day_notification", "user_id" => user_id}
@@ -243,7 +243,7 @@ defmodule Mobilizon.Service.Workers.NotificationTest do
actor = Map.put(participant.actor, :user, user)
participant = Map.put(participant, :actor, actor)
assert {:ok, %Participant{}} = Events.delete_participant(participant)
assert {:ok, %{participant: %Participant{}}} = Events.delete_participant(participant)
Notification.perform(%Oban.Job{
args: %{"op" => "weekly_notification", "user_id" => user_id}

View File

@@ -5,6 +5,7 @@
defmodule Mobilizon.Web.ActivityPubControllerTest do
use ExVCR.Mock, adapter: ExVCR.Adapter.Hackney
import Mox
use Mobilizon.Web.ConnCase
@@ -14,7 +15,7 @@ defmodule Mobilizon.Web.ActivityPubControllerTest do
alias Mobilizon.Actors.Actor
alias Mobilizon.Federation.ActivityPub
alias Mobilizon.Service.HTTP.ActivityPub.Mock
alias Mobilizon.Web.ActivityPub.ActorView
alias Mobilizon.Web.{Endpoint, PageView}
alias Mobilizon.Web.Router.Helpers, as: Routes
@@ -119,18 +120,55 @@ defmodule Mobilizon.Web.ActivityPubControllerTest do
describe "/@:preferred_username/inbox" do
test "it inserts an incoming event into the database", %{conn: conn} do
use_cassette "activity_pub_controller/mastodon-post-activity_actor_call" do
data = File.read!("test/fixtures/mastodon-post-activity.json") |> Jason.decode!()
# use_cassette "activity_pub_controller/mastodon-post-activity_actor_call" do
data = File.read!("test/fixtures/mastodon-post-activity.json") |> Jason.decode!()
conn =
conn
|> assign(:valid_signature, true)
|> post("#{Endpoint.url()}/inbox", data)
%Actor{url: remote_actor_url} =
remote_actor =
insert(:actor,
domain: "framapiaf.org",
url: "https://framapiaf.org/users/admin",
preferred_username: "admin"
)
assert "ok" == json_response(conn, 200)
:timer.sleep(500)
assert ActivityPub.fetch_object_from_url(data["object"]["id"])
end
remote_actor_data =
Mobilizon.Federation.ActivityStream.Converter.Actor.model_to_as(remote_actor)
%Actor{url: local_actor_url} =
local_actor =
insert(:actor, domain: nil, url: "http://mobilizon.com/@tcit", preferred_username: "tcit")
local_actor_data =
Mobilizon.Federation.ActivityStream.Converter.Actor.model_to_as(local_actor)
Mock
|> expect(:call, fn
%{method: :get, url: url}, _opts ->
case url do
^remote_actor_url ->
{:ok, %Tesla.Env{status: 200, body: remote_actor_data}}
^local_actor_url ->
{:ok, %Tesla.Env{status: 200, body: local_actor_data}}
"https://framapiaf.org/users/admin/statuses/99512778738411822" ->
{:ok, %Tesla.Env{status: 404, body: ""}}
end
end)
conn =
conn
|> assign(:valid_signature, true)
|> post("#{Endpoint.url()}/inbox", data)
assert "ok" == json_response(conn, 200)
:timer.sleep(500)
assert {:ok, %Mobilizon.Discussions.Comment{} = comment} =
ActivityPub.fetch_object_from_url(data["object"]["id"])
assert comment.actor.id == remote_actor.id
# end
end
end

View File

@@ -8,6 +8,15 @@ defmodule Mobilizon.Web.Upload.Uploader.LocalTest do
alias Mobilizon.Web.Upload
alias Mobilizon.Web.Upload.Uploader.Local
@file_path "local_upload/files/image.jpg"
@local_path Path.join([Local.upload_path(), @file_path])
setup do
File.rm(@local_path)
:ok
end
describe "get_file/1" do
test "it returns path to local folder for files" do
assert Local.get_file("") == {:ok, {:static_dir, "test/uploads"}}
@@ -17,42 +26,44 @@ defmodule Mobilizon.Web.Upload.Uploader.LocalTest do
describe "put_file/1" do
test "put file to local folder" do
File.cp!("test/fixtures/image.jpg", "test/fixtures/image_tmp.jpg")
file_path = "local_upload/files/image.jpg"
file = %Upload{
name: "image.jpg",
content_type: "image/jpeg",
path: file_path,
path: @file_path,
tempfile: Path.absname("test/fixtures/image_tmp.jpg")
}
assert Local.put_file(file) == :ok
assert {:ok, {:file, @file_path}} == Local.put_file(file)
assert [Local.upload_path(), file_path]
|> Path.join()
|> File.exists?()
assert File.exists?(@local_path)
assert :ok == Local.put_file(file)
assert File.exists?(@local_path)
end
end
describe "remove_file/1" do
test "removes local file" do
File.cp!("test/fixtures/image.jpg", "test/fixtures/image_tmp.jpg")
file_path = "local_upload/files/image.jpg"
file = %Upload{
name: "image.jpg",
content_type: "image/jpeg",
path: file_path,
path: @file_path,
tempfile: Path.absname("test/fixtures/image_tmp.jpg")
}
:ok = Local.put_file(file)
local_path = Path.join([Local.upload_path(), file_path])
assert File.exists?(local_path)
refute File.exists?(@local_path)
Local.remove_file(file_path)
assert {:ok, {:file, @file_path}} = Local.put_file(file)
refute File.exists?(local_path)
assert File.exists?(@local_path)
Local.remove_file(@file_path)
refute File.exists?(@local_path)
end
end
end