mls 0.2.2 → 0.2.3

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.
Files changed (57) hide show
  1. data/.gitignore +1 -0
  2. data/README.rdoc +54 -0
  3. data/Rakefile +20 -2
  4. data/lib/mls.rb +307 -78
  5. data/lib/mls/errors.rb +13 -4
  6. data/lib/mls/model.rb +36 -5
  7. data/lib/mls/models/account.rb +74 -66
  8. data/lib/mls/models/address.rb +87 -6
  9. data/lib/mls/models/area.rb +27 -0
  10. data/lib/mls/models/flyer.rb +41 -0
  11. data/lib/mls/models/listing.rb +180 -34
  12. data/lib/mls/models/photo.rb +25 -3
  13. data/lib/mls/models/tour_request.rb +18 -31
  14. data/lib/mls/parser.rb +5 -4
  15. data/lib/mls/properties/datetime.rb +5 -1
  16. data/lib/mls/properties/decimal.rb +3 -1
  17. data/lib/mls/properties/hash.rb +7 -0
  18. data/lib/mls/resource.rb +35 -5
  19. data/lib/rdoc/generator/template/42floors/_context.rhtml +209 -0
  20. data/lib/rdoc/generator/template/42floors/_head.rhtml +7 -0
  21. data/lib/rdoc/generator/template/42floors/class.rhtml +39 -0
  22. data/lib/rdoc/generator/template/42floors/file.rhtml +35 -0
  23. data/lib/rdoc/generator/template/42floors/index.rhtml +13 -0
  24. data/lib/rdoc/generator/template/42floors/resources/apple-touch-icon.png +0 -0
  25. data/lib/rdoc/generator/template/42floors/resources/css/github.css +129 -0
  26. data/lib/rdoc/generator/template/42floors/resources/css/main.css +339 -0
  27. data/lib/rdoc/generator/template/42floors/resources/css/panel.css +389 -0
  28. data/lib/rdoc/generator/template/42floors/resources/css/reset.css +48 -0
  29. data/lib/rdoc/generator/template/42floors/resources/favicon.ico +0 -0
  30. data/lib/rdoc/generator/template/42floors/resources/i/arrows.png +0 -0
  31. data/lib/rdoc/generator/template/42floors/resources/i/results_bg.png +0 -0
  32. data/lib/rdoc/generator/template/42floors/resources/i/tree_bg.png +0 -0
  33. data/lib/rdoc/generator/template/42floors/resources/js/highlight.pack.js +1 -0
  34. data/lib/rdoc/generator/template/42floors/resources/js/jquery-1.3.2.min.js +19 -0
  35. data/lib/rdoc/generator/template/42floors/resources/js/jquery-effect.js +593 -0
  36. data/lib/rdoc/generator/template/42floors/resources/js/main.js +20 -0
  37. data/lib/rdoc/generator/template/42floors/resources/js/searchdoc.js +442 -0
  38. data/lib/rdoc/generator/template/42floors/resources/panel/index.html +73 -0
  39. data/lib/rdoc/generator/template/42floors/se_index.rhtml +8 -0
  40. data/mls.gemspec +7 -4
  41. data/test/factories/account.rb +18 -0
  42. data/test/factories/address.rb +15 -0
  43. data/test/factories/listing.rb +30 -0
  44. data/test/factories/tour_request.rb +9 -0
  45. data/test/fixtures/flyer.pdf +68 -0
  46. data/test/test_helper.rb +44 -5
  47. data/test/units/models/test_account.rb +20 -43
  48. data/test/units/models/test_flyer.rb +22 -0
  49. data/test/units/models/test_listing.rb +119 -0
  50. data/test/units/models/test_photo.rb +136 -3
  51. data/test/units/models/test_tour_request.rb +25 -20
  52. data/test/units/test_errors.rb +12 -4
  53. data/test/units/test_mls.rb +263 -3
  54. data/test/units/test_resource.rb +1 -0
  55. metadata +78 -57
  56. data/lib/mls/models/user.rb +0 -7
  57. data/lib/mls/version.rb +0 -3
