require 'spec/helper'
Innate.options.merge!(:views => 'view', :layouts => 'view')
class SpecNode
Innate.node('/')
def foo; end
def bar; end
def one(arg) end
def two(arg1, arg2) end
def more(*args) end
def default(arg = nil) end
end
class SpecNodeProvide
Innate.node('/provide')
def foo
'#{21 * 2}'
end
def bar
'#{84 / 2}'
end
end
class SpecNodeProvideTemplate
Innate.node('/provide_template')
map_views '/'
end
class SpecNodeSub < SpecNode
map '/sub'
def bar(arg) end
end
class SpecNodeWithLayout < SpecNodeProvide
map '/layout'
layout 'with_layout'
map_layouts '/'
end
class SpecNodeWithLayoutView < SpecNodeProvide
map '/another_layout'
layout 'another_layout'
map_views 'node/another_layout'
map_layouts 'another_layout'
end
class SpecNodeWithLayoutMethod < SpecNodeProvide
map '/layout_method'
layout 'layout_method'
def layout_method
'
#{@content}
'
end
end
class SpecNodeIndex
Innate.node('/spec_index')
def index
"I have no parameters"
end
end
class SpecNodeAliasView < SpecNodeProvideTemplate
map '/alias_view'
map_views '/'
alias_view :aliased, :bar
end
describe 'Innate::Node' do
behaves_like :rack_test
should 'respond with 404 if no action was found' do
got = Innate::Mock.get('/does_not_exist')
got.status.should == 404
got.body.should == 'No action found at: "/does_not_exist"'
got['Content-Type'].should == 'text/plain'
end
should 'wrap with layout' do
got = Innate::Mock.get('/layout/bar')
got.status.should == 200
got.body.should == %(42
)
got['Content-Type'].should == 'text/html'
end
should 'find layout with view_root' do
got = Innate::Mock.get('/another_layout/bar')
got.status.should == 200
got.body.should == %(\n 42\n
)
got['Content-Type'].should == 'text/html'
end
should 'find layout from method' do
got = Innate::Mock.get('/layout_method/bar')
got.status.should == 200
got.body.should == %(42
)
got['Content-Type'].should == 'text/html'
end
should 'not get an action with wrong parameters' do
got = Innate::Mock.get('/spec_index/bar')
got.status.should == 404
got.body.should == 'No action found at: "/bar"'
end
should 'get an action view if there is no method' do
got = Innate::Mock.get('/provide_template/only_view')
got.status.should == 200
got.body.strip.should == "Only template"
got['Content-Type'].should == 'text/html'
end
should 'not get an action view with params if there is no method' do
got = Innate::Mock.get('/provide_template/only_view/param')
got.status.should == 404
got.body.strip.should == 'No action found at: "/only_view/param"'
end
should 'use alias_view' do
got = get('/alias_view/aliased')
got.status.should == 200
got.body.strip.should == "Hello, World!
"
got['Content-Type'].should == 'text/html'
end
end