From fc8d0b54adc0dbe86431b7609d55dba336bef93f Mon Sep 17 00:00:00 2001 From: Andriy Mykulyak Date: Fri, 4 Nov 2022 10:45:55 +0100 Subject: [PATCH] Demonstrate generated Elixir code --- .../controllers/blocked_times_controller.ex | 138 ++++++++++++++++++ .../blocked_times_export_controller.ex | 69 +++++++++ .../controllers/fallback_controller.ex | 90 ++++++++++++ .../resources/blocked_times_resource.ex | 44 ++++++ .../resources/employees_resource.ex | 13 ++ .../resources/export_jobs_resource.ex | 24 +++ .../resources/locations_resource.ex | 13 ++ .../views/blocked_times_export_view.ex | 24 +++ .../views/blocked_times_view.ex | 42 ++++++ .../lib/elixir_api_web/views/error_view.ex | 70 +++++++-- .../blocked_times_controller_test.exs | 32 ++++ .../blocked_times_export_controller_test.exs | 20 +++ .../resources/blocked_times_resource_test.exs | 42 ++++++ .../resources/employees_resource_test.exs | 13 ++ .../resources/export_jobs_resource_test.exs | 33 +++++ .../resources/locations_resource_test.exs | 13 ++ .../views/blocked_times_export_view_test.exs | 18 +++ .../views/blocked_times_view_test.exs | 30 ++++ 18 files changed, 717 insertions(+), 11 deletions(-) create mode 100644 examples/codegen/elixir_api/lib/elixir_api_web/controllers/blocked_times_controller.ex create mode 100644 examples/codegen/elixir_api/lib/elixir_api_web/controllers/blocked_times_export_controller.ex create mode 100644 examples/codegen/elixir_api/lib/elixir_api_web/controllers/fallback_controller.ex create mode 100644 examples/codegen/elixir_api/lib/elixir_api_web/resources/blocked_times_resource.ex create mode 100644 examples/codegen/elixir_api/lib/elixir_api_web/resources/employees_resource.ex create mode 100644 examples/codegen/elixir_api/lib/elixir_api_web/resources/export_jobs_resource.ex create mode 100644 examples/codegen/elixir_api/lib/elixir_api_web/resources/locations_resource.ex create mode 100644 examples/codegen/elixir_api/lib/elixir_api_web/views/blocked_times_export_view.ex create mode 100644 examples/codegen/elixir_api/lib/elixir_api_web/views/blocked_times_view.ex create mode 100644 examples/codegen/elixir_api/test/elixir_api_web/controllers/blocked_times_controller_test.exs create mode 100644 examples/codegen/elixir_api/test/elixir_api_web/controllers/blocked_times_export_controller_test.exs create mode 100644 examples/codegen/elixir_api/test/elixir_api_web/resources/blocked_times_resource_test.exs create mode 100644 examples/codegen/elixir_api/test/elixir_api_web/resources/employees_resource_test.exs create mode 100644 examples/codegen/elixir_api/test/elixir_api_web/resources/export_jobs_resource_test.exs create mode 100644 examples/codegen/elixir_api/test/elixir_api_web/resources/locations_resource_test.exs create mode 100644 examples/codegen/elixir_api/test/elixir_api_web/views/blocked_times_export_view_test.exs create mode 100644 examples/codegen/elixir_api/test/elixir_api_web/views/blocked_times_view_test.exs diff --git a/examples/codegen/elixir_api/lib/elixir_api_web/controllers/blocked_times_controller.ex b/examples/codegen/elixir_api/lib/elixir_api_web/controllers/blocked_times_controller.ex new file mode 100644 index 00000000..19744f99 --- /dev/null +++ b/examples/codegen/elixir_api/lib/elixir_api_web/controllers/blocked_times_controller.ex @@ -0,0 +1,138 @@ +defmodule ElixirApiWeb.BlockedTimesController do + @moduledoc false + + use ElixirApiWeb, :controller + + action_fallback(ElixirApiWeb.FallbackController) + + # add aliases here + + def index(conn, params) do + with {:ok, date_from, date_to, location_id, employee_ids} <- parse_index_params(params) do + # TODO this is the part you need to implement by yourself + # TODO evaluate extra arguments, then pass them to render() + render(conn) + else + {:error, :invalid_parameters, params} -> + {:error, :invalid_parameters, params} + + {:error, :invalid_pointers, pointers} -> + {:error, :invalid_parameters, pointers} + + {:error, :not_found} -> + {:error, :not_found} + end + end + + defp parse_index_params(params) do + flat_parse( + params, + date_from: [:date, :required], + date_to: :date, + location_id: [:string, :required], + employee_ids: :id_list, + ) + end + + def create(conn, _params) do + with {:ok, parsed_opts} <- parse_create_conn(conn) do + # TODO this is the part you need to implement by yourself + # TODO evaluate extra arguments, then pass them to render() + render(conn) + else + {:error, :invalid_parameters, params} -> + {:error, :invalid_parameters, params} + + {:error, :invalid_pointers, pointers} -> + {:error, :invalid_parameters, pointers} + end + end + + defp parse_create_conn(conn) do + parse( + conn.assigns[:doc], + id: [:id, :required], + attributes: %{ + start: [&naive_date_time/1, :required], + end: [&naive_date_time/1, :required], + note: :string, + is_private: :boolean, + }, + relationships: %{ + employee: [:resource_id, :required], + location: [:resource_id, :required], + }, + ) + end + + def update(conn, params) do + with {:ok, id} <- parse_update_params(params), + {:ok, parsed_opts} <- parse_update_conn(conn) do + # TODO this is the part you need to implement by yourself + # TODO evaluate extra arguments, then pass them to render() + render(conn) + else + {:error, :invalid_parameters, params} -> + {:error, :invalid_parameters, params} + + {:error, :invalid_pointers, pointers} -> + {:error, :invalid_parameters, pointers} + + {:error, :not_found} -> + {:error, :not_found} + end + end + + defp parse_update_params(params) do + flat_parse( + params, + id: [:id, :required], + ) + end + + defp parse_update_conn(conn) do + parse( + conn.assigns[:doc], + id: [:id, :required], + attributes: %{ + start: [&naive_date_time/1, :required], + end: [&naive_date_time/1, :required], + note: :string, + is_private: :boolean, + }, + relationships: %{ + employee: :resource_id, + }, + ) + end + + def delete(conn, params) do + with {:ok, id} <- parse_delete_params(params) do + # TODO this is the part you need to implement by yourself + # TODO evaluate extra arguments, then pass them to render() + render(conn) + else + {:error, :invalid_parameters, params} -> + {:error, :invalid_parameters, params} + + {:error, :invalid_pointers, pointers} -> + {:error, :invalid_parameters, pointers} + end + end + + defp parse_delete_params(params) do + flat_parse( + params, + id: [:id, :required], + ) + end + + defp naive_date_time(nil), do: {:error, :invalid_date_time} + + defp naive_date_time(input) do + case NaiveDateTime.from_iso8601(input) do + {:ok, date_time} -> {:ok, date_time} + {:error, _} -> {:error, :invalid_date_time} + end + end +end \ No newline at end of file diff --git a/examples/codegen/elixir_api/lib/elixir_api_web/controllers/blocked_times_export_controller.ex b/examples/codegen/elixir_api/lib/elixir_api_web/controllers/blocked_times_export_controller.ex new file mode 100644 index 00000000..23daf31a --- /dev/null +++ b/examples/codegen/elixir_api/lib/elixir_api_web/controllers/blocked_times_export_controller.ex @@ -0,0 +1,69 @@ +defmodule ElixirApiWeb.BlockedTimesExportController do + @moduledoc false + + use ElixirApiWeb, :controller + + action_fallback(ElixirApiWeb.FallbackController) + + # add aliases here + + def create(conn, _params) do + with {:ok, parsed_opts} <- parse_create_conn(conn) do + # TODO this is the part you need to implement by yourself + # TODO evaluate extra arguments, then pass them to render() + render(conn) + else + {:error, :invalid_parameters, params} -> + {:error, :invalid_parameters, params} + + {:error, :invalid_pointers, pointers} -> + {:error, :invalid_parameters, pointers} + end + end + + defp parse_create_conn(conn) do + parse( + conn.assigns[:doc], + id: [:id, :required], + attributes: %{ + start: [&naive_date_time/1, :required], + end: [&naive_date_time/1, :required], + }, + relationships: %{ + }, + ) + end + + def show(conn, params) do + with {:ok, id} <- parse_show_params(params) do + # TODO this is the part you need to implement by yourself + # TODO evaluate extra arguments, then pass them to render() + render(conn) + else + {:error, :invalid_parameters, params} -> + {:error, :invalid_parameters, params} + + {:error, :invalid_pointers, pointers} -> + {:error, :invalid_parameters, pointers} + + {:error, :not_found} -> + {:error, :not_found} + end + end + + defp parse_show_params(params) do + flat_parse( + params, + id: [:id, :required], + ) + end + + defp naive_date_time(nil), do: {:error, :invalid_date_time} + + defp naive_date_time(input) do + case NaiveDateTime.from_iso8601(input) do + {:ok, date_time} -> {:ok, date_time} + {:error, _} -> {:error, :invalid_date_time} + end + end +end \ No newline at end of file diff --git a/examples/codegen/elixir_api/lib/elixir_api_web/controllers/fallback_controller.ex b/examples/codegen/elixir_api/lib/elixir_api_web/controllers/fallback_controller.ex new file mode 100644 index 00000000..41235fff --- /dev/null +++ b/examples/codegen/elixir_api/lib/elixir_api_web/controllers/fallback_controller.ex @@ -0,0 +1,90 @@ +defmodule ElixirApiWeb.FallbackController do + @moduledoc false + + use ElixirApiWeb, :controller + alias ElixirApiWeb.ErrorView + + def call(conn, {:error, :bad_request}) do + conn + |> put_status(:bad_request) + |> put_view(ErrorView) + |> render(:"400") + end + + def call(conn, {:error, :bad_request, code}) when is_atom(code) do + conn + |> put_status(:bad_request) + |> put_view(ErrorView) + |> render(:"400", code: Atom.to_string(code)) + end + + def call(conn, {:error, :invalid_parameters, params}) when is_list(params) do + conn + |> put_status(:bad_request) + |> put_view(ErrorView) + |> render(:"400", params: params) + end + + def call(conn, {:error, :invalid_pointers, pointers}) when is_list(pointers) do + conn + |> put_status(:bad_request) + |> put_view(ErrorView) + |> render(:"400", pointers: pointers) + end + + def call(conn, {:error, :unauthorized}) do + conn + |> put_status(:unauthorized) + |> put_view(ErrorView) + |> render(:"401") + end + + def call(conn, {:error, :forbidden}) do + conn + |> put_status(:forbidden) + |> put_view(ErrorView) + |> render(:"403") + end + + def call(conn, {:error, :not_found}) do + conn + |> put_status(:not_found) + |> put_view(ErrorView) + |> render(:"404") + end + + def call(conn, {:error, %Ecto.Changeset{} = changeset}) do + conn + |> put_status(:unprocessable_entity) + |> put_view(ErrorView) + |> render(:"422", changeset: changeset) + end + + def call(conn, {:error, :validation_failed}) do + conn + |> put_status(:unprocessable_entity) + |> put_view(ErrorView) + |> render(:"422") + end + + def call(conn, {:error, :unprocessable_entity}) do + conn + |> put_status(:unprocessable_entity) + |> put_view(ErrorView) + |> render(:"422") + end + + def call(conn, {:error, :conflict}) do + conn + |> put_status(:conflict) + |> put_view(ErrorView) + |> render(:"409") + end + + def call(conn, {:error, :not_available}) do + conn + |> put_status(:service_unavailable) + |> put_view(ErrorView) + |> render(:"503") + end +end \ No newline at end of file diff --git a/examples/codegen/elixir_api/lib/elixir_api_web/resources/blocked_times_resource.ex b/examples/codegen/elixir_api/lib/elixir_api_web/resources/blocked_times_resource.ex new file mode 100644 index 00000000..a068d1d6 --- /dev/null +++ b/examples/codegen/elixir_api/lib/elixir_api_web/resources/blocked_times_resource.ex @@ -0,0 +1,44 @@ +defmodule ElixirApiWeb.BlockedTimesResource do + @moduledoc false + + @resource_type "blocked-times" + use Jabbax.Document + alias ElixirApiWeb.EmployeesResource + alias ElixirApiWeb.LocationsResource + + def build(config) do + %Resource{ + type: @resource_type, + id: config.id, + attributes: %{ + start: config.start, + end: config.end, + note: config.note, + is_private: config.is_private, + }, + relationships: + %{} + |> link_relationship(:employee, config.employee) + |> link_relationship(:location, config.location) + } + end + + def link(config) do + %ResourceId{ + type: @resource_type, + id: config.id, + } + end + + defp link_relationship(relationships, type, nil) do + Map.put(relationships, type, %Jabbax.Document.Relationship{data: nil}) + end + + defp link_relationship(relationships, :employee, employee) do + Map.put(relationships, :employee, EmployeesResource.link(employee)) + end + + defp link_relationship(relationships, :location, location) do + Map.put(relationships, :location, LocationsResource.link(location)) + end +end \ No newline at end of file diff --git a/examples/codegen/elixir_api/lib/elixir_api_web/resources/employees_resource.ex b/examples/codegen/elixir_api/lib/elixir_api_web/resources/employees_resource.ex new file mode 100644 index 00000000..9d4042e2 --- /dev/null +++ b/examples/codegen/elixir_api/lib/elixir_api_web/resources/employees_resource.ex @@ -0,0 +1,13 @@ +defmodule ElixirApiWeb.EmployeesResource do + @moduledoc false + + @resource_type "employees" + use Jabbax.Document + + def link(config) do + %ResourceId{ + type: @resource_type, + id: config.id, + } + end +end \ No newline at end of file diff --git a/examples/codegen/elixir_api/lib/elixir_api_web/resources/export_jobs_resource.ex b/examples/codegen/elixir_api/lib/elixir_api_web/resources/export_jobs_resource.ex new file mode 100644 index 00000000..16dd20c0 --- /dev/null +++ b/examples/codegen/elixir_api/lib/elixir_api_web/resources/export_jobs_resource.ex @@ -0,0 +1,24 @@ +defmodule ElixirApiWeb.ExportJobsResource do + @moduledoc false + + @resource_type "export-jobs" + use Jabbax.Document + + def build(config) do + %Resource{ + type: @resource_type, + id: config.id, + attributes: %{ + status: config.status, + download_link: config.download_link, + }, + } + end + + def link(config) do + %ResourceId{ + type: @resource_type, + id: config.id, + } + end +end \ No newline at end of file diff --git a/examples/codegen/elixir_api/lib/elixir_api_web/resources/locations_resource.ex b/examples/codegen/elixir_api/lib/elixir_api_web/resources/locations_resource.ex new file mode 100644 index 00000000..57eb8a14 --- /dev/null +++ b/examples/codegen/elixir_api/lib/elixir_api_web/resources/locations_resource.ex @@ -0,0 +1,13 @@ +defmodule ElixirApiWeb.LocationsResource do + @moduledoc false + + @resource_type "locations" + use Jabbax.Document + + def link(config) do + %ResourceId{ + type: @resource_type, + id: config.id, + } + end +end \ No newline at end of file diff --git a/examples/codegen/elixir_api/lib/elixir_api_web/views/blocked_times_export_view.ex b/examples/codegen/elixir_api/lib/elixir_api_web/views/blocked_times_export_view.ex new file mode 100644 index 00000000..22805b6d --- /dev/null +++ b/examples/codegen/elixir_api/lib/elixir_api_web/views/blocked_times_export_view.ex @@ -0,0 +1,24 @@ +defmodule ElixirApiWeb.BlockedTimesExportView do + @moduledoc false + + use Jabbax.Document + use ElixirApiWeb, :view + + def render("create.json-api", %{}) do + # TODO you need to fill in "data", "meta" and "included" fields + %Document{ + data: [], + meta: %{}, + included: [], + } + end + + def render("show.json-api", %{}) do + # TODO you need to fill in "data", "meta" and "included" fields + %Document{ + data: [], + meta: %{}, + included: [], + } + end +end \ No newline at end of file diff --git a/examples/codegen/elixir_api/lib/elixir_api_web/views/blocked_times_view.ex b/examples/codegen/elixir_api/lib/elixir_api_web/views/blocked_times_view.ex new file mode 100644 index 00000000..bac20e4f --- /dev/null +++ b/examples/codegen/elixir_api/lib/elixir_api_web/views/blocked_times_view.ex @@ -0,0 +1,42 @@ +defmodule ElixirApiWeb.BlockedTimesView do + @moduledoc false + + use Jabbax.Document + use ElixirApiWeb, :view + + def render("index.json-api", %{}) do + # TODO you need to fill in "data", "meta" and "included" fields + %Document{ + data: [], + meta: %{}, + included: [], + } + end + + def render("create.json-api", %{}) do + # TODO you need to fill in "data", "meta" and "included" fields + %Document{ + data: [], + meta: %{}, + included: [], + } + end + + def render("update.json-api", %{}) do + # TODO you need to fill in "data", "meta" and "included" fields + %Document{ + data: [], + meta: %{}, + included: [], + } + end + + def render("delete.json-api", %{}) do + # TODO you need to fill in "data", "meta" and "included" fields + %Document{ + data: [], + meta: %{}, + included: [], + } + end +end \ No newline at end of file diff --git a/examples/codegen/elixir_api/lib/elixir_api_web/views/error_view.ex b/examples/codegen/elixir_api/lib/elixir_api_web/views/error_view.ex index 46dc354a..4c115d25 100644 --- a/examples/codegen/elixir_api/lib/elixir_api_web/views/error_view.ex +++ b/examples/codegen/elixir_api/lib/elixir_api_web/views/error_view.ex @@ -1,16 +1,64 @@ defmodule ElixirApiWeb.ErrorView do - use ElixirApiWeb, :view + @moduledoc false - # If you want to customize a particular status code - # for a certain format, you may uncomment below. - # def render("500.html", _assigns) do - # "Internal Server Error" - # end + use ElixirApiWeb, :view + use Jabbax.Document - # By default, Phoenix returns the status message from - # the template name. For example, "404.html" becomes - # "Not Found". def template_not_found(template, _assigns) do - Phoenix.Controller.status_message_from_template(template) + error_code = + template + |> Phoenix.Controller.status_message_from_template() + |> String.downcase() + |> String.replace(" ", "_") + + %Document{ + errors: [ + %Error{code: error_code} + ] + } + end + + def render("400.json-api", %{params: params}) do + %Document{ + errors: + Enum.map(params, fn {code, parameter} -> + %Error{ + code: code, + source: %ErrorSource{ + parameter: parameter + } + } + end) + } + end + + def render("400.json-api", %{pointers: pointers}) do + %Document{ + errors: + Enum.map(pointers, fn {code, pointer} -> + %Error{ + code: code, + source: %ErrorSource{ + pointer: pointer + } + } + end) + } + end + + def render("400.json-api", _) do + %Document{errors: [%Error{code: "400", title: "Bad request"}]} + end + + def render("404.json-api", _) do + %Document{errors: [%Error{code: "404", title: "Not found"}]} + end + + def render("422.json-api", %{reason: reason}) do + %Document{errors: [%Error{code: "422", title: "Unprocessable entity", detail: reason}]} + end + + def render("422.json-api", %{changeset: changeset}) do + Surgex.Changeset.build_errors_document(changeset) end -end +end \ No newline at end of file diff --git a/examples/codegen/elixir_api/test/elixir_api_web/controllers/blocked_times_controller_test.exs b/examples/codegen/elixir_api/test/elixir_api_web/controllers/blocked_times_controller_test.exs new file mode 100644 index 00000000..8b7bd86e --- /dev/null +++ b/examples/codegen/elixir_api/test/elixir_api_web/controllers/blocked_times_controller_test.exs @@ -0,0 +1,32 @@ +defmodule ElixirApiWeb.BlockedTimesControllerTest do + @moduledoc false + + use ElixirApiWeb.ConnCase, async: true + # add aliases here + # import Hammox + # setup :verify_on_exit! + + test "index", %{conn: conn} do + # TODO add setup code here + # TODO add SUT manipulation here + # TODO add expectation checking here + end + + test "create", %{conn: conn} do + # TODO add setup code here + # TODO add SUT manipulation here + # TODO add expectation checking here + end + + test "update", %{conn: conn} do + # TODO add setup code here + # TODO add SUT manipulation here + # TODO add expectation checking here + end + + test "delete", %{conn: conn} do + # TODO add setup code here + # TODO add SUT manipulation here + # TODO add expectation checking here + end +end \ No newline at end of file diff --git a/examples/codegen/elixir_api/test/elixir_api_web/controllers/blocked_times_export_controller_test.exs b/examples/codegen/elixir_api/test/elixir_api_web/controllers/blocked_times_export_controller_test.exs new file mode 100644 index 00000000..956832eb --- /dev/null +++ b/examples/codegen/elixir_api/test/elixir_api_web/controllers/blocked_times_export_controller_test.exs @@ -0,0 +1,20 @@ +defmodule ElixirApiWeb.BlockedTimesExportControllerTest do + @moduledoc false + + use ElixirApiWeb.ConnCase, async: true + # add aliases here + # import Hammox + # setup :verify_on_exit! + + test "create", %{conn: conn} do + # TODO add setup code here + # TODO add SUT manipulation here + # TODO add expectation checking here + end + + test "show", %{conn: conn} do + # TODO add setup code here + # TODO add SUT manipulation here + # TODO add expectation checking here + end +end \ No newline at end of file diff --git a/examples/codegen/elixir_api/test/elixir_api_web/resources/blocked_times_resource_test.exs b/examples/codegen/elixir_api/test/elixir_api_web/resources/blocked_times_resource_test.exs new file mode 100644 index 00000000..f25b4a2d --- /dev/null +++ b/examples/codegen/elixir_api/test/elixir_api_web/resources/blocked_times_resource_test.exs @@ -0,0 +1,42 @@ +defmodule ElixirApiWeb.BlockedTimesResourceTest do + @moduledoc false + + use ExUnit.Case, async: false + import ElixirApi.Factory + alias ElixirApiWeb.BlockedTimesResource + + test "build/1" do + config = build( + :blocked_times, + id: 884, + start: "2022-10-28T21:41:55.404Z", + end: "2022-10-28T14:50:02.790Z", + note: "iste", + is_private: false, + employee_id: true, + location_id: true, + ) + + assert BlockedTimesResource.build(config) == %Jabbax.Document.Resource{ + type: "blocked-times", + id: 884, + attributes: %{ + start: "2022-10-28T21:41:55.404Z", + end: "2022-10-28T14:50:02.790Z", + note: "iste", + is_private: false, + }, + relationships: %{ + employee: %Jabbax.Document.ResourceId{id: config.employee.id, type: "employees"}, + location: %Jabbax.Document.ResourceId{id: config.location.id, type: "locations"}, + }, + } + end + + test "link/1" do + assert BlockedTimesResource.link(%{ id: 3525 }) == %Jabbax.Document.ResourceId{ + type: "blocked-times", + id: 3525, + } + end +end \ No newline at end of file diff --git a/examples/codegen/elixir_api/test/elixir_api_web/resources/employees_resource_test.exs b/examples/codegen/elixir_api/test/elixir_api_web/resources/employees_resource_test.exs new file mode 100644 index 00000000..b312acf1 --- /dev/null +++ b/examples/codegen/elixir_api/test/elixir_api_web/resources/employees_resource_test.exs @@ -0,0 +1,13 @@ +defmodule ElixirApiWeb.EmployeesResourceTest do + @moduledoc false + + use ExUnit.Case, async: false + alias ElixirApiWeb.EmployeesResource + + test "link/1" do + assert EmployeesResource.link(%{ id: 3525 }) == %Jabbax.Document.ResourceId{ + type: "employees", + id: 3525, + } + end +end \ No newline at end of file diff --git a/examples/codegen/elixir_api/test/elixir_api_web/resources/export_jobs_resource_test.exs b/examples/codegen/elixir_api/test/elixir_api_web/resources/export_jobs_resource_test.exs new file mode 100644 index 00000000..7898c57e --- /dev/null +++ b/examples/codegen/elixir_api/test/elixir_api_web/resources/export_jobs_resource_test.exs @@ -0,0 +1,33 @@ +defmodule ElixirApiWeb.ExportJobsResourceTest do + @moduledoc false + + use ExUnit.Case, async: false + import ElixirApi.Factory + alias ElixirApiWeb.ExportJobsResource + + test "build/1" do + config = build( + :export_jobs, + id: 884, + status: "dolores", + download_link: "consequuntur", + ) + + assert ExportJobsResource.build(config) == %Jabbax.Document.Resource{ + type: "export-jobs", + id: 884, + attributes: %{ + status: "dolores", + download_link: "consequuntur", + }, + relationships: %{}, + } + end + + test "link/1" do + assert ExportJobsResource.link(%{ id: 3525 }) == %Jabbax.Document.ResourceId{ + type: "export-jobs", + id: 3525, + } + end +end \ No newline at end of file diff --git a/examples/codegen/elixir_api/test/elixir_api_web/resources/locations_resource_test.exs b/examples/codegen/elixir_api/test/elixir_api_web/resources/locations_resource_test.exs new file mode 100644 index 00000000..45220551 --- /dev/null +++ b/examples/codegen/elixir_api/test/elixir_api_web/resources/locations_resource_test.exs @@ -0,0 +1,13 @@ +defmodule ElixirApiWeb.LocationsResourceTest do + @moduledoc false + + use ExUnit.Case, async: false + alias ElixirApiWeb.LocationsResource + + test "link/1" do + assert LocationsResource.link(%{ id: 3525 }) == %Jabbax.Document.ResourceId{ + type: "locations", + id: 3525, + } + end +end \ No newline at end of file diff --git a/examples/codegen/elixir_api/test/elixir_api_web/views/blocked_times_export_view_test.exs b/examples/codegen/elixir_api/test/elixir_api_web/views/blocked_times_export_view_test.exs new file mode 100644 index 00000000..3f82f31e --- /dev/null +++ b/examples/codegen/elixir_api/test/elixir_api_web/views/blocked_times_export_view_test.exs @@ -0,0 +1,18 @@ +defmodule ElixirApiWeb.BlockedTimesExportViewTest do + @moduledoc false + + use ElixirApiWeb.ConnCase, async: true + use Jabbax.Document + + test "renders create.json-api" do + # TODO prepare data + # TODO render view + # TODO verify returned data + end + + test "renders show.json-api" do + # TODO prepare data + # TODO render view + # TODO verify returned data + end +end \ No newline at end of file diff --git a/examples/codegen/elixir_api/test/elixir_api_web/views/blocked_times_view_test.exs b/examples/codegen/elixir_api/test/elixir_api_web/views/blocked_times_view_test.exs new file mode 100644 index 00000000..4cda0594 --- /dev/null +++ b/examples/codegen/elixir_api/test/elixir_api_web/views/blocked_times_view_test.exs @@ -0,0 +1,30 @@ +defmodule ElixirApiWeb.BlockedTimesViewTest do + @moduledoc false + + use ElixirApiWeb.ConnCase, async: true + use Jabbax.Document + + test "renders index.json-api" do + # TODO prepare data + # TODO render view + # TODO verify returned data + end + + test "renders create.json-api" do + # TODO prepare data + # TODO render view + # TODO verify returned data + end + + test "renders update.json-api" do + # TODO prepare data + # TODO render view + # TODO verify returned data + end + + test "renders delete.json-api" do + # TODO prepare data + # TODO render view + # TODO verify returned data + end +end \ No newline at end of file