Add some more tests, better error handling for dates
This commit is contained in:
parent
5f1f8f3c91
commit
e8cb7ac8f1
2 changed files with 87 additions and 12 deletions
|
@ -280,18 +280,19 @@ class NotesController < ApplicationController
|
||||||
|
|
||||||
# Filter by a given start date and an optional end date
|
# Filter by a given start date and an optional end date
|
||||||
if params[:from]
|
if params[:from]
|
||||||
|
begin
|
||||||
from = Time.parse(params[:from])
|
from = Time.parse(params[:from])
|
||||||
to = if params[:to]
|
to = if params[:to]
|
||||||
Time.parse(params[:to])
|
Time.parse(params[:to])
|
||||||
else
|
else
|
||||||
Time.now
|
Time.now
|
||||||
end
|
end
|
||||||
|
rescue ArgumentError
|
||||||
if from && to
|
# return a more generic error so that everybody knows what is wrong
|
||||||
@notes = @notes.where("(created_at > '#{from}' AND created_at < '#{to}')")
|
|
||||||
else
|
|
||||||
raise OSM::APIBadUserInput, "The date is in a wrong format"
|
raise OSM::APIBadUserInput, "The date is in a wrong format"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@notes = @notes.where("(created_at > '#{from}' AND created_at < '#{to}')")
|
||||||
end
|
end
|
||||||
|
|
||||||
# Find the notes we want to return
|
# Find the notes we want to return
|
||||||
|
|
|
@ -876,7 +876,7 @@ class NotesControllerTest < ActionController::TestCase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_search_by_user_success
|
def test_search_by_display_name_success
|
||||||
user = create(:user)
|
user = create(:user)
|
||||||
|
|
||||||
create(:note) do |note|
|
create(:note) do |note|
|
||||||
|
@ -915,6 +915,45 @@ class NotesControllerTest < ActionController::TestCase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_search_by_id_success
|
||||||
|
user = create(:user)
|
||||||
|
|
||||||
|
create(:note) do |note|
|
||||||
|
create(:note_comment, :note => note, :author => user)
|
||||||
|
end
|
||||||
|
|
||||||
|
get :search, :params => { :id => user.id, :format => "xml" }
|
||||||
|
assert_response :success
|
||||||
|
assert_equal "application/xml", @response.content_type
|
||||||
|
assert_select "osm", :count => 1 do
|
||||||
|
assert_select "note", :count => 1
|
||||||
|
end
|
||||||
|
|
||||||
|
get :search, :params => { :id => user.id, :format => "json" }
|
||||||
|
assert_response :success
|
||||||
|
assert_equal "application/json", @response.content_type
|
||||||
|
js = ActiveSupport::JSON.decode(@response.body)
|
||||||
|
assert_not_nil js
|
||||||
|
assert_equal "FeatureCollection", js["type"]
|
||||||
|
assert_equal 1, js["features"].count
|
||||||
|
|
||||||
|
get :search, :params => { :id => user.id, :format => "rss" }
|
||||||
|
assert_response :success
|
||||||
|
assert_equal "application/rss+xml", @response.content_type
|
||||||
|
assert_select "rss", :count => 1 do
|
||||||
|
assert_select "channel", :count => 1 do
|
||||||
|
assert_select "item", :count => 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
get :search, :params => { :id => user.id, :format => "gpx" }
|
||||||
|
assert_response :success
|
||||||
|
assert_equal "application/gpx+xml", @response.content_type
|
||||||
|
assert_select "gpx", :count => 1 do
|
||||||
|
assert_select "wpt", :count => 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_search_no_match
|
def test_search_no_match
|
||||||
create(:note_with_comments)
|
create(:note_with_comments)
|
||||||
|
|
||||||
|
@ -950,6 +989,41 @@ class NotesControllerTest < ActionController::TestCase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_search_by_time_no_match
|
||||||
|
create(:note_with_comments)
|
||||||
|
|
||||||
|
get :search, :params => { :from => "01.01.2010", :to => "01.10.2010", :format => "xml" }
|
||||||
|
assert_response :success
|
||||||
|
assert_equal "application/xml", @response.content_type
|
||||||
|
assert_select "osm", :count => 1 do
|
||||||
|
assert_select "note", :count => 0
|
||||||
|
end
|
||||||
|
|
||||||
|
get :search, :params => { :from => "01.01.2010", :to => "01.10.2010", :format => "json" }
|
||||||
|
assert_response :success
|
||||||
|
assert_equal "application/json", @response.content_type
|
||||||
|
js = ActiveSupport::JSON.decode(@response.body)
|
||||||
|
assert_not_nil js
|
||||||
|
assert_equal "FeatureCollection", js["type"]
|
||||||
|
assert_equal 0, js["features"].count
|
||||||
|
|
||||||
|
get :search, :params => { :from => "01.01.2010", :to => "01.10.2010", :format => "rss" }
|
||||||
|
assert_response :success
|
||||||
|
assert_equal "application/rss+xml", @response.content_type
|
||||||
|
assert_select "rss", :count => 1 do
|
||||||
|
assert_select "channel", :count => 1 do
|
||||||
|
assert_select "item", :count => 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
get :search, :params => { :from => "01.01.2010", :to => "01.10.2010", :format => "gpx" }
|
||||||
|
assert_response :success
|
||||||
|
assert_equal "application/gpx+xml", @response.content_type
|
||||||
|
assert_select "gpx", :count => 1 do
|
||||||
|
assert_select "wpt", :count => 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_search_bad_params
|
def test_search_bad_params
|
||||||
get :search, :params => { :q => "no match", :limit => "0", :format => "json" }
|
get :search, :params => { :q => "no match", :limit => "0", :format => "json" }
|
||||||
assert_response :bad_request
|
assert_response :bad_request
|
||||||
|
@ -966,7 +1040,7 @@ class NotesControllerTest < ActionController::TestCase
|
||||||
get :search, :params => { :from => "wrong-date", :to => "wrong-date" }
|
get :search, :params => { :from => "wrong-date", :to => "wrong-date" }
|
||||||
assert_response :bad_request
|
assert_response :bad_request
|
||||||
|
|
||||||
get :search, :params => { :from => "2018.08.2018", :to => "2018.09.2018" }
|
get :search, :params => { :from => "01.01.2010", :to => "2010.01.2010" }
|
||||||
assert_response :bad_request
|
assert_response :bad_request
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue