defmodule Runosaari.ScheduleTest do
  use Runosaari.DataCase

  alias Runosaari.Schedule

  describe "performances" do
    alias Runosaari.Schedule.Performance

    @valid_attrs %{
      description: "some description",
      notes: "some notes",
      time: ~N[2010-04-17 14:00:00],
      seqnum: 1
    }
    @update_attrs %{
      description: "some updated description",
      notes: "some updated notes",
      time: ~N[2011-05-18 15:01:01],
      seqnum: 2
    }
    @invalid_attrs %{description: nil, notes: nil, time: nil, seqnum: nil}

    def performance_fixture(attrs \\ %{}) do
      {:ok, performance} =
        attrs
        |> Enum.into(@valid_attrs)
        |> Schedule.create_performance()

      performance
    end

    test "list_performances/0 returns all performances" do
      performance = performance_fixture()
      assert Schedule.list_performances() == [performance]
    end

    test "get_performance!/1 returns the performance with given id" do
      performance = performance_fixture()
      assert Schedule.get_performance!(performance.id) == performance
    end

    test "create_performance/1 with valid data creates a performance" do
      assert {:ok, %Performance{} = performance} = Schedule.create_performance(@valid_attrs)
      assert performance.description == "some description"
      assert performance.notes == "some notes"
      assert performance.time == ~N[2010-04-17 14:00:00]
      assert performance.seqnum == 1
    end

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

    test "update_performance/2 with valid data updates the performance" do
      performance = performance_fixture()

      assert {:ok, %Performance{} = performance} =
               Schedule.update_performance(performance, @update_attrs)

      assert performance.description == "some updated description"
      assert performance.notes == "some updated notes"
      assert performance.time == ~N[2011-05-18 15:01:01]
      assert performance.seqnum == 2
    end

    test "update_performance/2 with invalid data returns error changeset" do
      performance = performance_fixture()

      assert {:error, %Ecto.Changeset{}} =
               Schedule.update_performance(performance, @invalid_attrs)

      assert performance == Schedule.get_performance!(performance.id)
    end

    test "delete_performance/1 deletes the performance" do
      performance = performance_fixture()
      assert {:ok, %Performance{}} = Schedule.delete_performance(performance)
      assert_raise Ecto.NoResultsError, fn -> Schedule.get_performance!(performance.id) end
    end

    test "change_performance/1 returns a performance changeset" do
      performance = performance_fixture()
      assert %Ecto.Changeset{} = Schedule.change_performance(performance)
    end
  end
end
