Thursday, June 04, 2026 1:46:20 AM
> test_replace_keys.rb
# frozen_string_literal: true

require "test_helper"

class TestReplaceKeys < Minitest::Test
  def test_it_renames_the_keys
    hash = {key_1: 1, key_2: 2}
    new_hash = hash.rename_keys(key_1: :key_one, key_2: :key_two)

    refute_same(hash, new_hash)
    assert_equal({key_1: 1, key_2: 2}, hash)

    # Order matters!
    assert_equal([:key_one, :key_two], new_hash.keys)
    assert_equal([1, 2], new_hash.values)
  end

  def test_it_renames_the_key_in_memory
    hash = {key_1: 1, key_2: 2}
    modified_hash = hash.rename_keys!(key_1: :key_one, key_2: :key_two)

    assert_same(hash, modified_hash)

    # Order matters!
    assert_equal([:key_one, :key_two], hash.keys)
    assert_equal([1, 2], hash.values)
  end

  def test_it_can_change_the_type
    hash = {key_1: 1, key_2: 2}
    assert_equal({"key_one" => 1, "key_two" => 2}, hash.rename_keys(key_1: "key_one", key_2: "key_two"))

    hash.rename_keys!(key_1: "key_one", key_2: "key_two")
    assert_equal({"key_one" => 1, "key_two" => 2}, hash)
  end

  def test_it_does_not_add_non_existent_key
    hash = {baz: true}

    result = hash.rename_keys(foo: :bar)
    assert_equal({baz: true}, result)

    hash.rename_keys!(foo: :bar)
    assert_equal({baz: true}, hash)
  end
end
All opinions represented herein are my own
- © 2024 - 2026 itsthedevman
- build 4294fb2