test/openagents/labels_test.exs

58e6347eeb72 · 3 KB

defmodule OpenAgents.LabelsTest do
  use OpenAgents.DataCase

  alias OpenAgents.Labels

  setup do
    Process.put({__MODULE__, :repository}, repository_fixture())
    on_exit(fn -> Process.delete({__MODULE__, :repository}) end)
    :ok
  end

  describe "labels" do
    alias OpenAgents.Labels.Label

    import OpenAgents.LabelsFixtures

    @invalid_attrs %{name: nil, description: nil, color: nil}

    test "list_labels/0 returns all labels" do
      label = label_fixture(repository())
      assert Labels.list_labels(repository()) == [label]
    end

    test "get_label!/1 returns the label with given id" do
      label = label_fixture(repository())
      assert Labels.get_label!(repository(), label.id) == label
    end

    test "create_label/1 with valid data creates a label" do
      valid_attrs = %{name: "some name", description: "some description", color: "some color"}

      assert {:ok, %Label{} = label} = Labels.create_label(repository(), valid_attrs)
      assert label.name == "some name"
      assert label.description == "some description"
      assert label.color == "some color"
    end

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

    test "update_label/2 with valid data updates the label" do
      label = label_fixture(repository())

      update_attrs = %{
        name: "some updated name",
        description: "some updated description",
        color: "some updated color"
      }

      assert {:ok, %Label{} = label} = Labels.update_label(label, update_attrs)
      assert label.name == "some updated name"
      assert label.description == "some updated description"
      assert label.color == "some updated color"
    end

    test "update_label/2 with invalid data returns error changeset" do
      label = label_fixture(repository())
      assert {:error, %Ecto.Changeset{}} = Labels.update_label(label, @invalid_attrs)
      assert label == Labels.get_label!(repository(), label.id)
    end

    test "delete_label/1 deletes the label" do
      label = label_fixture(repository())
      assert {:ok, %Label{}} = Labels.delete_label(label)
      assert_raise Ecto.NoResultsError, fn -> Labels.get_label!(repository(), label.id) end
    end

    test "change_label/1 returns a label changeset" do
      label = label_fixture(repository())
      assert %Ecto.Changeset{} = Labels.change_label(label)
    end

    test "change_label/2 applies attrs and surfaces validation errors" do
      label = label_fixture(repository())

      assert Labels.change_label(label, %{name: "renamed"}).valid?

      changeset = Labels.change_label(label, %{name: nil})
      refute changeset.valid?
      assert %{name: ["can't be blank"]} = errors_on(changeset)
    end

    test "get_label_by_name!/1 returns the label with the given name" do
      label = label_fixture(repository(), name: "bug")
      assert Labels.get_label_by_name!(repository(), "bug") == label
    end

    test "get_label_by_name!/1 decodes a percent-encoded name" do
      label = label_fixture(repository(), name: "help wanted")
      assert Labels.get_label_by_name!(repository(), "help%20wanted") == label
    end

    test "get_label_by_name!/1 raises for an unknown name" do
      label_fixture(repository(), name: "bug")

      assert_raise Ecto.NoResultsError, fn ->
        Labels.get_label_by_name!(repository(), "nope")
      end
    end
  end

  defp repository, do: Process.get({__MODULE__, :repository})
end