Initial import

This commit is contained in:
2008-03-02 16:04:34 -03:00
commit 5e4951fa47
798 changed files with 59730 additions and 0 deletions

View File

@@ -0,0 +1,72 @@
$:.unshift(File.dirname(__FILE__) + '/../lib')
require 'rubygems'
require 'test/unit'
require 'active_record'
require 'active_record/fixtures'
require 'active_support/binding_of_caller'
require 'active_support/breakpoint'
require 'connection'
require 'dr_nic_magic_models'
ActiveSupport::Deprecation.debug = true
QUOTED_TYPE = ActiveRecord::Base.connection.quote_column_name('type') unless Object.const_defined?(:QUOTED_TYPE)
class Test::Unit::TestCase #:nodoc:
self.fixture_path = File.dirname(__FILE__) + "/fixtures/"
self.use_instantiated_fixtures = false
self.use_transactional_fixtures = true #(ENV['AR_NO_TX_FIXTURES'] != "yes")
def create_fixtures(*table_names, &block)
Fixtures.create_fixtures(File.dirname(__FILE__) + "/fixtures/", table_names, {}, &block)
end
def assert_date_from_db(expected, actual, message = nil)
# SQL Server doesn't have a separate column type just for dates,
# so the time is in the string and incorrectly formatted
if current_adapter?(:SQLServerAdapter)
assert_equal expected.strftime("%Y/%m/%d 00:00:00"), actual.strftime("%Y/%m/%d 00:00:00")
elsif current_adapter?(:SybaseAdapter)
assert_equal expected.to_s, actual.to_date.to_s, message
else
assert_equal expected.to_s, actual.to_s, message
end
end
def assert_queries(num = 1)
ActiveRecord::Base.connection.class.class_eval do
self.query_count = 0
alias_method :execute, :execute_with_query_counting
end
yield
ensure
ActiveRecord::Base.connection.class.class_eval do
alias_method :execute, :execute_without_query_counting
end
assert_equal num, ActiveRecord::Base.connection.query_count, "#{ActiveRecord::Base.connection.query_count} instead of #{num} queries were executed."
end
def assert_no_queries(&block)
assert_queries(0, &block)
end
end
def current_adapter?(type)
ActiveRecord::ConnectionAdapters.const_defined?(type) &&
ActiveRecord::Base.connection.instance_of?(ActiveRecord::ConnectionAdapters.const_get(type))
end
ActiveRecord::Base.connection.class.class_eval do
cattr_accessor :query_count
alias_method :execute_without_query_counting, :execute
def execute_with_query_counting(sql, name = nil)
self.query_count += 1
execute_without_query_counting(sql, name)
end
end
#ActiveRecord::Base.logger = Logger.new(STDOUT)
#ActiveRecord::Base.colorize_logging = false

View File

@@ -0,0 +1,13 @@
print "Using native MySQL\n"
require 'logger'
ActiveRecord::Base.logger = Logger.new("debug.log")
db1 = "dr_nic_magic_models_unittest"
ActiveRecord::Base.establish_connection(
:adapter => "mysql",
:username => "root",
:encoding => "utf8",
:database => db1
)

View File

@@ -0,0 +1,12 @@
print "Using Postgres\n"
require 'logger'
ActiveRecord::Base.logger = Logger.new("debug.log")
db1 = "dr_nic_magic_models_unittest"
ActiveRecord::Base.establish_connection(
:adapter => "postgresql",
:encoding => "utf8",
:database => db1
)

View File

@@ -0,0 +1,10 @@
print "Using native Sqlite3\n"
require 'logger'
ActiveRecord::Base.logger = Logger.new("debug.log")
ActiveRecord::Base.establish_connection(
:adapter => "sqlite3",
:dbfile => "test.db"
)

View File

@@ -0,0 +1,13 @@
require 'abstract_unit'
#require 'fixtures/user'
#require 'fixtures/group'
#require 'fixtures/membership'
class DummyTest < Test::Unit::TestCase
def setup
end
def test_truth
assert true
end
end

View File

