2022-07-25 20:18:39 -04:00
|
|
|
defmodule Memex.StepsTest do
|
|
|
|
use Memex.DataCase
|
2022-11-24 15:35:29 -05:00
|
|
|
import Memex.{PipelinesFixtures, StepsFixtures}
|
|
|
|
alias Memex.Pipelines.{Step, Steps}
|
|
|
|
@moduletag :steps_test
|
|
|
|
@invalid_attrs %{content: nil, title: nil}
|
2022-07-25 20:18:39 -04:00
|
|
|
|
|
|
|
describe "steps" do
|
2022-11-24 15:35:29 -05:00
|
|
|
setup do
|
|
|
|
user = user_fixture()
|
|
|
|
pipeline = pipeline_fixture(user)
|
2022-07-25 20:18:39 -04:00
|
|
|
|
2022-11-24 15:35:29 -05:00
|
|
|
[user: user, pipeline: pipeline]
|
|
|
|
end
|
2022-07-25 20:18:39 -04:00
|
|
|
|
2022-11-24 15:35:29 -05:00
|
|
|
test "list_steps/1 returns all steps for a user", %{pipeline: pipeline, user: user} do
|
|
|
|
step_a = step_fixture(0, pipeline, user)
|
|
|
|
step_b = step_fixture(1, pipeline, user)
|
|
|
|
step_c = step_fixture(2, pipeline, user)
|
|
|
|
assert Steps.list_steps(pipeline, user) == [step_a, step_b, step_c]
|
|
|
|
end
|
2022-07-25 20:18:39 -04:00
|
|
|
|
2022-11-24 15:35:29 -05:00
|
|
|
test "get_step!/1 returns the step with given id", %{pipeline: pipeline, user: user} do
|
|
|
|
step = step_fixture(0, pipeline, user)
|
|
|
|
assert Steps.get_step!(step.id, user) == step
|
2022-07-25 20:18:39 -04:00
|
|
|
end
|
|
|
|
|
2022-11-24 15:35:29 -05:00
|
|
|
test "get_step!/1 only returns unlisted or public steps for other users", %{user: user} do
|
|
|
|
another_user = user_fixture()
|
|
|
|
another_pipeline = pipeline_fixture(another_user)
|
|
|
|
step = step_fixture(0, another_pipeline, another_user)
|
|
|
|
|
|
|
|
assert_raise Ecto.NoResultsError, fn ->
|
|
|
|
Steps.get_step!(step.id, user)
|
|
|
|
end
|
2022-07-25 20:18:39 -04:00
|
|
|
end
|
|
|
|
|
2022-11-24 15:35:29 -05:00
|
|
|
test "create_step/1 with valid data creates a step", %{pipeline: pipeline, user: user} do
|
|
|
|
valid_attrs = %{
|
|
|
|
"content" => "some content",
|
|
|
|
"title" => "some title"
|
|
|
|
}
|
2022-07-25 20:18:39 -04:00
|
|
|
|
2022-11-24 15:35:29 -05:00
|
|
|
assert {:ok, %Step{} = step} = Steps.create_step(valid_attrs, 0, pipeline, user)
|
|
|
|
assert step.content == "some content"
|
2022-07-25 20:18:39 -04:00
|
|
|
assert step.title == "some title"
|
|
|
|
end
|
|
|
|
|
2022-11-24 15:35:29 -05:00
|
|
|
test "create_step/1 with invalid data returns error changeset",
|
|
|
|
%{pipeline: pipeline, user: user} do
|
|
|
|
assert {:error, %Ecto.Changeset{}} = Steps.create_step(@invalid_attrs, 0, pipeline, user)
|
2022-07-25 20:18:39 -04:00
|
|
|
end
|
|
|
|
|
2022-11-24 15:35:29 -05:00
|
|
|
test "update_step/2 with valid data updates the step", %{pipeline: pipeline, user: user} do
|
|
|
|
step = step_fixture(0, pipeline, user)
|
2022-07-25 22:05:54 -04:00
|
|
|
|
|
|
|
update_attrs = %{
|
2022-11-24 15:35:29 -05:00
|
|
|
"content" => "some updated content",
|
|
|
|
"title" => "some updated title"
|
2022-07-25 22:05:54 -04:00
|
|
|
}
|
2022-07-25 20:18:39 -04:00
|
|
|
|
2022-11-24 15:35:29 -05:00
|
|
|
assert {:ok, %Step{} = step} = Steps.update_step(step, update_attrs, 0, user)
|
|
|
|
assert step.content == "some updated content"
|
2022-07-25 20:18:39 -04:00
|
|
|
assert step.title == "some updated title"
|
|
|
|
end
|
|
|
|
|
2022-11-24 15:35:29 -05:00
|
|
|
test "update_step/2 with invalid data returns error changeset", %{
|
|
|
|
pipeline: pipeline,
|
|
|
|
user: user
|
|
|
|
} do
|
|
|
|
step = step_fixture(0, pipeline, user)
|
|
|
|
assert {:error, %Ecto.Changeset{}} = Steps.update_step(step, @invalid_attrs, 0, user)
|
|
|
|
assert step == Steps.get_step!(step.id, user)
|
|
|
|
end
|
|
|
|
|
|
|
|
test "delete_step/1 deletes the step", %{pipeline: pipeline, user: user} do
|
|
|
|
step = step_fixture(0, pipeline, user)
|
|
|
|
assert {:ok, %Step{}} = Steps.delete_step(step, user)
|
|
|
|
assert_raise Ecto.NoResultsError, fn -> Steps.get_step!(step.id, user) end
|
2022-07-25 20:18:39 -04:00
|
|
|
end
|
|
|
|
|
2022-11-24 15:35:29 -05:00
|
|
|
test "delete_step/1 deletes the step for an admin user", %{pipeline: pipeline, user: user} do
|
|
|
|
admin_user = admin_fixture()
|
|
|
|
step = step_fixture(0, pipeline, user)
|
|
|
|
assert {:ok, %Step{}} = Steps.delete_step(step, admin_user)
|
|
|
|
assert_raise Ecto.NoResultsError, fn -> Steps.get_step!(step.id, user) end
|
2022-07-25 20:18:39 -04:00
|
|
|
end
|
|
|
|
|
2022-11-24 15:35:29 -05:00
|
|
|
test "change_step/1 returns a step changeset", %{pipeline: pipeline, user: user} do
|
|
|
|
step = step_fixture(0, pipeline, user)
|
|
|
|
assert %Ecto.Changeset{} = Steps.change_step(step, 0, user)
|
2022-07-25 20:18:39 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|