# the request is in pseudo-osm format... this is kind-of an
# abuse, maybe should change to some other format?
- doc = XML::Parser.string(request.raw_post).parse
+ doc = XML::Parser.string(request.raw_post, :options => XML::Parser::Options::NOERROR).parse
doc.find("//osm/node").each do |n|
lon << n["lon"].to_f * GeoRecord::SCALE
lat << n["lat"].to_f * GeoRecord::SCALE
new_preferences = {}
- doc = XML::Parser.string(request.raw_post).parse
+ doc = XML::Parser.string(request.raw_post, :options => XML::Parser::Options::NOERROR).parse
doc.find("//preferences/preference").each do |pt|
if preference = old_preferences.delete(pt["k"])
class Acl < ActiveRecord::Base
+ validates :k, :presence => true
+
def self.match(address, domain = nil)
if domain
Acl.where("address >>= ? OR domain = ?", address, domain)
# Read in xml as text and return it's Node object representation
def self.from_xml(xml, create = false)
- p = XML::Parser.string(xml)
+ p = XML::Parser.string(xml, :options => XML::Parser::Options::NOERROR)
doc = p.parse
doc.find("//osm/node").each do |pt|
TYPES = %w(node way relation).freeze
def self.from_xml(xml, create = false)
- p = XML::Parser.string(xml)
+ p = XML::Parser.string(xml, :options => XML::Parser::Options::NOERROR)
doc = p.parse
doc.find("//osm/relation").each do |pt|
# Read in xml as text and return it's Node object representation
def self.from_xml(xml, create = false)
- p = XML::Parser.string(xml)
+ p = XML::Parser.string(xml, :options => XML::Parser::Options::NOERROR)
doc = p.parse
doc.find("//osm/gpx_file").each do |pt|
# Read in xml as text and return it's Way object representation
def self.from_xml(xml, create = false)
- p = XML::Parser.string(xml)
+ p = XML::Parser.string(xml, :options => XML::Parser::Options::NOERROR)
doc = p.parse
doc.find("//osm/way").each do |pt|
require "test_helper"
class MessageControllerTest < ActionController::TestCase
- fixtures :users, :messages
+ fixtures :users
##
# test all routes which lead to this controller
assert_match /Test message body/, e.text_part.decoded
assert_match /Test message body/, e.html_part.decoded
ActionMailer::Base.deliveries.clear
- m = Message.find(3)
+ m = Message.last
assert_equal users(:normal_user).id, m.from_user_id
assert_equal users(:public_user).id, m.to_user_id
assert_in_delta Time.now, m.sent_on, 2
##
# test the reply action
def test_reply
+ unread_message = create(:message, :unread, :sender => users(:normal_user), :recipient => users(:public_user))
+
# Check that the message reply page requires us to login
- get :reply, :message_id => messages(:unread_message).id
- assert_redirected_to login_path(:referer => reply_message_path(:message_id => messages(:unread_message).id))
+ get :reply, :message_id => unread_message.id
+ assert_redirected_to login_path(:referer => reply_message_path(:message_id => unread_message.id))
# Login as the wrong user
session[:user] = users(:second_public_user).id
# Check that we can't reply to somebody else's message
- get :reply, :message_id => messages(:unread_message).id
- assert_redirected_to login_path(:referer => reply_message_path(:message_id => messages(:unread_message).id))
+ get :reply, :message_id => unread_message.id
+ assert_redirected_to login_path(:referer => reply_message_path(:message_id => unread_message.id))
assert_equal "You are logged in as `pulibc_test2' but the message you have asked to reply to was not sent to that user. Please login as the correct user in order to reply.", flash[:notice]
# Login as the right user
session[:user] = users(:public_user).id
# Check that the message reply page loads
- get :reply, :message_id => messages(:unread_message).id
+ get :reply, :message_id => unread_message.id
assert_response :success
assert_template "new"
- assert_select "title", "OpenStreetMap | Re: test message 1"
+ assert_select "title", "OpenStreetMap | Re: #{unread_message.title}"
assert_select "form[action='#{new_message_path(:display_name => users(:normal_user).display_name)}']", :count => 1 do
- assert_select "input#message_title[value='Re: test message 1']", :count => 1
+ assert_select "input#message_title[value='Re: #{unread_message.title}']", :count => 1
assert_select "textarea#message_body", :count => 1
assert_select "input[type='submit'][value='Send']", :count => 1
end
- assert_equal true, Message.find(messages(:unread_message).id).message_read
+ assert_equal true, Message.find(unread_message.id).message_read
# Asking to reply to a message with no ID should fail
assert_raise ActionController::UrlGenerationError do
##
# test the read action
def test_read
+ unread_message = create(:message, :unread, :sender => users(:normal_user), :recipient => users(:public_user))
+
# Check that the read message page requires us to login
- get :read, :message_id => messages(:unread_message).id
- assert_redirected_to login_path(:referer => read_message_path(:message_id => messages(:unread_message).id))
+ get :read, :message_id => unread_message.id
+ assert_redirected_to login_path(:referer => read_message_path(:message_id => unread_message.id))
# Login as the wrong user
session[:user] = users(:second_public_user).id
# Check that we can't read the message
- get :read, :message_id => messages(:unread_message).id
- assert_redirected_to login_path(:referer => read_message_path(:message_id => messages(:unread_message).id))
+ get :read, :message_id => unread_message.id
+ assert_redirected_to login_path(:referer => read_message_path(:message_id => unread_message.id))
assert_equal "You are logged in as `pulibc_test2' but the message you have asked to read was not sent by or to that user. Please login as the correct user in order to read it.", flash[:notice]
# Login as the message sender
session[:user] = users(:normal_user).id
# Check that the message sender can read the message
- get :read, :message_id => messages(:unread_message).id
+ get :read, :message_id => unread_message.id
assert_response :success
assert_template "read"
- assert_equal false, Message.find(messages(:unread_message).id).message_read
+ assert_equal false, Message.find(unread_message.id).message_read
# Login as the message recipient
session[:user] = users(:public_user).id
# Check that the message recipient can read the message
- get :read, :message_id => messages(:unread_message).id
+ get :read, :message_id => unread_message.id
assert_response :success
assert_template "read"
- assert_equal true, Message.find(messages(:unread_message).id).message_read
+ assert_equal true, Message.find(unread_message.id).message_read
# Asking to read a message with no ID should fail
assert_raise ActionController::UrlGenerationError do
##
# test the inbox action
def test_inbox
+ read_message = create(:message, :read, :recipient => users(:normal_user))
# Check that the inbox page requires us to login
get :inbox, :display_name => users(:normal_user).display_name
assert_redirected_to login_path(:referer => inbox_path(:display_name => users(:normal_user).display_name))
assert_template "inbox"
assert_select "table.messages", :count => 1 do
assert_select "tr", :count => 2
- assert_select "tr#inbox-#{messages(:read_message).id}.inbox-row", :count => 1
+ assert_select "tr#inbox-#{read_message.id}.inbox-row", :count => 1
end
# Check that we can't view somebody else's inbox when logged in
##
# test the outbox action
def test_outbox
+ create(:message, :sender => users(:normal_user))
+
# Check that the outbox page requires us to login
get :outbox, :display_name => users(:normal_user).display_name
assert_redirected_to login_path(:referer => outbox_path(:display_name => users(:normal_user).display_name))
##
# test the mark action
def test_mark
+ unread_message = create(:message, :unread, :sender => users(:normal_user), :recipient => users(:public_user))
+
# Check that the marking a message requires us to login
- post :mark, :message_id => messages(:unread_message).id
+ post :mark, :message_id => unread_message.id
assert_response :forbidden
# Login as a user with no messages
session[:user] = users(:second_public_user).id
# Check that marking a message we didn't send or receive fails
- post :mark, :message_id => messages(:read_message).id
+ post :mark, :message_id => unread_message.id
assert_response :not_found
assert_template "no_such_message"
session[:user] = users(:public_user).id
# Check that the marking a message read works
- post :mark, :message_id => messages(:unread_message).id, :mark => "read"
+ post :mark, :message_id => unread_message.id, :mark => "read"
assert_redirected_to inbox_path(:display_name => users(:public_user).display_name)
- assert_equal true, Message.find(messages(:unread_message).id).message_read
+ assert_equal true, Message.find(unread_message.id).message_read
# Check that the marking a message unread works
- post :mark, :message_id => messages(:unread_message).id, :mark => "unread"
+ post :mark, :message_id => unread_message.id, :mark => "unread"
assert_redirected_to inbox_path(:display_name => users(:public_user).display_name)
- assert_equal false, Message.find(messages(:unread_message).id).message_read
+ assert_equal false, Message.find(unread_message.id).message_read
# Check that the marking a message read via XHR works
- xhr :post, :mark, :message_id => messages(:unread_message).id, :mark => "read"
+ xhr :post, :mark, :message_id => unread_message.id, :mark => "read"
assert_response :success
assert_template "mark"
- assert_equal true, Message.find(messages(:unread_message).id).message_read
+ assert_equal true, Message.find(unread_message.id).message_read
# Check that the marking a message unread via XHR works
- xhr :post, :mark, :message_id => messages(:unread_message).id, :mark => "unread"
+ xhr :post, :mark, :message_id => unread_message.id, :mark => "unread"
assert_response :success
assert_template "mark"
- assert_equal false, Message.find(messages(:unread_message).id).message_read
+ assert_equal false, Message.find(unread_message.id).message_read
# Asking to mark a message with no ID should fail
assert_raise ActionController::UrlGenerationError do
##
# test the delete action
def test_delete
+ read_message = create(:message, :read, :recipient => users(:normal_user), :sender => users(:public_user))
+ sent_message = create(:message, :unread, :recipient => users(:public_user), :sender => users(:normal_user))
+
# Check that the deleting a message requires us to login
- post :delete, :message_id => messages(:read_message).id
+ post :delete, :message_id => read_message.id
assert_response :forbidden
# Login as a user with no messages
session[:user] = users(:second_public_user).id
# Check that deleting a message we didn't send or receive fails
- post :delete, :message_id => messages(:read_message).id
+ post :delete, :message_id => read_message.id
assert_response :not_found
assert_template "no_such_message"
session[:user] = users(:normal_user).id
# Check that the deleting a received message works
- post :delete, :message_id => messages(:read_message).id
+ post :delete, :message_id => read_message.id
assert_redirected_to inbox_path(:display_name => users(:normal_user).display_name)
assert_equal "Message deleted", flash[:notice]
- m = Message.find(messages(:read_message).id)
+ m = Message.find(read_message.id)
assert_equal true, m.from_user_visible
assert_equal false, m.to_user_visible
# Check that the deleting a sent message works
- post :delete, :message_id => messages(:unread_message).id, :referer => outbox_path(:display_name => users(:normal_user).display_name)
+ post :delete, :message_id => sent_message.id, :referer => outbox_path(:display_name => users(:normal_user).display_name)
assert_redirected_to outbox_path(:display_name => users(:normal_user).display_name)
assert_equal "Message deleted", flash[:notice]
- m = Message.find(messages(:unread_message).id)
+ m = Message.find(sent_message.id)
assert_equal false, m.from_user_visible
assert_equal true, m.to_user_visible
require "test_helper"
class TraceControllerTest < ActionController::TestCase
- fixtures :users, :user_preferences, :gpx_files
+ fixtures :users, :gpx_files
set_fixture_class :gpx_files => Trace
def setup
assert_redirected_to :controller => :user, :action => :login, :referer => trace_create_path
# Now authenticated as a user with gps.trace.visibility set
+ create(:user_preference, :user => users(:public_user), :k => "gps.trace.visibility", :v => "identifiable")
get :create, {}, { :user => users(:public_user).id }
assert_response :success
assert_template :create
assert_select "select#trace_visibility option[value=identifiable][selected]", 1
# Now authenticated as a user with gps.trace.public set
+ create(:user_preference, :user => users(:second_public_user), :k => "gps.trace.public", :v => "default")
get :create, {}, { :user => users(:second_public_user).id }
assert_response :success
assert_template :create
assert_response :forbidden
# Now authenticated
+ create(:user_preference, :user => users(:public_user), :k => "gps.trace.visibility", :v => "identifiable")
assert_not_equal "trackable", users(:public_user).preferences.where(:k => "gps.trace.visibility").first.v
post :create, { :trace => { :gpx_file => file, :description => "New Trace", :tagstring => "new,trace", :visibility => "trackable" } }, { :user => users(:public_user).id }
assert_response :redirect
assert_response :unauthorized
# Now authenticated
+ create(:user_preference, :user => users(:public_user), :k => "gps.trace.visibility", :v => "identifiable")
assert_not_equal "trackable", users(:public_user).preferences.where(:k => "gps.trace.visibility").first.v
basic_authorization(users(:public_user).display_name, "test")
post :api_create, :file => file, :description => "New Trace", :tags => "new,trace", :visibility => "trackable"
class UserControllerTest < ActionController::TestCase
api_fixtures
- fixtures :messages
##
# test all routes which lead to this controller
end
def test_api_details
+ create(:message, :read, :recipient => users(:normal_user))
+
# check that nothing is returned when not logged in
get :api_details
assert_response :unauthorized
require "test_helper"
class UserPreferenceControllerTest < ActionController::TestCase
- fixtures :users, :user_preferences
+ fixtures :users
##
# test all routes which lead to this controller
end
# authenticate as a user with preferences
+ user_preference = create(:user_preference, :user => users(:normal_user))
+ user_preference2 = create(:user_preference, :user => users(:normal_user))
basic_authorization("test@openstreetmap.org", "test")
# try the read again
assert_select "osm" do
assert_select "preferences", :count => 1 do
assert_select "preference", :count => 2
- assert_select "preference[k=\"#{user_preferences(:a).k}\"][v=\"#{user_preferences(:a).v}\"]", :count => 1
- assert_select "preference[k=\"#{user_preferences(:two).k}\"][v=\"#{user_preferences(:two).v}\"]", :count => 1
+ assert_select "preference[k=\"#{user_preference.k}\"][v=\"#{user_preference.v}\"]", :count => 1
+ assert_select "preference[k=\"#{user_preference2.k}\"][v=\"#{user_preference2.v}\"]", :count => 1
end
end
end
##
# test read_one action
def test_read_one
+ create(:user_preference, :user => users(:normal_user), :k => "key", :v => "value")
+
# try a read without auth
get :read_one, :preference_key => "key"
assert_response :unauthorized, "should be authenticated"
##
# test update action
def test_update
+ create(:user_preference, :user => users(:normal_user), :k => "key", :v => "value")
+ create(:user_preference, :user => users(:normal_user), :k => "some_key", :v => "some_value")
+
# try a put without auth
assert_no_difference "UserPreference.count" do
content "<osm><preferences><preference k='key' v='new_value'/><preference k='new_key' v='value'/></preferences></osm>"
put :update
end
assert_response :unauthorized, "should be authenticated"
- assert_equal "value", UserPreference.find([1, "key"]).v
- assert_equal "some_value", UserPreference.find([1, "some_key"]).v
+ assert_equal "value", UserPreference.find([users(:normal_user).id, "key"]).v
+ assert_equal "some_value", UserPreference.find([users(:normal_user).id, "some_key"]).v
assert_raises ActiveRecord::RecordNotFound do
- UserPreference.find([1, "new_key"])
+ UserPreference.find([users(:normal_user).id, "new_key"])
end
# authenticate as a user with preferences
assert_response :success
assert_equal "text/plain", @response.content_type
assert_equal "", @response.body
- assert_equal "new_value", UserPreference.find([1, "key"]).v
- assert_equal "value", UserPreference.find([1, "new_key"]).v
+ assert_equal "new_value", UserPreference.find([users(:normal_user).id, "key"]).v
+ assert_equal "value", UserPreference.find([users(:normal_user).id, "new_key"]).v
assert_raises ActiveRecord::RecordNotFound do
- UserPreference.find([1, "some_key"])
+ UserPreference.find([users(:normal_user).id, "some_key"])
end
# try a put with duplicate keys
assert_response :bad_request
assert_equal "text/plain", @response.content_type
assert_equal "Duplicate preferences with key key", @response.body
- assert_equal "new_value", UserPreference.find([1, "key"]).v
+ assert_equal "new_value", UserPreference.find([users(:normal_user).id, "key"]).v
# try a put with invalid content
assert_no_difference "UserPreference.count" do
end
assert_response :unauthorized, "should be authenticated"
assert_raises ActiveRecord::RecordNotFound do
- UserPreference.find([1, "new_key"])
+ UserPreference.find([users(:normal_user).id, "new_key"])
end
# authenticate as a user with preferences
assert_response :success
assert_equal "text/plain", @response.content_type
assert_equal "", @response.body
- assert_equal "new_value", UserPreference.find([1, "new_key"]).v
+ assert_equal "new_value", UserPreference.find([users(:normal_user).id, "new_key"]).v
# try changing the value of a preference
assert_no_difference "UserPreference.count" do
assert_response :success
assert_equal "text/plain", @response.content_type
assert_equal "", @response.body
- assert_equal "newer_value", UserPreference.find([1, "new_key"]).v
+ assert_equal "newer_value", UserPreference.find([users(:normal_user).id, "new_key"]).v
end
##
# test delete_one action
def test_delete_one
+ create(:user_preference, :user => users(:normal_user), :k => "key", :v => "value")
+
# try a delete without auth
assert_no_difference "UserPreference.count" do
delete :delete_one, :preference_key => "key"
end
assert_response :unauthorized, "should be authenticated"
- assert_equal "value", UserPreference.find([1, "key"]).v
+ assert_equal "value", UserPreference.find([users(:normal_user).id, "key"]).v
# authenticate as a user with preferences
basic_authorization("test@openstreetmap.org", "test")
assert_equal "text/plain", @response.content_type
assert_equal "", @response.body
assert_raises ActiveRecord::RecordNotFound do
- UserPreference.find([1, "key"])
+ UserPreference.find([users(:normal_user).id, "key"])
end
# try the delete again for the same key
end
assert_response :not_found
assert_raises ActiveRecord::RecordNotFound do
- UserPreference.find([1, "key"])
+ UserPreference.find([users(:normal_user).id, "key"])
end
end
end
--- /dev/null
+FactoryGirl.define do
+ factory :acl do
+ sequence(:k) { |n| "Key #{n}" }
+ end
+end
--- /dev/null
+FactoryGirl.define do
+ factory :message do
+ sequence(:title) { |n| "Message #{n}" }
+ sequence(:body) { |n| "Body text for message #{n}" }
+ sent_on Time.now
+
+ # FIXME: needs user factory
+ from_user_id 1
+
+ # FIXME: needs user factory
+ to_user_id 2
+
+ trait :unread do
+ message_read false
+ end
+
+ trait :read do
+ message_read true
+ end
+ end
+end
--- /dev/null
+FactoryGirl.define do
+ factory :user_preference do
+ sequence(:k) { |n| "Key #{n}" }
+ sequence(:v) { |n| "Value #{n}" }
+
+ # FIXME: needs user factory
+ user_id 1
+ end
+end
+++ /dev/null
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-
-one:
- address: 1
- netmask: 1
- k: MyText
- v: MyText
-
-two:
- address: 1
- netmask: 1
- k: MyText
- v: MyText
+++ /dev/null
-unread_message:
- id: 1
- from_user_id: 1
- title: test message 1
- body: some body text
- sent_on: "2008-05-01 12:34:56"
- message_read: false
- to_user_id: 2
- from_user_visible: true
- to_user_visible: true
-
-read_message:
- id: 2
- from_user_id: 2
- title: test message 2
- body: some body test
- sent_on: "2008-05-02 12:45:23"
- message_read: true
- to_user_id: 1
- from_user_visible: true
- to_user_visible: true
+++ /dev/null
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-
-a:
- user_id: 1
- k: "key"
- v: "value"
-
-two:
- user_id: 1
- k: "some_key"
- v: "some_value"
-
-u2_trace:
- user_id: 2
- k: "gps.trace.visibility"
- v: "identifiable"
-
-u3_trace:
- user_id: 4
- k: "gps.trace.public"
- v: "default"
require "test_helper"
class AclTest < ActiveSupport::TestCase
- # Replace this with your real tests.
- def test_truth
- assert true
+ def test_k_required
+ acl = create(:acl)
+ assert acl.valid?
+ acl.k = nil
+ assert !acl.valid?
+ end
+
+ def test_no_account_creation_by_subnet
+ assert !Acl.no_account_creation("192.168.1.1")
+ create(:acl, :address => "192.168.0.0/16", :k => "no_account_creation")
+ assert Acl.no_account_creation("192.168.1.1")
+ end
+
+ def test_no_account_creation_by_domain
+ assert !Acl.no_account_creation("192.168.1.1", "example.com")
+ create(:acl, :domain => "example.com", :k => "no_account_creation")
+ assert Acl.no_account_creation("192.168.1.1", "example.com")
end
end
class MessageTest < ActiveSupport::TestCase
api_fixtures
- fixtures :messages
EURO = "\xe2\x82\xac".freeze # euro symbol
- # This needs to be updated when new fixtures are added
- # or removed.
- def test_check_message_count
- assert_equal 2, Message.count
- end
-
def test_check_empty_message_fails
message = Message.new
assert !message.valid?
end
def test_validating_msgs
- message = messages(:unread_message)
+ message = create(:message, :unread)
assert message.valid?
- message = messages(:read_message)
+ message = create(:message, :read)
assert message.valid?
end
def test_invalid_send_recipient
- message = messages(:unread_message)
+ message = create(:message, :unread)
message.sender = nil
message.recipient = nil
assert !message.valid?
private
def make_message(char, count)
- message = messages(:unread_message)
+ message = build(:message, :unread)
message.title = char * count
message
end
class UserPreferenceTest < ActiveSupport::TestCase
api_fixtures
- fixtures :user_preferences
-
- # This checks to make sure that there are two user preferences
- # stored in the test database.
- # This test needs to be updated for every addition/deletion from
- # the fixture file
- def test_check_count
- assert_equal 4, UserPreference.count
- end
# Checks that you cannot add a new preference, that is a duplicate
def test_add_duplicate_preference
- up = user_preferences(:a)
+ up = create(:user_preference)
new_up = UserPreference.new
new_up.user = users(:normal_user)
new_up.k = up.k