require 'test_helper' class ApplicationTest < Minitest::Test def test_defining_an_application Pico.define_application :Foo Pico.boot! refute_nil Pico.application assert_equal :Foo, Pico.application.name assert_equal Pathname(__FILE__).dirname, Pico.application.root end def test_autoload_paths Pico.define_application :Foo do self.autoload_paths = %w(lib app) end assert_equal %w(lib app), Pico.application.autoload_paths end def test_providing_objects Pico.define_application :Foo do provide as: 'foo' do :provided_foo; end provide :provided_bar, as: 'bar' provide 'MyClass', as: 'baz' end Pico.boot! my_class = Class.new do def message; :provided_baz; end ; end Object.const_set :MyClass, my_class consumer = Class.new do attr :foo, :bar, :baz, :ping def initialize(foo, bar, baz, ping:) @foo = foo ; @bar = bar ; @baz = baz; @ping = ping end end Foo.const_set :Consumer, consumer obj = Foo.build(:Consumer, ping: 'pong') assert_equal :provided_foo, obj.foo assert_equal :provided_bar, obj.bar assert_equal :provided_baz, obj.baz.message assert_equal 'pong', obj.ping ensure Object.send :remove_const, :MyClass end def test_wraps_ruse_errors Pico.define_application :Foo Pico.boot! consumer = Class.new do attr :unmet_dep def initialize(unmet_dep) @unmet_dep = unmet_dep end end Foo.const_set :Consumer, consumer exception = assert_raises Pico::Exception do Foo.build(:Consumer) end assert_equal "could not resolve dependency `unmet_dep'", exception.message end def test_cannot_provide_object_as_block_and_arg exception = assert_raises ArgumentError do Pico.define_application :Foo do provide :a_value, as: :foo do :another_value end end end assert_equal "cannot supply a block and a value", exception.message end end