@@ -2,10 +2,143 @@ require 'test_helper'
2
2
 
3
3
  class TestPhoto < ::Test::Unit::TestCase
4
4
 
5
- def test_instance_methods
6
- photo = MLS::Photo.new({})
7
5
 
8
- assert photo.respond_to?(:url)
6
+ def test_create_photo
7
+ photo = MLS::Photo.create(TEST_IMAGE)
8
+ assert photo.id
9
+ assert photo.digest
9
10
  end
10
11
 
11
12
  end
13
+
14
+ TEST_IMAGE = StringIO.new(Base64.decode64(<<PHOTO))
15
+ /9j/4AAQSkZJRgABAQEASABIAAD/4gxYSUNDX1BST0ZJTEUAAQEAAAxITGlu
16
+ bwIQAABtbnRyUkdCIFhZWiAHzgACAAkABgAxAABhY3NwTVNGVAAAAABJRUMg
17
+ c1JHQgAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLUhQICAAAAAAAAAAAAAAAAAA
18
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFjcHJ0AAABUAAA
19
+ ADNkZXNjAAABhAAAAGx3dHB0AAAB8AAAABRia3B0AAACBAAAABRyWFlaAAAC
20
+ GAAAABRnWFlaAAACLAAAABRiWFlaAAACQAAAABRkbW5kAAACVAAAAHBkbWRk
21
+ AAACxAAAAIh2dWVkAAADTAAAAIZ2aWV3AAAD1AAAACRsdW1pAAAD+AAAABRt
22
+ ZWFzAAAEDAAAACR0ZWNoAAAEMAAAAAxyVFJDAAAEPAAACAxnVFJDAAAEPAAA
23
+ CAxiVFJDAAAEPAAACAx0ZXh0AAAAAENvcHlyaWdodCAoYykgMTk5OCBIZXds
24
+ ZXR0LVBhY2thcmQgQ29tcGFueQAAZGVzYwAAAAAAAAASc1JHQiBJRUM2MTk2
25
+ Ni0yLjEAAAAAAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAA
26
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWFlaIAAA
27
+ AAAAAPNRAAEAAAABFsxYWVogAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABv
28
+ ogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+E
29
+ AAC2z2Rlc2MAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAA
30
+ AAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAAAAAAAAAAAAA
31
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAAC5JRUMgNjE5
32
+ NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0IAAAAAAAAA
33
+ AAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAt
34
+ IHNSR0IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAsUmVmZXJl
35
+ bmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAA
36
+ AAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBpbiBJRUM2MTk2Ni0y
37
+ LjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZpZXcAAAAAABOk/gAUXy4A
38
+ EM8UAAPtzAAEEwsAA1yeAAAAAVhZWiAAAAAAAEwJVgBQAAAAVx/nbWVhcwAA
39
+ AAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAo8AAAACc2lnIAAAAABDUlQgY3Vy
40
+ dgAAAAAAAAQAAAAABQAKAA8AFAAZAB4AIwAoAC0AMgA3ADsAQABFAEoATwBU
41
+ AFkAXgBjAGgAbQByAHcAfACBAIYAiwCQAJUAmgCfAKQAqQCuALIAtwC8AMEA
42
+ xgDLANAA1QDbAOAA5QDrAPAA9gD7AQEBBwENARMBGQEfASUBKwEyATgBPgFF
43
+ AUwBUgFZAWABZwFuAXUBfAGDAYsBkgGaAaEBqQGxAbkBwQHJAdEB2QHhAekB
44
+ 8gH6AgMCDAIUAh0CJgIvAjgCQQJLAlQCXQJnAnECegKEAo4CmAKiAqwCtgLB
45
+ AssC1QLgAusC9QMAAwsDFgMhAy0DOANDA08DWgNmA3IDfgOKA5YDogOuA7oD
46
+ xwPTA+AD7AP5BAYEEwQgBC0EOwRIBFUEYwRxBH4EjASaBKgEtgTEBNME4QTw
47
+ BP4FDQUcBSsFOgVJBVgFZwV3BYYFlgWmBbUFxQXVBeUF9gYGBhYGJwY3BkgG
48
+ WQZqBnsGjAadBq8GwAbRBuMG9QcHBxkHKwc9B08HYQd0B4YHmQesB78H0gfl
49
+ B/gICwgfCDIIRghaCG4IggiWCKoIvgjSCOcI+wkQCSUJOglPCWQJeQmPCaQJ
50
+ ugnPCeUJ+woRCicKPQpUCmoKgQqYCq4KxQrcCvMLCwsiCzkLUQtpC4ALmAuw
51
+ C8gL4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMNDQ0mDUANWg10DY4NqQ3DDd4N
52
+ +A4TDi4OSQ5kDn8Omw62DtIO7g8JDyUPQQ9eD3oPlg+zD88P7BAJECYQQxBh
53
+ EH4QmxC5ENcQ9RETETERTxFtEYwRqhHJEegSBxImEkUSZBKEEqMSwxLjEwMT
54
+ IxNDE2MTgxOkE8UT5RQGFCcUSRRqFIsUrRTOFPAVEhU0FVYVeBWbFb0V4BYD
55
+ FiYWSRZsFo8WshbWFvoXHRdBF2UXiReuF9IX9xgbGEAYZRiKGK8Y1Rj6GSAZ
56
+ RRlrGZEZtxndGgQaKhpRGncanhrFGuwbFBs7G2MbihuyG9ocAhwqHFIcexyj
57
+ HMwc9R0eHUcdcB2ZHcMd7B4WHkAeah6UHr4e6R8THz4faR+UH78f6iAVIEEg
58
+ bCCYIMQg8CEcIUghdSGhIc4h+yInIlUigiKvIt0jCiM4I2YjlCPCI/AkHyRN
59
+ JHwkqyTaJQklOCVoJZclxyX3JicmVyaHJrcm6CcYJ0kneierJ9woDSg/KHEo
60
+ oijUKQYpOClrKZ0p0CoCKjUqaCqbKs8rAis2K2krnSvRLAUsOSxuLKIs1y0M
61
+ LUEtdi2rLeEuFi5MLoIuty7uLyQvWi+RL8cv/jA1MGwwpDDbMRIxSjGCMbox
62
+ 8jIqMmMymzLUMw0zRjN/M7gz8TQrNGU0njTYNRM1TTWHNcI1/TY3NnI2rjbp
63
+ NyQ3YDecN9c4FDhQOIw4yDkFOUI5fzm8Ofk6Njp0OrI67zstO2s7qjvoPCc8
64
+ ZTykPOM9Ij1hPaE94D4gPmA+oD7gPyE/YT+iP+JAI0BkQKZA50EpQWpBrEHu
65
+ QjBCckK1QvdDOkN9Q8BEA0RHRIpEzkUSRVVFmkXeRiJGZ0arRvBHNUd7R8BI
66
+ BUhLSJFI10kdSWNJqUnwSjdKfUrESwxLU0uaS+JMKkxyTLpNAk1KTZNN3E4l
67
+ Tm5Ot08AT0lPk0/dUCdQcVC7UQZRUFGbUeZSMVJ8UsdTE1NfU6pT9lRCVI9U
68
+ 21UoVXVVwlYPVlxWqVb3V0RXklfgWC9YfVjLWRpZaVm4WgdaVlqmWvVbRVuV
69
+ W+VcNVyGXNZdJ114XcleGl5sXr1fD19hX7NgBWBXYKpg/GFPYaJh9WJJYpxi
70
+ 8GNDY5dj62RAZJRk6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg/aJZo7GlDaZpp8WpI
71
+ ap9q92tPa6dr/2xXbK9tCG1gbbluEm5rbsRvHm94b9FwK3CGcOBxOnGVcfBy
72
+ S3KmcwFzXXO4dBR0cHTMdSh1hXXhdj52m3b4d1Z3s3gReG54zHkqeYl553pG
73
+ eqV7BHtje8J8IXyBfOF9QX2hfgF+Yn7CfyN/hH/lgEeAqIEKgWuBzYIwgpKC
74
+ 9INXg7qEHYSAhOOFR4Wrhg6GcobXhzuHn4gEiGmIzokziZmJ/opkisqLMIuW
75
+ i/yMY4zKjTGNmI3/jmaOzo82j56QBpBukNaRP5GokhGSepLjk02TtpQglIqU
76
+ 9JVflcmWNJaflwqXdZfgmEyYuJkkmZCZ/JpomtWbQpuvnByciZz3nWSd0p5A
77
+ nq6fHZ+Ln/qgaaDYoUehtqImopajBqN2o+akVqTHpTilqaYapoum/adup+Co
78
+ UqjEqTepqaocqo+rAqt1q+msXKzQrUStuK4trqGvFq+LsACwdbDqsWCx1rJL
79
+ ssKzOLOutCW0nLUTtYq2AbZ5tvC3aLfguFm40blKucK6O7q1uy67p7whvJu9
80
+ Fb2Pvgq+hL7/v3q/9cBwwOzBZ8Hjwl/C28NYw9TEUcTOxUvFyMZGxsPHQce/
81
+ yD3IvMk6ybnKOMq3yzbLtsw1zLXNNc21zjbOts83z7jQOdC60TzRvtI/0sHT
82
+ RNPG1EnUy9VO1dHWVdbY11zX4Nhk2OjZbNnx2nba+9uA3AXcit0Q3ZbeHN6i
83
+ 3ynfr+A24L3hROHM4lPi2+Nj4+vkc+T85YTmDeaW5x/nqegy6LzpRunQ6lvq
84
+ 5etw6/vshu0R7ZzuKO6070DvzPBY8OXxcvH/8ozzGfOn9DT0wvVQ9d72bfb7
85
+ 94r4Gfio+Tj5x/pX+uf7d/wH/Jj9Kf26/kv+3P9t////4QE6RXhpZgAATU0A
86
+ KgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEo
87
+ AAMAAAABAAIAAAExAAIAAAARAAAAcgEyAAIAAAAUAAAAhIdpAAQAAAABAAAA
88
+ mAAAAAAAAABIAAAAAQAAAEgAAAABUGl4ZWxtYXRvciAyLjAuMQAAMjAxMjow
89
+ ODowNyAxMTowODo4NQAACZAAAAcAAAAEMDIyMZADAAIAAAAUAAABCpAEAAIA
90
+ AAAUAAABHpEBAAcAAAAEAAAAAKAAAAcAAAAEMDEwMKABAAMAAAABAAEAAKAC
91
+ AAQAAAABAAAAZKADAAQAAAABAAAAhqQGAAMAAAABAAAAAAAAAAAyMDEyOjA0
92
+ OjI4IDE1OjI0OjEzADIwMTI6MDQ6MjggMTU6MjQ6MTMA/+EBeGh0dHA6Ly9u
93
+ cy5hZG9iZS5jb20veGFwLzEuMC8APHg6eG1wbWV0YSB4bWxuczp4PSJhZG9i
94
+ ZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAiPgogICA8cmRm
95
+ OlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjIt
96
+ cmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjph
97
+ Ym91dD0iIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3Jn
98
+ L2RjL2VsZW1lbnRzLzEuMS8iPgogICAgICAgICA8ZGM6c3ViamVjdD4KICAg
99
+ ICAgICAgICAgPHJkZjpCYWcvPgogICAgICAgICA8L2RjOnN1YmplY3Q+CiAg
100
+ ICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBt
101
+ ZXRhPgoA/9sAQwAgFhgcGBQgHBocJCIgJjBQNDAsLDBiRko6UHRmenhyZnBu
102
+ gJC4nICIropucKDaoq6+xM7Qznya4vLgyPC4ys7G/9sAQwEiJCQwKjBeNDRe
103
+ xoRwhMbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbG
104
+ xsbGxsbGxsbG/8AAEQgAhgBkAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAA
105
+ AAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUS
106
+ ITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2
107
+ Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqS
108
+ k5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh
109
+ 4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgME
110
+ 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
143
+ opALmjNFFAwzRRRQB//Z
144
+ PHOTO
@@ -2,25 +2,30 @@ require 'test_helper'
2
2
 
