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", 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 b658fa18c..3b76a1f8d 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