base_test.rb 4.6 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 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
    @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
      mock.put    "/people/1",                 nil, 204
      mock.delete "/people/1",                 nil, 200
      mock.delete "/people/2",                 nil, 400
      mock.post   "/people",                   nil, 201, 'Location' => '/people/5.xml'
      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
      mock.put    "/people/1/addresses/1",     nil, 204
      mock.delete "/people/1/addresses/1",     nil, 200
      mock.post   "/people/1/addresses",       nil, 201, 'Location' => '/people/1/addresses/5'
      mock.get    "/people//addresses.xml",    nil, 404
      mock.get    "/people//addresses/1.xml",  nil, 404
      mock.put    "/people//addresses/1",      nil, 404
      mock.delete "/people//addresses/1",      nil, 404
      mock.post   "/people//addresses",        nil, 404
    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 114 115 116 117
    assert_raises(ActiveResource::ResourceNotFound) { StreetAddress.find(1) }
  end

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

  def test_create_with_custom_prefix
    matzs_house = StreetAddress.new({}, {:person_id => 1})
    matzs_house.save
    assert_equal '5', matzs_house.id
118
  end
119

120 121 122 123 124 125 126
  def test_update
    matz = Person.find(:first)
    matz.name = "David"
    assert_kind_of Person, matz
    assert_equal "David", matz.name
    matz.save
  end
127 128 129 130 131 132 133 134 135

  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

136 137
  def test_destroy
    assert Person.find(1).destroy
138 139 140 141 142 143 144 145 146 147 148 149
    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 }
150
  end
J
Jeremy Kemper 已提交
151
end