3
3
  class TestTourRequest < ::Test::Unit::TestCase
4
4
 
5
- def test_properties
6
- tr = MLS::TourRequest.new
7
-
8
- assert tr.respond_to?(:message)
5
+ # def test_properties
6
+ # tr = MLS::TourRequest.new
7
+ #
8
+ # assert tr.respond_to?(:message)
9
+ # end
10
+ #
11
+ # def test_attr_accessors
12
+ # tr = MLS::TourRequest.new
13
+ #
14
+ # assert tr.respond_to?(:listing)
15
+ # end
16
+ #
17
+ # def test_class_methods
18
+ # assert MLS::TourRequest.respond_to?(:get_all_for_account)
19
+ # assert MLS::TourRequest.respond_to?(:create)
20
+ # end
21
+ #
22
+ # def test_parser
23
+ # assert defined?(MLS::TourRequest::Parser)
24
+ # end
25
+
26
+ test 'it' do
27
+ @account = FactoryGirl.create(:account)
28
+ @listing = FactoryGirl.create(:listing)
9
29
  end
10
-
11
- def test_attr_accessors
12
- tr = MLS::TourRequest.new
13
-
14
- assert tr.respond_to?(:listing)
15
- end
16
-
17
- def test_class_methods
18
- assert MLS::TourRequest.respond_to?(:get_all_for_account)
19
- assert MLS::TourRequest.respond_to?(:create)
20
- end
21
-
22
- def test_parser
23
- assert defined?(MLS::TourRequest::Parser)
24
- end
25
-
30
+
26
31
  end
