Sha256: e12cc46b4e44c97f13a354221a86842549f00fc0ae390c5afd7d97780b1b1115

Contents?: true

Size: 1.34 KB

Versions: 4

Compression:

Stored size: 1.34 KB

Contents

# frozen_string_literal: true

require 'test_helper'

module Upgrow
  class ImmutableStructTest < ActiveSupport::TestCase
    test '.new creates a new Struct class with the given members as keyword arguments' do
      struct_class = ImmutableStruct.new(:user, :post)

      struct = struct_class.new(user: 'volmer', post: 'hello')

      assert_equal([:user, :post], struct.members)
      assert_equal(['volmer', 'hello'], struct.values)
      assert struct.frozen?
    end

    test '.new accepts symbols only' do
      error = assert_raises(ArgumentError) do
        ImmutableStruct.new('Shopify', :user, :post)
      end

      assert_equal 'all members must be symbols', error.message
    end

    test 'it does not respond to []=' do
      struct = ImmutableStruct.new(:user).new(user: 'volmer')
      refute struct.respond_to?(:[]=)
    end

    test 'it does not allow members to be mutated' do
      struct_class = ImmutableStruct.new(:user, :post)

      struct = struct_class.new(user: 'volmer', post: 'hello')

      refute struct.respond_to?(:user=)
      refute struct.respond_to?(:post=)
    end

    test '.new requires all members' do
      struct_class = ImmutableStruct.new(:user, :post)

      error = assert_raises(KeyError) do
        struct_class.new(user: 'volmer')
      end

      assert_equal 'key not found: :post', error.message
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
upgrow-0.0.5 test/upgrow/immutable_struct_test.rb
upgrow-0.0.4 test/upgrow/immutable_struct_test.rb
upgrow-0.0.3 test/upgrow/immutable_struct_test.rb
upgrow-0.0.2 test/upgrow/immutable_struct_test.rb