add steps
This commit is contained in:
		
							
								
								
									
										104
									
								
								lib/memex/steps.ex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								lib/memex/steps.ex
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,104 @@ | ||||
| defmodule Memex.Steps do | ||||
|   @moduledoc """ | ||||
|   The Steps context. | ||||
|   """ | ||||
|  | ||||
|   import Ecto.Query, warn: false | ||||
|   alias Memex.Repo | ||||
|  | ||||
|   alias Memex.Steps.Step | ||||
|  | ||||
|   @doc """ | ||||
|   Returns the list of steps. | ||||
|  | ||||
|   ## Examples | ||||
|  | ||||
|       iex> list_steps() | ||||
|       [%Step{}, ...] | ||||
|  | ||||
|   """ | ||||
|   def list_steps do | ||||
|     Repo.all(Step) | ||||
|   end | ||||
|  | ||||
|   @doc """ | ||||
|   Gets a single step. | ||||
|  | ||||
|   Raises `Ecto.NoResultsError` if the Step does not exist. | ||||
|  | ||||
|   ## Examples | ||||
|  | ||||
|       iex> get_step!(123) | ||||
|       %Step{} | ||||
|  | ||||
|       iex> get_step!(456) | ||||
|       ** (Ecto.NoResultsError) | ||||
|  | ||||
|   """ | ||||
|   def get_step!(id), do: Repo.get!(Step, id) | ||||
|  | ||||
|   @doc """ | ||||
|   Creates a step. | ||||
|  | ||||
|   ## Examples | ||||
|  | ||||
|       iex> create_step(%{field: value}) | ||||
|       {:ok, %Step{}} | ||||
|  | ||||
|       iex> create_step(%{field: bad_value}) | ||||
|       {:error, %Ecto.Changeset{}} | ||||
|  | ||||
|   """ | ||||
|   def create_step(attrs \\ %{}) do | ||||
|     %Step{} | ||||
|     |> Step.changeset(attrs) | ||||
|     |> Repo.insert() | ||||
|   end | ||||
|  | ||||
|   @doc """ | ||||
|   Updates a step. | ||||
|  | ||||
|   ## Examples | ||||
|  | ||||
|       iex> update_step(step, %{field: new_value}) | ||||
|       {:ok, %Step{}} | ||||
|  | ||||
|       iex> update_step(step, %{field: bad_value}) | ||||
|       {:error, %Ecto.Changeset{}} | ||||
|  | ||||
|   """ | ||||
|   def update_step(%Step{} = step, attrs) do | ||||
|     step | ||||
|     |> Step.changeset(attrs) | ||||
|     |> Repo.update() | ||||
|   end | ||||
|  | ||||
|   @doc """ | ||||
|   Deletes a step. | ||||
|  | ||||
|   ## Examples | ||||
|  | ||||
|       iex> delete_step(step) | ||||
|       {:ok, %Step{}} | ||||
|  | ||||
|       iex> delete_step(step) | ||||
|       {:error, %Ecto.Changeset{}} | ||||
|  | ||||
|   """ | ||||
|   def delete_step(%Step{} = step) do | ||||
|     Repo.delete(step) | ||||
|   end | ||||
|  | ||||
|   @doc """ | ||||
|   Returns an `%Ecto.Changeset{}` for tracking step changes. | ||||
|  | ||||
|   ## Examples | ||||
|  | ||||
|       iex> change_step(step) | ||||
|       %Ecto.Changeset{data: %Step{}} | ||||
|  | ||||
|   """ | ||||
|   def change_step(%Step{} = step, attrs \\ %{}) do | ||||
|     Step.changeset(step, attrs) | ||||
|   end | ||||
| end | ||||
							
								
								
									
										22
									
								
								lib/memex/steps/step.ex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								lib/memex/steps/step.ex
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| defmodule Memex.Steps.Step do | ||||
|   use Ecto.Schema | ||||
|   import Ecto.Changeset | ||||
|  | ||||
|   @primary_key {:id, :binary_id, autogenerate: true} | ||||
|   @foreign_key_type :binary_id | ||||
|   schema "steps" do | ||||
|     field :description, :string | ||||
|     field :position, :integer | ||||
|     field :title, :string | ||||
|     field :pipeline_id, :binary_id | ||||
|  | ||||
|     timestamps() | ||||
|   end | ||||
|  | ||||
|   @doc false | ||||
|   def changeset(step, attrs) do | ||||
|     step | ||||
|     |> cast(attrs, [:title, :description, :position]) | ||||
|     |> validate_required([:title, :description, :position]) | ||||
|   end | ||||
| end | ||||
							
								
								
									
										17
									
								
								priv/repo/migrations/20220726001809_create_steps.exs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								priv/repo/migrations/20220726001809_create_steps.exs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| defmodule Memex.Repo.Migrations.CreateSteps do | ||||