@@ -7,18 +7,26 @@ class TestErrors < ::Test::Unit::TestCase
7
7
  end
8
8
 
9
9
  def test_bad_request
10
- assert defined?(MLS::BadRequest)
10
+ assert defined?(MLS::Exception::BadRequest)
11
11
  end
12
12
 
13
13
  def test_unauthorized
14
- assert defined?(MLS::Unauthorized)
14
+ assert defined?(MLS::Exception::Unauthorized)
15
15
  end
16
16
 
17
17
  def test_not_found
18
- assert defined?(MLS::NotFound)
18
+ assert defined?(MLS::Exception::NotFound)
19
19
  end
20
20
 
21
21
  def test_api_version_unsupported
22
- assert defined?(MLS::ApiVersionUnsupported)
22
+ assert defined?(MLS::Exception::ApiVersionUnsupported)
23
+ end
24
+
25
+ def test_record_invalide
26
+ assert defined?(MLS::Exception::RecordInvalid)
27
+ end
28
+
29
+ def test_service_unavailable
30
+ assert defined?(MLS::Exception::ServiceUnavailable)
23
31
  end
24
32
  end
@@ -27,8 +27,268 @@ class TestMLS < ::Test::Unit::TestCase
27
27
  assert mls.respond_to?(:auth_ping)
