fleakr 0.6.3 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +88 -57
- data/Rakefile +28 -9
- data/lib/fleakr.rb +25 -31
- data/lib/fleakr/api/option.rb +34 -34
- data/lib/fleakr/api/parameter_list.rb +23 -23
- data/lib/fleakr/objects.rb +4 -1
- data/lib/fleakr/objects/metadata.rb +35 -0
- data/lib/fleakr/objects/metadata_collection.rb +36 -0
- data/lib/fleakr/objects/photo.rb +15 -11
- data/lib/fleakr/objects/set.rb +17 -13
- data/lib/fleakr/objects/url.rb +83 -0
- data/lib/fleakr/objects/user.rb +8 -0
- data/lib/fleakr/support.rb +3 -1
- data/lib/fleakr/support/attribute.rb +2 -2
- data/lib/fleakr/support/object.rb +44 -29
- data/lib/fleakr/support/url_expander.rb +37 -0
- data/lib/fleakr/support/utility.rb +66 -0
- data/lib/fleakr/version.rb +5 -5
- data/test/fixtures/photos.getExif.xml +362 -0
- data/test/test_helper.rb +44 -47
- data/test/unit/fleakr/api/authentication_request_test.rb +12 -12
- data/test/unit/fleakr/api/file_parameter_test.rb +15 -15
- data/test/unit/fleakr/api/method_request_test.rb +1 -1
- data/test/unit/fleakr/api/option_test.rb +44 -44
- data/test/unit/fleakr/api/parameter_list_test.rb +40 -40
- data/test/unit/fleakr/api/response_test.rb +10 -10
- data/test/unit/fleakr/api/upload_request_test.rb +28 -28
- data/test/unit/fleakr/api/value_parameter_test.rb +10 -10
- data/test/unit/fleakr/core_ext/false_class_test.rb +5 -5
- data/test/unit/fleakr/core_ext/hash_test.rb +9 -9
- data/test/unit/fleakr/core_ext/true_class_test.rb +5 -5
- data/test/unit/fleakr/objects/authentication_token_test.rb +23 -23
- data/test/unit/fleakr/objects/collection_test.rb +23 -23
- data/test/unit/fleakr/objects/comment_test.rb +15 -15
- data/test/unit/fleakr/objects/contact_test.rb +11 -11
- data/test/unit/fleakr/objects/error_test.rb +8 -8
- data/test/unit/fleakr/objects/group_test.rb +13 -13
- data/test/unit/fleakr/objects/image_test.rb +4 -4
- data/test/unit/fleakr/objects/metadata_collection_test.rb +55 -0
- data/test/unit/fleakr/objects/metadata_test.rb +27 -0
- data/test/unit/fleakr/objects/photo_context_test.rb +23 -23
- data/test/unit/fleakr/objects/photo_test.rb +71 -64
- data/test/unit/fleakr/objects/search_test.rb +22 -22
- data/test/unit/fleakr/objects/set_test.rb +62 -40
- data/test/unit/fleakr/objects/tag_test.rb +32 -31
- data/test/unit/fleakr/objects/url_test.rb +185 -0
- data/test/unit/fleakr/objects/user_test.rb +43 -16
- data/test/unit/fleakr/support/attribute_test.rb +15 -15
- data/test/unit/fleakr/support/object_test.rb +77 -33
- data/test/unit/fleakr/support/request_test.rb +12 -12
- data/test/unit/fleakr/support/url_expander_test.rb +44 -0
- data/test/unit/fleakr/support/utility_test.rb +70 -0
- data/test/unit/fleakr_test.rb +48 -41
- metadata +43 -23
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.
|
1
|
+
require File.expand_path('../../../../test_helper', __FILE__)
|
2
2
|
|
3
3
|
module Fleakr::Api
|
4
4
|
class ResponseTest < Test::Unit::TestCase
|
@@ -10,35 +10,35 @@ module Fleakr::Api
|
|
10
10
|
hpricot_stub = stub()
|
11
11
|
|
12
12
|
Hpricot.expects(:XML).with(response_xml).returns(hpricot_stub)
|
13
|
-
|
13
|
+
|
14
14
|
response = Response.new(response_xml)
|
15
15
|
response.body.should == hpricot_stub
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
should "memoize the Hpricot document" do
|
19
19
|
response = Response.new('<xml>')
|
20
|
-
|
20
|
+
|
21
21
|
Hpricot.expects(:XML).with(kind_of(String)).once.returns(stub())
|
22
|
-
|
22
|
+
|
23
23
|
2.times { response.body }
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
should "know if there are errors in the response" do
|
27
27
|
response_xml = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<rsp stat=\"fail\">\n\t<err code=\"1\" msg=\"User not found\" />\n</rsp>\n"
|
28
28
|
response = Response.new(response_xml)
|
29
|
-
|
29
|
+
|
30
30
|
response.error?.should be(true)
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
should "not have an error if there are no errors in the XML" do
|
34
34
|
response = Response.new(read_fixture('people.findByUsername'))
|
35
35
|
response.error.should be(nil)
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
should "have an error if there is an error in the response" do
|
39
39
|
response_xml = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<rsp stat=\"fail\">\n\t<err code=\"1\" msg=\"User not found\" />\n</rsp>\n"
|
40
40
|
response = Response.new(response_xml)
|
41
|
-
|
41
|
+
|
42
42
|
response.error.code.should == '1'
|
43
43
|
response.error.message.should == 'User not found'
|
44
44
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.
|
1
|
+
require File.expand_path('../../../../test_helper', __FILE__)
|
2
2
|
|
3
3
|
module Fleakr::Api
|
4
4
|
class UploadRequestTest < Test::Unit::TestCase
|
@@ -7,32 +7,32 @@ module Fleakr::Api
|
|
7
7
|
|
8
8
|
should "have a collection of upload_options" do
|
9
9
|
request = UploadRequest.new('foo', :create, {:title => 'foo', :tags => %w(a b)})
|
10
|
-
|
10
|
+
|
11
11
|
option_1, option_2 = [stub(:to_hash => {:one => 'value_1'}), stub(:to_hash => {:two => 'value_2'})]
|
12
|
-
|
12
|
+
|
13
13
|
Option.expects(:for).with(:title, 'foo').returns(option_1)
|
14
14
|
Option.expects(:for).with(:tags, %w(a b)).returns(option_2)
|
15
|
-
|
15
|
+
|
16
16
|
request.upload_options.should == {:one => 'value_1', :two => 'value_2'}
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
should "create a file parameter on initialization" do
|
20
20
|
filename = '/path/to/image.jpg'
|
21
|
-
|
21
|
+
|
22
22
|
parameter_list = mock() {|p| p.expects(:add_upload_option).with(:photo, filename) }
|
23
23
|
UploadRequest.any_instance.stubs(:parameters).with().returns(parameter_list)
|
24
|
-
|
24
|
+
|
25
25
|
UploadRequest.new(filename)
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
should "allow setting options on initialization" do
|
29
29
|
option = stub()
|
30
30
|
option.stubs(:to_hash).with().returns({:title => 'foo'})
|
31
|
-
|
31
|
+
|
32
32
|
Option.expects(:for).with(:title, 'foo').returns(option)
|
33
|
-
|
33
|
+
|
34
34
|
ParameterList.expects(:new).with({:title => 'foo'}).returns(stub(:add_upload_option))
|
35
|
-
|
35
|
+
|
36
36
|
UploadRequest.new('filename', :create, {:title => 'foo'})
|
37
37
|
end
|
38
38
|
|
@@ -44,7 +44,7 @@ module Fleakr::Api
|
|
44
44
|
request = UploadRequest.new('file')
|
45
45
|
request.type.should == :create
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
48
|
should "allow setting the type to :update" do
|
49
49
|
request = UploadRequest.new('file', :update)
|
50
50
|
request.type.should == :update
|
@@ -54,16 +54,16 @@ module Fleakr::Api
|
|
54
54
|
request = UploadRequest.new('filename')
|
55
55
|
request.__send__(:endpoint_uri).should == URI.parse('http://api.flickr.com/services/upload/')
|
56
56
|
end
|
57
|
-
|
57
|
+
|
58
58
|
should "know the endpoint_uri for an :update request" do
|
59
59
|
request = UploadRequest.new('filename', :update)
|
60
60
|
request.__send__(:endpoint_uri).should == URI.parse('http://api.flickr.com/services/replace/')
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
63
|
should "only parse the endpoint URI once" do
|
64
64
|
request = UploadRequest.new('filename')
|
65
65
|
URI.expects(:parse).with(kind_of(String)).once.returns('uri')
|
66
|
-
|
66
|
+
|
67
67
|
2.times { request.__send__(:endpoint_uri) }
|
68
68
|
end
|
69
69
|
|
@@ -83,14 +83,14 @@ module Fleakr::Api
|
|
83
83
|
|
84
84
|
should "be able to send a POST request to the API service" do
|
85
85
|
request = UploadRequest.new('filename')
|
86
|
-
|
86
|
+
|
87
87
|
uri = stub()
|
88
88
|
uri.stubs(:host).with().returns('host')
|
89
89
|
uri.stubs(:path).with().returns('path')
|
90
90
|
uri.stubs(:port).with().returns(80)
|
91
|
-
|
91
|
+
|
92
92
|
request.stubs(:endpoint_uri).with().returns(uri)
|
93
|
-
|
93
|
+
|
94
94
|
request.stubs(:headers).with().returns('header' => 'value')
|
95
95
|
request.parameters.stubs(:to_form).with().returns('form')
|
96
96
|
|
@@ -98,39 +98,39 @@ module Fleakr::Api
|
|
98
98
|
http.expects(:post).with('path', 'form', {'header' => 'value'})
|
99
99
|
|
100
100
|
Net::HTTP.expects(:start).with('host', 80).yields(http).returns(stub(:body))
|
101
|
-
|
101
|
+
|
102
102
|
request.send
|
103
103
|
end
|
104
|
-
|
104
|
+
|
105
105
|
should "get back a response from a POST operation" do
|
106
106
|
response = stub()
|
107
|
-
|
107
|
+
|
108
108
|
Net::HTTP.expects(:start).with(kind_of(String), kind_of(Fixnum)).returns(stub(:body => '<xml>'))
|
109
109
|
Response.expects(:new).with('<xml>').returns(response)
|
110
|
-
|
110
|
+
|
111
111
|
request = UploadRequest.new('filename')
|
112
112
|
request.send.should == response
|
113
113
|
end
|
114
|
-
|
114
|
+
|
115
115
|
should "be able to make a full request and response cycle" do
|
116
116
|
filename = 'filename'
|
117
117
|
response = stub(:error? => false)
|
118
|
-
|
118
|
+
|
119
119
|
UploadRequest.expects(:new).with(filename, :create, {}).returns(stub(:send => response))
|
120
120
|
UploadRequest.with_response!(filename).should == response
|
121
121
|
end
|
122
|
-
|
122
|
+
|
123
123
|
should "raise an exception when the full request / response cycle has errors" do
|
124
124
|
filename = 'filename'
|
125
125
|
response = stub(:error? => true, :error => stub(:code => '1', :message => 'User not found'))
|
126
|
-
|
126
|
+
|
127
127
|
UploadRequest.expects(:new).with(filename, :create, {}).returns(stub(:send => response))
|
128
|
-
|
128
|
+
|
129
129
|
lambda do
|
130
130
|
UploadRequest.with_response!(filename)
|
131
131
|
end.should raise_error(Fleakr::ApiError)
|
132
132
|
end
|
133
|
-
|
133
|
+
|
134
134
|
end
|
135
135
|
|
136
136
|
end
|
@@ -1,41 +1,41 @@
|
|
1
|
-
require File.
|
1
|
+
require File.expand_path('../../../../test_helper', __FILE__)
|
2
2
|
|
3
3
|
module Fleakr::Api
|
4
4
|
class ValueParameterTest < Test::Unit::TestCase
|
5
5
|
|
6
6
|
context "An instance of the ValueParameter class" do
|
7
|
-
|
7
|
+
|
8
8
|
should "have a value" do
|
9
9
|
parameter = ValueParameter.new('foo', 'bar')
|
10
10
|
parameter.value.should == 'bar'
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
should "know how to generate the query representation of itself" do
|
14
14
|
parameter = ValueParameter.new('foo', 'bar')
|
15
15
|
parameter.to_query.should == 'foo=bar'
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
should "escape the value when generating the query representation" do
|
19
19
|
parameter = ValueParameter.new('foo', 'Mr. Crystal?')
|
20
20
|
parameter.to_query.should == 'foo=Mr.+Crystal%3F'
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
should "use an empty string when generating a query if the parameter value is nil" do
|
24
24
|
parameter = ValueParameter.new('foo', nil)
|
25
25
|
parameter.to_query.should == 'foo='
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
should "know how to generate the form representation of itself" do
|
29
29
|
parameter = ValueParameter.new('foo', 'bar')
|
30
|
-
expected =
|
30
|
+
expected =
|
31
31
|
'Content-Disposition: form-data; name="foo"' + "\r\n" +
|
32
32
|
"\r\n" +
|
33
33
|
"bar\r\n"
|
34
|
-
|
34
|
+
|
35
35
|
parameter.to_form.should == expected
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
end
|
41
41
|
end
|
@@ -1,13 +1,13 @@
|
|
1
|
-
require File.
|
1
|
+
require File.expand_path('../../../../test_helper', __FILE__)
|
2
2
|
|
3
3
|
class FalseClassTest < Test::Unit::TestCase
|
4
|
-
|
4
|
+
|
5
5
|
context "An instance of the FalseClass class" do
|
6
|
-
|
6
|
+
|
7
7
|
should "have 0 as its integer value" do
|
8
8
|
false.to_i.should == 0
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
end
|
@@ -1,32 +1,32 @@
|
|
1
|
-
require File.
|
1
|
+
require File.expand_path('../../../../test_helper', __FILE__)
|
2
2
|
|
3
3
|
class HashTest < Test::Unit::TestCase
|
4
|
-
|
4
|
+
|
5
5
|
context "An instance of Hash" do
|
6
6
|
context "when extracting key/value pairs" do
|
7
|
-
|
7
|
+
|
8
8
|
setup do
|
9
9
|
@hash = {:one => 'two', :three => 'four'}
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
should "return a hash with the matching key/value pairs" do
|
13
13
|
@hash.extract!(:one).should == {:one => 'two'}
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
should "return an empty hash if the key isn't found" do
|
17
17
|
@hash.extract!(:foo).should == {}
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
should "alter the original hash when a value is extracted" do
|
21
21
|
@hash.extract!(:one)
|
22
22
|
@hash.should == {:three => 'four'}
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
should "be able to extract multiple keys" do
|
26
26
|
@hash.extract!(:one, :three, :missing).should == {:one => 'two', :three => 'four'}
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
end
|
30
30
|
end
|
31
|
-
|
31
|
+
|
32
32
|
end
|
@@ -1,13 +1,13 @@
|
|
1
|
-
require File.
|
1
|
+
require File.expand_path('../../../../test_helper', __FILE__)
|
2
2
|
|
3
3
|
class TrueClassTest < Test::Unit::TestCase
|
4
|
-
|
4
|
+
|
5
5
|
context "An instance of the TrueClass class" do
|
6
|
-
|
6
|
+
|
7
7
|
should "have 1 as its integer value" do
|
8
8
|
true.to_i.should == 1
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
end
|
@@ -1,70 +1,70 @@
|
|
1
|
-
require File.
|
1
|
+
require File.expand_path('../../../../test_helper', __FILE__)
|
2
2
|
|
3
3
|
module Fleakr::Objects
|
4
4
|
class AuthenticationTokenTest < Test::Unit::TestCase
|
5
|
-
|
5
|
+
|
6
6
|
context "The AuthenticationToken class" do
|
7
|
-
|
7
|
+
|
8
8
|
should "be able to create an instance from a mini_token" do
|
9
9
|
token = '123-123-123'
|
10
10
|
auth_token = stub()
|
11
|
-
|
11
|
+
|
12
12
|
response = mock_request_cycle :for => 'auth.getFullToken', :with => {:mini_token => token, :authenticate? => false}
|
13
|
-
|
13
|
+
|
14
14
|
AuthenticationToken.expects(:new).with(response.body).returns(auth_token)
|
15
|
-
|
15
|
+
|
16
16
|
AuthenticationToken.from_mini_token(token).should == auth_token
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
should "be able to create an instance from an auth_token" do
|
20
20
|
token = 'abc123'
|
21
21
|
auth_token = stub()
|
22
22
|
|
23
23
|
response = mock_request_cycle :for => 'auth.checkToken', :with => {:auth_token => token, :authenticate? => false}
|
24
|
-
|
24
|
+
|
25
25
|
AuthenticationToken.expects(:new).with(response.body).returns(auth_token)
|
26
26
|
AuthenticationToken.from_auth_token(token).should == auth_token
|
27
27
|
end
|
28
|
-
|
29
|
-
|
28
|
+
|
29
|
+
|
30
30
|
should "be able to create an instance from a frob" do
|
31
31
|
frob = '12345678901234567-abcde89012fg3456-7890123'
|
32
32
|
auth_token = stub()
|
33
|
-
|
33
|
+
|
34
34
|
response = mock_request_cycle :for => 'auth.getToken', :with => {:frob => frob, :authenticate? => false}
|
35
|
-
|
35
|
+
|
36
36
|
AuthenticationToken.expects(:new).with(response.body).returns(auth_token)
|
37
37
|
AuthenticationToken.from_frob(frob).should == auth_token
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
end
|
41
|
-
|
41
|
+
|
42
42
|
context "An instance of the AuthenticationToken class" do
|
43
|
-
|
43
|
+
|
44
44
|
should "have an associated user" do
|
45
45
|
token = AuthenticationToken.new
|
46
46
|
token.stubs(:user_id).with().returns('1')
|
47
|
-
|
47
|
+
|
48
48
|
User.expects(:find_by_id).with('1').returns('user')
|
49
|
-
|
49
|
+
|
50
50
|
token.user.should == 'user'
|
51
51
|
end
|
52
|
-
|
52
|
+
|
53
53
|
context "when populating from an XML document" do
|
54
|
-
|
54
|
+
|
55
55
|
setup do
|
56
56
|
@object = AuthenticationToken.new(Hpricot.XML(read_fixture('auth.getFullToken')))
|
57
57
|
end
|
58
|
-
|
58
|
+
|
59
59
|
should_have_a_value_for :value => 'abc-123'
|
60
60
|
should_have_a_value_for :permissions => 'delete'
|
61
61
|
should_have_a_value_for :user_id => '31066442@N69'
|
62
62
|
should_have_a_value_for :full_name => 'Sir Froot Pants'
|
63
63
|
should_have_a_value_for :user_name => 'frootpantz'
|
64
|
-
|
64
|
+
|
65
65
|
end
|
66
|
-
|
66
|
+
|
67
67
|
end
|
68
|
-
|
68
|
+
|
69
69
|
end
|
70
70
|
end
|
@@ -1,23 +1,23 @@
|
|
1
|
-
require File.
|
1
|
+
require File.expand_path('../../../../test_helper', __FILE__)
|
2
2
|
|
3
3
|
module Fleakr::Objects
|
4
4
|
class CollectionTest < Test::Unit::TestCase
|
5
5
|
|
6
6
|
context "The Collection class" do
|
7
|
-
|
8
|
-
should_find_one :collections, :by => :id, :call => 'collections.getInfo', :path => 'rsp/collection'
|
9
|
-
should_find_all :collections, :by => :user_id, :call => 'collections.getTree', :path => 'rsp/collections/collection'
|
10
|
-
|
7
|
+
|
8
|
+
should_find_one :collections, :by => :id, :call => 'collections.getInfo', :path => 'rsp/collection', :class => Collection
|
9
|
+
should_find_all :collections, :by => :user_id, :call => 'collections.getTree', :path => 'rsp/collections/collection', :class => Collection
|
10
|
+
|
11
11
|
end
|
12
12
|
|
13
13
|
context "An instance of the Collection class" do
|
14
|
-
|
14
|
+
|
15
15
|
context "when populating from a call to collections.getInfo" do
|
16
16
|
setup do
|
17
17
|
document = Hpricot.XML(read_fixture('collections.getInfo')).at('rsp/collection')
|
18
18
|
@object = Collection.new(document)
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
21
|
should_have_a_value_for :id => '34762917-72157619347181335'
|
22
22
|
should_have_a_value_for :title => 'Work'
|
23
23
|
should_have_a_value_for :description => 'Sample Collection'
|
@@ -26,46 +26,46 @@ module Fleakr::Objects
|
|
26
26
|
should_have_a_value_for :created => '1244460707'
|
27
27
|
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
context "when populating from a call to collections.getTree" do
|
31
31
|
setup do
|
32
32
|
document = Hpricot.XML(read_fixture('collections.getTree')).at('rsp/collections/collection')
|
33
33
|
@object = Collection.new(document)
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
should_have_a_value_for :id => '123-456'
|
37
37
|
should_have_a_value_for :title => 'Top-Level Collection 1'
|
38
38
|
should_have_a_value_for :description => 'Description 1'
|
39
39
|
should_have_a_value_for :large_icon_url => 'http://farm4.static.flickr.com/3573/cols/72157617429277370_1691956f71_l.jpg'
|
40
40
|
should_have_a_value_for :small_icon_url => 'http://farm4.static.flickr.com/3573/cols/72157617429277370_1691956f71_s.jpg'
|
41
|
-
|
41
|
+
|
42
42
|
end
|
43
|
-
|
43
|
+
|
44
44
|
context "that contains collections" do
|
45
45
|
setup do
|
46
46
|
document = Hpricot.XML(read_fixture('collections.getTree')).at('rsp/collections/collection')
|
47
47
|
@collection = Collection.new(document)
|
48
48
|
end
|
49
|
-
|
49
|
+
|
50
50
|
should "have a set of collections" do
|
51
51
|
collection_titles = @collection.collections.map {|c| c.title }
|
52
52
|
collection_titles.should == ['Second-Level Collection 1']
|
53
53
|
end
|
54
|
-
|
54
|
+
|
55
55
|
should "not have any associated sets" do
|
56
56
|
@collection.sets.should == []
|
57
57
|
end
|
58
58
|
end
|
59
|
-
|
59
|
+
|
60
60
|
context "that contains sets" do
|
61
61
|
setup do
|
62
62
|
xml = <<-XML
|
63
|
-
<collection id="123-102" title="Top-Level Collection 2" description="Description 5" iconlarge="http://farm4.static.flickr.com/3573/cols/72157617429277370_1691956f71_l.jpg" iconsmall="http://farm4.static.flickr.com/3573/cols/72157617429277370_1691956f71_s.jpg">
|
64
|
-
|
65
|
-
|
63
|
+
<collection id="123-102" title="Top-Level Collection 2" description="Description 5" iconlarge="http://farm4.static.flickr.com/3573/cols/72157617429277370_1691956f71_l.jpg" iconsmall="http://farm4.static.flickr.com/3573/cols/72157617429277370_1691956f71_s.jpg">
|
64
|
+
<set id="1238" title="Set 5" description="" />
|
65
|
+
<set id="1239" title="Set 6" description="" />
|
66
66
|
</collection>
|
67
67
|
XML
|
68
|
-
|
68
|
+
|
69
69
|
document = Hpricot.XML(xml).at('collection')
|
70
70
|
@collection = Collection.new(document)
|
71
71
|
end
|
@@ -73,25 +73,25 @@ module Fleakr::Objects
|
|
73
73
|
should "not have any associated collections" do
|
74
74
|
@collection.collections.should == []
|
75
75
|
end
|
76
|
-
|
76
|
+
|
77
77
|
should "have associated sets" do
|
78
78
|
set_titles = @collection.sets.map {|s| s.title }
|
79
79
|
set_titles.should == ['Set 5', 'Set 6']
|
80
80
|
end
|
81
|
-
|
81
|
+
|
82
82
|
end
|
83
|
-
|
83
|
+
|
84
84
|
context "in general" do
|
85
85
|
setup do
|
86
86
|
@collection = Collection.new
|
87
87
|
@time = Time.parse('2008-08-01 00:00:00')
|
88
88
|
end
|
89
|
-
|
89
|
+
|
90
90
|
should "have a value for :created_at" do
|
91
91
|
@collection.expects(:created).with().returns("#{@time.to_i}")
|
92
92
|
@collection.created_at.to_s.should == @time.to_s
|
93
93
|
end
|
94
|
-
|
94
|
+
|
95
95
|
end
|
96
96
|
end
|
97
97
|
|