Skip to content

Commit dead1fb

Browse files
committed
basic integration tests
1 parent 5d36e93 commit dead1fb

8 files changed

+226
-6
lines changed

Gemfile

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,17 @@ source 'https://rubygems.org'
22

33
# Specify your gem's dependencies in active_admin_datetimepicker.gemspec
44
gemspec
5+
group :test do
6+
gem 'sprockets-rails', '2.3.3'
7+
gem 'rails', '4.2.0'
8+
gem 'rspec-rails'
9+
gem 'activeadmin', github: 'activeadmin' , ref: 'd787029e5523be2eb2ed99816eb0cecca2b72862'
10+
gem 'coveralls', require: false # Test coverage website. Go to https://coveralls.io
11+
gem 'sass-rails'
12+
gem 'sqlite3'
13+
gem 'launchy'
14+
gem 'database_cleaner'
15+
gem 'capybara'
16+
gem 'selenium-webdriver'
17+
gem 'poltergeist'
18+
end

Rakefile

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,7 @@
1-
require "bundler/gem_tasks"
1+
require "bundler"
2+
require 'rake'
3+
Bundler.setup
4+
Bundler::GemHelper.install_tasks
25

6+
# Import all our rake tasks
7+
FileList['tasks/**/*.rake'].each { |task| import task }
Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
require 'spec_helper'
22

33
describe ActiveAdminDatetimepicker do
4+
45
it 'has a version number' do
56
expect(ActiveAdminDatetimepicker::VERSION).not_to be nil
67
end
78

8-
it 'does something useful' do
9-
expect(false).to eq(true)
10-
end
119
end

spec/filters_and_edit_form_spec.rb

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
require 'spec_helper'
2+
3+
describe 'authors index', type: :feature, js: true do
4+
5+
before do
6+
Author.create!(name: "John", last_name: "Doe")
7+
Author.create!(name: "Jane", last_name: "Roe")
8+
end
9+
10+
before do
11+
add_author_resource
12+
end
13+
14+
context 'index filters' do
15+
before do
16+
visit '/admin/authors'
17+
end
18+
19+
before do
20+
page.find('input#q_birthday_gteq').click
21+
22+
page.find('.xdsoft_datetimepicker', visible: true)
23+
.find('.xdsoft_calendar td.xdsoft_date[data-date="1"]').click
24+
page.find('.xdsoft_datetimepicker', visible: true)
25+
.find('.xdsoft_timepicker.active .xdsoft_time.xdsoft_current').click
26+
27+
page.find('input#q_birthday_lteq').click
28+
29+
page.find('.xdsoft_datetimepicker', visible: true)
30+
.find('.xdsoft_calendar td.xdsoft_date[data-date="20"]').click
31+
page.find('.xdsoft_datetimepicker', visible: true)
32+
.find('.xdsoft_timepicker.active .xdsoft_time.xdsoft_current').click
33+
end
34+
35+
it 'can set date from/to' do
36+
date_from = Date.today.beginning_of_month.strftime("%Y-%m-%d")
37+
date_to = (Date.today.beginning_of_month + 19.days).strftime("%Y-%m-%d")
38+
39+
expect(page.find('input#q_birthday_gteq').value).to start_with(date_from)
40+
expect(page.find('input#q_birthday_lteq').value).to start_with(date_to)
41+
end
42+
end
43+
44+
45+
context 'edit form' do
46+
before do
47+
visit '/admin/authors/new'
48+
end
49+
50+
before do
51+
page.find('#author_birthday').click
52+
53+
page.find('.xdsoft_datetimepicker', visible: true)
54+
.find('.xdsoft_calendar td.xdsoft_date[data-date="1"]').click
55+
page.find('.xdsoft_datetimepicker', visible: true)
56+
.find('.xdsoft_timepicker.active .xdsoft_time.xdsoft_current').click
57+
end
58+
59+
it 'can set birthday' do
60+
date_birthday = Date.today.beginning_of_month.strftime("%Y-%m-%d")
61+
expect(page.find('#author_birthday').value).to start_with(date_birthday)
62+
end
63+
end
64+
65+
end

spec/spec_helper.rb

