aktion_test_rails 0.1.1 → 0.2.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/.gitignore +3 -0
- data/.rvmrc +1 -1
- data/.travis.yml +3 -6
- data/CHANGELOG.md +35 -0
- data/Gemfile +18 -3
- data/README.md +12 -1
- data/Rakefile +2 -8
- data/aktion_test_rails.gemspec +1 -4
- data/lib/aktion_test_rails/load.rb +18 -0
- data/lib/aktion_test_rails/matchers/active_admin/flash.rb +93 -0
- data/lib/aktion_test_rails/matchers/active_admin.rb +50 -0
- data/lib/aktion_test_rails/matchers/factory_girl/validation.rb +58 -0
- data/lib/aktion_test_rails/matchers/factory_girl.rb +7 -2
- data/lib/aktion_test_rails/support/active_admin/request/sign_in.rb +17 -0
- data/lib/aktion_test_rails/support/active_admin/request.rb +16 -0
- data/lib/aktion_test_rails/support/capybara/rack_app.rb +13 -0
- data/lib/aktion_test_rails/support/rails/model_builder.rb +59 -0
- data/lib/aktion_test_rails/version.rb +1 -1
- data/lib/aktion_test_rails.rb +56 -3
- data/spec/aktion_test_rails/model_builder_spec.rb +68 -0
- data/spec/matchers/active_admin/flash_spec.rb +141 -0
- data/spec/matchers/factory_girl/validation_spec.rb +71 -0
- data/spec/rails_app/.gitignore +15 -0
- data/spec/rails_app/Rakefile +7 -0
- data/spec/rails_app/app/admin/admin_user.rb +22 -0
- data/spec/rails_app/app/admin/dashboard.rb +33 -0
- data/spec/rails_app/app/assets/images/.gitkeep +0 -0
- data/spec/rails_app/app/assets/javascripts/active_admin.js +1 -0
- data/spec/rails_app/app/assets/javascripts/application.js +15 -0
- data/spec/rails_app/app/assets/stylesheets/active_admin.css.scss +29 -0
- data/spec/rails_app/app/assets/stylesheets/application.css +13 -0
- data/spec/rails_app/app/controllers/application_controller.rb +3 -0
- data/spec/rails_app/app/models/admin_user.rb +11 -0
- data/spec/rails_app/app/views/layouts/application.html.erb +14 -0
- data/spec/rails_app/config/application.rb +19 -0
- data/spec/rails_app/config/boot.rb +3 -0
- data/spec/rails_app/config/database.yml +5 -0
- data/spec/rails_app/config/environment.rb +2 -0
- data/spec/rails_app/config/environments/test.rb +37 -0
- data/spec/rails_app/config/initializers/active_admin.rb +7 -0
- data/spec/rails_app/config/initializers/devise.rb +11 -0
- data/spec/rails_app/config/initializers/secret_token.rb +1 -0
- data/spec/rails_app/config/initializers/session_store.rb +1 -0
- data/spec/rails_app/config/initializers/wrap_parameters.rb +6 -0
- data/spec/rails_app/config/locales/devise.en.yml +58 -0
- data/spec/rails_app/config/locales/en.yml +9 -0
- data/spec/rails_app/config/routes.rb +5 -0
- data/spec/rails_app/config.ru +4 -0
- data/spec/rails_app/db/migrate/20121126141714_devise_create_admin_users.rb +52 -0
- data/spec/rails_app/db/migrate/20121126141717_create_admin_notes.rb +17 -0
- data/spec/rails_app/db/migrate/20121126141718_move_admin_notes_to_comments.rb +25 -0
- data/spec/rails_app/public/404.html +26 -0
- data/spec/rails_app/public/422.html +26 -0
- data/spec/rails_app/public/500.html +25 -0
- data/spec/rails_app/public/favicon.ico +0 -0
- data/spec/rails_app/public/robots.txt +5 -0
- data/spec/rails_app/script/rails +6 -0
- data/spec/requests/active_admin/sign_in_spec.rb +34 -0
- data/spec/spec_active_record.rb +13 -0
- data/spec/spec_base.rb +28 -0
- data/spec/spec_rails.rb +18 -0
- metadata +99 -60
- data/Appraisals +0 -15
- data/gemfiles/3.0.gemfile +0 -8
- data/gemfiles/3.0.gemfile.lock +0 -175
- data/gemfiles/3.1.gemfile +0 -10
- data/gemfiles/3.1.gemfile.lock +0 -196
- data/gemfiles/3.2.gemfile +0 -10
- data/gemfiles/3.2.gemfile.lock +0 -194
- data/lib/aktion_test_rails/class_builder.rb +0 -29
- data/lib/aktion_test_rails/matchers/factory_girl/have_a_valid_factory.rb +0 -49
- data/lib/aktion_test_rails/matchers/integrations/rspec.rb +0 -9
- data/lib/aktion_test_rails/matchers.rb +0 -1
- data/lib/aktion_test_rails/model_builder.rb +0 -70
- data/spec/matchers/factory_girl/have_a_valid_factory_spec.rb +0 -64
- data/spec/spec_helper.rb +0 -27
data/.gitignore
CHANGED
data/.rvmrc
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
# First we specify our desired <ruby>[@<gemset>], the @gemset name is optional,
|
7
7
|
# Only full ruby name is supported here, for short names use:
|
8
8
|
# echo "rvm use 1.9.3" > .rvmrc
|
9
|
-
environment_id="ruby-1.9.3-
|
9
|
+
environment_id="ruby-1.9.3-p327@aktion_test_rails"
|
10
10
|
|
11
11
|
# Uncomment the following lines if you want to verify rvm version per project
|
12
12
|
# rvmrc_rvm_version="1.15.6 (stable)" # 1.10.1 seams as a safe start
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# v0.2.0
|
2
|
+
|
3
|
+
* ActiveAdmin request spec sign in support
|
4
|
+
* ActiveAdmin flash matcher
|
5
|
+
* Moved class builder to AktionTest
|
6
|
+
* Improve gem load footprint by moving heavy gems to a different lib file to be loaded
|
7
|
+
in spec helpers
|
8
|
+
* Relocate code into modules that can be mixed in and lazy loaded easier.
|
9
|
+
* Begin supporting Rubinius and JRuby
|
10
|
+
|
11
|
+
# v0.1.1
|
12
|
+
|
13
|
+
Bump gem versions
|
14
|
+
|
15
|
+
# v0.1.0
|
16
|
+
|
17
|
+
* Added valid factory rspec matcher
|
18
|
+
* Added class builder/model builder
|
19
|
+
|
20
|
+
# v0.0.2
|
21
|
+
|
22
|
+
More gems
|
23
|
+
|
24
|
+
* capybara-webkit
|
25
|
+
* shoulda-matchers
|
26
|
+
|
27
|
+
# v0.0.1
|
28
|
+
|
29
|
+
Add some rails testing gems
|
30
|
+
|
31
|
+
* rspec-rails
|
32
|
+
* cucumber-rails
|
33
|
+
* factory_girl_rails
|
34
|
+
* capybara
|
35
|
+
* and more...
|
data/Gemfile
CHANGED
@@ -1,7 +1,22 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
gem 'rails', '~> 3.2.9'
|
4
|
+
gem 'activeadmin', '~> 0.5.0'
|
5
|
+
gem 'jquery-rails'
|
6
|
+
|
7
|
+
group :assets do
|
8
|
+
gem 'coffee-rails', '~> 3.2.1'
|
9
|
+
gem 'sass-rails', '~> 3.2.3'
|
10
|
+
end
|
5
11
|
|
6
|
-
|
12
|
+
platforms :ruby do
|
13
|
+
gem 'sqlite3'
|
14
|
+
end
|
7
15
|
|
16
|
+
platforms :jruby do
|
17
|
+
gem 'activerecord-jdbc-adapter'
|
18
|
+
gem 'activerecord-jdbcsqlite3-adapter'
|
19
|
+
gem 'jdbc-sqlite3'
|
20
|
+
end
|
21
|
+
|
22
|
+
gemspec
|
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# AktionTestRails
|
2
2
|
|
3
3
|
[](https://travis-ci.org/AktionLab/aktion_test_rails)
|
4
|
+
[](https://gemnasium.com/AktionLab/aktion_test_rails)
|
4
5
|
|
5
6
|
Testing gem that includes a common set of testing gems, along with a suite of rspec matchers
|
6
7
|
|
@@ -20,7 +21,17 @@ Or install it yourself as:
|
|
20
21
|
|
21
22
|
## Usage
|
22
23
|
|
23
|
-
|
24
|
+
By default requiring aktion_test_rails will only setup some constants for lazy loading.
|
25
|
+
|
26
|
+
require 'aktion_test_rails/load'
|
27
|
+
|
28
|
+
Adding that line to your testing bootstrap (ie spec/test helper) will load up the full
|
29
|
+
testing environment. Most everything else can be lazy loaded on a per spec basis using
|
30
|
+
includes.
|
31
|
+
|
32
|
+
describe SomeClass do
|
33
|
+
include AktionTestRails::Support:Rails::ModelBuilder
|
34
|
+
end
|
24
35
|
|
25
36
|
## Contributing
|
26
37
|
|
data/Rakefile
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
#!/usr/bin/env rake
|
2
|
-
require 'bundler/setup'
|
2
|
+
#require 'bundler/setup'
|
3
3
|
require "bundler/gem_tasks"
|
4
4
|
require 'rspec/core/rake_task'
|
5
|
-
require 'appraisal'
|
6
5
|
|
7
6
|
RSpec::Core::RakeTask.new do |t|
|
8
7
|
t.pattern = "spec/**/*_spec.rb"
|
@@ -10,9 +9,4 @@ RSpec::Core::RakeTask.new do |t|
|
|
10
9
|
t.verbose = false
|
11
10
|
end
|
12
11
|
|
13
|
-
|
14
|
-
task :all => ["appraisal:cleanup", "appraisal:install"] do
|
15
|
-
exec('rake appraisal spec')
|
16
|
-
end
|
17
|
-
|
18
|
-
task :default => [:all]
|
12
|
+
task :default => [:spec]
|
data/aktion_test_rails.gemspec
CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |gem|
|
|
15
15
|
gem.require_paths = ["lib"]
|
16
16
|
gem.version = AktionTestRails::VERSION
|
17
17
|
|
18
|
-
gem.add_dependency 'aktion_test', '0.
|
18
|
+
gem.add_dependency 'aktion_test', '~> 0.1.1'
|
19
19
|
gem.add_dependency 'rspec-rails', '~> 2.12.0'
|
20
20
|
gem.add_dependency 'factory_girl_rails', '~> 4.1.0'
|
21
21
|
gem.add_dependency 'database_cleaner', '~> 0.9.1'
|
@@ -23,7 +23,4 @@ Gem::Specification.new do |gem|
|
|
23
23
|
gem.add_dependency 'poltergeist', '~> 1.0.2'
|
24
24
|
gem.add_dependency 'launchy', '~> 2.1.2'
|
25
25
|
gem.add_dependency 'shoulda-matchers', '~> 1.4.1'
|
26
|
-
|
27
|
-
gem.add_development_dependency 'appraisal', '~> 0.5.1'
|
28
|
-
gem.add_development_dependency 'rails', '~> 3.0'
|
29
26
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'rspec-rails'
|
2
|
+
require 'rspec/rails'
|
3
|
+
require 'shoulda-matchers'
|
4
|
+
require 'factory_girl_rails'
|
5
|
+
require 'timecop'
|
6
|
+
|
7
|
+
RSpec.configure do |config|
|
8
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
9
|
+
config.mock_with :rspec
|
10
|
+
|
11
|
+
config.before :each do
|
12
|
+
Timecop.return if defined? Timecop
|
13
|
+
end
|
14
|
+
|
15
|
+
config.after :each do
|
16
|
+
Timecop.return if defined? Timecop
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
module AktionTestRails
|
2
|
+
module Matchers
|
3
|
+
module ActiveAdmin
|
4
|
+
module Flash
|
5
|
+
def have_flash(type = nil, message = nil)
|
6
|
+
type, message = nil, type if message.nil? && type.is_a?(String)
|
7
|
+
FlashMessageMatcher.new(type, message)
|
8
|
+
end
|
9
|
+
|
10
|
+
class FlashMessageMatcher < AktionTest::Matchers::Base
|
11
|
+
def initialize(type, message)
|
12
|
+
@type, @message = type, message
|
13
|
+
end
|
14
|
+
|
15
|
+
def matches?(page)
|
16
|
+
@page = page
|
17
|
+
has_flash? and has_flash_message?
|
18
|
+
end
|
19
|
+
|
20
|
+
def negative_failure_message
|
21
|
+
"Did not expect #{expectation}\n#{negative_problem}"
|
22
|
+
end
|
23
|
+
|
24
|
+
protected
|
25
|
+
|
26
|
+
def expectation
|
27
|
+
expect = "the page to have a flash"
|
28
|
+
unless @type.nil?
|
29
|
+
expect << " #{@type.to_s}"
|
30
|
+
end
|
31
|
+
unless @message.nil?
|
32
|
+
expect << " of `#{@message}'"
|
33
|
+
end
|
34
|
+
"#{expect}."
|
35
|
+
end
|
36
|
+
|
37
|
+
def problem
|
38
|
+
message = "\n"
|
39
|
+
unless has_flash?
|
40
|
+
if @page.has_selector? '.flash'
|
41
|
+
message << "Found a flash #{find_flash_type}.\n"
|
42
|
+
else
|
43
|
+
message << "No flash was found.\n"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
unless has_flash_message?
|
47
|
+
if @page.has_selector? '.flash'
|
48
|
+
message << "expected: #{@message}\n got: #{flash_message}\n"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
message
|
52
|
+
end
|
53
|
+
|
54
|
+
def negative_problem
|
55
|
+
message = ""
|
56
|
+
if @type.nil? && @message.nil?
|
57
|
+
message << "\nFound a flash #{find_flash_type} of `#{flash_message}'."
|
58
|
+
end
|
59
|
+
if !@type.nil? && has_flash?
|
60
|
+
message << "\nFlash is a #{find_flash_type}."
|
61
|
+
end
|
62
|
+
if !@message.nil? && has_flash_message?
|
63
|
+
message << "\nFlash message is `#{flash_message}'."
|
64
|
+
end
|
65
|
+
"#{message}\n"
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
def find_flash_type
|
71
|
+
@page.find('.flash')[:class].split(' ')[1].gsub('flash_','')
|
72
|
+
end
|
73
|
+
|
74
|
+
def has_flash?
|
75
|
+
@page.has_selector? flash_selector
|
76
|
+
end
|
77
|
+
|
78
|
+
def has_flash_message?
|
79
|
+
@message.nil? || flash_message == @message
|
80
|
+
end
|
81
|
+
|
82
|
+
def flash_message
|
83
|
+
@page.find('.flash').text
|
84
|
+
end
|
85
|
+
|
86
|
+
def flash_selector
|
87
|
+
@type.nil? ? '.flash' : ".flash_#{@type.to_s}"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module AktionTestRails
|
2
|
+
module Matchers
|
3
|
+
# = Matchers for ActiveAdmin specs
|
4
|
+
#
|
5
|
+
# == Flash
|
6
|
+
#
|
7
|
+
# This method will test for the presence or absence of
|
8
|
+
# a flash message. The flash type and message are optional,
|
9
|
+
# if both are omitted then the matcher will simply look for
|
10
|
+
# a flash block. If the type is specified then it will also
|
11
|
+
# check that the flash type is a match.
|
12
|
+
#
|
13
|
+
# The matcher expects the subject to be a page from a request spec.
|
14
|
+
#
|
15
|
+
# describe 'AdminUser List' do
|
16
|
+
# describe 'destroy' do
|
17
|
+
# it 'display a flash message after deleting an admin user' do
|
18
|
+
# admin = AdminUser.create!(...)
|
19
|
+
# visit admin_admin_users_path
|
20
|
+
# within("tr#admin_user_#{admin.id}") { click_button 'Delete' }
|
21
|
+
# page.should have_flash(:notice, 'Admin deleted sucessfully.')
|
22
|
+
# # OR
|
23
|
+
# page.should have_flash('Admin deleted sucessfully.')
|
24
|
+
# # OR
|
25
|
+
# page.should have_flash(:notice)
|
26
|
+
# # OR
|
27
|
+
# page.should have_flash
|
28
|
+
# end
|
29
|
+
# end
|
30
|
+
# end
|
31
|
+
#
|
32
|
+
# Alternatively the opposing matchers also work as expected.
|
33
|
+
#
|
34
|
+
# # will fail if a flash exists
|
35
|
+
# should_not have_flash
|
36
|
+
# # will fail if a flash notice exists
|
37
|
+
# should_not have_flash(:notice)
|
38
|
+
# # will fail if a flash with the given message exists
|
39
|
+
# should_not have_flash('message')
|
40
|
+
# # will fail if a flash notice exists with the given message
|
41
|
+
# should_not have_flash(:notice, 'message')
|
42
|
+
module ActiveAdmin
|
43
|
+
extend ActiveSupport::Concern
|
44
|
+
|
45
|
+
included { include Flash }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
ActiveSupport.run_load_hooks(:aktion_test_rails_matchers_active_admin)
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module AktionTestRails
|
2
|
+
module Matchers
|
3
|
+
module FactoryGirl
|
4
|
+
module Validation
|
5
|
+
def have_valid_factory(factory_name)
|
6
|
+
ValidFactoryMatcher.new(factory_name)
|
7
|
+
end
|
8
|
+
|
9
|
+
class ValidFactoryMatcher < AktionTest::Matchers::Base
|
10
|
+
def initialize(factory_name)
|
11
|
+
@factory_name = factory_name
|
12
|
+
end
|
13
|
+
|
14
|
+
def matches?(subject)
|
15
|
+
factory_exists? && factory_creates_valid_record?
|
16
|
+
end
|
17
|
+
|
18
|
+
def expectation
|
19
|
+
":#{@factory_name} to be a valid factory."
|
20
|
+
end
|
21
|
+
|
22
|
+
def problem
|
23
|
+
message = "\n"
|
24
|
+
if factory_exists?
|
25
|
+
if @record.errors.full_messages.any?
|
26
|
+
message << "Failed Validations:\n"
|
27
|
+
@record.errors.full_messages.each do |error|
|
28
|
+
message << " #{error}\n"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
else
|
32
|
+
message << "No factory by the name :#{@factory_name} found\n"
|
33
|
+
end
|
34
|
+
message
|
35
|
+
end
|
36
|
+
|
37
|
+
def negative_problem
|
38
|
+
end
|
39
|
+
|
40
|
+
def description
|
41
|
+
"has a valid factory named :#{@factory_name}"
|
42
|
+
end
|
43
|
+
|
44
|
+
protected
|
45
|
+
|
46
|
+
def factory_exists?
|
47
|
+
::FactoryGirl.factories.registered?(@factory_name)
|
48
|
+
end
|
49
|
+
|
50
|
+
def factory_creates_valid_record?
|
51
|
+
@record = ::FactoryGirl.build(@factory_name)
|
52
|
+
@record.valid?
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'aktion_test_rails/matchers/factory_girl/have_a_valid_factory'
|
2
|
-
|
3
1
|
module AktionTestRails
|
4
2
|
module Matchers
|
5
3
|
# = Matchers for FactoryGirl factories
|
@@ -11,6 +9,13 @@ module AktionTestRails
|
|
11
9
|
# end
|
12
10
|
#
|
13
11
|
module FactoryGirl
|
12
|
+
extend ActiveSupport::Concern
|
13
|
+
|
14
|
+
included do
|
15
|
+
include Validation
|
16
|
+
end
|
14
17
|
end
|
15
18
|
end
|
16
19
|
end
|
20
|
+
|
21
|
+
ActiveSupport.run_load_hooks(:aktion_test_rails_matchers_active_admin)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module AktionTestRails
|
2
|
+
module Support
|
3
|
+
module ActiveAdmin
|
4
|
+
module Request
|
5
|
+
module SignIn
|
6
|
+
def sign_in_active_admin
|
7
|
+
@admin ||= FactoryGirl.create(:admin_user)
|
8
|
+
visit new_admin_user_session_path
|
9
|
+
fill_in 'Email', with: @admin.email
|
10
|
+
fill_in 'Password', with: 'password'
|
11
|
+
click_button 'Login'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module AktionTestRails
|
2
|
+
module Support
|
3
|
+
module ActiveAdmin
|
4
|
+
module Request
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
include SignIn
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
ActiveSupport.run_load_hooks(:aktion_test_rails_support_active_admin_request)
|
16
|
+
|