Thursday, June 04, 2026 1:49:02 AM
> test_deep_transform_values_with_key_active_support.rb
# frozen_string_literal: true

require "test_helper"

class TestHashDeepTransformValuesWithKey < Minitest::Test
  def setup
    fail "Active support must be defined for this test" unless defined?(ActiveSupport)

    @hash = {
      key_a: 1,
      key_b: {
        key_c: 2,
        key_d: [3, 4, {key_e: 5}]
      },
      key_f: [
        {key_g: 6},
        7,
        [8, {key_h: 9}]
      ]
    }
  end

  # Checking that original functionality still works
  def test_og_transform_values
    result = @hash.deep_transform_values { |v| v * 0 }

    assert_equal(
      {
        key_a: 0,
        key_b: {
          key_c: 0,
          key_d: [0, 0, {key_e: 0}]
        },
        key_f: [
          {key_g: 0},
          0,
          [0, {key_h: 0}]
        ]
      },
      result
    )
  end

  # Checking that original functionality still works
  def test_og_deep_transform_values!
    @hash.deep_transform_values! { |v| v * 0 }

    assert_equal(
      {
        key_a: 0,
        key_b: {
          key_c: 0,
          key_d: [0, 0, {key_e: 0}]
        },
        key_f: [
          {key_g: 0},
          0,
          [0, {key_h: 0}]
        ]
      },
      @hash
    )
  end

  def test_it_returns_new_hash
    result = @hash.deep_transform_values(with_key: true) { |v, k| "#{k}#{v}" }

    assert_equal(
      {
        key_a: "key_a1",
        key_b: {
          key_c: "key_c2",
          key_d: ["3", "4", {key_e: "key_e5"}]
        },
        key_f: [
          {key_g: "key_g6"},
          "7",
          ["8", {key_h: "key_h9"}]
        ]
      },
      result
    )
  end

  def test_it_modifies_in_memory
    @hash.deep_transform_values!(with_key: true) { |v, k| "#{k}#{v}" }

    assert_equal(
      {
        key_a: "key_a1",
        key_b: {
          key_c: "key_c2",
          key_d: ["3", "4", {key_e: "key_e5"}]
        },
        key_f: [
          {key_g: "key_g6"},
          "7",
          ["8", {key_h: "key_h9"}]
        ]
      },
      @hash
    )
  end

  def test_it_returns_enum
    enum = @hash.deep_transform_values(with_key: true)
    transformed = enum.map { |v, k| "#{k}:#{v}" }

    assert_equal(
      ["key_a:1", "key_c:2", ":3", ":4", "key_e:5", "key_g:6", ":7", ":8", "key_h:9"],
      transformed
    )
  end

  def test_it_returns_enum_for_bang
    enum = @hash.deep_transform_values!(with_key: true)
    transformed = enum.map { |v, k| "#{k}:#{v}" }

    assert_equal(
      ["key_a:1", "key_c:2", ":3", ":4", "key_e:5", "key_g:6", ":7", ":8", "key_h:9"],
      transformed
    )
  end
end
All opinions represented herein are my own
- © 2024 - 2026 itsthedevman
- build 4294fb2