@@ -0,0 +1,10 @@
require 'abstract_unit'
class EnvTest < Test::Unit::TestCase
def test_modules
assert_not_nil DrNicMagicModels
assert_not_nil DrNicMagicModels::Validations
assert_not_nil DrNicMagicModels::Schema
end
end

View File

@@ -0,0 +1,3 @@
first:
id: 1
name: kind

View File

@@ -0,0 +1,3 @@
first:
fun_user_id: 1
adjective_id: 1

View File

@@ -0,0 +1,4 @@
DROP TABLE fun_users;
DROP TABLE groups;
DROP TABLE group_memberships;
DROP TABLE group_tag;

View File

@@ -0,0 +1,56 @@
CREATE TABLE `fun_users` (
`id` int(11) NOT NULL auto_increment,
`type` varchar(255) NOT NULL,
`firstname` varchar(50) NOT NULL,
`lastname` varchar(50) NOT NULL,
`login` varchar(50) NOT NULL,
`email` varchar(50) NULL,
PRIMARY KEY (`id`)
) TYPE=InnoDB;
CREATE TABLE `groups` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) NOT NULL UNIQUE,
`description` varchar(50) default NULL,
`some_int` integer default NULL,
`some_float` float default NULL,
`some_bool` boolean default NULL,
PRIMARY KEY (`id`)
) TYPE=InnoDB;
CREATE TABLE `group_memberships` (
`id` int(11) NOT NULL auto_increment,
`fun_user_id` int(11) NOT NULL,
`group_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) TYPE=InnoDB;
CREATE TABLE `adjectives` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255),
PRIMARY KEY (`id`)
) TYPE=InnoDB;
CREATE TABLE `adjectives_fun_users` (
`fun_user_id` int(11) NOT NULL,
`adjective_id` int(11) NOT NULL,
PRIMARY KEY (`fun_user_id`,`adjective_id`)
) TYPE=InnoDB;
CREATE TABLE `group_tag` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) NOT NULL,
`group_id` int(11) NOT NULL,
`referenced_group_id` int(11) NULL UNIQUE,
PRIMARY KEY (`id`)
) TYPE=InnoDB;
ALTER TABLE `group_tag`
ADD FOREIGN KEY (`group_id`) REFERENCES `groups` (`id`) ON DELETE CASCADE;
ALTER TABLE `group_tag`
ADD FOREIGN KEY (`referenced_group_id`) REFERENCES `groups` (`id`) ON DELETE CASCADE;
ALTER TABLE `adjectives_fun_users`
ADD FOREIGN KEY (`adjective_id`) REFERENCES `adjectives` (`id`) ON DELETE CASCADE;

View File

@@ -0,0 +1,55 @@
CREATE TABLE "fun_users" (
"id" SERIAL NOT NULL,
"type" varchar(255) NOT NULL,
"firstname" varchar(50) NOT NULL,
"lastname" varchar(50) NOT NULL,
"login" varchar(50) NOT NULL,
"email" varchar(50) NULL,
PRIMARY KEY ("id")
);
CREATE TABLE "groups" (
"id" SERIAL NOT NULL,
"name" varchar(50) NOT NULL UNIQUE,
"description" varchar(50) default NULL,
"some_int" integer default NULL,
"some_float" float default NULL,
"some_bool" boolean default NULL,
PRIMARY KEY ("id")
);
CREATE TABLE "group_memberships" (
"id" SERIAL,
"fun_user_id" int NOT NULL,
"group_id" int NOT NULL,
PRIMARY KEY ("id")
);
CREATE TABLE "adjectives" (
"id" SERIAL,
"name" varchar(255),
PRIMARY KEY ("id")
);
CREATE TABLE "adjectives_fun_users" (
"fun_user_id" int NOT NULL,
"adjective_id" int NOT NULL,
PRIMARY KEY ("fun_user_id","adjective_id")
);
CREATE TABLE "group_tag" (
"id" SERIAL NOT NULL,
"name" varchar(50) NOT NULL,
"group_id" int NOT NULL,
"referenced_group_id" int NULL UNIQUE,
PRIMARY KEY ("id")
);
ALTER TABLE "group_tag"
ADD FOREIGN KEY ("group_id") REFERENCES "groups" ("id") ON DELETE CASCADE;
ALTER TABLE "group_tag"
ADD FOREIGN KEY ("referenced_group_id") REFERENCES "groups" ("id") ON DELETE CASCADE;
ALTER TABLE "adjectives_fun_users"
ADD FOREIGN KEY ("adjective_id") REFERENCES "adjectives" ("id") ON DELETE CASCADE;

View File

@@ -0,0 +1,49 @@
CREATE TABLE `fun_users` (
`id` int(11) NOT NULL,
`type` varchar(255) NOT NULL,
`firstname` varchar(50) NOT NULL,
`lastname` varchar(50) NOT NULL,
`login` varchar(50) NOT NULL,
`email` varchar(50) NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `groups` (
`id` int(11) NOT NULL ,
`name` varchar(50) NOT NULL UNIQUE,
`description` varchar(50) default NULL,
`some_int` integer default NULL,
`some_float` float default NULL,
`some_bool` boolean default NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `group_memberships` (
`id` int(11) NOT NULL,
`fun_user_id` int(11) NOT NULL,
`group_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `adjectives` (
`id` int(11) NOT NULL,
`name` varchar(255),
PRIMARY KEY (`id`)
);
CREATE TABLE `adjectives_fun_users` (
`fun_user_id` int(11) NOT NULL,
`adjective_id` int(11) NOT NULL,
PRIMARY KEY (`fun_user_id`,`adjective_id`)
);
CREATE TABLE `group_tag` (
`id` int(11) NOT NULL,
`name` varchar(50) NOT NULL,
`group_id` int(11) NOT NULL,
`referenced_group_id` int(11) NULL UNIQUE,
PRIMARY KEY (`id`)
);

View File

@@ -0,0 +1,14 @@
first:
id: 1
firstname: First
lastname: Person
login: first
email: first@person.com
type: FunUser
second:
id: 2
firstname: Second
lastname: Person
login: sec
email: sec@person.com
type: FunUserPlus

View File

@@ -0,0 +1,4 @@
first_first:
id: 1
group_id: 1
fun_user_id: 1

View File

@@ -0,0 +1,11 @@
first:
id: 1
name: Test
group_id: 1
referenced_group_id: 1
second:
id: 2
name: Also Test
group_id: 1
referenced_group_id: NULL

View File

@@ -0,0 +1,12 @@
first:
id: 1
name: Group One
description: First group
other:
id: 2
name: Group Plus
description: Extended Group
other:
id: 2
name: Group Plus
description: Extended Group

View File

@@ -0,0 +1,2 @@
class FunUserPlus < FunUser
end

View File

@@ -0,0 +1,71 @@
require 'abstract_unit'
require 'pp'
class InvisibleModelAccessTest < Test::Unit::TestCase
# fixtures :fun_users, :groups, :group_memberships, :group_tag
def setup
create_fixtures :fun_users, :groups, :group_memberships, :group_tag
@classes = [FunUser, Group, GroupMembership, GroupTag]
@group = Group.find(:first)
end
def test_attributes
assert_not_nil @group.name
end
def test_find
@classes.each do |klass|
assert_not_nil obj = klass.find(1)
assert_equal klass, obj.class
end
end
def test_sti
require 'fun_user_plus'
x = FunUserPlus.find(:all)
assert x.inject {|n,v| n &= v.class == FunUserPlus}, "Wrong object class in FunUserPlus.find(:all)"
plus = x.first
assert_not_nil plus
assert plus.is_a?(FunUser)
assert plus.class == FunUserPlus
end
def test_new
assert group = Group.new(:name => 'New Group')
assert_equal Group, group.class
end
def test_update
assert @group.update_attributes(:name => 'Group 1'), "Couldn't update:\n#{str=""; @group.errors.each_full { |msg| str += "#{msg}\n" }; str }"
end
def test_delete
assert @group.destroy
end
def test_validations
group = Group.new
group.description = "x"*100
group.some_int = 99.9
group.some_float = "bah"
# Active record seems to interpolate booleans anyway to either true, false or nil...
# group.some_bool = "xxx" => false (!)
assert !group.valid?, "Group should not be valid"
[:name, :description, :some_int, :some_float].each do |x|
assert_not_nil group.errors[x], "Failed on #{x}=[#{group.send(x)}], it should be invalid"
end
group = Group.new
group.name = "name"
group.description = "x"*49
group.some_int = 99
group.some_float = 99.9
group.some_bool = true
assert group.valid?, "Group should be valid"
group.name = @group.name
assert !group.valid?, "Groups should have unique names"
end
end

View File

@@ -0,0 +1,61 @@
require 'abstract_unit'
class InvisibleModelAssocTest < Test::Unit::TestCase
# fixtures :fun_users, :groups, :group_memberships, :group_tag, :adjectives, :adjectives_fun_users
def setup
create_fixtures :fun_users, :groups, :group_memberships, :group_tag, :adjectives, :adjectives_fun_users
@group = Group.find(1)
@group_tag = GroupTag.find(1)
@user = FunUser.find(1)
@membership = GroupMembership.find(1)
end
def test_hatbm
assert_equal([Adjective.find(1)], @user.adjectives)
end
def test_fk
gt = GroupTag.find(1)
# Not using FKs
g = gt.group
assert g.class == Group
assert g.id == 1
# Using FKs
if g.connection.supports_fetch_foreign_keys?
g = gt.referenced_group
assert g.class == Group
assert g.id == 1
end
end
def test_has_many
assert_equal [@membership], @group.group_memberships
assert_equal @group, @membership.group
end
def test_has_one
if @group_tag.connection.supports_fetch_foreign_keys?
assert_equal @group, @group_tag.referenced_group
# assert_equal @group_tag, @group.group_tag_as_referenced_group
end
end
def test_belongs_to
assert_equal @user, @membership.fun_user
assert_equal @group, @membership.group
manual_result = GroupTag.find(:all, :conditions => ['group_tag.group_id = ?', @group.id]) #.sort{|a,b| a.id <=> b.id}
auto_result = @group.group_tags #.sort{|a,b| a.id <=> b.id}
assert manual_result == auto_result, "[#{manual_result.join(',')}] != [#{auto_result.join(',')}]"
end
def test_indirect
assert_equal [@user], @group.fun_users
assert_equal [@group], @user.groups
end
end

View File

@@ -0,0 +1,23 @@
require 'abstract_unit'
class InvisibleModelClassesTest < Test::Unit::TestCase
def setup
end
def test_available
assert_not_nil Group
assert_not_nil FunUser
assert_not_nil GroupMembership
assert_not_nil GroupTag, "Could not find GroupTag with singularized table name 'GroupTag'"
end
def test_table_names
assert_equal 'groups', Group.table_name
assert_equal 'fun_users', FunUser.table_name
assert_equal 'group_memberships', GroupMembership.table_name
assert_equal 'group_tag', GroupTag.table_name
end
end

View File

@@ -0,0 +1,20 @@
require 'abstract_unit'
module MagicGroup
magic_module :table_name_prefix => 'group_'
end
class MagicModuleTest < Test::Unit::TestCase
def setup
end
def test_table_prefix
assert_nothing_thrown { MagicGroup::Membership }
assert_equal('group_memberships', MagicGroup::Membership.table_name)
assert_nothing_thrown { MagicGroup::Tag }
assert_equal('group_tag', MagicGroup::Tag.table_name)
end
end

View File

@@ -0,0 +1,20 @@
require 'abstract_unit'
require 'pp'
module TestBed
class Group < ActiveRecord::Base
generate_validations
end
end
class TestExistingModel < Test::Unit::TestCase
# fixtures :fun_users, :groups, :group_memberships, :group_tag
def setup
create_fixtures :fun_users, :groups, :group_memberships, :group_tag
end
def test_valid
assert(!TestBed::Group.new.valid?)
end
end