fixture_validation 0.1.2 → 0.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5a64198be9d3b99091f2716500aba88e8d69fc25
4
- data.tar.gz: ef1d836eadc863382b80a2cdebc7c9b9ff3d4383
3
+ metadata.gz: e29e73b106e837586ee66cb19f611471e1958dd7
4
+ data.tar.gz: 8c9145ad617e13e202784447ef463df9a2931a03
5
5
  SHA512:
6
- metadata.gz: f552393f2462998bbdfc9381fb9ed36ae9a6f5fc7786303114de6d8744af786166091c2201ad3a7cd988be2f2d3095d24f016f2d00725163eb022276f68bafe8
7
- data.tar.gz: de515457797bf2fa8afdf2fa008fb8869436a8d0fe3d13ee90aeb0cbf8d753eaa69d4edf37be7a1c045327152c48687874fc02f390f589e099349a1a24f7593b
6
+ metadata.gz: 85161e55ddba0b53c983e92254586569e0f0d6ec9c9ce1a7afa94eddb8c8ce2a6e30d9d5c577c5e049a8459c4616d588342e69f5ca203cd5036eda3acaa539da
7
+ data.tar.gz: 8c81993b0a47db8c8144551533590cdef72936fae927eb745470e1449a167230bfa9c6cd0f558b0ddf103aa072d530a5d6d0ed6b830741d66c25220506c31f40
data/.gitignore CHANGED
@@ -7,4 +7,9 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
- /.idea/
10
+ /.idea/
11
+ log/*.log
12
+ test/dummy/db/*.sqlite3
13
+ test/dummy/db/*.sqlite3-journal
14
+ test/dummy/log/*.log
15
+ test/dummy/tmp/
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # FixtureValidation
2
2
 
3
- Adds a test that validates all your Rails fixtures.
3
+ Adds a test that validates all your Rails fixtures. Tested with Rails
4
+ versions 4 and 5.
4
5
 
5
6
  As your Rails models grow and change over time, your fixtures may
6
7
  become outdated without anyone noticing. In my code I've found
@@ -27,21 +28,23 @@ test 'task must have a name' do
27
28
  end
28
29
  ```
29
30
 
30
- With that extra line you can be sure the test will perform as expected. But
31
- what if you have many tests that use the same fixture? Asserting validity
32
- of the fixture in each test isn't DRY. Furthermore, on a project with hundreds
33
- or thousands of fixtures, you may find yourself repeating this pattern constantly.
31
+ With that extra line you can be sure the test will perform as
32
+ expected. But what if you have many tests that use the same fixture?
33
+ Furthermore, on a project with hundreds or thousands of fixtures, you
34
+ may find yourself repeating this load/validate pattern constantly.
34
35
 
35
- This gem adds a test to your test suite that validates all fixtures at once. If task
36
- one is invalid, the fixture validation test will fail with output like this:
36
+ This gem adds a test to your test suite that validates all fixtures at
37
+ once. In the above example, if task :one is invalid the fixture
38
+ validation test will fail with output like this:
37
39
 
38
40
  ```
39
41
  Expected Task fixture 708419058 to be valid. Errors: Name can't be blank. Attribute values: {"id"=>708419058, "name"=>nil, "created_at"=>Sat, 12 Nov 2016 17:29:02 UTC +00:00, "updated_at"=>Sat, 12 Nov 2016 17:29:02 UTC +00:00}.
40
42
  ```
41
43
 
42
- All fixture errors are printed when the test runs. The YAML name of the fixture is
43
- not known, but all attribute values are printed to assist in identifying
44
- which fixture is invalid.
44
+ All fixture errors are printed when the test runs. It's not possible
45
+ to look up the YAML name of the fixture based on the database entry,
46
+ but the attribute values are printed to assist in identifying which
47
+ fixture is invalid.
45
48
 
46
49
  ## Installation
47
50
 
@@ -61,11 +64,10 @@ Or install it yourself as:
61
64
 
62
65
  $ gem install fixture_validation
63
66
 
64
- Add this line to test/test_helper.rb, after the 'rails/test_help' require:
67
+ Then call the generator to create the test stub:
65
68
 
66
- ```ruby
67
- require 'rails/test_help'
68
- require 'fixture_validation_test' # add this line
69
+ ```bash
70
+ $ rails g fixture_validation
69
71
  ```
70
72
 
71
73
  ## Usage
@@ -74,18 +76,34 @@ Run your test suite:
74
76
 
75
77
  $ rake test
76
78
 
79
+ Or you can run the fixture validation test on its own, which is useful
80
+ if you want to iterate over several errors:
81
+
82
+ $ rake test TEST=test/models/fixture_validation_test.rb
83
+
77
84
  ## Development
78
85
 
79
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
86
+ After checking out the repo, run `bin/setup` to install
87
+ dependencies. Then, run `rake test` to run the tests.
80
88
 
81
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
89
+ To install this gem onto your local machine, run `bundle exec rake
90
+ install`. To release a new version, update the version number in
91
+ `version.rb`, and then run `bundle exec rake release`, which will
92
+ create a git tag for the version, push git commits and tags, and push
93
+ the `.gem` file to [rubygems.org](https://rubygems.org).
82
94
 
83
95
  ## Contributing
84
96
 
85
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/fixture_validation. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
97
+ Bug reports and pull requests are welcome on GitHub at
98
+ https://github.com/[USERNAME]/fixture_validation. This project is
99
+ intended to be a safe, welcoming space for collaboration, and
100
+ contributors are expected to adhere to
101
+ the [Contributor Covenant](http://contributor-covenant.org) code of
102
+ conduct.
86
103
 
87
104
 
88
105
  ## License
89
106
 
90
- The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
107
+ The gem is available as open source under the terms of
108
+ the [MIT License](http://opensource.org/licenses/MIT).
91
109
 
data/Rakefile CHANGED
@@ -1,10 +1,37 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'FixtureValidation'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.md')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path('../test/dummy/Rakefile', __FILE__)
18
+ load 'rails/tasks/engine.rake'
19
+
20
+
21
+ load 'rails/tasks/statistics.rake'
22
+
23
+
24
+
25
+ require 'bundler/gem_tasks'
26
+
27
+ require 'rake/testtask'
3
28
 
4
29
  Rake::TestTask.new(:test) do |t|
5
- t.libs << "test"
6
- t.libs << "lib"
7
- t.test_files = FileList['test/**/*_test.rb']
30
+ t.libs << 'lib'
31
+ t.libs << 'test'
32
+ t.pattern = 'test/**/*_test.rb'
33
+ t.verbose = false
8
34
  end
