test/test_table_searcher.rb in clevic-0.13.0.b9 vs test/test_table_searcher.rb in clevic-0.13.0.b10
- old
+ new
@@ -8,11 +8,11 @@
@direction = :forwards
@from_start = false
@whole_words = false
self.instance_eval( &block ) if block_given?
end
-
+
attr_accessor :direction, :search_text
attr_writer :whole_words, :from_start
def whole_words?; @whole_words; end
def from_start?; @from_start; end
end
@@ -20,19 +20,19 @@
class TestTableSearcher < Test::Unit::TestCase
def self.startup
#~ Passenger.db.loggers = [Logger.new($stdout)]
suite.db[:passengers].delete
CreateFakePassengers.new( suite.db ).up
-
+
# force Passenger to re-read db_schema
Passenger.dataset = Passenger.dataset
end
-
+
def self.shutdown
CreateFakePassengers.new( suite.db ).down
end
-
+
def setup
@simple_search_criteria = MockSearchCriteria.new
@name_field = Clevic::Field.new( :name, Passenger, {} )
@nationality_field = Clevic::Field.new( :nationality, Passenger, {} )
@all_passengers = Passenger.filter( :flight_id => Flight.first.id ).order( :id ).all
@@ -47,84 +47,84 @@
should "throw an exception when called with no field" do
assert_raise( RuntimeError ) do
Clevic::TableSearcher.new( Passenger.dataset, @simple_search_criteria, nil )
end
end
-
+
should 'throw an exception for an unknown direction' do
@simple_search_criteria.direction = :other
assert_raise( RuntimeError ) do
table_searcher = Clevic::TableSearcher.new( Passenger.dataset, @simple_search_criteria, @nationality_field )
end
end
-
+
end
-
+
context "searching" do
setup do
@simple_search_criteria.search_text = CreateFakePassengers::NATIONALITIES[0]
@passenger_generator = Enumerator.new( @all_passengers )
@simple_search_criteria.from_start = true
end
-
+
should "have #{CreateFakePassengers::MAX_PASSENGERS} passengers" do
assert_equal CreateFakePassengers::MAX_PASSENGERS, Passenger.count
end
should_eventually "work with several ordering fields"
# Sequel::SQL::OrderedExpression:0xb50a3b14 @expression=:date, @descending=false
-
+
should_eventually "do more granular testing"
-
+
should "find the first record" do
table_searcher = Clevic::TableSearcher.new( Passenger.dataset, @simple_search_criteria, @nationality_field )
assert_equal '>', table_searcher.send( :comparator )
assert_equal @all_passengers.first, table_searcher.search
end
-
+
should "backwards-find the last record" do
@simple_search_criteria.direction = :backwards
table_searcher = Clevic::TableSearcher.new( Passenger.dataset, @simple_search_criteria, @nationality_field )
assert_equal '<', table_searcher.send( :comparator )
assert_equal @all_passengers.last, table_searcher.search
end
-
+
should "backwards-find the next-to-last record" do
# find the last record
@simple_search_criteria.direction = :backwards
table_searcher = Clevic::TableSearcher.new( Passenger.dataset, @simple_search_criteria, @nationality_field )
last = table_searcher.search
-
+
# now find the previous record
@simple_search_criteria.from_start = false
assert_equal @all_passengers[-2], table_searcher.search( last )
end
should "find next records" do
@simple_search_criteria.from_start = false
table_searcher = Clevic::TableSearcher.new( Passenger.dataset, @simple_search_criteria, @nationality_field )
-
+
# fetch records one by one, starting from the one after the first one, and compare them
while next_entity = table_searcher.search( @passenger_generator.next )
passenger = @passenger_generator.next
-
+
assert_equal next_entity, passenger
assert_not_equal @all_passengers.first, passenger
-
+
last_entity = next_entity
end
end
end
-
+
context 'search for related field value' do
setup do
@simple_search_criteria.from_start = true
# trim search slightly
@simple_search_criteria.search_text = Flight.first.number[1..-2]
@flight_field = Clevic::Field.new( :flight, Passenger, { :display => 'number' } )
end
-
+
should 'raise an exception for no display value' do
@flight_field = Clevic::Field.new( :flight, Passenger, {} )
@flight_field.display = nil
assert_nil @flight_field.display
@@ -132,43 +132,43 @@
assert_raise( RuntimeError ) do
table_searcher = Clevic::TableSearcher.new( Passenger.dataset, @simple_search_criteria, @flight_field )
table_searcher.search
end
end
-
+
should "raise exception for related fields with display procs" do
assert_raise RuntimeError do
table_searcher = Clevic::TableSearcher.new(
Passenger.dataset,
@simple_search_criteria,
Clevic::Field.new( :flight, Passenger, { :display => lambda{|x| x.name} } )
)
table_searcher.search
end
end
-
+
should 'find a record with partial words' do
table_searcher = Clevic::TableSearcher.new( Passenger.dataset, @simple_search_criteria, @flight_field )
assert_equal @all_passengers.first, table_searcher.search
end
-
+
should 'find a record with whole words' do
@simple_search_criteria.whole_words = true
@simple_search_criteria.search_text = Flight.first.number
-
+
table_searcher = Clevic::TableSearcher.new( Passenger.dataset, @simple_search_criteria, @flight_field )
assert_equal @all_passengers.first, table_searcher.search
end
end
-
+
context 'whole words' do
setup do
@simple_search_criteria.from_start = true
@simple_search_criteria.search_text = CreateFakePassengers::NATIONALITIES[0][0..-3]
@should_find = Passenger.filter( "nationality like '%#{@simple_search_criteria.search_text}%'" ).order( :id )
end
-
+
should 'find a full value with a partial search string' do
@simple_search_criteria.whole_words = false
@simple_search_criteria.from_start = true
table_searcher = Clevic::TableSearcher.new( Passenger.dataset, @simple_search_criteria, @nationality_field )
expecteds = Enumerator.new @should_find
@@ -185,7 +185,7 @@
@simple_search_criteria.from_start = true
table_searcher = Clevic::TableSearcher.new( Passenger.dataset, @simple_search_criteria, @nationality_field )
assert_nil table_searcher.search
end
end
-
+
end