minitest-sequel 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Rakefile CHANGED
@@ -1,25 +1,27 @@
1
1
  OSX = RUBY_PLATFORM.match(/darwin/)
2
2
 
3
- require 'bundler/gem_tasks'
4
- require 'rake/testtask'
3
+ require "bundler/gem_tasks"
4
+ require "rake/testtask"
5
5
 
6
6
  Rake::TestTask.new(:spec) do |t|
7
- t.libs << 'spec'
8
- t.libs << 'lib'
7
+ ENV["TESTOPTS"] = "--color"
8
+ t.libs << "spec"
9
+ t.libs << "lib"
9
10
  t.test_files = FileList['spec/**/*_spec.rb']
10
11
  end
11
12
 
12
13
  task :default => :spec
14
+ task :test => :spec
13
15
 
14
16
  desc "Run specs with coverage"
15
17
  task :coverage do
16
- ENV['COVERAGE'] = '1'
17
- Rake::Task['spec'].invoke
18
+ ENV["COVERAGE"] = "1"
19
+ Rake::Task["spec"].invoke
18
20
  `open coverage/index.html` if OSX
19
21
  end
20
22
 
21
23
 
22
- desc 'Run Rubocop report'
24
+ desc "Run Rubocop report"
23
25
  task :rubocop do
24
26
  res = `which rubocop`
25
27
  if res != ""
@@ -1,15 +1,14 @@
1
- require 'minitest'
2
- require 'minitest/sequel/version'
3
- require 'sequel'
4
- require 'sequel/extensions/inflector' unless ''.respond_to?(:classify)
1
+ require "minitest"
2
+ require "minitest/sequel/version"
3
+ require "sequel"
4
+ require "sequel/extensions/inflector" unless "".respond_to?(:classify)
5
5
 
6
6
  # reopening to add additional functionality
7
7
  module Minitest::Assertions
8
-
9
-
8
+
10
9
  private
11
-
12
- # handles converting `:nil`, `:false` values
10
+
11
+ # handles converting `:nil`, `:false` values
13
12
  def _convert_value(val)
14
13
  v = case val
15
14
  when :nil then nil
@@ -20,9 +19,11 @@ module Minitest::Assertions
20
19
  end
21
20
  v
22
21
  end
23
-
22
+
24
23
  end
25
24
 
26
- require 'minitest/sequel/columns'
27
- require 'minitest/sequel/associations'
28
- require 'minitest/sequel/validations'
25
+ require "minitest/sequel/columns"
26
+ require "minitest/sequel/associations"
27
+ require "minitest/sequel/validations"
28
+ require "minitest/sequel/plugins"
29
+ require "minitest/sequel/helpers"
@@ -1,58 +1,58 @@
1
- require 'minitest/sequel'
1
+ require "minitest/sequel"
2
2
 
3
3
  # reopening to add association functionality
4
4
  module Minitest::Assertions
5
-
5
+
6
6
  # Test for a :one_to_one association for the current model
7
- #
7
+ #
8
8
  # let(:m) { Post.first }
9
- #
9
+ #
10
10
  # it { assert_association_one_to_one(m, :first_comment, { class: :Comment, order: :id }) }
11
11
  # it { m.must_have_one_to_one_association(:first_comment, { class: :Comment, order: :id }) }
12
- #
12
+ #
13
13
  def assert_association_one_to_one(obj, attribute, opts = {}, msg = nil)
14
14
  assert_association(obj.class, :one_to_one, attribute, opts, msg)
15
15
  end
16
-
16
+
17
17
  # Test for a :one_to_many association for the current model
18
- #
18
+ #
19
19
  # let(:m) { Post.first }
20
- #
20
+ #
21
21
  # it { assert_association_one_to_many(m, :comments) }
22
22
  # it { m.must_have_one_to_many_association(:comments) }
23
- #
23
+ #
24
24
  def assert_association_one_to_many(obj, attribute, opts = {}, msg = nil)
25
25
  assert_association(obj.class, :one_to_many, attribute, opts, msg)
26
26
  end
27
-
27
+
28
28
  # Test for a :many_to_one association for the current model
29
- #
29
+ #
30
30
  # let(:m) { Post.first }
31
- #
31
+ #
32
32
  # it { assert_association_many_to_one(m, :author) }