Lines changed: 74 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,74 @@
1-
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2-
require 'active_admin_datetimepicker'
1+
require 'coveralls'
2+
Coveralls.wear!
3+
4+
$LOAD_PATH.unshift(File.dirname(__FILE__))
5+
$LOAD_PATH << File.expand_path('../support', __FILE__)
6+
7+
ENV['BUNDLE_GEMFILE'] = File.expand_path('../../Gemfile', __FILE__)
8+
require "bundler"
9+
Bundler.setup
10+
11+
ENV['RAILS_ENV'] = 'test'
12+
# Ensure the Active Admin load path is happy
13+
require 'rails'
14+
ENV['RAILS'] = Rails.version
15+
ENV['RAILS_ROOT'] = File.expand_path("../rails/rails-#{ENV['RAILS']}", __FILE__)
16+
# Create the test app if it doesn't exists
17+
unless File.exists?(ENV['RAILS_ROOT'])
18+
system 'rake setup'
19+
end
20+
21+
require 'active_model'
22+
# require ActiveRecord to ensure that Ransack loads correctly
23+
require 'active_record'
24+
require 'active_admin'
25+
ActiveAdmin.application.load_paths = [ENV['RAILS_ROOT'] + "/app/admin"]
26+
require ENV['RAILS_ROOT'] + '/config/environment.rb'
27+
# Disabling authentication in specs so that we don't have to worry about
28+
# it allover the place
29+
ActiveAdmin.application.authentication_method = false
30+
ActiveAdmin.application.current_user_method = false
31+
32+
require 'rspec/rails'
33+
require 'support/admin'
34+
require 'capybara/rails'
35+
require 'capybara/rspec'
36+
37+
38+
RSpec.configure do |config|
39+
config.use_transactional_fixtures = false
40+
41+
config.before(:suite) do
42+
DatabaseCleaner.strategy = :truncation
43+
DatabaseCleaner.clean_with(:truncation)
44+
end
45+
config.before(:each) do
46+
DatabaseCleaner.strategy = :truncation
47+
DatabaseCleaner.start
48+
end
49+
config.after(:each) do
50+
DatabaseCleaner.clean
51+
end
52+
53+
end
54+
55+
56+
57+
Capybara.default_selector = :css
58+
59+
Capybara.configure do |config|
60+
config.match = :prefer_exact
61+
config.ignore_hidden_elements = false
62+
end
63+
64+
Capybara.javascript_driver = :selenium
65+
66+
RSpec.configure do |config|
67+
config.before(:each, js: true) do
68+
page.driver.browser.manage.window.maximize if page.driver.browser.respond_to?(:manage)
69+
end
70+
end
71+
72+
Capybara.register_driver :rack_test do |app|
73+
Capybara::RackTest::Driver.new(app, :headers => { 'HTTP_USER_AGENT' => 'Capybara' })
74+
end

spec/support/admin.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
def add_author_resource(options = {}, &block)
2+
3+
ActiveAdmin.register Author do
4+
config.filters = true
5+
6+
filter :birthday, as: :date_time_range
7+
8+
form do |f|
9+
f.semantic_errors *f.object.errors.keys
10+
11+
f.inputs 'General' do
12+
f.input :name
13+
f.input :birthday, as: :date_time_picker
14+
end
15+
16+
f.actions
17+
end
18+
end
19+
Rails.application.reload_routes!
20+
21+
end

spec/support/rails_template.rb

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# Rails template to build the sample app for specs
2+
3+
generate :model, 'author name:string{10}:uniq last_name:string birthday:date'
4+
generate :model, 'post title:string:uniq body:text author:references'
5+
6+
#Add validation
7+
inject_into_file "app/models/author.rb", " validates_presence_of :name\n validates_uniqueness_of :last_name\n", after: "Base\n"
8+
inject_into_file "app/models/post.rb", " validates_presence_of :author\n", after: ":author\n"
9+
10+
# Configure default_url_options in test environment
11+
inject_into_file "config/environments/test.rb", " config.action_mailer.default_url_options = { :host => 'example.com' }\n", after: "config.cache_classes = true\n"
12+
13+
# Add our local Active Admin to the load path
14+
inject_into_file "config/environment.rb",
15+
"\n$LOAD_PATH.unshift('#{File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'lib'))}')\nrequire \"active_admin\"\n",
16+
after: "require File.expand_path('../application', __FILE__)"
17+
18+
run "rm Gemfile"
19+
20+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
21+
22+
generate :'active_admin:install --skip-users'
23+
generate :'formtastic:install'
24+
25+
# Install active_admin_date_time_datetimepicker assets
26+
inject_into_file "app/assets/stylesheets/active_admin.scss",
27+
"@import \"active_admin_datetimepicker\";\n",
28+
after: "@import \"active_admin/base\";\n"
29+
30+
inject_into_file "app/assets/javascripts/active_admin.js.coffee",
31+
"#= require active_admin_datetimepicker\n",
32+
after: "#= require active_admin/base\n"
33+
34+
run "rm -r test"
35+
run "rm -r spec"
36+
37+
route "root :to => 'admin/dashboard#index'"
38+
39+
rake "db:migrate"

tasks/test.rake

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
desc "Creates a test rails app for the specs to run against"
2+
task :setup do
3+
require 'rails/version'
4+
system("mkdir spec/rails") unless File.exists?("spec/rails")
5+
system "bundle exec rails new spec/rails/rails-#{Rails::VERSION::STRING} -m spec/support/rails_template.rb --skip-spring"
6+
end

0 commit comments

Comments
 (0)