describe "Searchable table spec" do # Override controller to properly instantiate def controller @controller ||= begin c = TableScreenSearchable.new c.on_load c end end after do @controller = nil end it "should show all 50 states" do controller.tableView(controller.tableView, numberOfRowsInSection:0).should == 50 end it "should allow searching for all the 'New' states" do controller.willPresentSearchController(controller.search_controller) controller.search_controller.searchBar.text = "New" controller.updateSearchResultsForSearchController(controller.search_controller) controller.tableView(controller.tableView, numberOfRowsInSection:0).should == 4 end it "should allow ending searches" do controller.willPresentSearchController(controller.search_controller) controller.search_controller.searchBar.text = "North" controller.updateSearchResultsForSearchController(controller.search_controller) controller.tableView(controller.tableView, numberOfRowsInSection:0).should == 2 controller.willDismissSearchController(controller.search_controller) controller.search_controller.searchBar.text = "" controller.updateSearchResultsForSearchController(controller.search_controller) # iOS calls this again controller.searching?.should == false controller.tableView(controller.tableView, numberOfRowsInSection:0).should == 50 end it "should call the start and stop searching callbacks properly" do controller.will_begin_search_called.should == nil controller.will_end_search_called.should == nil controller.willPresentSearchController(controller.search_controller) controller.will_begin_search_called.should == true controller.willDismissSearchController(controller.search_controller) controller.will_end_search_called.should == true end describe "custom search" do before do @stabby_controller = TableScreenStabbySearchable.new @proc_controller = TableScreenSymbolSearchable.new end after do @stabby_controller = nil @proc_controller = nil end it "should allow searching for all the 'New' states using a custom search proc" do @stabby_controller.willPresentSearchController(@stabby_controller.search_controller) @stabby_controller.search_controller.searchBar.text = "New Stabby" @stabby_controller.updateSearchResultsForSearchController(@stabby_controller.search_controller) @stabby_controller.tableView(@stabby_controller.tableView, numberOfRowsInSection:0).should == 4 rows = @stabby_controller.promotion_table_data.search("New stabby") rows.first[:cells].length.should == 4 rows.first[:cells].each do |row| # Starts with "New" and ends with "stabby" row[:properties][:searched_title].should.match(/^New(.+)?stabby$/) end end it "should allow searching for all the 'New' states using a symbol as a search proc" do @proc_controller.willPresentSearchController(@proc_controller.search_controller) @proc_controller.search_controller.searchBar.text = "New Symbol" @proc_controller.updateSearchResultsForSearchController(@proc_controller.search_controller) cell_count = @proc_controller.tableView(@proc_controller.tableView, numberOfRowsInSection:0) cell_count.should == 4 rows = @proc_controller.promotion_table_data.search("New Symbol") rows.first[:cells].length.should == 4 rows.first[:cells].each do |row| # Starts with "New" and ends with "symbol" row[:properties][:searched_title].should.match(/^New(.+)?symbol$/) end end it "custom searches empty with stabby proc if there is no match" do @stabby_controller.willPresentSearchController(@stabby_controller.search_controller) @stabby_controller.search_controller.searchBar.text = "Totally Bogus" @stabby_controller.updateSearchResultsForSearchController(@stabby_controller.search_controller) @stabby_controller.tableView(@stabby_controller.tableView, numberOfRowsInSection:0).should == 0 end it "custom searches empty with symbol for proc if there is no match" do @proc_controller.willPresentSearchController(@proc_controller.search_controller) @proc_controller.search_controller.searchBar.text = "Totally Bogus" @proc_controller.updateSearchResultsForSearchController(@proc_controller.search_controller) @proc_controller.tableView(@proc_controller.tableView, numberOfRowsInSection:0).should == 0 end end end