Skip to content
Permalink
Browse files

generate the schema

  • Loading branch information...
dnsbty committed Apr 13, 2019
1 parent 6a0af75 commit cf5bee4a5ceac4372550cee53bf2635ee2c875ef
@@ -0,0 +1,104 @@
defmodule LiveViewTodos.Todos do
@moduledoc """
The Todos context.
"""

import Ecto.Query, warn: false
alias LiveViewTodos.Repo

alias LiveViewTodos.Todos.Todo

@doc """
Returns the list of todos.
## Examples
iex> list_todos()
[%Todo{}, ...]
"""
def list_todos do
Repo.all(Todo)
end

@doc """
Gets a single todo.
Raises `Ecto.NoResultsError` if the Todo does not exist.
## Examples
iex> get_todo!(123)
%Todo{}
iex> get_todo!(456)
** (Ecto.NoResultsError)
"""
def get_todo!(id), do: Repo.get!(Todo, id)

@doc """
Creates a todo.
## Examples
iex> create_todo(%{field: value})
{:ok, %Todo{}}
iex> create_todo(%{field: bad_value})
{:error, %Ecto.Changeset{}}
"""
def create_todo(attrs \\ %{}) do
%Todo{}
|> Todo.changeset(attrs)
|> Repo.insert()
end

@doc """
Updates a todo.
## Examples
iex> update_todo(todo, %{field: new_value})
{:ok, %Todo{}}
iex> update_todo(todo, %{field: bad_value})
{:error, %Ecto.Changeset{}}
"""
def update_todo(%Todo{} = todo, attrs) do
todo
|> Todo.changeset(attrs)
|> Repo.update()
end

@doc """
Deletes a Todo.
## Examples
iex> delete_todo(todo)
{:ok, %Todo{}}
iex> delete_todo(todo)
{:error, %Ecto.Changeset{}}
"""
def delete_todo(%Todo{} = todo) do
Repo.delete(todo)
end

@doc """
Returns an `%Ecto.Changeset{}` for tracking todo changes.
## Examples
iex> change_todo(todo)
%Ecto.Changeset{source: %Todo{}}
"""
def change_todo(%Todo{} = todo) do
Todo.changeset(todo, %{})
end
end
@@ -0,0 +1,18 @@
defmodule LiveViewTodos.Todos.Todo do
use Ecto.Schema
import Ecto.Changeset

schema "todos" do
field :done, :boolean, default: false
field :title, :string

timestamps()
end

@doc false
def changeset(todo, attrs) do
todo
|> cast(attrs, [:title, :done])
|> validate_required([:title, :done])
end
end
@@ -0,0 +1,13 @@
defmodule LiveViewTodos.Repo.Migrations.CreateTodos do
use Ecto.Migration

def change do
create table(:todos) do
add :title, :string
add :done, :boolean, default: false, null: false

timestamps()
end

end
end
@@ -0,0 +1,66 @@
defmodule LiveViewTodos.TodosTest do
use LiveViewTodos.DataCase

alias LiveViewTodos.Todos

describe "todos" do
alias LiveViewTodos.Todos.Todo

@valid_attrs %{done: true, title: "some title"}
@update_attrs %{done: false, title: "some updated title"}
@invalid_attrs %{done: nil, title: nil}

def todo_fixture(attrs \\ %{}) do
{:ok, todo} =
attrs
|> Enum.into(@valid_attrs)
|> Todos.create_todo()

todo
end

test "list_todos/0 returns all todos" do
todo = todo_fixture()
assert Todos.list_todos() == [todo]
end

test "get_todo!/1 returns the todo with given id" do
todo = todo_fixture()
assert Todos.get_todo!(todo.id) == todo
end

test "create_todo/1 with valid data creates a todo" do
assert {:ok, %Todo{} = todo} = Todos.create_todo(@valid_attrs)
assert todo.done == true
assert todo.title == "some title"
end

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

test "update_todo/2 with valid data updates the todo" do
todo = todo_fixture()
assert {:ok, %Todo{} = todo} = Todos.update_todo(todo, @update_attrs)
assert todo.done == false
assert todo.title == "some updated title"
end

test "update_todo/2 with invalid data returns error changeset" do
todo = todo_fixture()
assert {:error, %Ecto.Changeset{}} = Todos.update_todo(todo, @invalid_attrs)
assert todo == Todos.get_todo!(todo.id)
end

test "delete_todo/1 deletes the todo" do
todo = todo_fixture()
assert {:ok, %Todo{}} = Todos.delete_todo(todo)
assert_raise Ecto.NoResultsError, fn -> Todos.get_todo!(todo.id) end
end

test "change_todo/1 returns a todo changeset" do
todo = todo_fixture()
assert %Ecto.Changeset{} = Todos.change_todo(todo)
end
end
end

0 comments on commit cf5bee4

Please sign in to comment.
You can’t perform that action at this time.