|   use Ecto.Migration | ||||
|  | ||||
|   def change do | ||||
|     create table(:steps, primary_key: false) do | ||||
|       add :id, :binary_id, primary_key: true | ||||
|       add :title, :string | ||||
|       add :description, :text | ||||
|       add :position, :integer | ||||
|       add :pipeline_id, references(:pipelines, on_delete: :nothing, type: :binary_id) | ||||
|  | ||||
|       timestamps() | ||||
|     end | ||||
|  | ||||
|     create index(:steps, [:pipeline_id]) | ||||
|   end | ||||
| end | ||||
							
								
								
									
										63
									
								
								test/memex/steps_test.exs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								test/memex/steps_test.exs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,63 @@ | ||||
| defmodule Memex.StepsTest do | ||||
|   use Memex.DataCase | ||||
|  | ||||
|   alias Memex.Steps | ||||
|  | ||||
|   describe "steps" do | ||||
|     alias Memex.Steps.Step | ||||
|  | ||||
|     import Memex.StepsFixtures | ||||
|  | ||||
|     @invalid_attrs %{description: nil, position: nil, title: nil} | ||||
|  | ||||
|     test "list_steps/0 returns all steps" do | ||||
|       step = step_fixture() | ||||
|       assert Steps.list_steps() == [step] | ||||
|     end | ||||
|  | ||||
|     test "get_step!/1 returns the step with given id" do | ||||
|       step = step_fixture() | ||||
|       assert Steps.get_step!(step.id) == step | ||||
|     end | ||||
|  | ||||
|     test "create_step/1 with valid data creates a step" do | ||||
|       valid_attrs = %{description: "some description", position: 42, title: "some title"} | ||||
|  | ||||
|       assert {:ok, %Step{} = step} = Steps.create_step(valid_attrs) | ||||
|       assert step.description == "some description" | ||||
|       assert step.position == 42 | ||||
|       assert step.title == "some title" | ||||
|     end | ||||
|  | ||||
|     test "create_step/1 with invalid data returns error changeset" do | ||||
|       assert {:error, %Ecto.Changeset{}} = Steps.create_step(@invalid_attrs) | ||||
|     end | ||||
|  | ||||
|     test "update_step/2 with valid data updates the step" do | ||||
|       step = step_fixture() | ||||
|       update_attrs = %{description: "some updated description", position: 43, title: "some updated title"} | ||||
|  | ||||
|       assert {:ok, %Step{} = step} = Steps.update_step(step, update_attrs) | ||||
|       assert step.description == "some updated description" | ||||
|       assert step.position == 43 | ||||
|       assert step.title == "some updated title" | ||||
|     end | ||||
|  | ||||
|     test "update_step/2 with invalid data returns error changeset" do | ||||
|       step = step_fixture() | ||||
|       assert {:error, %Ecto.Changeset{}} = Steps.update_step(step, @invalid_attrs) | ||||
|       assert step == Steps.get_step!(step.id) | ||||
|     end | ||||
|  | ||||
|     test "delete_step/1 deletes the step" do | ||||
|       step = step_fixture() | ||||
|       assert {:ok, %Step{}} = Steps.delete_step(step) | ||||
|       assert_raise Ecto.NoResultsError, fn -> Steps.get_step!(step.id) end | ||||
|     end | ||||
|  | ||||
|     test "change_step/1 returns a step changeset" do | ||||
|       step = step_fixture() | ||||
|       assert %Ecto.Changeset{} = Steps.change_step(step) | ||||
|     end | ||||
|   end | ||||
| end | ||||
							
								
								
									
										22
									
								
								test/support/fixtures/steps_fixtures.ex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								test/support/fixtures/steps_fixtures.ex
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| defmodule Memex.StepsFixtures do | ||||
|   @moduledoc """ | ||||
|   This module defines test helpers for creating | ||||
|   entities via the `Memex.Steps` context. | ||||
|   """ | ||||
|  | ||||
|   @doc """ | ||||
|   Generate a step. | ||||
|   """ | ||||
|   def step_fixture(attrs \\ %{}) do | ||||
|     {:ok, step} = | ||||
|       attrs | ||||
|       |> Enum.into(%{ | ||||
|         description: "some description", | ||||
|         position: 42, | ||||
|         title: "some title" | ||||
|       }) | ||||
|       |> Memex.Steps.create_step() | ||||
|  | ||||
|     step | ||||
|   end | ||||
| end | ||||
		Reference in New Issue
	
	Block a user