28
28
  assert mls.respond_to?(:default_logger)
29
29
  end
30
+
31
+ # MLS.get =================================================================
32
+
33
+ test '#get' do
34
+ FakeWeb.register_uri(:get, "#{MLS_HOST}/test", :body => 'get')
35
+ response = MLS.get('/test')
36
+ assert_equal 'get', response.body
37
+ end
38
+
39
+ test '#get with params' do
40
+ FakeWeb.register_uri(:get, "#{MLS_HOST}/test?key=value", :body => 'get')
41
+ response = MLS.get('/test', :key => 'value')
42
+
43
+ assert_equal '/api/test?key=value', FakeWeb.last_request.path
44
+ end
45
+
46
+ test '#get to 404 raises MLS::Exception::NotFound' do
47
+ FakeWeb.register_uri(:get, "#{MLS_HOST}/test", :body => 'get', :status => ['404', ''])
48
+
49
+ assert_raises(MLS::Exception::NotFound) { MLS.get('/test') }
50
+ end
51
+
52
+ test '#get to 404 doesnt raise NotFound if in valid_response_codes' do
53
+ assert_nothing_raised {
54
+ FakeWeb.register_uri(:get, "#{MLS_HOST}/test", :body => 'get', :status => ['404', ''])
55
+ MLS.get('/test', nil, 404)
56
+
57
+ FakeWeb.register_uri(:get, "#{MLS_HOST}/test", :body => 'get', :status => ['404', ''])
58
+ MLS.get('/test', nil, 400..499)
59
+
60
+ FakeWeb.register_uri(:get, "#{MLS_HOST}/test", :body => 'get', :status => ['404', ''])
61
+ MLS.get('/test', nil, 300..399, 404)
62
+
63
+ FakeWeb.register_uri(:get, "#{MLS_HOST}/test", :body => 'get', :status => ['404', ''])
64
+ MLS.get('/test', nil, 404, 300..399)
65
+
66
+ FakeWeb.register_uri(:get, "#{MLS_HOST}/test", :body => 'get', :status => ['404', ''])
67
+ MLS.get('/test', nil, [300..399, 404])
68
+ }
69
+ end
70
+
71
+ test '#get with block' do
72
+ FakeWeb.register_uri(:get, "#{MLS_HOST}/test", :body => 'get')
73
+ MLS.get('/test') do |response|
74
+ assert_equal 'get', response.body
75
+ end
76
+
77
+ # make sure block is not called when not in valid_response_codes
78
+ FakeWeb.register_uri(:get, "#{MLS_HOST}/test", :body => 'get', :status => ['401', ''])
79
+ assert_raises(MLS::Exception::Unauthorized) {
80
+ MLS.get('/test') do |response|
81
+ raise MLS::Exception, 'Should not get here'
82
+ end
83
+ }
84
+ end
85
+
86
+ # MLS.put =================================================================
87
+
88
+ test '#put' do
89
+ FakeWeb.register_uri(:put, "#{MLS_HOST}/test", :body => 'put')
90
+ response = MLS.put('/test')
91
+ assert_equal 'put', response.body
92
+ end
93
+
94
+ test '#put with a body' do
95
+ FakeWeb.register_uri(:put, "#{MLS_HOST}/test", :body => 'put')
96
+ response = MLS.put('/test', :key => 'value')
97
+
98
+ assert_equal '{"key":"value"}', FakeWeb.last_request.body
99
+ end
100
+
101
+ test '#put to 404 raises MLS::Exception::NotFound' do
102
+ FakeWeb.register_uri(:put, "#{MLS_HOST}/test", :body => 'put', :status => ['404', ''])
103
+
104
+ assert_raises(MLS::Exception::NotFound) { MLS.put('/test') }
105
+ end
106
+
107
+ test '#put to 404 doesnt raise NotFound if in valid_response_codes' do
108
+ assert_nothing_raised {
109
+ FakeWeb.register_uri(:put, "#{MLS_HOST}/test", :body => 'put', :status => ['404', ''])
110
+ MLS.put('/test', nil, 404)
111
+
112
+ FakeWeb.register_uri(:put, "#{MLS_HOST}/test", :body => 'put', :status => ['404', ''])
113
+ MLS.put('/test', nil, 400..499)
114
+
115
+ FakeWeb.register_uri(:put, "#{MLS_HOST}/test", :body => 'put', :status => ['404', ''])
116
+ MLS.put('/test', nil, 300..399, 404)
117
+
118
+ FakeWeb.register_uri(:put, "#{MLS_HOST}/test", :body => 'put', :status => ['404', ''])
119
+ MLS.put('/test', nil, 404, 300..399)
120
+
121
+ FakeWeb.register_uri(:put, "#{MLS_HOST}/test", :body => 'put', :status => ['404', ''])
122
+ MLS.put('/test', nil, [300..399, 404])
123
+ }
124
+ end
125
+
126
+ test '#put with block' do
127
+ FakeWeb.register_uri(:put, "#{MLS_HOST}/test", :body => 'put')
128
+ MLS.put('/test') do |response|
129
+ assert_equal 'put', response.body
130
+ end
131
+
132
+ # make sure block is not called when not in valid_response_codes
133
+ FakeWeb.register_uri(:put, "#{MLS_HOST}/test", :body => 'put', :status => ['401', ''])
134
+ assert_raises(MLS::Exception::Unauthorized) {
135
+ MLS.put('/test') do |response|
136
+ raise MLS::Exception, 'Should not get here'
137
+ end
138
+ }
139
+ end
140
+
141
+ # MLS.post =================================================================
142
+
143
+ test '#post' do
144
+ FakeWeb.register_uri(:post, "#{MLS_HOST}/test", :body => 'post')
145
+ response = MLS.post('/test')
146
+ assert_equal 'post', response.body
147
+ end
148
+
149
+ test '#post with a body' do
150
+ FakeWeb.register_uri(:post, "#{MLS_HOST}/test", :body => 'post')
151
+ response = MLS.post('/test', :key => 'value')
152
+
153
+ assert_equal '{"key":"value"}', FakeWeb.last_request.body
154
+ end
155
+
156
+ test '#post to 404 raises MLS::Exception::NotFound' do
157
+ FakeWeb.register_uri(:post, "#{MLS_HOST}/test", :body => 'post', :status => ['404', ''])
158
+
159
+ assert_raises(MLS::Exception::NotFound) { MLS.post('/test') }
160
+ end
161
+
162
+ test '#post to 404 doesnt raise NotFound if in valid_response_codes' do
163
+ assert_nothing_raised {
164
+ FakeWeb.register_uri(:post, "#{MLS_HOST}/test", :body => 'post', :status => ['404', ''])
165
+ MLS.post('/test', nil, 404)
166
+
167
+ FakeWeb.register_uri(:post, "#{MLS_HOST}/test", :body => 'post', :status => ['404', ''])
168
+ MLS.post('/test', nil, 400..499)
169
+
170
+ FakeWeb.register_uri(:post, "#{MLS_HOST}/test", :body => 'post', :status => ['404', ''])
171
+ MLS.post('/test', nil, 300..399, 404)
172
+
173
+ FakeWeb.register_uri(:post, "#{MLS_HOST}/test", :body => 'post', :status => ['404', ''])
174
+ MLS.post('/test', nil, 404, 300..399)
175
+
176
+ FakeWeb.register_uri(:post, "#{MLS_HOST}/test", :body => 'post', :status => ['404', ''])
177
+ MLS.post('/test', nil, [300..399, 404])
178
+ }
179
+ end
180
+
181
+ test '#post with block' do
182
+ FakeWeb.register_uri(:post, "#{MLS_HOST}/test", :body => 'post')
183
+ MLS.post('/test') do |response|
184
+ assert_equal 'post', response.body
185
+ end
30
186
 
31
- def test_class_methods
32
- assert MLS.respond_to?(:parse)
187
+ # make sure block is not called when not in valid_response_codes
188
+ FakeWeb.register_uri(:post, "#{MLS_HOST}/test", :body => 'post', :status => ['401', ''])
189
+ assert_raises(MLS::Exception::Unauthorized) {
190
+ MLS.post('/test') do |response|
191
+ raise MLS::Exception, 'Should not get here'
192
+ end
193
+ }
194
+ end
195
+
196
+ # MLS.delete ================================================================
197
+
198
+ test '#delete' do
199
+ FakeWeb.register_uri(:delete, "#{MLS_HOST}/test", :body => 'delete')
200
+ response = MLS.delete('/test')
201
+ assert_equal 'delete', response.body
202
+ end
203
+
204
+ test '#delete with a body' do
205
+ FakeWeb.register_uri(:delete, "#{MLS_HOST}/test", :body => 'delete')
206
+ response = MLS.delete('/test', :key => 'value')
207
+
208
+ assert_equal '{"key":"value"}', FakeWeb.last_request.body
209
+ end
210
+
211
+ test '#delete to 404 raises MLS::Exception::NotFound' do
212
+ FakeWeb.register_uri(:delete, "#{MLS_HOST}/test", :body => 'delete', :status => ['404', ''])
213
+
214
+ assert_raises(MLS::Exception::NotFound) { MLS.delete('/test') }
215
+ end
216
+
217
+ test '#delete to 404 doesnt raise NotFound if in valid_response_codes' do
218
+ assert_nothing_raised {
219
+ FakeWeb.register_uri(:delete, "#{MLS_HOST}/test", :body => 'delete', :status => ['404', ''])
220
+ MLS.delete('/test', nil, 404)
221
+
222
+ FakeWeb.register_uri(:delete, "#{MLS_HOST}/test", :body => 'delete', :status => ['404', ''])
223
+ MLS.delete('/test', nil, 400..499)
224
+
225
+ FakeWeb.register_uri(:delete, "#{MLS_HOST}/test", :body => 'delete', :status => ['404', ''])
226
+ MLS.delete('/test', nil, 300..399, 404)
227
+
228
+ FakeWeb.register_uri(:delete, "#{MLS_HOST}/test", :body => 'delete', :status => ['404', ''])
229
+ MLS.delete('/test', nil, 404, 300..399)
230
+
231
+ FakeWeb.register_uri(:delete, "#{MLS_HOST}/test", :body => 'delete', :status => ['404', ''])
232
+ MLS.delete('/test', nil, [300..399, 404])
233
+ }
234
+ end
235
+
236
+ test '#delete with block' do
237
+ FakeWeb.register_uri(:delete, "#{MLS_HOST}/test", :body => 'delete')
238
+ MLS.delete('/test') do |response|
239
+ assert_equal 'delete', response.body
240
+ end
241
+
242
+ # make sure block is not called when not in valid_response_codes
243
+ FakeWeb.register_uri(:delete, "#{MLS_HOST}/test", :body => 'delete', :status => ['401', ''])
244
+ assert_raises(MLS::Exception::Unauthorized) {
245
+ MLS.delete('/test') do |response|
246
+ raise MLS::Exception, 'Should not get here'
247
+ end
248
+ }
249
+ end
250
+
251
+ # MLS.handle_response ======================================================
252
+
253
+ test 'handle_response raises BadRequest on 400' do
254
+ response = mock_response(:get, 400)
255
+ assert_raises(MLS::Exception::BadRequest) { MLS.handle_response(response) }
256
+ end
257
+
258
+ test 'handle_response raises Unauthorized on 401' do
259
+ response = mock_response(:get, 401)
260
+ assert_raises(MLS::Exception::Unauthorized) { MLS.handle_response(response) }
261
+ end
262
+
263
+ test 'handle_response raises NotFound on 404' do
264
+ response = mock_response(:get, 404)
265
+ assert_raises(MLS::Exception::NotFound) { MLS.handle_response(response) }
266
+ end
267
+
268
+ test 'handle_response raises NotFound on 410' do
269
+ response = mock_response(:get, 410)
270
+ assert_raises(MLS::Exception::NotFound) { MLS.handle_response(response) }
271
+ end
272
+
273
+ test 'handle_response raises ApiVersionUnsupported on 422' do
274
+ response = mock_response(:get, 422)
275
+ assert_raises(MLS::Exception::ApiVersionUnsupported) { MLS.handle_response(response) }
276
+ end
277
+
278
+ test 'handle_response raises ServiceUnavailable on 503' do
279
+ response = mock_response(:get, 503)
280
+ assert_raises(MLS::Exception::ServiceUnavailable) { MLS.handle_response(response) }
281
+ end
282
+
283
+ test 'handle_response raises Exception on 350, 450, & 550' do
284
+ response = mock_response(:get, 350)
285
+ assert_raises(MLS::Exception) { MLS.handle_response(response) }
286
+
287
+ response = mock_response(:get, 450)
288
+ assert_raises(MLS::Exception) { MLS.handle_response(response) }
289
+
290
+ response = mock_response(:get, 550)
291
+ assert_raises(MLS::Exception) { MLS.handle_response(response) }
33
292
  end
34
- end
293
+
294
+ end