Add some basic tests for nodes.

This commit is contained in:
Tom Hughes 2007-07-24 22:58:16 +00:00
parent 7d6c662296
commit b13eb8824e
7 changed files with 246 additions and 0 deletions

16
test/fixtures/current_nodes.yml vendored Normal file
View file

@ -0,0 +1,16 @@
# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
visible_node:
id: 1
latitude: 1
longitude: 1
user_id: 1
visible: 1
timestamp: 2007-01-01 00:00:00
invisible_node:
id: 2
latitude: 1
longitude: 1
user_id: 1
visible: 0
timestamp: 2007-01-01 00:00:00

18
test/fixtures/nodes.yml vendored Normal file
View file

@ -0,0 +1,18 @@
# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
visible_node:
id: 1
latitude: 1
longitude: 1
user_id: 1
visible: 1
tags: test=yes
timestamp: 2007-01-01 00:00:00
invisible_node:
id: 2
latitude: 1
longitude: 1
user_id: 1
visible: 0
tags: test=yes
timestamp: 2007-01-01 00:00:00

13
test/fixtures/users.yml vendored Normal file
View file

@ -0,0 +1,13 @@
# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
normal_user:
email: test@openstreetmap.org
id: 1
active: 1
pass_crypt: <%= Digest::MD5.hexdigest('test') %>
creation_time: "2007-01-01 00:00:00"
display_name: test
data_public: 0
description: test
home_lat: 1
home_lon: 1
home_zoom: 3

View file

@ -0,0 +1,60 @@
require File.dirname(__FILE__) + '/../test_helper'
require 'node_controller'
# Re-raise errors caught by the controller.
class NodeController; def rescue_action(e) raise e end; end
class NodeControllerTest < Test::Unit::TestCase
fixtures :current_nodes, :nodes, :users
set_fixture_class :current_nodes => :Node
set_fixture_class :nodes => :OldNode
def setup
@controller = NodeController.new
@request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new
end
def test_create
# cannot read password from fixture as it is stored as MD5 digest
basic_authorization("test@openstreetmap.org", "test");
# create a node with random lat/lon
lat = rand(100)-50 + rand
lon = rand(100)-50 + rand
content("<osm><node lat='#{lat}' lon='#{lon}' /></osm>")
put :create
# hope for success
assert_response :success, "node upload did not return success status"
# read id of created node and search for it
nodeid = @response.body
checknode = Node.find(nodeid)
assert_not_nil checknode, "uploaded node not found in data base after upload"
# compare values
assert_in_delta lat, checknode.latitude, 1E-8, "saved node does not match requested latitude"
assert_in_delta lon, checknode.longitude, 1E-8, "saved node does not match requested longitude"
assert_equal users(:normal_user).id, checknode.user_id, "saved node does not belong to user that created it"
assert_equal true, checknode.visible, "saved node is not visible"
end
def test_read
# check that a visible node is returned properly
get :read, :id => current_nodes(:visible_node).id
assert_response :success
# check that an invisible node is not returned
get :read, :id => current_nodes(:invisible_node).id
assert_response :gone
# check chat a non-existent node is not returned
get :read, :id => 0
assert_response :not_found
end
def basic_authorization(user, pass)
@request.env["HTTP_AUTHORIZATION"] = "Basic %s" % Base64.encode64("#{user}:#{pass}")
end
def content(c)
@request.env["RAW_POST_DATA"] = c
end
end

28
test/test_helper.rb Normal file
View file

@ -0,0 +1,28 @@
ENV["RAILS_ENV"] = "test"
require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
require 'test_help'
class Test::Unit::TestCase
# Transactional fixtures accelerate your tests by wrapping each test method
# in a transaction that's rolled back on completion. This ensures that the
# test database remains unchanged so your fixtures don't have to be reloaded
# between every test method. Fewer database queries means faster tests.
#
# Read Mike Clark's excellent walkthrough at
# http://clarkware.com/cgi/blosxom/2005/10/24#Rails10FastTesting
#
# Every Active Record database supports transactions except MyISAM tables
# in MySQL. Turn off transactional fixtures in this case; however, if you
# don't care one way or the other, switching from MyISAM to InnoDB tables
# is recommended.
self.use_transactional_fixtures = false
# Instantiated fixtures are slow, but give you @david where otherwise you
# would need people(:david). If you don't want to migrate your existing
# test cases which use the @david style and don't mind the speed hit (each
# instantiated fixtures translates to a database query per test method),
# then set this back to true.
self.use_instantiated_fixtures = false
# Add more helper methods to be used by all tests here...
end

101
test/unit/node_test.rb Normal file
View file

