From 8632402ef044c7764c8f74e37481d39e58cd04df Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Wed, 25 Jan 2023 09:03:34 -0600 Subject: [PATCH 1/2] add conversion transformation --- apps/andi/mix.exs | 2 +- .../transformations_form_test.exs | 37 +++++++++++++++++++ .../transformers/lib/transformation_fields.ex | 4 ++ .../lib/transformations/type_conversion.ex | 23 ++++++++++++ apps/transformers/mix.exs | 2 +- 5 files changed, 66 insertions(+), 2 deletions(-) diff --git a/apps/andi/mix.exs b/apps/andi/mix.exs index a53f42f3a..62f74d379 100644 --- a/apps/andi/mix.exs +++ b/apps/andi/mix.exs @@ -4,7 +4,7 @@ defmodule Andi.MixProject do def project do [ app: :andi, - version: "2.5.48", + version: "2.5.49", build_path: "../../_build", config_path: "../../config/config.exs", deps_path: "../../deps", diff --git a/apps/andi/test/unit/andi_web/live/ingestion_live_view/transformations/transformations_form_test.exs b/apps/andi/test/unit/andi_web/live/ingestion_live_view/transformations/transformations_form_test.exs index ac955a4a2..7a26f0288 100644 --- a/apps/andi/test/unit/andi_web/live/ingestion_live_view/transformations/transformations_form_test.exs +++ b/apps/andi/test/unit/andi_web/live/ingestion_live_view/transformations/transformations_form_test.exs @@ -217,6 +217,43 @@ defmodule AndiWeb.IngestionLiveView.Transformations.TransformationFormTest do assert element(view, "##{target_format_id}") |> has_element?() end + test "after selecting conversion transformation, conversion fields appear" do + transformation_changeset = Transformation.changeset_for_draft(%{}) + assert {:ok, view, html} = render_transformation_form(transformation_changeset) + + select_type("conversion", view) + + target_field_id = build_field_id("field") + source_field_type = build_field_id("sourceType") + target_field_type = build_field_id("targetType") + + assert has_element?(view, ".transformation-field") + assert element(view, "label[for=#{target_field_id}]", "Field to Convert") |> has_element?() + assert element(view, "label[for=#{source_field_type}]", "Source Data Type") |> has_element?() + assert element(view, "label[for=#{target_field_type}]", "Target Data Type") |> has_element?() + assert element(view, "##{target_field_id}") |> has_element?() + assert element(view, "##{source_field_type}") |> has_element?() + assert element(view, "##{target_field_type}") |> has_element?() + end + + test "if conversion transformation is selected show fields on load" do + transformation_changeset = Transformation.changeset_for_draft(%{type: "conversion"}) + + assert {:ok, view, html} = render_transformation_form(transformation_changeset) + + target_field_id = build_field_id("field") + source_field_type = build_field_id("sourceType") + target_field_type = build_field_id("targetType") + + assert has_element?(view, ".transformation-field") + assert element(view, "label[for=#{target_field_id}]", "Field to Convert") |> has_element?() + assert element(view, "label[for=#{source_field_type}]", "Source Data Type") |> has_element?() + assert element(view, "label[for=#{target_field_type}]", "Target Data Type") |> has_element?() + assert element(view, "##{target_field_id}") |> has_element?() + assert element(view, "##{source_field_type}") |> has_element?() + assert element(view, "##{target_field_type}") |> has_element?() + end + test "shows error message if field missing" do transformation_changeset = Transformation.changeset_for_draft(%{type: "remove"}) assert {:ok, view, html} = render_transformation_form(transformation_changeset) diff --git a/apps/transformers/lib/transformation_fields.ex b/apps/transformers/lib/transformation_fields.ex index 429632965..e228ba4e4 100644 --- a/apps/transformers/lib/transformation_fields.ex +++ b/apps/transformers/lib/transformation_fields.ex @@ -33,6 +33,10 @@ defmodule Transformers.TransformationFields do Transformers.DateTime.fields() end + def fields_for("conversion") do + Transformers.TypeConversion.fields() + end + def fields_for(_unsupported) do [] end diff --git a/apps/transformers/lib/transformations/type_conversion.ex b/apps/transformers/lib/transformations/type_conversion.ex index 29a22a48d..32702fdd0 100644 --- a/apps/transformers/lib/transformations/type_conversion.ex +++ b/apps/transformers/lib/transformations/type_conversion.ex @@ -70,4 +70,27 @@ defmodule Transformers.TypeConversion do _ -> {:error, "Cannot parse field #{field} with value #{value} into #{target_type}"} end end + + def fields() do + [ + %{ + field_name: @field, + field_type: "string", + field_label: "Field to Convert", + options: nil + }, + %{ + field_name: @source_type, + field_type: "string", + field_label: "Source Data Type", + options: ["integer", "string", "float"] + }, + %{ + field_name: @target_type, + field_type: "string", + field_label: "Target Data Type", + options: ["integer", "string", "float"] + } + ] + end end diff --git a/apps/transformers/mix.exs b/apps/transformers/mix.exs index c0923c637..6330b1597 100644 --- a/apps/transformers/mix.exs +++ b/apps/transformers/mix.exs @@ -4,7 +4,7 @@ defmodule Transformers.MixProject do def project do [ app: :transformers, - version: "1.0.11", + version: "1.0.12", build_path: "../../_build", config_path: "../../config/config.exs", deps_path: "../../deps", From 4efbb39170a414f8e28444d85ac584f9be02db5e Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Wed, 25 Jan 2023 15:56:17 -0600 Subject: [PATCH 2/2] version bump --- apps/andi/mix.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/andi/mix.exs b/apps/andi/mix.exs index c1bec1bef..83dd9f6a9 100644 --- a/apps/andi/mix.exs +++ b/apps/andi/mix.exs @@ -4,7 +4,7 @@ defmodule Andi.MixProject do def project do [ app: :andi, - version: "2.5.50", + version: "2.5.51", build_path: "../../_build", config_path: "../../config/config.exs", deps_path: "../../deps",