Skip to content

Commit

Permalink
WIP: delete urls of a node before creating new ones
Browse files Browse the repository at this point in the history
  • Loading branch information
electronicbites committed Oct 5, 2024
1 parent e2471e2 commit 2f01d61
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 22 deletions.
14 changes: 14 additions & 0 deletions lib/radiator/resources.ex
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,20 @@ defmodule Radiator.Resources do
Repo.delete(url)
end

@doc """
Deletes all urls for a given node.
## Examples
iex> delete_urls_for_node(node_id)
:ok
"""
def delete_urls_for_node(node_id) do
query = from u in Url, where: u.node_id == ^node_id
Repo.delete_all(query)
end

@doc """
Returns an `%Ecto.Changeset{}` for tracking url changes.
Expand Down
55 changes: 35 additions & 20 deletions test/radiator/resources_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -8,33 +8,30 @@ defmodule Radiator.ResourcesbTest do
alias Radiator.Resources
alias Radiator.Resources.Url

describe "urls" do
setup do
node =
OutlineFixtures.node_fixture()
|> Repo.preload([:episode])

episode = node.episode

%{
episode: episode,
node: node
}
end
@invalid_attrs %{url: nil, start_bytes: nil, size_bytes: nil}

@invalid_attrs %{url: nil, start_bytes: nil, size_bytes: nil}
describe "list_urls/0" do
setup :set_up_single_url

test "list_urls/0 returns all urls", %{episode: episode, node: node} do
test "returns all urls", %{episode: episode, node: node} do
url = url_fixture(node_id: node.uuid)
assert Resources.list_urls(episode.id) == [url]
end
end

describe "get_url!/1" do
setup :set_up_single_url

test "get_url!/1 returns the url with given id" do
url = url_fixture()
assert Resources.get_url!(url.id) == url
end
end

test "create_url/1 with valid data creates a url", %{node: node} do
describe "create_url!/1" do
setup :set_up_single_url

test "creates a url with valid data", %{node: node} do
valid_attrs = %{url: "some url", start_bytes: 42, size_bytes: 42, node_id: node.uuid}

assert {:ok, %Url{} = url} = Resources.create_url(valid_attrs)
Expand All @@ -43,11 +40,15 @@ defmodule Radiator.ResourcesbTest do
assert url.size_bytes == 42
end

test "create_url/1 with invalid data returns error changeset" do
test "with invalid data returns error changeset" do
assert {:error, %Ecto.Changeset{}} = Resources.create_url(@invalid_attrs)
end
end

describe "update_url/2" do
setup :set_up_single_url

test "update_url/2 with valid data updates the url" do
test "with valid data updates the url" do
url = url_fixture()
update_attrs = %{url: "some updated url", start_bytes: 43, size_bytes: 43}

Expand All @@ -57,21 +58,35 @@ defmodule Radiator.ResourcesbTest do
assert url.size_bytes == 43
end

test "update_url/2 with invalid data returns error changeset" do
test "with invalid data returns error changeset" do
url = url_fixture()
assert {:error, %Ecto.Changeset{}} = Resources.update_url(url, @invalid_attrs)
assert url == Resources.get_url!(url.id)
end
end

describe "delete_url/1" do
test "delete_url/1 deletes the url" do
url = url_fixture()
assert {:ok, %Url{}} = Resources.delete_url(url)
assert_raise Ecto.NoResultsError, fn -> Resources.get_url!(url.id) end
end
end

test "change_url/1 returns a url changeset" do
describe "change_url/1" do
test "returns a url changeset" do
url = url_fixture()
assert %Ecto.Changeset{} = Resources.change_url(url)
end
end

def set_up_single_url(_) do
node =
OutlineFixtures.node_fixture()
|> Repo.preload([:episode])

episode = node.episode

{:ok, episode: episode, node: node}
end
end
4 changes: 2 additions & 2 deletions test/support/fixtures/resources_fixtures.ex
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ defmodule Radiator.ResourcesFixtures do
attrs
|> Enum.into(%{
size_bytes: 42,
start_bytes: 42,
url: "some url",
start_bytes: 23,
url: "https://elixirschool.com",
node_id: node_id
})
|> Resources.create_url()
Expand Down

0 comments on commit 2f01d61

Please sign in to comment.