summaryrefslogtreecommitdiffstats
path: root/spec/node_spec.rb
blob: cc665b752a50f9ccea10f181f40bf2f6eab5e37c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# -*- coding: UTF-8 -*-
#
require 'spec_helper'
#
describe Zorglub do
    #
    describe Zorglub::Node do
        #
        it "engine should return default Node's engine" do
            Node0.engine.should == Zorglub::Config.engine
            Node0.engine.should == Zorglub::Config[:engine]
        end
        #
        it "layout should return default Node's layout" do
            Node0.layout.should == Zorglub::Config.layout
        end
        #
        it "engine should return class defined Node's engine" do
            Node1.engine.should == "engine-1"
            Node3.engine.should == "engine-2"
        end
        #
        it "layout should return class defined Node's layout" do
            Node1.layout.should == "layout-1"
            Node3.layout.should == "layout-2"
        end
        #
        it "engine should return engine inherited from Node2" do
            Node2.engine.should == "engine-1"
        end
        #
        it "layout should return layout inherited from Node2" do
            Node2.layout.should == "layout-1"
        end
        #
        it "r should build a well formed path" do
            Node1.r(1,'arg2',"some").should == "/node1/1/arg2/some"
        end
        #
        it "should return err404 response when no method found" do
            Node0.respond_to?('noresponse').should be_false
            r = Node0.call( {'PATH_INFO'=>'/noresponse'} )
            r.status.should == 404
        end
        #
        it "simple method should respond" do
            r = Node0.call( {'PATH_INFO'=>'/hello'} )
            r.status.should == 200
            r.body[0].should == 'world'
        end
        #
        it "arguments should work" do
            r = Node0.call( {'PATH_INFO'=>'/with_2args/1/2'} )
            h = YAML.load r.body[0]
            h[:args][0].should == '1'
            h[:args][1].should == '2'
        end
        #
        it "should raise error when too much arguments" do
            lambda{ r = Node0.call( {'PATH_INFO'=>'/with_2args/1/2/3'} ) }.should raise_error ArgumentError
        end
        #
        it "layout proc, method level layout and engine definitions should work" do
            r = Node0.call( {'PATH_INFO'=>'/index'} )
            r.status.should == 200
            h = YAML.load r.body[0]
            ly = File.join Zorglub::Config.root, Zorglub::Config.layout_dir, Node0.layout
            vu = File.join Zorglub::Config.root, Zorglub::Config.view_dir, Node0.r, 'index'
            h[:path].should == ly
            h[:layout].should == ly
            h[:view].should == vu
        end
        #
        it "layout proc, method level layout and engine definitions should work" do
            r = Node1.call( {'PATH_INFO'=>'/index'} )
            r.status.should == 200
            h = YAML.load r.body[0]
            ly = File.join Zorglub::Config.root, Zorglub::Config.layout_dir, 'main.spec'
            vu = File.join Zorglub::Config.root, Zorglub::Config.view_dir, Node1.r, 'index.spec'
            h[:path].should == ly
            h[:layout].should == ly
            h[:view].should == vu
        end
        #
        it "before_all hook should work" do
            Node3.before = 0
            Node3.after = 0
            Node3.before.should == 0
            Node3.call( {'PATH_INFO'=>'/index'} )
            Node3.before.should == 1
            Node3.call( {'PATH_INFO'=>'/index'} )
            Node3.before.should == 2
            Node3.call( {'PATH_INFO'=>'/index'} )
            Node3.before.should == 3
        end
        #
        it "after_all hook should work" do
            Node3.before = 0
            Node3.after = 0
            Node3.after.should == 0
            Node3.call( {'PATH_INFO'=>'/index'} )
            Node3.after.should == 1
            Node3.call( {'PATH_INFO'=>'/index'} )
            Node3.after.should == 2
            Node3.call( {'PATH_INFO'=>'/index'} )
            Node3.after.should == 3
        end
        #
        it "should find view and layout and render them" do
            r = Node0.call( {'PATH_INFO'=>'/do_render'} )
            r.status.should == 200
            r.body[0].should == "layout_start view_content layout_end"
        end
        #
    end
    #
end