33
33
  # it { m.must_have_many_to_one_association(:author) }
34
- #
34
+ #
35
35
  def assert_association_many_to_one(obj, attribute, opts = {}, msg = nil)
36
36
  assert_association(obj.class, :many_to_one, attribute, opts, msg)
37
37
  end
38
-
38
+
39
39
  # Test for a :many_to_many association for the current model
40
- #
40
+ #
41
41
  # let(:m) { Post.first }
42
- #
42
+ #
43
43
  # it { assert_association_many_to_many(m, :tags) }
44
44
  # it { m.must_have_many_to_many_association(:tags) }
45
- #
45
+ #
46
46
  def assert_association_many_to_many(obj, attribute, opts = {}, msg = nil)
47
47
  assert_association(obj.class, :many_to_many, attribute, opts, msg)
48
48
  end
49
-
49
+
50
50
  # Test for associations for the current model by passing the :association_type
51
- #
51
+ #
52
52
  # it { assert_association(Post, :many_to_many, :tags) }
53
- #
53
+ #
54
54
  def assert_association(klass, association_type, attribute, opts = {}, msg = nil)
55
- msg = msg.nil? ? '' : "#{msg}\n"
55
+ msg = msg.nil? ? "" : "#{msg}\n"
56
56
  msg << "Expected #{klass.inspect} to have a #{association_type.inspect}"
57
57
  msg << " association #{attribute.inspect}"
58
58
  assoc = klass.association_reflection(attribute) || {}
@@ -62,20 +62,20 @@ module Minitest::Assertions
62
62
  klass.associations.each do |a|
63
63
  o = klass.association_reflection(a)
64
64
  if o[:type] == :many_to_many