9
35
 
10
- task :default => :test
36
+
37
+ task default: :test
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails gems
3
+ # installed from the root of your application.
4
+
5
+ ENGINE_ROOT = File.expand_path('../..', __FILE__)
6
+ ENGINE_PATH = File.expand_path('../../lib/fixture_validation/engine', __FILE__)
7
+
8
+ # Set up gems listed in the Gemfile.
9
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
10
+ require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
11
+
12
+ require 'rails/all'
13
+ require 'rails/engine/commands'
@@ -20,8 +20,6 @@ Gem::Specification.new do |spec|
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ['lib']
22
22
 
23
- spec.add_development_dependency 'bundler', '~> 1.13'
24
- spec.add_development_dependency 'rake', '~> 10.0'
25
- spec.add_development_dependency 'minitest', '~> 5.0'
26
- spec.add_runtime_dependency 'rails', '~> 4.0', '~> 5.0'
23
+ spec.add_dependency 'rails', '> 4'
24
+ spec.add_development_dependency 'sqlite3'
27
25
  end
@@ -1,5 +1,35 @@
1
1
  require 'fixture_validation/version'
2
+ require 'active_support/concern'
2
3
 
3
4
  module FixtureValidation
5
+ extend ActiveSupport::Concern
4
6
 
7
+ included do
8
+ fixtures :all
9
+ end
10
+
11
+ def test_validate_fixtures
12
+ count = 0
13
+ klasses = []
14
+ fixture_table_names.each do |fixture_name|
15
+ klass_name = fixture_name.classify
16
+ begin
17
+ klasses << klass_name.constantize
18
+ rescue NameError
19
+ Rails.logger.debug "No model class (#{klass_name}) found for fixture #{fixture_name}"
20
+ end
21
+ end
22
+
23
+ errors = []
24
+ klasses.each do |klass|
25
+ klass.all.each do |obj|
26
+ errors << "Expected #{klass.to_s} fixture #{obj.id} to be valid. Errors: #{obj.errors.to_a.join(', ')}. Attribute values: #{obj.attributes.to_s}." unless obj.valid?
27
+ count += 1
28
+ end
29
+ end
30
+
31
+ assert errors.empty?, "\n#{errors.join("\n")}"
32
+ Rails.logger.debug "Validated #{count} fixtures"
33
+ end
5
34
  end
