aboutsummaryrefslogblamecommitdiffstats
path: root/activemodel/test/cases/type/registry_test.rb
blob: 0633ea2538fada3918a5922cc27f53ad8fd91f92 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11

                             
                      

                  





                                                      
 

                                              
         












                                                                                     

         

                                                                 
 


                                           
 
                                                   
         


       
# frozen_string_literal: true

require "cases/helper"

module ActiveModel
  module Type
    class RegistryTest < ActiveModel::TestCase
      test "a class can be registered for a symbol" do
        registry = Type::Registry.new
        registry.register(:foo, ::String)
        registry.register(:bar, ::Array)

        assert_equal "", registry.lookup(:foo)
        assert_equal [], registry.lookup(:bar)
      end

      test "a block can be registered" do
        registry = Type::Registry.new
        registry.register(:foo) do |*args|
          [*args, "block for foo"]
        end
        registry.register(:bar) do |*args|
          [*args, "block for bar"]
        end

        assert_equal [:foo, 1, "block for foo"], registry.lookup(:foo, 1)
        assert_equal [:foo, 2, "block for foo"], registry.lookup(:foo, 2)
        assert_equal [:bar, 1, 2, 3, "block for bar"], registry.lookup(:bar, 1, 2, 3)
      end

      test "a reasonable error is given when no type is found" do
        registry = Type::Registry.new

        e = assert_raises(ArgumentError) do
          registry.lookup(:foo)
        end

        assert_equal "Unknown type :foo", e.message
      end
    end
  end
end