test/controller_module_test.rb in rails3-jquery-autocomplete-0.3.4 vs test/controller_module_test.rb in rails3-jquery-autocomplete-0.3.5

- old
+ new

@@ -34,10 +34,12 @@ ActiveRecord::Base.connection.drop_table(table) end end class ActorsControllerTest < ActionController::TestCase + require 'shoulda' + require 'redgreen' def setup setup_db @controller = ActorsController.new @controller.request = @request = ActionController::TestRequest.new @@ -46,92 +48,91 @@ def teardown teardown_db end - def test_response_succesful - get :autocomplete_movie_name, :term => 'Al' - assert_response :success - end + context "the autocomplete gem" do + setup do + @movie = Movie.create(:name => 'Alpha') + @movie2 = Movie.create(:name => 'Alspha') + @movie3 = Movie.create(:name => 'Alzpha') + end - def test_response_json - @movie = Movie.create(:name => 'Alpha') + should "be able to access the autocomplete action regardless of the quality of param[:term]" do + get :autocomplete_movie_name + assert_response :success - get :autocomplete_movie_name, :term => 'Al' - json_response = JSON.parse(@response.body) - assert_equal(json_response.first["label"], @movie.name) - assert_equal(json_response.first["value"], @movie.name) - assert_equal(json_response.first["id"], @movie.id) - end + get :autocomplete_movie_name, :term => '' + assert_response :success - def test_alphabetic_order - @movie = Movie.create(:name => 'Alzpha') - @movie = Movie.create(:name => 'Alspha') - @movie = Movie.create(:name => 'Alpha') + get :autocomplete_movie_name, :term => nil + assert_response :success - get :autocomplete_movie_name, :term => 'Al' - json_response = JSON.parse(@response.body) - assert_equal(json_response.first["label"], "Alpha") - assert_equal(json_response.last["label"], "Alzpha") - end + get :autocomplete_movie_name, :term => 'Al' + assert_response :success + end - def test_alternative_sort_order - @movie = Movie.create(:name => 'Alzpha') - @movie = Movie.create(:name => 'Alspha') - @movie = Movie.create(:name => 'Alpha') + should "respond with expected json" do + get :autocomplete_movie_name, :term => 'Al' + json_response = JSON.parse(@response.body) + assert_equal(json_response.first["label"], @movie.name) + assert_equal(json_response.first["value"], @movie.name) + assert_equal(json_response.first["id"], @movie.id) + end - ActorsController.send(:autocomplete, :movie, :name, {:order => "name DESC"}) + should "return results in alphabetical order by default" do + get :autocomplete_movie_name, :term => 'Al' + json_response = JSON.parse(@response.body) + assert_equal(json_response.first["label"], "Alpha") + assert_equal(json_response.last["label"], "Alzpha") + end - get :autocomplete_movie_name, :term => 'Al' - json_response = JSON.parse(@response.body) - assert_equal(json_response.first["label"], "Alzpha") - assert_equal(json_response.last["label"], "Alpha") - end + should "be able to sort in other ways if desired" do + ActorsController.send(:autocomplete, :movie, :name, {:order => "name DESC"}) - def test_response_limit - @movie = Movie.create(:name => 'Alzpha') - @movie = Movie.create(:name => 'Alspha') - @movie = Movie.create(:name => 'Alpha') + get :autocomplete_movie_name, :term => 'Al' + json_response = JSON.parse(@response.body) + assert_equal(json_response.first["label"], "Alzpha") + assert_equal(json_response.last["label"], "Alpha") + end - ActorsController.send(:autocomplete, :movie, :name, {:limit => 1}) + should "be able to limit the results" do + ActorsController.send(:autocomplete, :movie, :name, {:limit => 1}) - get :autocomplete_movie_name, :term => 'Al' - json_response = JSON.parse(@response.body) - assert_equal(json_response.length, 1) - end + get :autocomplete_movie_name, :term => 'Al' + json_response = JSON.parse(@response.body) + assert_equal(json_response.length, 1) + end - def test_downcase - @movie = Movie.create(:name => 'aLpHa') + should "ignore case of search term and results" do + @movie = Movie.create(:name => 'aLpHa') - ActorsController.send(:autocomplete, :movie, :name) + ActorsController.send(:autocomplete, :movie, :name) - get :autocomplete_movie_name, :term => 'Al' - json_response = JSON.parse(@response.body) - assert_equal(json_response.length, 1) - assert_equal(json_response.first["label"], 'aLpHa') - end + get :autocomplete_movie_name, :term => 'Al' + json_response = JSON.parse(@response.body) + assert_equal(json_response.length, Movie.count) + assert_equal(json_response.last["label"], 'aLpHa') + end - def test_full_search - @movie = Movie.create(:name => 'aLpHa') + should "match term to letters in middle of words when full-text search is on" do + ActorsController.send(:autocomplete, :movie, :name, {:full => true}) - ActorsController.send(:autocomplete, :movie, :name, {:full => true}) + get :autocomplete_movie_name, :term => 'ph' + json_response = JSON.parse(@response.body) + assert_equal(json_response.length, Movie.count) + assert_equal(json_response.first["label"], @movie.name) + end - get :autocomplete_movie_name, :term => 'ph' - json_response = JSON.parse(@response.body) - assert_equal(json_response.length, 1) - assert_equal(json_response.first["label"], 'aLpHa') - end + should "be able to customize what is displayed" do + ActorsController.send(:autocomplete, :movie, :name, {:display_value => :display_name}) - def test_value_option - ActorsController.send(:autocomplete, :movie, :name, {:display_value => :display_name}) + get :autocomplete_movie_name, :term => 'Al' - @movie = Movie.create(:name => 'Alpha') + json_response = JSON.parse(@response.body) - get :autocomplete_movie_name, :term => 'Al' - - json_response = JSON.parse(@response.body) - - assert_equal(@movie.display_name, json_response.first["label"]) - assert_equal(@movie.display_name, json_response.first["value"]) - assert_equal(@movie.id, json_response.first["id"]) + assert_equal(@movie.display_name, json_response.first["label"]) + assert_equal(@movie.display_name, json_response.first["value"]) + assert_equal(@movie.id, json_response.first["id"]) + end end -end \ No newline at end of file +end