base_test.rb 5.1 KB
Newer Older
1 2
require "#{File.dirname(__FILE__)}/abstract_unit"
require "fixtures/person"
3
require "fixtures/street_address"
4 5 6

class BaseTest < Test::Unit::TestCase
  def setup
7 8 9 10 11 12
    @matz  = { :id => 1, :name => 'Matz' }.to_xml(:root => 'person')
    @david = { :id => 2, :name => 'David' }.to_xml(:root => 'person')
    @addy  = { :id => 1, :street => '12345 Street' }.to_xml(:root => 'address')
    ActiveResource::HttpMock.respond_to do |mock|
      mock.get    "/people/1.xml",             @matz
      mock.get    "/people/2.xml",             @david
13 14 15 16
      mock.put    "/people/1.xml",             nil, 204
      mock.delete "/people/1.xml",             nil, 200
      mock.delete "/people/2.xml",             nil, 400
      mock.post   "/people.xml",               nil, 201, 'Location' => '/people/5.xml'
17 18 19 20
      mock.get    "/people/99.xml",            nil, 404
      mock.get    "/people.xml",               "<people>#{@matz}#{@david}</people>"
      mock.get    "/people/1/addresses.xml",   "<addresses>#{@addy}</addresses>"
      mock.get    "/people/1/addresses/1.xml", @addy
21 22 23
      mock.put    "/people/1/addresses/1.xml", nil, 204
      mock.delete "/people/1/addresses/1.xml", nil, 200
      mock.post   "/people/1/addresses.xml",   nil, 201, 'Location' => '/people/1/addresses/5'
24 25
      mock.get    "/people//addresses.xml",    nil, 404
      mock.get    "/people//addresses/1.xml",  nil, 404
26 27 28
      mock.put    "/people//addresses/1.xml",  nil, 404
      mock.delete "/people//addresses/1.xml",  nil, 404
      mock.post   "/people//addresses.xml",    nil, 404
29
    end
30 31
  end

J
Jeremy Kemper 已提交
32 33 34 35 36 37 38 39 40 41 42 43

  def test_site_accessor_accepts_uri_or_string_argument
    site = URI.parse('http://localhost')

    assert_nothing_raised { Person.site = 'http://localhost' }
    assert_equal site, Person.site

    assert_nothing_raised { Person.site = site }
    assert_equal site, Person.site
  end


44 45 46 47
  def test_collection_name
    assert_equal "people", Person.collection_name
  end

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
  def test_collection_path
    assert_equal '/people.xml', Person.collection_path
  end

  def test_custom_element_path
    assert_equal '/people/1/addresses/1.xml', StreetAddress.element_path(1, :person_id => 1)
  end

  def test_custom_collection_path
    assert_equal '/people/1/addresses.xml', StreetAddress.collection_path(:person_id => 1)
  end

  def test_custom_element_name
    assert_equal 'address', StreetAddress.element_name
  end

  def test_custom_collection_name
    assert_equal 'addresses', StreetAddress.collection_name
  end

  def test_prefix
    assert_equal "/", Person.prefix
  end

  def test_custom_prefix
    assert_equal '/people//', StreetAddress.prefix
    assert_equal '/people/1/', StreetAddress.prefix(:person_id => 1)
  end

77 78 79 80 81 82
  def test_find_by_id
    matz = Person.find(1)
    assert_kind_of Person, matz
    assert_equal "Matz", matz.name
  end

83 84 85 86 87 88
  def test_find_by_id_with_custom_prefix
    addy = StreetAddress.find(1, :person_id => 1)
    assert_kind_of StreetAddress, addy
    assert_equal '12345 Street', addy.street
  end

89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
  def test_find_all
    all = Person.find(:all)
    assert_equal 2, all.size
    assert_kind_of Person, all.first
    assert_equal "Matz", all.first.name
    assert_equal "David", all.last.name
  end

  def test_find_first
    matz = Person.find(:first)
    assert_kind_of Person, matz
    assert_equal "Matz", matz.name
  end

  def test_find_by_id_not_found
    assert_raises(ActiveResource::ResourceNotFound) { Person.find(99) }
105 106 107 108 109 110 111 112 113
    assert_raises(ActiveResource::ResourceNotFound) { StreetAddress.find(1) }
  end

  def test_create
    rick = Person.new
    rick.save
    assert_equal '5', rick.id
  end

114 115 116 117 118 119 120 121 122
  def test_id_from_response
    p = Person.new
    resp = {'Location' => '/foo/bar/1'}
    assert_equal '1', p.send(:id_from_response, resp)
    
    resp['Location'] << '.xml'
    assert_equal '1', p.send(:id_from_response, resp)
  end

123 124 125 126
  def test_create_with_custom_prefix
    matzs_house = StreetAddress.new({}, {:person_id => 1})
    matzs_house.save
    assert_equal '5', matzs_house.id
127
  end
128

129 130 131 132 133 134 135
  def test_update
    matz = Person.find(:first)
    matz.name = "David"
    assert_kind_of Person, matz
    assert_equal "David", matz.name
    matz.save
  end
136 137 138 139 140 141 142 143 144

  def test_update_with_custom_prefix
    addy = StreetAddress.find(1, :person_id => 1)
    addy.street = "54321 Street"
    assert_kind_of StreetAddress, addy
    assert_equal "54321 Street", addy.street
    addy.save
  end

145 146 147
  def test_update_conflict
    ActiveResource::HttpMock.respond_to do |mock|
      mock.get "/people/2.xml", @david
148
      mock.put "/people/2.xml", nil, 409
149 150 151 152
    end
    assert_raises(ActiveResource::ResourceConflict) { Person.find(2).save }
  end

153 154
  def test_destroy
    assert Person.find(1).destroy
155 156 157 158 159 160 161 162 163 164 165 166
    ActiveResource::HttpMock.respond_to do |mock|
      mock.get "/people/1.xml", nil, 404
    end
    assert_raises(ActiveResource::ResourceNotFound) { Person.find(1).destroy }
  end

  def test_destroy_with_custom_prefix
    assert StreetAddress.find(1, :person_id => 1).destroy
    ActiveResource::HttpMock.respond_to do |mock|
      mock.get "/people/1/addresses/1.xml", nil, 404
    end
    assert_raises(ActiveResource::ResourceNotFound) { StreetAddress.find(1, :person_id => 1).destroy }
167
  end
J
Jeremy Kemper 已提交
168
end