35
+
@@ -0,0 +1,4 @@
1
+ module FixtureValidation
2
+ class Engine < ::Rails::Engine
3
+ end
4
+ end
@@ -1,3 +1,3 @@
1
1
  module FixtureValidation
2
- VERSION = '0.1.2'
2
+ VERSION = '0.2'
3
3
  end
@@ -0,0 +1,17 @@
1
+ require 'rails/generators/named_base'
2
+
3
+ class FixtureValidationGenerator < Rails::Generators::Base
4
+ def create_test
5
+ create_file 'test/models/fixture_validation_test.rb' do
6
+ <<END
7
+ require 'test_helper'
8
+ require 'fixture_validation'
9
+
10
+ class FixtureValidationTest < ActiveSupport::TestCase
11
+ include FixtureValidation
12
+ end
13
+
14
+ END
15
+ end
16
+ end
17
+ end
metadata CHANGED
@@ -1,77 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fixture_validation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: '0.2'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Falcone
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-11-13 00:00:00.000000000 Z
11
+ date: 2016-12-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1.13'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '1.13'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
14
+ name: rails
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
- - - "~>"
17
+ - - ">"
32
18
  - !ruby/object:Gem::Version
33
- version: '10.0'
34
- type: :development
19
+ version: '4'
20
+ type: :runtime
35
21
  prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
- - - "~>"
24
+ - - ">"
39
25
  - !ruby/object:Gem::Version
40
- version: '10.0'
26
+ version: '4'
41
27
  - !ruby/object:Gem::Dependency
42
- name: minitest
28
+ name: sqlite3
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
- - - "~>"
31
+ - - ">="
46
32
  - !ruby/object:Gem::Version
47
- version: '5.0'
33
+ version: '0'
48
34
  type: :development
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '5.0'
55
- - !ruby/object:Gem::Dependency
56
- name: rails
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '4.0'
62
- - - "~>"
63
- - !ruby/object:Gem::Version
64
- version: '5.0'
65
- type: :runtime
66
- prerelease: false
67
- version_requirements: !ruby/object:Gem::Requirement
68
- requirements:
69
- - - "~>"
70
- - !ruby/object:Gem::Version
71
- version: '4.0'
72
- - - "~>"
38
+ - - ">="
73
39
  - !ruby/object:Gem::Version
74
- version: '5.0'
40
+ version: '0'
75
41
  description:
76
42
  email:
77
43
  - danfalcone@gmail.com
@@ -86,12 +52,12 @@ files:
86
52
  - LICENSE.txt
87
53
  - README.md
88
54
  - Rakefile
89
- - bin/console
90
- - bin/setup
55
+ - bin/rails
91
56
  - fixture_validation.gemspec
92
57
  - lib/fixture_validation.rb
58
+ - lib/fixture_validation/engine.rb
93
59
  - lib/fixture_validation/version.rb
94
- - lib/fixture_validation_test.rb
60
+ - lib/generators/fixture_validation_generator.rb
95
61
  homepage: https://github.com/falconed/fixture_validation
96
62
  licenses:
97
63
  - MIT
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "bundler/setup"
4
- require "fixture_validation_test"
5
-
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require "irb"
14
- IRB.start
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here
@@ -1,30 +0,0 @@
1
- # Requires at least one test in the project
2
- # Require 'fixture_validation_test' in test_helper after rails/test_help is required
3
-
4
- class FixtureValidation::Test < ActiveSupport::TestCase
5
- fixtures :all
6
-
7
- test 'fixtures are valid' do
8
- count = 0
9
- klasses = []
10
- fixture_table_names.each do |fixture_name|
11
- klass_name = fixture_name.classify
12
- begin
13
- klasses << klass_name.constantize
14
- rescue NameError
15
- Rails.logger.debug "No model class (#{klass_name}) found for fixture #{fixture_name}"
16
- end
17
- end
18
-
19
- errors = []
20
- klasses.each do |klass|
21
- klass.all.each do |obj|
22
- errors << "Expected #{klass.to_s} fixture #{obj.id} to be valid. Errors: #{obj.errors.to_a.join(', ')}. Attribute values: #{obj.attributes.to_s}." unless obj.valid?
23
- count += 1
24
- end
25
- end
26
-
27
- assert errors.empty?, "\n#{errors.join("\n")}"
28
- Rails.logger.debug "Validated #{count} fixtures"
29
- end
30
- end