amfetamine 0.1.5

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.
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ describe Amfetamine::Cache do
4
+ it "should return same data after all request has been made" do
5
+ dummy = build(:dummy)
6
+ dummy2 = build(:dummy)
7
+ dummies = nil
8
+ stub_all_response(dummy, dummy2) do
9
+ dummies = Dummy.all
10
+ end
11
+ dummies_no_request = Dummy.all
12
+ dummies.should == dummies
13
+ end
14
+
15
+ it "should return same data after find request has been made" do
16
+ dummy = build(:dummy)
17
+ return_dummy = nil
18
+ stub_single_response(dummy) do
19
+ return_dummy = Dummy.find(dummy.id)
20
+ end
21
+ dummy_no_request = Dummy.find(dummy.id)
22
+ dummy_no_request.should == return_dummy
23
+ end
24
+
25
+ it "should update the cache after a save has been made" do
26
+ dummy = build(:dummy)
27
+ dummy.instance_variable_set('@notsaved', false)
28
+ dummy.title = 'blabla'
29
+ stub_update_response(dummy) do
30
+ dummy.save
31
+ end
32
+ dummy2 = Dummy.find(dummy.id)
33
+ dummy2.should == dummy
34
+ end
35
+
36
+ end
37
+
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ describe "Callbacks" do
5
+ before do
6
+ Dummy.stub_responses! do |r|
7
+ r.post { build(:dummy) }
8
+ end
9
+ end
10
+
11
+ context "create" do
12
+ it "should work with before" do
13
+ Dummy.any_instance.should_receive(:"action_before_create")
14
+ Dummy.create
15
+ end
16
+
17
+ it "should work with after" do
18
+ pending "Not working, but not needed either"
19
+ Dummy.any_instance.should_receive(:"action_after_create")
20
+ Dummy.create
21
+ end
22
+ end
23
+
24
+ context "save" do
25
+ it "should work" do
26
+ dummy = build(:dummy)
27
+ dummy.should_receive(:"action_before_save")
28
+ dummy.should_receive(:"action_after_save")
29
+ dummy.save
30
+ end
31
+ end
32
+ end
33
+
34
+
35
+
36
+
@@ -0,0 +1,110 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Amfetamine REST Helpers with conditions" do
4
+ it "should work regular #all" do
5
+ Dummy.cache.flush # Just to be uber sure
6
+
7
+ query = {:title => 'Dummy'}
8
+ dummy = build(:dummy)
9
+ dummy.instance_variable_set('@notsaved',false)
10
+
11
+ result = nil
12
+ stub_conditional_all_response(query, dummy) do
13
+ result = Dummy.all(:conditions => query)
14
+ end
15
+ result2 = Dummy.all(:conditions => query) # No errors raised means it got it from the cache
16
+ result.should == result2
17
+ result.should include(dummy)
18
+ Dummy.prevent_external_connections! do |resource|
19
+ resource.delete {}
20
+ dummy.destroy
21
+ end
22
+
23
+ lambda {Dummy.all(:conditions => query) }.should raise_exception(FakeWeb::NetConnectNotAllowedError)
24
+ end
25
+
26
+ it "should work with nested resource #all" do
27
+ Dummy.cache.flush # Just to be uber sure
28
+ Child.cache.flush
29
+
30
+ query = {:title => 'Child'}
31
+ dummy = build(:dummy)
32
+ child = build(:child)
33
+ dummy.children << child
34
+
35
+ dummy.instance_variable_set('@notsaved',false)
36
+ child.instance_variable_set('@notsaved',false)
37
+
38
+ result = nil
39
+ stub_conditional_nested_all_response(dummy, query, child) do
40
+ result = dummy.children.all(:conditions => query)
41
+ end
42
+ result2 = dummy.children.all(:conditions => query) # No errors raised means it got it from the cache
43
+ result.should == result2
44
+ result.should include(child)
45
+
46
+
47
+ stub_delete_response(child) do
48
+ child.destroy
49
+ end
50
+
51
+ child.should_not be_cached
52
+
53
+ lambda {dummy.children.all(:conditions => query, :force => true) }.should raise_exception(FakeWeb::NetConnectNotAllowedError)
54
+ end
55
+
56
+ it "should work with normal resource #find" do
57
+ dummy = build(:dummy)
58
+ query = { :title => 'Dummy' }
59
+
60
+ Dummy.stub_responses! do |r|
61
+ r.get(:path => "/dummies/#{dummy.id}", :code => 200) { dummy }
62
+ r.get(:path => "/dummies/#{dummy.id}", :code => 200, :query => query) { dummy }
63
+ r.delete(:path => "/dummies/#{dummy.id}", :code => 200) {}
64
+ end
65
+
66
+ Dummy.cache.flush
67
+
68
+ dummy.instance_variable_set('@notsaved',false)
69
+
70
+ result = Dummy.find(dummy.id)
71
+ result.should == dummy
72
+
73
+ result2 = Dummy.find(dummy.id, :conditions => query)
74
+ result2.should == result
75
+
76
+ dummy.destroy
77
+
78
+ dummy.should_not be_cached
79
+ end
80
+
81
+
82
+ it "should work with nested resource #find" do
83
+ Dummy.cache.flush
84
+ Child.cache.flush
85
+
86
+ query = { :title => 'Dummy' }
87
+ dummy = build(:dummy)
88
+ child = build(:child)
89
+ dummy.children << child
90
+
91
+ dummy.instance_variable_set('@notsaved',false)
92
+ child.instance_variable_set('@notsaved',false)
93
+
94
+ result = nil
95
+ stub_conditional_nested_single_response(dummy,child, query) do
96
+ result = dummy.children.find(dummy.id, :conditions => query)
97
+ end
98
+
99
+ result.should == child
100
+
101
+ result2 = dummy.children.find(dummy.id, :conditions => query)
102
+ result2.should == result
103
+
104
+ stub_delete_response(child) do
105
+ child.destroy
106
+ end
107
+
108
+ child.should_not be_cached
109
+ end
110
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe Dummy do
4
+ context "ActiveModel Lint test" do
5
+ subject { Dummy.new }
6
+ it_should_behave_like "ActiveModel"
7
+ end
8
+
9
+ context "Client side validation" do
10
+ let(:dummy) { Dummy.new }
11
+
12
+ it "should not be valid" do
13
+ dummy.should_not be_valid
14
+ end
15
+ end
16
+
17
+ context "Configuration" do
18
+ it "should be configurable" do
19
+ Dummy.amfetamine_configure :memcached_instance => ['localhost:11211', {:key => 1}], :rest_client => DummyRestClient, :resource_suffix => '.json'
20
+ cs = Dummy.instance_variable_get('@cache_server')
21
+ cs.should be_a(Amfetamine::Cache)
22
+ cs.instance_variable_get('@cache_server').instance_variable_get('@options').should include(:key => 1) # Annoying bug :/
23
+ Dummy.rest_client.should == DummyRestClient
24
+ Dummy.resource_suffix.should == '.json'
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,103 @@
1
+ require 'spec_helper'
2
+
3
+ describe Amfetamine::Relationships do
4
+ let(:dummy) {build :dummy}
5
+ let(:child) {build :child}
6
+
7
+ context "Routing" do
8
+ it "should generate correct paths" do
9
+ dummy.children << child
10
+
11
+ Child.rest_path.should == "/children"
12
+ child.rest_path.should == "/children"
13
+ child.singular_path.should == "/children/#{child.id}"
14
+ dummy.children.rest_path.should == "/dummies/#{dummy.id}/children"
15
+
16
+ Child.resource_suffix = '.json'
17
+ child.rest_path.should == "/children.json"
18
+ dummy.children.rest_path.should == "/dummies/#{dummy.id}/children.json"
19
+ child.singular_path.should == "/children/#{child.id}.json"
20
+
21
+ Child.resource_suffix = ''
22
+ child.dummy.singular_path.should == "/dummies/#{dummy.id}/children/#{child.id}"
23
+ dummy.children.find_path(child.id).should == "/dummies/#{dummy.id}/children/#{child.id}"
24
+ end
25
+
26
+ it "should raise error if nested path lacks parent id" do
27
+ child = Child.new({:title => 'test', :dummy_id => nil})
28
+
29
+ lambda { child.belongs_to_relationships.first.rest_path }.should raise_exception(Amfetamine::InvalidPath)
30
+ end
31
+ end
32
+
33
+ context "Adding and modifying children" do
34
+ before(:each) do
35
+ dummy.children << child
36
+ child.instance_variable_set(:@notsaved, false)
37
+ end
38
+
39
+ it "should create a relationship if parent id is passed in params" do
40
+ child2 = Child.new(:title => 'Child2', :dummy_id => dummy.id)
41
+ child2.dummy.should be_a(Amfetamine::Relationship)
42
+ end
43
+
44
+ it "should be possible list all children" do
45
+ dummy.children.should include(child)
46
+ Dummy.cache.flush
47
+ dummy.children.should include(child)
48
+ end
49
+
50
+ it "should be possible to get all children if not in memory" do
51
+ Dummy.cache.flush
52
+ new_dummy = nil
53
+ stub_single_response(dummy) do
54
+ new_dummy = Dummy.find(dummy.id)
55
+ end
56
+
57
+ children = nil
58
+ stub_nested_all_response(dummy,child) do
59
+ children = new_dummy.children.all
60
+ end
61
+ children.should include(child)
62
+ end
63
+
64
+ it "should be possible to get a single child if not in memory" do
65
+ child.attributes[:dummy_id] = dummy.id # Lets fake we saved it.
66
+ Dummy.cache.flush
67
+ new_dummy = nil
68
+ stub_single_response(dummy) do
69
+ new_dummy = Dummy.find(dummy.id)
70
+ end
71
+
72
+ new_child = nil
73
+ stub_nested_single_response(dummy,child) do
74
+ new_child = new_dummy.children.find(child.id)
75
+ end
76
+
77
+ new_child.should == child
78
+ end
79
+
80
+
81
+ it "should build new child if asked" do
82
+ new_child = dummy.build_child
83
+ new_child.should be_new
84
+ new_child.should be_a(Child)
85
+ dummy.children
86
+ end
87
+
88
+ it "should create a new child if asked" do
89
+ new_child = nil
90
+ stub_post_response(child) do
91
+ new_child = dummy.create_child
92
+ end
93
+
94
+ new_child.should_not be_new
95
+ new_child.should be_cached
96
+ dummy.children.should include(new_child)
97
+ Dummy.cache.flush
98
+ dummy.children.should include(new_child)
99
+ end
100
+ end
101
+ end
102
+
103
+
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe Amfetamine::RestHelpers do
4
+ context "methods" do
5
+
6
+ it "plural_path" do
7
+ Dummy.rest_path.should ==('/dummies')
8
+ end
9
+
10
+ it "singular_path" do
11
+ dummy = build(:dummy)
12
+ dummy.singular_path.should ==("/dummies/#{dummy.id}")
13
+ end
14
+
15
+ it "find_path" do
16
+ dummy = build(:dummy)
17
+ Dummy.find_path(dummy.id).should ==("/dummies/#{dummy.id}")
18
+ end
19
+
20
+ it "should work with a resource suffix" do
21
+ Dummy.resource_suffix = '.json'
22
+ Dummy.rest_path.should ==('/dummies.json')
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe Dummy do
4
+ context "#make_request_to" do
5
+ pending "Fix this."
6
+ end
7
+ end
@@ -0,0 +1,101 @@
1
+ require 'spec_helper'
2
+
3
+ describe "test_helpers" do
4
+ let(:test_dummy) { build(:dummy) }
5
+ describe "#prevent_external_connections!" do
6
+ it "should raise exception if connections are tried to be made" do
7
+ Dummy.prevent_external_connections!
8
+ lambda { Dummy.all }.should raise_exception(Amfetamine::ExternalConnectionsNotAllowed)
9
+ end
10
+
11
+ it "should return correct objects if responses are stubbed for #singular" do
12
+ dummy = build(:dummy)
13
+
14
+ Dummy.stub_responses! do |res|
15
+ res.get { dummy }
16
+ end
17
+
18
+ Dummy.find(dummy.id).should == dummy
19
+ end
20
+
21
+ it "should return correct objects if responses are stubbed for #all" do
22
+ dummy = build(:dummy)
23
+
24
+ Dummy.stub_responses! do |res|
25
+ res.get { [dummy] }
26
+ end
27
+
28
+ Dummy.all.should == [dummy]
29
+ end
30
+
31
+ it "should return give me correct response codes" do
32
+ Dummy.stub_responses! do |res|
33
+ res.post(:code => 201) { }
34
+ end
35
+
36
+ dummy = Dummy.new(:title => 'valid', :description => 'valid')
37
+ dummy.valid?.should be_true
38
+ dummy.save.should be_true
39
+ end
40
+
41
+ it "should also work with multiple paths" do
42
+ dummy = build(:dummy)
43
+
44
+ Dummy.stub_responses! do |res|
45
+ res.get(:code => 200, :path => '/dummies/1') { dummy }
46
+ res.get(:code => 200, :path => '/dummies/') { [ dummy ] }
47
+ end
48
+
49
+ Dummy.find(1).should == dummy
50
+ Dummy.all.should == [dummy]
51
+ end
52
+
53
+
54
+ it "should work with a let statement" do
55
+ lambda {
56
+ Dummy.stub_responses! do |res|
57
+ res.get { test_dummy }
58
+ res.get(:path => '/dummies') { [test_dummy] }
59
+ end
60
+ }.should_not raise_exception
61
+ end
62
+
63
+ it "should work with opts parsed and descriminate #all" do
64
+ dummy1 = build(:dummy)
65
+ dummy2 = build(:dummy)
66
+
67
+ dummy1.title = "DUMMY1"
68
+ dummy2.title = "DUMMY2"
69
+
70
+ Dummy.stub_responses! do |r|
71
+ r.get(:path => '/dummies', :query => {:title => "DUMMY1"}) { [dummy1] }
72
+ r.get(:path => '/dummies', :query => {:title => "DUMMY2"}) { [dummy2] }
73
+ end
74
+
75
+ Dummy.all(:conditions => {:title => "DUMMY1"}).should include(dummy1)
76
+ Dummy.all(:conditions => {:title => "DUMMY1"}).should_not include(dummy2)
77
+
78
+ Dummy.all(:conditions => {:title => "DUMMY2"}).should include(dummy2)
79
+ Dummy.all(:conditions => {:title => "DUMMY2"}).should_not include(dummy1)
80
+ end
81
+
82
+ it "should work with opts parsed and descriminate #all" do
83
+ dummy1 = build(:dummy)
84
+ dummy2 = build(:dummy)
85
+
86
+ dummy1.title = "DUMMY1"
87
+ dummy2.title = "DUMMY2"
88
+
89
+ Dummy.stub_responses! do |r|
90
+ r.get(:path => "/dummies/#{dummy1.id}", :query => {:title => "DUMMY1"}) { dummy1 }
91
+ r.get(:path => "/dummies/#{dummy2.id}", :query => {:title => "DUMMY2"}) { dummy2 }
92
+ end
93
+
94
+ Dummy.find(dummy1.id, :conditions => {:title => "DUMMY1"}).should ==(dummy1)
95
+ Dummy.find(dummy1.id, :conditions => {:title => "DUMMY1"}).should_not ==(dummy2)
96
+
97
+ Dummy.find(dummy2.id, :conditions => {:title => "DUMMY2"}).should ==(dummy2)
98
+ Dummy.find(dummy2.id, :conditions => {:title => "DUMMY2"}).should_not ==(dummy1)
99
+ end
100
+ end
101
+ end