moon 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +20 -0
- data/README.rdoc +11 -0
- data/Rakefile +48 -0
- data/lib/moon.rb +15 -0
- data/lib/moon/action.rb +12 -0
- data/lib/moon/action/base.rb +16 -0
- data/lib/moon/action/model.rb +10 -0
- data/lib/moon/action/model/create.rb +45 -0
- data/lib/moon/action/model/destroy.rb +42 -0
- data/lib/moon/action/model/index.rb +31 -0
- data/lib/moon/action/model/show.rb +32 -0
- data/lib/moon/action/model/update.rb +42 -0
- data/lib/moon/action/models.rb +8 -0
- data/lib/moon/action/models/finder.rb +43 -0
- data/lib/moon/action/models/initializer.rb +51 -0
- data/lib/moon/action/models/updater.rb +36 -0
- data/lib/moon/action/rebuild_arrays.rb +40 -0
- data/lib/moon/action/reference_object.rb +35 -0
- data/lib/moon/action/valid_models_required.rb +21 -0
- data/lib/moon/application.rb +33 -0
- data/lib/moon/application/rack.rb +104 -0
- data/lib/moon/application/routes.rb +16 -0
- data/lib/moon/context.rb +25 -0
- data/lib/moon/formatter.rb +22 -0
- data/lib/moon/formatter/base.rb +15 -0
- data/lib/moon/formatter/generic.rb +29 -0
- data/lib/moon/response.rb +7 -0
- data/lib/moon/response/base.rb +18 -0
- data/lib/moon/response/json.rb +26 -0
- data/lib/moon/response/json/collection.rb +12 -0
- data/lib/moon/response/json/message.rb +18 -0
- data/lib/moon/response/json/model.rb +16 -0
- data/lib/moon/response/json/validation_errors.rb +9 -0
- data/lib/moon/utility.rb +7 -0
- data/lib/moon/utility/string.rb +17 -0
- data/lib/moon/utility/template.rb +23 -0
- data/lib/moon/validator.rb +71 -0
- data/lib/moon/validator/format.rb +32 -0
- data/lib/moon/validator/length.rb +42 -0
- data/lib/moon/validator/presence.rb +29 -0
- data/spec/lib/moon/action/base_spec.rb +29 -0
- data/spec/lib/moon/action/model/create_spec.rb +111 -0
- data/spec/lib/moon/action/model/destroy_spec.rb +84 -0
- data/spec/lib/moon/action/model/index_spec.rb +51 -0
- data/spec/lib/moon/action/model/show_spec.rb +51 -0
- data/spec/lib/moon/action/model/update_spec.rb +91 -0
- data/spec/lib/moon/action/models/finder_spec.rb +36 -0
- data/spec/lib/moon/action/models/initializer_spec.rb +43 -0
- data/spec/lib/moon/action/models/updater_spec.rb +36 -0
- data/spec/lib/moon/action/rebuild_arrays_spec.rb +28 -0
- data/spec/lib/moon/action/reference_object_spec.rb +32 -0
- data/spec/lib/moon/action/valid_models_required_spec.rb +64 -0
- data/spec/lib/moon/application/rack_spec.rb +73 -0
- data/spec/lib/moon/application/routes_spec.rb +26 -0
- data/spec/lib/moon/context_spec.rb +28 -0
- data/spec/lib/moon/formatter/base_spec.rb +30 -0
- data/spec/lib/moon/formatter/generic_spec.rb +34 -0
- data/spec/lib/moon/formatter_spec.rb +36 -0
- data/spec/lib/moon/response/base_spec.rb +33 -0
- data/spec/lib/moon/response/json/collection_spec.rb +30 -0
- data/spec/lib/moon/response/json/message_spec.rb +30 -0
- data/spec/lib/moon/response/json/model_spec.rb +31 -0
- data/spec/lib/moon/response/json/validation_errors_spec.rb +21 -0
- data/spec/lib/moon/response/json_spec.rb +33 -0
- data/spec/lib/moon/utility/string_spec.rb +29 -0
- data/spec/lib/moon/utility/template_spec.rb +49 -0
- data/spec/lib/moon/validator/format_spec.rb +40 -0
- data/spec/lib/moon/validator/length_spec.rb +60 -0
- data/spec/lib/moon/validator/presence_spec.rb +45 -0
- data/spec/lib/moon/validator_spec.rb +83 -0
- data/spec/spec_helper.rb +4 -0
- metadata +209 -0
@@ -0,0 +1,51 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "..", "spec_helper"))
|
2
|
+
|
3
|
+
describe Moon::Action::Model::Index do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@collection = mock GOM::Object::Collection
|
7
|
+
|
8
|
+
@context = Moon::Context.new
|
9
|
+
@context.collections[:sites] = @collection
|
10
|
+
|
11
|
+
@response = mock Moon::Response::JSON::Collection
|
12
|
+
Moon::Response::JSON::Collection.stub :new => @response
|
13
|
+
|
14
|
+
described_class.collection_key = :test
|
15
|
+
@action = described_class.new @context
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "perform" do
|
19
|
+
|
20
|
+
it "should initialize a collection response" do
|
21
|
+
Moon::Response::JSON::Collection.should_receive(:new).and_return(@response)
|
22
|
+
@action.perform
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should return the response" do
|
26
|
+
response = @action.perform
|
27
|
+
response.should == @response
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "self.[]" do
|
33
|
+
|
34
|
+
it "should return a class" do
|
35
|
+
result = described_class[:test]
|
36
|
+
result.should be_instance_of(Class)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should return a different class" do
|
40
|
+
result = described_class[:test]
|
41
|
+
result.should_not == described_class
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should return a class connected to the given collection key" do
|
45
|
+
result = described_class[:test]
|
46
|
+
result.collection_key.should == :test
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "..", "spec_helper"))
|
2
|
+
|
3
|
+
describe Moon::Action::Model::Show do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@model = mock Object
|
7
|
+
|
8
|
+
@context = Moon::Context.new
|
9
|
+
@context.models[:test] = @model
|
10
|
+
|
11
|
+
@response = mock Moon::Response::JSON::Model
|
12
|
+
Moon::Response::JSON::Model.stub :new => @response
|
13
|
+
|
14
|
+
described_class.model_key = :test
|
15
|
+
@action = described_class.new @context
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "perform" do
|
19
|
+
|
20
|
+
it "should initialize a model response" do
|
21
|
+
Moon::Response::JSON::Model.should_receive(:new).with(:test, @model).and_return(@response)
|
22
|
+
@action.perform
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should return the response" do
|
26
|
+
response = @action.perform
|
27
|
+
response.should == @response
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "self.[]" do
|
33
|
+
|
34
|
+
it "should return a class" do
|
35
|
+
result = described_class[:test]
|
36
|
+
result.should be_instance_of(Class)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should return a different class" do
|
40
|
+
result = described_class[:test]
|
41
|
+
result.should_not == described_class
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should return a class connected to the given model key" do
|
45
|
+
result = described_class[:test]
|
46
|
+
result.model_key.should == :test
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "..", "spec_helper"))
|
2
|
+
|
3
|
+
describe Moon::Action::Model::Update do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@model = mock Object
|
7
|
+
|
8
|
+
@context = Moon::Context.new
|
9
|
+
@context.storage_name = :dump
|
10
|
+
@context.models[:model] = @model
|
11
|
+
|
12
|
+
described_class.model_symbol = :model
|
13
|
+
@action = described_class.new @context
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "perform" do
|
17
|
+
|
18
|
+
before :each do
|
19
|
+
GOM::Storage.stub :store => nil
|
20
|
+
GOM::Object.stub :storage_name => :test
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should fetch the storage name of the model" do
|
24
|
+
GOM::Object.should_receive(:storage_name).with(@model).and_return(:test)
|
25
|
+
@action.perform
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should store the model on the right storage" do
|
29
|
+
GOM::Storage.should_receive(:store).with(@model, :test)
|
30
|
+
@action.perform
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should return 'ok' message response" do
|
34
|
+
response = @action.perform
|
35
|
+
response.should be_instance_of(Moon::Response::JSON::Message)
|
36
|
+
response.status.should == 200
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should do nothing if the model isn't initialized" do
|
40
|
+
@context.models[:model] = nil
|
41
|
+
GOM::Storage.should_not_receive(:store)
|
42
|
+
@action.perform
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should return 'failed' message response if model isn't initialized" do
|
46
|
+
@context.models[:model] = nil
|
47
|
+
response = @action.perform
|
48
|
+
response.should be_instance_of(Moon::Response::JSON::Message)
|
49
|
+
response.status.should == 401
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "model" do
|
55
|
+
|
56
|
+
it "should return the model" do
|
57
|
+
model = @action.model
|
58
|
+
model.should == @model
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
describe "self.model_symbol" do
|
64
|
+
|
65
|
+
it "should return the model symbol" do
|
66
|
+
model_symbol = described_class.model_symbol
|
67
|
+
model_symbol.should == :model
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
describe "self.[]" do
|
73
|
+
|
74
|
+
it "should return a class" do
|
75
|
+
result = described_class[:model]
|
76
|
+
result.should be_instance_of(Class)
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should return a different class" do
|
80
|
+
result = described_class[:model]
|
81
|
+
result.should_not == described_class
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should return a class connected to the given model symbol" do
|
85
|
+
result = described_class[:model]
|
86
|
+
result.model_symbol.should == :model
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "..", "spec_helper"))
|
2
|
+
|
3
|
+
describe Moon::Action::Models::Finder do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@context = Moon::Context.new({ }, :site_id => "test:4", :test => "test value")
|
7
|
+
|
8
|
+
@model = Object.new
|
9
|
+
GOM::Storage.stub :fetch => @model
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "self.perform" do
|
13
|
+
|
14
|
+
it "should fetch the model using the right id" do
|
15
|
+
GOM::Storage.should_receive(:fetch).with("test:4").and_return(@model)
|
16
|
+
described_class.perform @context
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should set the found models in the context" do
|
20
|
+
described_class.perform @context
|
21
|
+
@context.models[:site].should == @model
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should return nil" do
|
25
|
+
response = described_class.perform @context
|
26
|
+
response.should be_nil
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should not fetch non-id values" do
|
30
|
+
GOM::Storage.should_not_receive(:fetch).with("test value")
|
31
|
+
described_class.perform @context
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "..", "spec_helper"))
|
2
|
+
|
3
|
+
describe Moon::Action::Models::Initializer do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@context = Moon::Context.new({ }, :site => { :name => "Test Site", :address => "Test Address" })
|
7
|
+
|
8
|
+
@model = mock Object, :name= => nil, :address= => nil
|
9
|
+
@model_class = mock Class, :new => @model
|
10
|
+
Object.stub :const_get => @model_class
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "perform" do
|
14
|
+
|
15
|
+
it "should get the right model class" do
|
16
|
+
Object.should_receive(:const_get).with("Site").and_return(@model_class)
|
17
|
+
described_class.perform @context
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should initialize the model" do
|
21
|
+
@model_class.should_receive(:new).and_return(@model)
|
22
|
+
described_class.perform @context
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should set the model's attributes" do
|
26
|
+
@model.should_receive(:name=).with("Test Site")
|
27
|
+
@model.should_receive(:address=).with("Test Address")
|
28
|
+
described_class.perform @context
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should set the model to the context" do
|
32
|
+
described_class.perform @context
|
33
|
+
@context.models[:site].should == @model
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should return nil" do
|
37
|
+
response = described_class.perform @context
|
38
|
+
response.should be_nil
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "..", "spec_helper"))
|
2
|
+
|
3
|
+
describe Moon::Action::Models::Updater do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@model = Object.new
|
7
|
+
@model.class.send :attr_accessor, :options
|
8
|
+
@model.class.send :attr_accessor, :pick
|
9
|
+
@model.pick = 0
|
10
|
+
|
11
|
+
@context = Moon::Context.new({ }, :decision => { :pick => 1 })
|
12
|
+
@context.models[:decision] = @model
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "self.perform" do
|
16
|
+
|
17
|
+
it "should change the model's attributes" do
|
18
|
+
lambda do
|
19
|
+
described_class.perform @context
|
20
|
+
end.should change(@model, :pick).from(0).to(1)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should not change the model's attributes that are not specified" do
|
24
|
+
lambda do
|
25
|
+
described_class.perform @context
|
26
|
+
end.should_not change(@model, :options)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should return nil" do
|
30
|
+
response = described_class.perform @context
|
31
|
+
response.should be_nil
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "spec_helper"))
|
2
|
+
|
3
|
+
describe Moon::Action::RebuildArrays do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@context = Moon::Context.new({ }, :test => { "0" => "test one", "1" => "test two" })
|
7
|
+
|
8
|
+
@action = described_class.new @context
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#perform" do
|
12
|
+
|
13
|
+
it "should build a hash for each option" do
|
14
|
+
@action.perform
|
15
|
+
parameters = @context.parameters
|
16
|
+
parameters.should == {
|
17
|
+
:test => [ "test one", "test two" ]
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should return nil" do
|
22
|
+
response = @action.perform
|
23
|
+
response.should be_nil
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "spec_helper"))
|
2
|
+
|
3
|
+
describe Moon::Action::ReferenceObject do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@model_one = mock Object
|
7
|
+
@model_two = mock Object, :test => nil, :test= => nil
|
8
|
+
|
9
|
+
@context = Moon::Context.new :model_one => @model_one
|
10
|
+
@context.models[:model_two] = @model_two
|
11
|
+
|
12
|
+
@action = described_class.new :from => [ :session, :model_one ], :to => [ :model_two, :test ]
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "perform" do
|
16
|
+
|
17
|
+
it "should create a reference from the given store attribute to the given model attribute" do
|
18
|
+
@model_two.should_receive(:test=).and_return do |proxy|
|
19
|
+
proxy.should be_instance_of(GOM::Object::Proxy)
|
20
|
+
proxy.object.should == @model_one
|
21
|
+
end
|
22
|
+
@action.perform @context
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should return nil" do
|
26
|
+
response = @action.perform @context
|
27
|
+
response.should be_nil
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "spec_helper"))
|
2
|
+
|
3
|
+
describe Moon::Action::ValidModelsRequired do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@model_class = mock Class
|
7
|
+
@model = mock Object, :class => @model_class
|
8
|
+
|
9
|
+
@context = Moon::Context.new
|
10
|
+
@context.models[:model] = @model
|
11
|
+
|
12
|
+
@validator = mock Moon::Validator, :ok? => true, :messages => { :email => [ "Has a wrong format." ] }
|
13
|
+
@validator_class = mock Moon::Validator, :new => @validator
|
14
|
+
Moon::Validator.stub(:[]).and_return(@validator_class)
|
15
|
+
|
16
|
+
@response = mock Moon::Response::JSON::ValidationErrors
|
17
|
+
Moon::Response::JSON::ValidationErrors.stub :new => @response
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "perform" do
|
21
|
+
|
22
|
+
it "should get the validator class for the right model class" do
|
23
|
+
Moon::Validator.should_receive(:[]).with(@model_class).and_return(@validator_class)
|
24
|
+
described_class.perform @context
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should initialize the validator with the right model" do
|
28
|
+
@validator_class.should_receive(:new).with(@model).and_return(@validator)
|
29
|
+
described_class.perform @context
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should run the validator" do
|
33
|
+
@validator.should_receive(:ok?).and_return(true)
|
34
|
+
described_class.perform @context
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should return nil" do
|
38
|
+
response = described_class.perform @context
|
39
|
+
response.should be_nil
|
40
|
+
end
|
41
|
+
|
42
|
+
context "on failing validation" do
|
43
|
+
|
44
|
+
before :each do
|
45
|
+
@validator.stub :ok? => false
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should initialize #{Moon::Response::JSON::ValidationErrors}" do
|
49
|
+
Moon::Response::JSON::ValidationErrors.should_receive(:new).with(
|
50
|
+
:model => { :email => [ "Has a wrong format." ] }
|
51
|
+
).and_return(@response)
|
52
|
+
described_class.perform @context
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should return the validation errors response" do
|
56
|
+
response = described_class.perform @context
|
57
|
+
response.should == @response
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "spec_helper"))
|
2
|
+
|
3
|
+
describe Moon::Application::Rack do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
Moon::Application.stub :storage_name => :storage_name
|
7
|
+
|
8
|
+
@context = mock Moon::Context, :storage_name= => nil
|
9
|
+
Moon::Context.stub :new => @context
|
10
|
+
|
11
|
+
@response = mock Moon::Response::Base, :status => 200, :headers => { }, :body => "OK"
|
12
|
+
|
13
|
+
@action_one = mock Object, :perform => nil
|
14
|
+
@action_two = mock Class, :perform => @response
|
15
|
+
|
16
|
+
@rack = described_class.new
|
17
|
+
@rack.routes = [
|
18
|
+
{
|
19
|
+
:http_method => :get,
|
20
|
+
:path => "/test/:id",
|
21
|
+
:actions => [ @action_one, @action_two ]
|
22
|
+
}
|
23
|
+
]
|
24
|
+
@browser = Rack::Test::Session.new Rack::MockSession.new(@rack)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should have the environment set to :test" do
|
28
|
+
@rack.environment.should == :test
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should initialize the context with the right parameters" do
|
32
|
+
Moon::Context.should_receive(:new).with({ }, { "id" => "5" }).and_return(@context)
|
33
|
+
@browser.get "/test/5"
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should set the storage name in the context" do
|
37
|
+
@context.should_receive(:storage_name=).with(:storage_name)
|
38
|
+
@browser.get "/test/5"
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should perform all actions with the context" do
|
42
|
+
@action_one.should_receive(:perform).with(@context).ordered
|
43
|
+
@action_two.should_receive(:perform).with(@context).ordered
|
44
|
+
@browser.get "/test/5"
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should not perform action two if action one has a response" do
|
48
|
+
@action_one.stub :perform => @response
|
49
|
+
@action_two.should_not_receive(:perform)
|
50
|
+
@browser.get "/test/5"
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should response the action's response" do
|
54
|
+
response = @browser.get "/test/5"
|
55
|
+
response.status.should == 200
|
56
|
+
response.body.should == "OK"
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should raise an #{Moon::Application::InvalidActionError} if the action doesn't respond to :perform" do
|
60
|
+
@action_one.stub(:respond_to?).with(:perform).and_return(false)
|
61
|
+
lambda do
|
62
|
+
@browser.get "/test/5"
|
63
|
+
end.should raise_error(Moon::Application::InvalidActionError)
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should raise an #{Moon::Application::InvalidResponseError} if the response doesn't respond to :status, :headers and :body" do
|
67
|
+
@response.stub(:respond_to?).with(:status).and_return(false)
|
68
|
+
lambda do
|
69
|
+
@browser.get "/test/5"
|
70
|
+
end.should raise_error(Moon::Application::InvalidResponseError)
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|