Add some basic tests for nodes.
This commit is contained in:
parent
7d6c662296
commit
b13eb8824e
7 changed files with 246 additions and 0 deletions
16
test/fixtures/current_nodes.yml
vendored
Normal file
16
test/fixtures/current_nodes.yml
vendored
Normal 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
18
test/fixtures/nodes.yml
vendored
Normal 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
13
test/fixtures/users.yml
vendored
Normal 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
|
60
test/functional/node_controller_test.rb
Normal file
60
test/functional/node_controller_test.rb
Normal 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
28
test/test_helper.rb
Normal 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
101
test/unit/node_test.rb
Normal 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
10
test/unit/user_test.rb
Normal 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
|
Loading…
Add table
Add a link
Reference in a new issue