0
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
0
+ include DataMapper::Resource
0
+ property :name, String
0
+ property :port, String
0
+ property :captain, String
0
+ def self.default_repository_name
0
+ include DataMapper::Resource
0
+ property :user_id, Integer
0
+ property :resource_id, Integer
0
+ property :resource_type, String
0
+ property :token, String
0
+ def self.default_repository_name
0
+ include DataMapper::Resource
0
+ property :name, String
0
+ def self.default_repository_name
0
+ include DataMapper::Resource
0
+ property :region_id, Integer
0
+ property :name, String
0
+ property :land, String
0
+ def self.default_repository_name
0
+ include DataMapper::Resource
0
+ property :factory_id, Integer
0
+ property :name, String
0
+ def self.default_repository_name
0
+ include DataMapper::Resource
0
+ property :name, String
0
+ include DataMapper::Resource
0
+ property :name, String
0
+ def self.default_repository_name
0
+ include DataMapper::Resource
0
+ property :region_id, Integer
0
+ property :name, String
0
+ property :land, String
0
+ def self.default_repository_name
0
+ include DataMapper::Resource
0
+ property :factory_id, Integer
0
+ property :name, String
0
+ def self.default_repository_name
0
describe DataMapper::Query, "with #{ADAPTER}" do
0
- describe 'when ordering' do
0
- include DataMapper::Resource
0
- property :name, String
0
- property :port, String
0
+ QuerySpec::SailBoat.auto_migrate!
0
+ QuerySpec::SailBoat.create!(:name => 'A', :port => 'C')
0
+ QuerySpec::SailBoat.create!(:name => 'B', :port => 'B')
0
+ QuerySpec::SailBoat.create!(:name => 'C', :port => 'A')
0
+ def parse_statement(log)
0
+ log.readlines.join.chomp.split(' ~ ').last
0
+ describe 'when true' do
0
+ it 'should add a GROUP BY to the SQL query' do
0
+ QuerySpec::SailBoat.all(:unique => true, :fields => [ :id ]).to_a
0
+ parse_statement(log).should == 'SELECT `id` FROM `query_spec_sail_boats` GROUP BY `id` ORDER BY `id`'
0
+ parse_statement(log).should == 'SELECT "id" FROM "query_spec_sail_boats" GROUP BY "id" ORDER BY "id"'
0
+ it 'should not add a GROUP BY to the SQL query if no field is a Property' do
0
+ operator = DataMapper::Query::Operator.new(:thing, :test)
0
+ # make the operator act like a Property
0
+ property = QuerySpec::SailBoat.properties[:id]
0
+ (property.methods - (public_instance_methods - %w[ type ])).each do |method|
0
+ define_method(method) do |*args|
0
+ property.send(method, *args)
0
+ operator.should_not be_kind_of(DataMapper::Property)
0
+ QuerySpec::SailBoat.all(:unique => true, :fields => [ operator ]).to_a
0
+ parse_statement(log).should == 'SELECT `id` FROM `query_spec_sail_boats` ORDER BY `id`'
0
+ parse_statement(log).should == 'SELECT "id" FROM "query_spec_sail_boats" ORDER BY "id"'
0
+ describe 'when false' do
0
+ it 'should not add a GROUP BY to the SQL query' do
0
+ QuerySpec::SailBoat.all(:unique => false, :fields => [ :id ]).to_a
0
+ parse_statement(log).should == 'SELECT `id` FROM `query_spec_sail_boats` ORDER BY `id`'
0
+ parse_statement(log).should == 'SELECT "id" FROM "query_spec_sail_boats" ORDER BY "id"'
0
+ describe 'when ordering' do
0
-
SailBoat.auto_migrate!(ADAPTER)0
+
QuerySpec::SailBoat.auto_migrate!0
- repository(ADAPTER) do
0
- SailBoat.create!(:name => 'A', :port => 'C')
0
- SailBoat.create!(:name => 'B', :port => 'B')
0
- SailBoat.create!(:name => 'C', :port => 'A')
0
+ QuerySpec::SailBoat.create!(:name => 'A', :port => 'C')
0
+ QuerySpec::SailBoat.create!(:name => 'B', :port => 'B')
0
+ QuerySpec::SailBoat.create!(:name => 'C', :port => 'A')
0
it "should find by conditions" do
0
-
SailBoat.first(:conditions => ['name = ?', 'B'])
0
+
QuerySpec::SailBoat.first(:conditions => [ 'name = ?', 'B' ])
0
end.should_not raise_error
0
-
SailBoat.first(:conditions => ['name = ?', 'A'])
0
+
QuerySpec::SailBoat.first(:conditions => [ 'name = ?', 'A' ])
0
end.should_not raise_error
0
it "should find by conditions passed in as hash" do
0
-
SailBoat.create!(:name => "couldbe@email.com", :port => 'wee')
0
+
QuerySpec::SailBoat.create!(:name => "couldbe@email.com", :port => 'wee')
0
- find =
SailBoat.first(:name => 'couldbe@email.com')
0
+ find =
QuerySpec::SailBoat.first(:name => 'couldbe@email.com')
0
find.name.should == 'couldbe@email.com'
0
- find =
SailBoat.first(:name => 'couldbe@email.com', :port.not => nil)
0
+ find =
QuerySpec::SailBoat.first(:name => 'couldbe@email.com', :port.not => nil)
0
find.port.should_not be_nil
0
find.name.should == 'couldbe@email.com'
0
@@ -52,100 +230,78 @@ if ADAPTER
0
it "should find by conditions passed in a range" do
0
- find =
SailBoat.all(:id => 0..2)
0
+ find =
QuerySpec::SailBoat.all(:id => 0..2)
0
find.should have(2).entries
0
- find =
SailBoat.all(:id.not => 0..2)
0
+ find =
QuerySpec::SailBoat.all(:id.not => 0..2)
0
find.should have(1).entries
0
it "should order results" do
0
- result = SailBoat.all(:order => [
0
- DataMapper::Query::Direction.new(SailBoat.properties[:name], :asc)
0
+ result = QuerySpec::SailBoat.all(:order => [
0
+ DataMapper::Query::Direction.new(QuerySpec::SailBoat.properties[:name], :asc)
0
result[0].id.should == 1
0
- result = SailBoat.all(:order => [
0
- DataMapper::Query::Direction.new(SailBoat.properties[:port], :asc)
0
+ result = QuerySpec::SailBoat.all(:order => [
0
+ DataMapper::Query::Direction.new(QuerySpec::SailBoat.properties[:port], :asc)
0
result[0].id.should == 3
0
- result = SailBoat.all(:order => [
0
- DataMapper::Query::Direction.new(SailBoat.properties[:name], :asc),
0
- DataMapper::Query::Direction.new(SailBoat.properties[:port], :asc)
0
+ result = QuerySpec::SailBoat.all(:order => [
0
+ DataMapper::Query::Direction.new(QuerySpec::SailBoat.properties[:name], :asc),
0
+ DataMapper::Query::Direction.new(QuerySpec::SailBoat.properties[:port], :asc)
0
result[0].id.should == 1
0
- result = SailBoat.all(:order => [
0
- SailBoat.properties[:name],
0
- DataMapper::Query::Direction.new(SailBoat.properties[:port], :asc)
0
+ result = QuerySpec::SailBoat.all(:order => [
0
+ QuerySpec::SailBoat.properties[:name],
0
+ DataMapper::Query::Direction.new(QuerySpec::SailBoat.properties[:port], :asc)
0
result[0].id.should == 1
0
- result =
SailBoat.all(:order => [:name])
0
+ result =
QuerySpec::SailBoat.all(:order => [ :name ])
0
result[0].id.should == 1
0
- result =
SailBoat.all(:order => [:name.desc])
0
+ result =
QuerySpec::SailBoat.all(:order => [ :name.desc ])
0
result[0].id.should == 3
0
describe 'when sub-selecting' do
0
- include DataMapper::Resource
0
- property :user_id, Integer
0
- property :resource_id, Integer
0
- property :resource_type, String
0
- property :token, String
0
- include DataMapper::Resource
0
- property :name, String
0
- property :port, String
0
- property :captain, String
0
- Permission.auto_migrate!(ADAPTER)
0
- SailBoat.auto_migrate!(ADAPTER)
0
+ [ QuerySpec::SailBoat, QuerySpec::Permission ].each { |m| m.auto_migrate! }
0
- repository(ADAPTER) do
0
- SailBoat.create!(:id => 1, :name => "Fantasy I", :port => "Cape Town", :captain => 'Joe')
0
- SailBoat.create!(:id => 2, :name => "Royal Flush II", :port => "Cape Town", :captain => 'James')
0
- SailBoat.create!(:id => 3, :name => "Infringer III", :port => "Cape Town", :captain => 'Jason')
0
+ QuerySpec::SailBoat.create!(:id => 1, :name => "Fantasy I", :port => "Cape Town", :captain => 'Joe')
0
+ QuerySpec::SailBoat.create!(:id => 2, :name => "Royal Flush II", :port => "Cape Town", :captain => 'James')
0
+ QuerySpec::SailBoat.create!(:id => 3, :name => "Infringer III", :port => "Cape Town", :captain => 'Jason')
0
- #User 1 permission -- read boat 1 & 2
0
- Permission.create!(:id => 1, :user_id => 1, :resource_id => 1, :resource_type => 'SailBoat', :token => 'READ')
0
- Permission.create!(:id => 2, :user_id => 1, :resource_id => 2, :resource_type => 'SailBoat', :token => 'READ')
0
+ #User 1 permission -- read boat 1 & 2
0
+ QuerySpec::Permission.create!(:id => 1, :user_id => 1, :resource_id => 1, :resource_type => 'SailBoat', :token => 'READ')
0
+ QuerySpec::Permission.create!(:id => 2, :user_id => 1, :resource_id => 2, :resource_type => 'SailBoat', :token => 'READ')
0
- #User 2 permission -- read boat 2 & 3
0
- Permission.create!(:id => 3, :user_id => 2, :resource_id => 2, :resource_type => 'SailBoat', :token => 'READ')
0
- Permission.create!(:id => 4, :user_id => 2, :resource_id => 3, :resource_type => 'SailBoat', :token => 'READ')
0
+ #User 2 permission -- read boat 2 & 3
0
+ QuerySpec::Permission.create!(:id => 3, :user_id => 2, :resource_id => 2, :resource_type => 'SailBoat', :token => 'READ')
0
+ QuerySpec::Permission.create!(:id => 4, :user_id => 2, :resource_id => 3, :resource_type => 'SailBoat', :token => 'READ')
0
it 'should accept a DM::Query as a value of a condition' do
0
- acl = DataMapper::Query.new(repository(ADAPTER),
Permission, :user_id => 1, :resource_type => 'SailBoat', :token => 'READ', :fields => [ :resource_id ])
0
+ acl = DataMapper::Query.new(repository(ADAPTER),
QuerySpec::Permission, :user_id => 1, :resource_type => 'SailBoat', :token => 'READ', :fields => [ :resource_id ])
0
query = { :port => 'Cape Town', :id => acl, :captain.like => 'J%', :order => [ :id ] }
0
- boats = repository(ADAPTER) {
SailBoat.all(query) }
0
+ boats = repository(ADAPTER) {
QuerySpec::SailBoat.all(query) }
0
boats.should have(2).entries
0
boats.entries[0].id.should == 1
0
boats.entries[1].id.should == 2
0
- acl = DataMapper::Query.new(repository(ADAPTER),
Permission, :user_id => 2, :resource_type => 'SailBoat', :token => 'READ', :fields => [ :resource_id ])
0
+ acl = DataMapper::Query.new(repository(ADAPTER),
QuerySpec::Permission, :user_id => 2, :resource_type => 'SailBoat', :token => 'READ', :fields => [ :resource_id ])
0
query = { :port => 'Cape Town', :id => acl, :captain.like => 'J%', :order => [ :id ] }
0
- boats = repository(ADAPTER) {
SailBoat.all(query) }
0
+ boats = repository(ADAPTER) {
QuerySpec::SailBoat.all(query) }
0
boats.should have(2).entries
0
boats.entries[0].id.should == 2
0
@@ -154,130 +310,44 @@ if ADAPTER
0
it 'when value is NOT IN another query' do
0
# Boats that User 1 Cannot see
0
- acl = DataMapper::Query.new(repository(ADAPTER),
Permission, :user_id => 1, :resource_type => 'SailBoat', :token => 'READ', :fields => [:resource_id])
0
+ acl = DataMapper::Query.new(repository(ADAPTER),
QuerySpec::Permission, :user_id => 1, :resource_type => 'SailBoat', :token => 'READ', :fields => [ :resource_id ])
0
query = { :port => 'Cape Town', :id.not => acl, :captain.like => 'J%' }
0
- boats = repository(ADAPTER) {
SailBoat.all(query) }
0
+ boats = repository(ADAPTER) {
QuerySpec::SailBoat.all(query) }
0
boats.should have(1).entries
0
boats.entries[0].id.should == 3
0
end # describe sub-selecting
0
describe 'when linking associated objects' do
0
- include DataMapper::Resource
0
- property :name, String
0
- def self.default_repository_name
0
- include DataMapper::Resource
0
- property :region_id, Integer
0
- property :name, String
0
- property :land, String
0
- def self.default_repository_name
0
- include DataMapper::Resource
0
- property :factory_id, Integer
0
- property :name, String
0
- def self.default_repository_name
0
- include DataMapper::Resource
0
- property :name, String
0
- def self.default_repository_name
0
- include DataMapper::Resource
0
- property :region_id, Integer
0
- property :name, String
0
- property :land, String
0
- def self.default_repository_name
0
- include DataMapper::Resource
0
- property :factory_id, Integer
0
- property :name, String
0
- def self.default_repository_name
0
+ [ QuerySpec::Region, QuerySpec::Factory, QuerySpec::Vehicle ].each { |m| m.auto_migrate! }
0
- Region.new(:id=>1, :name=>'North West').save
0
- Factory.new(:id=>2000, :region_id=>1, :name=>'North West Plant').save
0
- Vehicle.new(:id=>1, :factory_id=>2000, :name=>'10 ton delivery truck').save
0
+ QuerySpec::Region.create(:id => 1, :name => 'North West')
0
+ QuerySpec::Factory.create(:id => 2000, :region_id => 1, :name => 'North West Plant')
0
+ QuerySpec::Vehicle.create(:id => 1, :factory_id => 2000, :name => '10 ton delivery truck')
0
Namespace::Region.auto_migrate!
0
Namespace::Factory.auto_migrate!
0
Namespace::Vehicle.auto_migrate!
0
- Namespace::Region.new(:id=>1, :name=>'North West').save
0
- Namespace::Factory.new(:id=>2000, :region_id=>1, :name=>'North West Plant').save
0
- Namespace::Vehicle.new(:id=>1, :factory_id=>2000, :name=>'10 ton delivery truck').save
0
+ Namespace::Region.create(:id => 1, :name => 'North West')
0
+ Namespace::Factory.create(:id => 2000, :region_id => 1, :name => 'North West Plant')
0
+ Namespace::Vehicle.create(:id => 1, :factory_id => 2000, :name => '10 ton delivery truck')
0
it 'should require that all properties in :fields and all :links come from the same repository' #do
0
- # land =
Factory.properties(:mock)[:land]
0
+ # land =
QuerySpec::Factory.properties(:mock)[:land]
0
- #
Vehicle.properties(ADAPTER).map do |property|
0
+ #
QuerySpec::Vehicle.properties(ADAPTER).map do |property|
0
- # results = repository(ADAPTER) {
Vehicle.all(:links => [:factory], :fields => fields) }
0
+ # results = repository(ADAPTER) {
QuerySpec::Vehicle.all(:links => [ :factory ], :fields => fields) }
0
- # $!.message.should == "Property
Factory.land not available in repository #{ADAPTER}"
0
+ # $!.message.should == "Property
QuerySpec::Factory.land not available in repository #{ADAPTER}"
0
# }.should raise_error(RuntimeError)
0
@@ -287,21 +357,21 @@ if ADAPTER
0
factory = DataMapper::Associations::Relationship.new(
0
{ :child_key => [ :factory_id ], :parent_key => [ :id ] }
0
- results = repository(ADAPTER) {
Vehicle.all(:links => [factory]) }
0
+ results = repository(ADAPTER) {
QuerySpec::Vehicle.all(:links => [ factory ]) }
0
results.should have(1).entries
0
it 'should accept a symbol of an association name as a link' do
0
- results = repository(ADAPTER) {
Vehicle.all(:links => [:factory]) }
0
+ results = repository(ADAPTER) {
QuerySpec::Vehicle.all(:links => [ :factory ]) }
0
results.should have(1).entries
0
it 'should accept a string of an association name as a link' do
0
- results = repository(ADAPTER) {
Vehicle.all(:links => ['factory']) }
0
+ results = repository(ADAPTER) {
QuerySpec::Vehicle.all(:links => [ 'factory' ]) }
0
results.should have(1).entries
0
@@ -309,37 +379,37 @@ if ADAPTER
0
region = DataMapper::Associations::Relationship.new(
0
{ :child_key => [ :region_id ], :parent_key => [ :id ] }
0
- results = repository(ADAPTER) {
Vehicle.all(:links => ['factory',region]) }
0
+ results = repository(ADAPTER) {
QuerySpec::Vehicle.all(:links => [ 'factory', region ]) }
0
results.should have(1).entries
0
it 'should only accept a DM::Assoc::Relationship, String & Symbol as a link' do
0
- DataMapper::Query.new(repository(ADAPTER),
Vehicle, :links => [1])
0
+ DataMapper::Query.new(repository(ADAPTER),
QuerySpec::Vehicle, :links => [1])
0
}.should raise_error(ArgumentError)
0
it 'should have a association by the name of the Symbol or String' do
0
- DataMapper::Query.new(repository(ADAPTER),
Vehicle, :links=>['Sailing'])
0
+ DataMapper::Query.new(repository(ADAPTER),
QuerySpec::Vehicle, :links => [ 'Sailing' ])
0
}.should raise_error(ArgumentError)
0
- DataMapper::Query.new(repository(ADAPTER),
Vehicle, :links=>[:sailing])
0
+ DataMapper::Query.new(repository(ADAPTER),
QuerySpec::Vehicle, :links => [ :sailing ])
0
}.should raise_error(ArgumentError)
0
it 'should create an n-level query path' do
0
- Vehicle.factory.region.model.should == Region
0
- Vehicle.factory.region.name.property.should == Region.properties(Region.repository.name)[:name]
0
+ QuerySpec::Vehicle.factory.region.model.should == QuerySpec::Region
0
+ QuerySpec::Vehicle.factory.region.name.property.should == QuerySpec::Region.properties(QuerySpec::Region.repository.name)[ :name ]
0
it 'should accept a DM::QueryPath as the key to a condition' do
0
- vehicle =
Vehicle.first(Vehicle.factory.region.name => 'North West')
0
+ vehicle =
QuerySpec::Vehicle.first(QuerySpec::Vehicle.factory.region.name => 'North West')
0
vehicle.name.should == '10 ton delivery truck'
0
vehicle = Namespace::Vehicle.first(Namespace::Vehicle.factory.region.name => 'North West')
0
@@ -347,7 +417,7 @@ if ADAPTER
0
it "should accept a string representing a DM::QueryPath as they key to a condition" do
0
- vehicle =
Vehicle.first("factory.region.name" => 'North West')
0
+ vehicle =
QuerySpec::Vehicle.first("factory.region.name" => 'North West')
0
vehicle.name.should == '10 ton delivery truck'
0
@@ -357,19 +427,13 @@ if ADAPTER
0
it 'should eager load associations' do
0
- vehicle =
Vehicle.first(:includes => [Vehicle.factory])
0
+ vehicle =
QuerySpec::Vehicle.first(:includes => [ QuerySpec::Vehicle.factory ])
0
it "should behave when using mocks" do
0
- include DataMapper::Resource
0
- property :name, String
0
- Group.should_receive(:all).with(:order => [:id.asc])
0
- Group.all(:order => [:id.asc])
0
+ QuerySpec::Group.should_receive(:all).with(:order => [ :id.asc ])
0
+ QuerySpec::Group.all(:order => [ :id.asc ])
Comments
No one has commented yet.