65
- arr << {
66
- attribute: o[:name],
67
- type: o[:type],
68
- class: o[:class_name].to_sym,
69
- join_table: o[:join_table],
70
- left_keys: o[:left_keys],
71
- right_keys: o[:right_keys]
65
+ arr << {
66
+ attribute: o[:name],
67
+ type: o[:type],
68
+ class: o[:class_name].to_s,
69
+ join_table: o[:join_table],
70
+ left_keys: o[:left_keys],
71
+ right_keys: o[:right_keys]
72
72
  }
73
73
  else
74
- arr << {
75
- attribute: o[:name],
76
- type: o[:type],
77
- class: o[:class_name].to_sym,
78
- keys: o[:keys]
74
+ arr << {
75
+ attribute: o[:name],
76
+ type: o[:type],
77
+ class: o[:class_name].to_s,
78
+ keys: o[:keys]
79
79
  }
80
80
  end
81
81
  end
@@ -86,9 +86,9 @@ module Minitest::Assertions
86
86
  err_msg = []
87
87
  conf_msg = []
88
88
  opts.each do |key, value|
89
- conf_msg << { key => value }
89
+ conf_msg << { key => value }
90
90
  if assoc[key] != value
91
- err_msg << { key => assoc[key] }
91
+ err_msg << { key => assoc[key].to_s }
92
92
  matching = false
93
93
  end
94
94
  end
@@ -96,62 +96,62 @@ module Minitest::Assertions
96
96
  assert(matching, msg)
97
97
  end
98
98
  end
99
-
100
-
99
+
100
+
101
101
  # Test to ensure there is no :one_to_one association for the current model
102
- #
102
+ #
103
103
  # let(:m) { Post.first }
104
- #
104
+ #
105
105
  # it { refute_association_one_to_one(m, :first_comment, { class: :Comment, order: :id }) }
106
106
  # it { m.must_have_one_to_one_association(:first_comment, { class: :Comment, order: :id }) }
107
- #
108
- def refute_association_one_to_one(obj, attribute, opts = {}, msg = nil)
109
- refute_association(obj.class, :one_to_one, attribute, opts, msg)
107
+ #
108
+ def refute_association_one_to_one(obj, attribute, msg = nil)
109
+ refute_association(obj.class, :one_to_one, attribute, msg)
110
110
  end
111
-
111
+
112
112
  # Test to ensure there is no :one_to_many association for the current model
113
- #
113
+ #
114
114
  # let(:m) { Post.first }
115
- #
115
+ #
116
116
  # it { refute_association_one_to_many(m, :comments) }
117
117
  # it { m.must_have_one_to_many_association(:comments) }
118
- #
119
- def refute_association_one_to_many(obj, attribute, opts = {}, msg = nil)
120
- refute_association(obj.class, :one_to_many, attribute, opts, msg)
118
+ #
119
+ def refute_association_one_to_many(obj, attribute, msg = nil)
120
+ refute_association(obj.class, :one_to_many, attribute, msg)
121
121
  end
122
-
122
+
123
123
  # Test to ensure there is no :many_to_one association for the current model
124
- #
124
+ #
125
125
  # let(:m) { Post.first }
126
- #
126
+ #
127
127
  # it { refute_association_many_to_one(m, :author) }
128
128
  # it { m.must_have_many_to_one_association(:author) }
129
- #
130
- def refute_association_many_to_one(obj, attribute, opts = {}, msg = nil)
131
- refute_association(obj.class, :many_to_one, attribute, opts, msg)
129
+ #
130
+ def refute_association_many_to_one(obj, attribute, msg = nil)
131
+ refute_association(obj.class, :many_to_one, attribute, msg)
132
132
  end
133
-
133
+
134
134
  # Test to ensure there is no :many_to_many association for the current model
135
- #
135
+ #
136
136
  # let(:m) { Post.first }
137
- #
137
+ #
138
138
  # it { refute_association_many_to_many(m, :tags) }
139
139
  # it { m.must_have_many_to_many_association(:tags) }
140
- #
141
- def refute_association_many_to_many(obj, attribute, opts = {}, msg = nil)
142
- refute_association(obj.class, :many_to_many, attribute, opts, msg)
140
+ #
141
+ def refute_association_many_to_many(obj, attribute, msg = nil)
142
+ refute_association(obj.class, :many_to_many, attribute, msg)
143
143
  end
144
-
144
+
145
145
  # Test to ensure the current model does NOT have an association by type :association_type
146
- #
146
+ #
147
147
  # it { refute_association(Post, :many_to_many, :tags) }
148
- #
149
- def refute_association(klass, association_type, attribute, opts = {}, msg = nil)
150
- msg = msg.nil? ? '' : "#{msg}\n"
148
+ #
149
+ def refute_association(klass, association_type, attribute, msg = nil)
150
+ msg = msg.nil? ? "" : "#{msg}\n"
151
151
  msg << "Expected #{klass.inspect} to NOT have a #{association_type.inspect}"
152
152
  msg << " association #{attribute.inspect}"
153
153
  assoc = klass.association_reflection(attribute) || {}
154
-
154
+
155
155
  if assoc.empty?
156
156
  assert(true, msg)
157
157
  else
@@ -159,25 +159,24 @@ module Minitest::Assertions
159
159
  msg << ", but such an association was found"
160
160
  assert(matching, msg)
161
161
  end
162
-
163
162
  end
164
-
163
+
165
164
  end
166
165
 
167
166
 
168
167
  # add support for Spec syntax
169
168
  module Minitest::Expectations
170
-
169
+
171
170
  infect_an_assertion :assert_association, :must_have_association, :reverse
172
171
  infect_an_assertion :assert_association_one_to_one, :must_have_one_to_one_association, :reverse
173
172
  infect_an_assertion :assert_association_one_to_many, :must_have_one_to_many_association, :reverse
174
173
  infect_an_assertion :assert_association_many_to_one, :must_have_many_to_one_association, :reverse
175
174
  infect_an_assertion :assert_association_many_to_many, :must_have_many_to_many_association, :reverse
176
-
175
+
177
176
  infect_an_assertion :refute_association, :wont_have_association, :reverse
178
177
  infect_an_assertion :refute_association_one_to_one, :wont_have_one_to_one_association, :reverse
179
178
  infect_an_assertion :refute_association_one_to_many, :wont_have_one_to_many_association, :reverse
180
179
  infect_an_assertion :refute_association_many_to_one, :wont_have_many_to_one_association, :reverse
181
180
  infect_an_assertion :refute_association_many_to_many, :wont_have_many_to_many_association, :reverse
182
-
181
+
183
182
  end
@@ -1,8 +1,8 @@
1
- require 'minitest/sequel'
1
+ # require "minitest/sequel"
2
2
 
3
3
  # reopening to add schema validation functionality
4
4
  module Minitest::Assertions
5
-
5
+
6
6
  # Conveniently test your Model definitions as follows:
7
7
  #
8
8
  # let(:m) { Post.first }
@@ -11,11 +11,11 @@ module Minitest::Assertions
11
11
  # it { m.must_have_column(:title, type: :string, db_type: 'varchar(250)') }
12
12
  #
13
13
  # # assert_have_column(<instance>, <column_name>, <options>, <custom_error_message>)
14
- #
14
+ #
15
15
  # # <instance>.must_have_column(<column_name>, <options>, <custom_error_message>)
16
16
  #
17
17
  #
18
- # `assert_have_column()` first tests if the column name is defined in the Model and then checks
18
+ # `assert_have_column()` first tests if the column name is defined in the Model and then checks
19
19
  # all passed options. The following options are valid and checked:
20
20
  #
21
21
  # * :type
@@ -26,7 +26,7 @@ module Minitest::Assertions
26
26
  # * :primary_key
27
27
  # * :auto_increment
28
28
  #
29
- # In the event the specs differ from the actual database implementation an extensive error
29
+ # In the event the specs differ from the actual database implementation an extensive error
30
30
  # message with the differing option(s) is provided to help speed up debugging the issue:
31
31
  #
32
32
  # Expected Post model to have column: :title with: \
@@ -36,123 +36,122 @@ module Minitest::Assertions
36
36
  #
37
37
  # **Please NOTE!**
38
38
  #
39
- # To test options with a value that is either `nil`, `true` or `false`, please use `:nil`,
39
+ # To test options with a value that is either `nil`, `true` or `false`, please use `:nil`,
40
40
  # `:false` or `:true` and provide numbers as 'strings' instead.
41
41
  #
42
42
  #
43
43
  def assert_have_column(obj, attribute, opts = {}, msg = nil)
44
- msg = msg.nil? ? '' : "#{msg}\n"
44
+ msg = msg.nil? ? "" : "#{msg}\n"
45
45
  msg << "Expected #{obj.class} model to have column: :#{attribute}"
46
46
  err_msg = []
47
47
  conf_msg = []
48
48
  # check if column exists
49
- col = obj.db.schema(obj.class.table_name).detect { |c| c[0] == attribute }
50
- matching = !col.nil?
51
-
49
+ dcol = obj.db.schema(obj.class.table_name).detect { |c| c[0] == attribute }
50
+ matching = !dcol.nil?
51
+
52
52
  # bail out if no matching column
53
53
  unless matching
54
- msg << ' but no such column exists'
54
+ msg << " but no such column exists"
55
55
  assert(false, msg)
56
56
  end
57
-
57
+
58
58
  # bail out if options provided are invalid
59
59
  val_opts = [:type, :db_type, :allow_null, :max_length, :default, :primary_key, :auto_increment]
60
- invalid_opts = opts.keys.reject { |o| val_opts.include?(o) }
60
+ invalid_opts = opts.keys.reject { |o| val_opts.include?(o) }
61
61
  unless invalid_opts.empty?
62
- msg << ', but the following invalid option(s) was found: { '
62
+ msg << ", but the following invalid option(s) was found: { "
63
63
  invalid_opts.each { |o| msg << "#{o.inspect}; " }
64
64
  msg << " }. Valid options are: #{val_opts.inspect}"
65
65
  assert(false, msg)
66
66
  end
67
-
67
+
68
68
  # TODO: simplify this mess. quick fix didn't work, so look at it again when time permits.
69
-
69
+
70
70
  unless opts[:type].nil?
71
- expected = (col[1][:type].to_s == opts[:type].to_s)
71
+ expected = (dcol[1][:type].to_s == opts[:type].to_s)
72
72
  conf_msg << "type: '#{opts[:type]}'"
73
73
  unless expected
74
- err_msg << "type: '#{col[1][:type]}'"
74
+ err_msg << "type: '#{dcol[1][:type]}'"
75
75
  end
76
76
  matching &&= expected
77
77
  end
78
-
78
+
79
79
  unless opts[:db_type].nil?
80
- expected = (col[1][:db_type].to_s == opts[:db_type].to_s)
80
+ expected = (dcol[1][:db_type].to_s == opts[:db_type].to_s)
81
81
  conf_msg << "db_type: '#{opts[:db_type]}'"
82
82
  unless expected
83
- err_msg << "db_type: '#{col[1][:db_type]}'"
83
+ err_msg << "db_type: '#{dcol[1][:db_type]}'"
84
84
  end
85
85
  matching &&= expected
86
86
  end
87
-
87
+
88
88
  unless opts[:max_length].nil?
89
- expected = (col[1][:max_length] === opts[:max_length])
89
+ expected = (dcol[1][:max_length] === opts[:max_length])
90
90
  conf_msg << "max_length: '#{opts[:max_length]}'"
91
91
  unless expected
92
- err_msg << "max_length: '#{col[1][:max_length]}'"
92
+ err_msg << "max_length: '#{dcol[1][:max_length]}'"
93
93
  end
94
94
  matching &&= expected
95
95
  end
96
-
96
+
97
97
  unless opts[:allow_null].nil?
98
98
  v = _convert_value(opts[:allow_null])
99
- expected = (opts[:allow_null] === v)
99
+ expected = (dcol[1][:allow_null] === v)
100
100
  conf_msg << "allow_null: '#{opts[:allow_null]}'"
101
101
  unless expected
102
- err_msg << "allow_null: '#{col[1][:allow_null]}'"
102
+ err_msg << "allow_null: '#{dcol[1][:allow_null]}'"
103
103
  end
104
104
  matching &&= expected
105
105
  end
106
-
106
+
107
107
  unless opts[:default].nil?
108
108
  v = _convert_value(opts[:default])
109
- expected = (col[1][:default] === v)
109
+ expected = (dcol[1][:default] === v)
110
110
  conf_msg << "default: '#{opts[:default]}'"
111
111
  unless expected
112
- err_msg << "default: '#{col[1][:default].inspect}'"
112
+ err_msg << "default: '#{dcol[1][:default].inspect}'"
113
113
  end
114
114
  matching &&= expected
115
115
  end
116
-
116
+
117
117
  unless opts[:primary_key].nil?
118
118
  v = _convert_value(opts[:primary_key])
119
- expected = (col[1][:primary_key] === v)
119
+ expected = (dcol[1][:primary_key] === v)
120
120
  conf_msg << "primary_key: '#{opts[:primary_key]}'"
121
121
  unless expected
122
- err_msg << "primary_key: '#{col[1][:primary_key]}'"
122
+ err_msg << "primary_key: '#{dcol[1][:primary_key]}'"
123
123
  end
124
124
  matching &&= expected
125
125
  end
126
-
126
+
127
127
  unless opts[:auto_increment].nil?
128
128
  v = _convert_value(opts[:auto_increment])
129
- expected = (col[1][:auto_increment] === v)
129
+ expected = (dcol[1][:auto_increment] === v)
130
130
  conf_msg << "auto_increment: '#{opts[:auto_increment]}'"
131
131
  unless expected
132
- err_msg << "auto_increment: '#{col[1][:auto_increment]}'"
132
+ err_msg << "auto_increment: '#{dcol[1][:auto_increment]}'"
133
133
  end
134
134
  matching &&= expected
135
135
  end
136
-
136
+
137
137
  msg = msg << " with: { #{conf_msg.join(', ')} } but found: { #{err_msg.join(', ')} }"
138
138
  assert(matching, msg)
139
139
  end
140
-
140
+
141
141
  #
142
- def refute_have_column(obj, attribute, opts = {}, msg = nil)
143
- msg = msg.nil? ? '' : "#{msg}\n"
142
+ def refute_have_column(obj, attribute, msg = nil)
143
+ msg = msg.nil? ? "" : "#{msg}\n"
144
144
  msg << "Expected #{obj.class} model to NOT have column: :#{attribute}"
145
145
  # check if column exists
146
- col = obj.db.schema(obj.class.table_name).detect { |col| col[0] == attribute }
147
- matching = col.nil?
146
+ dcol = obj.db.schema(obj.class.table_name).detect { |col| col[0] == attribute }
147
+ matching = dcol.nil?
148
148
  unless matching
149
- msg << ' but such a column was found'
149
+ msg << " but such a column was found"
150
150
  assert(matching, msg)
151
151
  end
152
152
  end
153
-
154
- end
155
153
 
154
+ end
156
155
 
157
156
  # add support for Spec syntax
158
157
  module Minitest::Expectations