@ -0,0 +1,101 @@
require File.dirname(__FILE__) + '/../test_helper'
class NodeTest < Test::Unit::TestCase
fixtures :current_nodes, :nodes, :users
set_fixture_class :current_nodes => :Node
set_fixture_class :nodes => :OldNode
def test_create
node_template = Node.new(:latitude => 12.3456,
:longitude => 65.4321,
:user_id => users(:normal_user).id,
:visible => 1,
:tags => "")
assert node_template.save_with_history
node = Node.find(node_template.id)
assert_not_nil node
assert_equal node_template.latitude, node.latitude
assert_equal node_template.longitude, node.longitude
assert_equal node_template.user_id, node.user_id
assert_equal node_template.visible, node.visible
assert_equal node_template.tags, node.tags
assert_equal node_template.timestamp.to_i, node.timestamp.to_i
assert_equal OldNode.find(:all, :conditions => [ "id = ?", node_template.id ]).length, 1
old_node = OldNode.find(:first, :conditions => [ "id = ?", node_template.id ])
assert_not_nil old_node
assert_equal node_template.latitude, old_node.latitude
assert_equal node_template.longitude, old_node.longitude
assert_equal node_template.user_id, old_node.user_id
assert_equal node_template.visible, old_node.visible
assert_equal node_template.tags, old_node.tags
assert_equal node_template.timestamp.to_i, old_node.timestamp.to_i
end
def test_update
node_template = Node.find(1)
assert_not_nil node_template
assert_equal OldNode.find(:all, :conditions => [ "id = ?", node_template.id ]).length, 1
old_node_template = OldNode.find(:first, :conditions => [ "id = ?", node_template.id ])
assert_not_nil old_node_template
node_template.latitude = 12.3456
node_template.longitude = 65.4321
node_template.tags = "updated=yes"
assert node_template.save_with_history
node = Node.find(node_template.id)
assert_not_nil node
assert_equal node_template.latitude, node.latitude
assert_equal node_template.longitude, node.longitude
assert_equal node_template.user_id, node.user_id
assert_equal node_template.visible, node.visible
assert_equal node_template.tags, node.tags
assert_equal node_template.timestamp.to_i, node.timestamp.to_i
assert_equal OldNode.find(:all, :conditions => [ "id = ?", node_template.id ]).length, 2
assert_equal OldNode.find(:all, :conditions => [ "id = ? and timestamp = ?", node_template.id, node_template.timestamp ]).length, 1
old_node = OldNode.find(:first, :conditions => [ "id = ? and timestamp = ?", node_template.id, node_template.timestamp ])
assert_not_nil old_node
assert_equal node_template.latitude, old_node.latitude
assert_equal node_template.longitude, old_node.longitude
assert_equal node_template.user_id, old_node.user_id
assert_equal node_template.visible, old_node.visible
assert_equal node_template.tags, old_node.tags
assert_equal node_template.timestamp.to_i, old_node.timestamp.to_i
end
def test_delete
node_template = Node.find(1)
assert_not_nil node_template
assert_equal OldNode.find(:all, :conditions => [ "id = ?", node_template.id ]).length, 1
old_node_template = OldNode.find(:first, :conditions => [ "id = ?", node_template.id ])
assert_not_nil old_node_template
node_template.visible = 0
assert node_template.save_with_history
node = Node.find(node_template.id)
assert_not_nil node
assert_equal node_template.latitude, node.latitude
assert_equal node_template.longitude, node.longitude
assert_equal node_template.user_id, node.user_id
assert_equal node_template.visible, node.visible
assert_equal node_template.tags, node.tags
assert_equal node_template.timestamp.to_i, node.timestamp.to_i
assert_equal OldNode.find(:all, :conditions => [ "id = ?", node_template.id ]).length, 2
assert_equal OldNode.find(:all, :conditions => [ "id = ? and timestamp = ?", node_template.id, node_template.timestamp ]).length, 1
old_node = OldNode.find(:first, :conditions => [ "id = ? and timestamp = ?", node_template.id, node_template.timestamp ])
assert_not_nil old_node
assert_equal node_template.latitude, old_node.latitude
assert_equal node_template.longitude, old_node.longitude
assert_equal node_template.user_id, old_node.user_id
assert_equal node_template.visible, old_node.visible
assert_equal node_template.tags, old_node.tags
assert_equal node_template.timestamp.to_i, old_node.timestamp.to_i
end
end

10
test/unit/user_test.rb Normal file
View file

@ -0,0 +1,10 @@
require File.dirname(__FILE__) + '/../test_helper'
class UserTest < Test::Unit::TestCase
fixtures :users
# Replace this with your real tests.
def test_truth
assert true
end
end