Skip to content

Commit 7c8cf33

Browse files
committed
New way to coerce tests. Always after AR.
1 parent da15198 commit 7c8cf33

File tree

6 files changed

+65
-49
lines changed

6 files changed

+65
-49
lines changed

Guardfile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,16 @@ guard :minitest, {
1111
autorun: false,
1212
include: ['lib', 'test', ar_lib, ar_test],
1313
test_folders: ['test'],
14-
test_file_patterns: ["*_test.rb", "*_test_sqlserver.rb"]
14+
test_file_patterns: ["*_test.rb", "*_test_sqlserver.rb", "*_tests.rb"]
1515
} do
1616
# Our project watchers.
1717
if ENV['FOCUS_TEST']
1818
ENV['FOCUS_TEST'].split(',').map(&:strip).each do |file|
1919
watch(%r{.*}) { file }
2020
end
2121
else
22-
watch(%r{^test/cases/\w+_test_sqlserver.rb$})
23-
watch(%r{^test/cases/coerced/\w+_test.rb$})
22+
watch(%r{^test/cases/\w+_test_sqlserver\.rb$})
23+
watch(%r{^test/cases/coerced_tests\.rb$}) { "test/cases/coerced_tests.rb" }
2424
watch(%r{^lib/active_record/connection_adapters/sqlserver/([^/]+)\.rb$}) { |m| "test/cases/#{m[1]}_test_sqlserver.rb" }
2525
watch(%r{^test/cases/helper_sqlserver\.rb$}) { 'test' }
2626
end

test/cases/coerced/sanitize_test.rb

Lines changed: 0 additions & 23 deletions
This file was deleted.

test/cases/coerced_tests.rb

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
require 'cases/helper_sqlserver'
2+
3+
4+
require 'models/post'
5+
class SanitizeTest < ActiveRecord::TestCase
6+
7+
coerce_tests :test_sanitize_sql_like_example_use_case
8+
9+
def test_sanitize_sql_like_example_use_case_coerced
10+
searchable_post = Class.new(Post) do
11+
def self.search(term)
12+
where("title LIKE ?", sanitize_sql_like(term, '!'))
13+
end
14+
end
15+
assert_sql(/\(title LIKE N''20!% !_reduction!_!!''\)/) do
16+
searchable_post.search("20% _reduction_!").to_a
17+
end
18+
end
19+
20+
end
21+
22+
23+
require 'models/author'
24+
class YamlSerializationTest < ActiveRecord::TestCase
25+
26+
fixtures :authors
27+
28+
coerce_tests :test_types_of_virtual_columns_are_not_changed_on_round_trip
29+
30+
def test_types_of_virtual_columns_are_not_changed_on_round_trip_coerced
31+
author = Author.select('authors.*, 5 as posts_count').first
32+
dumped = YAML.load(YAML.dump(author))
33+
assert_equal 5, author.posts_count
34+
assert_equal 5, dumped.posts_count
35+
end
36+
37+
end

test/cases/helper_sqlserver.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
module ActiveRecord
1111
class TestCase < ActiveSupport::TestCase
1212

13+
include ARTest::SQLServer::CoercedTest
14+
1315
let(:logger) { ActiveRecord::Base.logger }
1416
let(:connection) { ActiveRecord::Base.connection }
1517

test/support/coerced_test_sqlserver.rb

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,36 +2,39 @@ module ARTest
22
module SQLServer
33
module CoercedTest
44

5-
def self.included(base)
6-
base.extend ClassMethods
5+
extend ActiveSupport::Concern
6+
7+
included do
8+
cattr_accessor :coerced_tests, instance_accessor: false
9+
self.coerced_tests = []
710
end
811

912
module ClassMethods
1013

11-
def self.extended(base)
12-
base.class_eval do
13-
Array(coerced_tests).each do |method_name|
14-
undefine_and_puts(method_name)
15-
end
14+
def coerce_tests(*names)
15+
names.each do |n|
16+
self.coerced_tests.push(n)
17+
coerce_test!(n)
1618
end
1719
end
1820

19-
def coerced_tests
20-
self.const_get(:COERCED_TESTS) rescue nil
21+
def coerce_test!(method)
22+
coerced_test_warning(method)
2123
end
2224

2325
def method_added(method)
24-
if coerced_tests && coerced_tests.include?(method)
25-
undefine_and_puts(method)
26-
end
26+
coerced_test_warning(method) if coerced_tests.include?(method.to_sym)
2727
end
2828

29-
def undefine_and_puts(method)
29+
private
30+
31+
def coerced_test_warning(method)
3032
result = undef_method(method) rescue nil
3133
STDOUT.puts("Info: Undefined coerced test: #{self.name}##{method}") unless result.blank?
3234
end
3335

3436
end
37+
3538
end
3639
end
3740
end

test/support/rake_helpers.rb

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11

2-
SQLSERVER_TEST_HELPER = 'test/cases/helper_sqlserver.rb'
2+
SQLSERVER_HELPER = 'test/cases/helper_sqlserver.rb'
3+
SQLSERVER_COERCED = 'test/cases/coerced_tests.rb'
34

45
def env_ar_test_files
56
return unless ENV['TEST_FILES_AR'] && !ENV['TEST_FILES_AR'].empty?
@@ -19,26 +20,22 @@ def sqlserver_cases
1920
@sqlserver_cases ||= Dir.glob('test/cases/*_test_sqlserver.rb')
2021
end
2122

22-
def ar_coerced
23-
@ar_coerced ||= Dir.glob('test/cases/coerced/*test*.rb')
24-
end
25-
2623
def ar_cases
2724
@ar_cases ||= begin
2825
all_cases = Dir.glob("#{ARTest::SQLServer.root_activerecord}/test/cases/**/*_test.rb")
2926
adapters_cases = Dir.glob("#{ARTest::SQLServer.root_activerecord}/test/cases/adapters/**/*_test.rb")
30-
(all_cases - adapters_cases).sort.unshift(SQLSERVER_TEST_HELPER)
27+
(all_cases - adapters_cases).sort
3128
end
3229
end
3330

3431
def test_files
35-
return env_ar_test_files.unshift(SQLSERVER_TEST_HELPER) if env_ar_test_files
32+
return env_ar_test_files.unshift(SQLSERVER_HELPER) if env_ar_test_files
3633
return env_test_files if env_test_files
3734
if ENV['ONLY_SQLSERVER']
38-
sqlserver_cases + ar_coerced
35+
sqlserver_cases + [SQLSERVER_COERCED]
3936
elsif ENV['ONLY_ACTIVERECORD']
40-
(ar_coerced + ar_cases).unshift(SQLSERVER_TEST_HELPER)
37+
[SQLSERVER_HELPER] + (ar_cases + [SQLSERVER_COERCED])
4138
else
42-
(ar_coerced + ar_cases + sqlserver_cases).unshift(SQLSERVER_TEST_HELPER)
39+
[SQLSERVER_HELPER] + (ar_cases + [SQLSERVER_COERCED] + sqlserver_cases)
4340
end
4441
end

0 commit comments

Comments
 (0)