From e690b253242ad3e270490e1f51272935987856ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=B0smail=20Akbudak?= Date: Fri, 21 Dec 2018 14:42:36 +0300 Subject: [PATCH] Code refactor for test specs and change sidekiq_redis environment key --- spec/features/new_default_project_spec.rb | 108 +++--------------- ...not_default_no_skip_docker_project_spec.rb | 18 +++ ...ot_default_no_skip_sidekiq_project_spec.rb | 18 +++ spec/features/new_not_default_project_spec.rb | 51 +++------ spec/files/README_DEFAULT.md | 39 +++++++ spec/files/README_ONLY_NO_SKIP_DOCKER.md | 36 ++++++ spec/files/README_ONLY_NO_SKIP_SIDEKIQ.md | 26 +++++ spec/files/README_SKIP_ALL.md | 23 ++++ spec/spec_helper.rb | 9 -- spec/support/config_test_helper.rb | 36 ------ spec/support/cybele_test_helpers.rb | 12 +- spec/support/devise_test_helper.rb | 45 -------- spec/support/dotenv_test_helper.rb | 31 ----- spec/support/error_pages_test_helper.rb | 24 ---- spec/support/force_ssl_test_helper.rb | 24 ---- spec/support/git_ignore_test_helper.rb | 10 -- spec/support/locale_language_test_helper.rb | 43 ------- spec/support/pronto_test_helpers.rb | 41 ------- spec/support/responder_test_helper.rb | 32 ------ .../shared_examples/config_test_helper.rb | 36 ++++++ .../shared_examples/devise_test_helper.rb | 45 ++++++++ .../docker_development_environment.rb | 78 +++++++++++++ .../shared_examples/dotenv_test_helper.rb | 31 +++++ .../error_pages_test_helper.rb | 24 ++++ .../shared_examples/force_ssl_test_helper.rb | 24 ++++ .../shared_examples/git_ignore_test_helper.rb | 12 ++ .../locale_language_test_helper.rb | 43 +++++++ .../shared_examples/pronto_test_helper.rb | 41 +++++++ .../shared_examples/responder_test_helper.rb | 32 ++++++ .../shared_examples/sidekiq_environment.rb | 29 +++++ templates/README.md.erb | 2 +- .../docker_env_local_sample_sidekiq.erb | 2 +- .../docker_env_staging_production_sidekiq.erb | 2 +- templates/sidekiq/sidekiq.rb.erb | 2 +- 34 files changed, 597 insertions(+), 432 deletions(-) create mode 100644 spec/features/new_not_default_no_skip_docker_project_spec.rb create mode 100644 spec/features/new_not_default_no_skip_sidekiq_project_spec.rb create mode 100644 spec/files/README_DEFAULT.md create mode 100644 spec/files/README_ONLY_NO_SKIP_DOCKER.md create mode 100644 spec/files/README_ONLY_NO_SKIP_SIDEKIQ.md create mode 100644 spec/files/README_SKIP_ALL.md delete mode 100644 spec/support/config_test_helper.rb delete mode 100644 spec/support/devise_test_helper.rb delete mode 100644 spec/support/dotenv_test_helper.rb delete mode 100644 spec/support/error_pages_test_helper.rb delete mode 100644 spec/support/force_ssl_test_helper.rb delete mode 100644 spec/support/git_ignore_test_helper.rb delete mode 100644 spec/support/locale_language_test_helper.rb delete mode 100644 spec/support/pronto_test_helpers.rb delete mode 100644 spec/support/responder_test_helper.rb create mode 100644 spec/support/shared_examples/config_test_helper.rb create mode 100644 spec/support/shared_examples/devise_test_helper.rb create mode 100644 spec/support/shared_examples/docker_development_environment.rb create mode 100644 spec/support/shared_examples/dotenv_test_helper.rb create mode 100644 spec/support/shared_examples/error_pages_test_helper.rb create mode 100644 spec/support/shared_examples/force_ssl_test_helper.rb create mode 100644 spec/support/shared_examples/git_ignore_test_helper.rb create mode 100644 spec/support/shared_examples/locale_language_test_helper.rb create mode 100644 spec/support/shared_examples/pronto_test_helper.rb create mode 100644 spec/support/shared_examples/responder_test_helper.rb create mode 100644 spec/support/shared_examples/sidekiq_environment.rb diff --git a/spec/features/new_default_project_spec.rb b/spec/features/new_default_project_spec.rb index d635f78..3e9b182 100644 --- a/spec/features/new_default_project_spec.rb +++ b/spec/features/new_default_project_spec.rb @@ -24,35 +24,9 @@ expect(database_file).to match(/^ database: #{app_name}_staging/) end - it 'uses sidekiq' do - gemfile_file = content('Gemfile') - expect(gemfile_file).to match(/^gem 'sidekiq'/) - expect(gemfile_file).to match(/^gem 'sidekiq-cron'/) - expect(gemfile_file).to match(/^gem 'cocaine'/) - expect(gemfile_file).to match(/^gem 'devise-async'/) - - sidekiq_file = content('config/sidekiq.yml') - expect(sidekiq_file).to match('[high_priority, 2]') - - sidekiq_schedule_file = content('config/sidekiq_schedule.yml') - expect(sidekiq_schedule_file).to match(/-> Daily at midnight/) + it_behaves_like 'uses sidekiq' - initializers_file = content('config/initializers/sidekiq.rb') - expect(initializers_file).to match("^require 'sidekiq'") - expect(initializers_file).to match("^require 'sidekiq/web'") - - routes_file = content('config/routes.rb') - expect(routes_file).to match("^require 'sidekiq/web'") - expect(routes_file).to match("^require 'sidekiq/cron/web'") - expect(routes_file).to match(/# ========== Sidekiq ==========/) - - rake_file = content('lib/tasks/sidekiq.rake') - expect(rake_file).to match(/^namespace :sidekiq/) - end - - it 'uses responders' do - responder_test - end + it_behaves_like 'uses responders' it 'uses cybele_version' do expect(File).to exist(file_project_path('VERSION.txt')) @@ -127,9 +101,7 @@ expect(show_for_tr_yml_file).to match('show_for') end - it 'uses config and staging file' do - config_test - end + it_behaves_like 'uses config' it 'uses recipient_interceptor' do gemfile_file = content('Gemfile') @@ -139,9 +111,7 @@ expect(config_staging_file).to match('RecipientInterceptor.new') end - it 'uses locale_language' do - locale_language_test - end + it_behaves_like 'uses locale_language' it 'uses simple_form' do gemfile_file = content('Gemfile') @@ -160,14 +130,9 @@ expect(simple_form_tr_yml_file).to match('simple_form') end - it 'control .env files' do - dotenv_test - end + it_behaves_like 'has .env files' it 'uses mailer' do - gemfile_file = content('Gemfile') - expect(gemfile_file).to match("gem 'mailtrap'") - expect(File).to exist(file_project_path('config/settings/production.yml')) expect(File).to exist(file_project_path('config/settings/staging.yml')) @@ -194,17 +159,11 @@ expect(locale_file).to match('Bullet') end - it 'uses devise' do - devise_test - end + it_behaves_like 'uses devise' - it 'uses error_pages' do - error_pages_test - end + it_behaves_like 'uses error_pages' - it 'uses gitignore' do - git_ignore_test - end + it_behaves_like 'uses gitignore' it 'uses asset files' do gemfile_file = content('Gemfile') @@ -404,53 +363,14 @@ expect(application_mailer).to match('Settings.email.noreply') end - it 'uses ssl_setting' do - force_ssl_test - end - - it 'uses docker development environment' do - - file_exist_test( - %w[ - docker-compose.yml - Dockerfile - bin/start-app.sh - bin/start-sidekiq.sh - ] - ) - - file_exist_test( - %w[ - .env.sample - .env.local - .environments/.env.local - ] - ) do |env| - file = content(env) - expect(file).to match('REDISTOGO_URL=redis://redis:6379/0') - expect(file).to match('RACK_ENV=development') - expect(file).to match('POSTGRESQL_HOST=postgres') - expect(file).to match('REDIS_HOST=redis') - end + it_behaves_like 'uses ssl_setting' - file_exist_test( - %w[ - .environments/.env.staging - .environments/.env.production - ] - ) do |env| - expect(content(env)).to match('REDISTOGO_URL=') - end - end + it_behaves_like 'uses docker development environment' - it 'uses pronto' do - pronto_test - end - - it 'uses guardfile' do - gemfile_file = content('Gemfile') - expect(gemfile_file).to match("gem 'guard'") + it_behaves_like 'uses pronto' - expect(File).to exist(file_project_path('Guardfile')) + it 'match readme' do + gemfile_file = content('README.md') + expect(gemfile_file).to match(file_content('README_DEFAULT.md')) end end diff --git a/spec/features/new_not_default_no_skip_docker_project_spec.rb b/spec/features/new_not_default_no_skip_docker_project_spec.rb new file mode 100644 index 0000000..e371ef5 --- /dev/null +++ b/spec/features/new_not_default_no_skip_docker_project_spec.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe 'Create new project without default configuration and no-skip docker' do + before(:all) do + remove_project_directory + run_cybele(cybele_not_default_parameters(no_skips: %w[docker])) + setup_app_dependencies + end + + it_behaves_like 'uses docker development environment without sidekiq' + + it 'match readme' do + gemfile_file = content('README.md') + expect(gemfile_file).to match(file_content('README_ONLY_NO_SKIP_DOCKER.md')) + end +end diff --git a/spec/features/new_not_default_no_skip_sidekiq_project_spec.rb b/spec/features/new_not_default_no_skip_sidekiq_project_spec.rb new file mode 100644 index 0000000..825a3d5 --- /dev/null +++ b/spec/features/new_not_default_no_skip_sidekiq_project_spec.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe 'Create new project without default configuration and no-skip sidekiq' do + before(:all) do + remove_project_directory + run_cybele(cybele_not_default_parameters(no_skips: %w[sidekiq])) + setup_app_dependencies + end + + it_behaves_like 'uses sidekiq' + + it 'match readme' do + gemfile_file = content('README.md') + expect(gemfile_file).to match(file_content('README_ONLY_NO_SKIP_SIDEKIQ.md')) + end +end diff --git a/spec/features/new_not_default_project_spec.rb b/spec/features/new_not_default_project_spec.rb index 7d87004..dc2e272 100644 --- a/spec/features/new_not_default_project_spec.rb +++ b/spec/features/new_not_default_project_spec.rb @@ -45,9 +45,7 @@ expect(routes_file).not_to match("^require 'sidekiq/cron/web'") end - it 'uses responders' do - responder_test - end + it_behaves_like 'uses responders' it 'uses rollbar' do gemfile_file = content('Gemfile') @@ -115,13 +113,9 @@ ) end - it 'uses config and staging file' do - config_test - end + it_behaves_like 'uses config' - it 'uses locale_language' do - locale_language_test - end + it_behaves_like 'uses locale_language' it 'uses recipient_interceptor' do gemfile_file = content('Gemfile') @@ -158,14 +152,9 @@ ) end - it 'control .env files' do - dotenv_test - end + it_behaves_like 'has .env files' it 'uses mailer' do - gemfile_file = content('Gemfile') - expect(gemfile_file).to match("gem 'mailtrap'") - file_exist_test( %w[ config/settings/production.yml @@ -188,17 +177,11 @@ expect(File).not_to exist(file_project_path('app/views/layouts/application.html.haml')) end - it 'uses devise' do - devise_test - end + it_behaves_like 'uses devise' - it 'uses error_pages' do - error_pages_test - end + it_behaves_like 'uses error_pages' - it 'uses gitignore' do - git_ignore_test - end + it_behaves_like 'uses gitignore' it 'do not use asset files' do gemfile_file = content('Gemfile') @@ -356,9 +339,7 @@ expect(application_mailer).to match('Settings.email.noreply') end - it 'uses ssl_setting' do - force_ssl_test - end + it_behaves_like 'uses ssl_setting' it "don't use docker development environment" do file_not_exist_test( @@ -377,7 +358,7 @@ .environments/.env.local ] ) do |env| - expect(content(env)).not_to match('REDISTOGO_URL=redis://redis:6379/0') + expect(content(env)).not_to match('SIDEKIG_REDIS_URL=redis://redis:6379/0') end file_exist_test( @@ -386,18 +367,14 @@ .environments/.env.production ] ) do |env| - expect(content(env)).not_to match('REDISTOGO_URL=') + expect(content(env)).not_to match('SIDEKIG_REDIS_URL=') end end - it 'uses pronto' do - pronto_test - end - - it 'uses guardfile' do - gemfile_file = content('Gemfile') - expect(gemfile_file).to match("gem 'guard'") + it_behaves_like 'uses pronto' - expect(File).to exist(file_project_path('Guardfile')) + it 'match readme' do + gemfile_file = content('README.md') + expect(gemfile_file).to match(file_content('README_SKIP_ALL.md')) end end diff --git a/spec/files/README_DEFAULT.md b/spec/files/README_DEFAULT.md new file mode 100644 index 0000000..3d064dc --- /dev/null +++ b/spec/files/README_DEFAULT.md @@ -0,0 +1,39 @@ +# Dummy_app + +# TODOs +- Change email sender domain address and basic_auth info in `config/settings.yml` +- Change email sender domain address in `config/initializers/devise.rb` +- Create `.pronto.yml` file from `example.pronto.yml` file + +# Infos +- Edit secret keys +➜ ✗ EDITOR=vi bin/rails credentials:edit + + +# Docker development +- run following commands on terminal +➜ ✗ docker-compose build +➜ ✗ docker-compose run app bundle install +➜ ✗ docker-compose run app bundle exec rails db:create db:migrate db:seed +➜ ✗ docker-compose up +- open in your browser localhost:3000 or lvh.me:3000 +- If you want to access rails console run this command before +➜ ✗ docker-compose run app bundle install --binstubs +➜ ✗ docker-compose run app bundle exec rails c + +# Local development + +- Change SIDEKIG_REDIS_URL and POSTGRESQL_HOST environment in `.env.local` file + +- run following commands on terminal +➜ ✗ bundle exec rails server +- open in your browser localhost:3000 or lvh.me:3000 + +➜ ✗ redis-server +➜ ✗ bundle exec rake sidekiq:start + +# Development +➜ ✗ pronto run +➜ ✗ pronto run -r haml +- On feature branch +➜ ✗ pronto run -c origin/develop \ No newline at end of file diff --git a/spec/files/README_ONLY_NO_SKIP_DOCKER.md b/spec/files/README_ONLY_NO_SKIP_DOCKER.md new file mode 100644 index 0000000..6f4281b --- /dev/null +++ b/spec/files/README_ONLY_NO_SKIP_DOCKER.md @@ -0,0 +1,36 @@ +# Dummy_app + +# TODOs +- Change email sender domain address and basic_auth info in `config/settings.yml` +- Change email sender domain address in `config/initializers/devise.rb` +- Create `.pronto.yml` file from `example.pronto.yml` file + +# Infos +- Edit secret keys +➜ ✗ EDITOR=vi bin/rails credentials:edit + + +# Docker development +- run following commands on terminal +➜ ✗ docker-compose build +➜ ✗ docker-compose run app bundle install +➜ ✗ docker-compose run app bundle exec rails db:create db:migrate db:seed +➜ ✗ docker-compose up +- open in your browser localhost:3000 or lvh.me:3000 +- If you want to access rails console run this command before +➜ ✗ docker-compose run app bundle install --binstubs +➜ ✗ docker-compose run app bundle exec rails c + +# Local development + +- Change POSTGRESQL_HOST environment in `.env.local` file + +- run following commands on terminal +➜ ✗ bundle exec rails server +- open in your browser localhost:3000 or lvh.me:3000 + +# Development +➜ ✗ pronto run +➜ ✗ pronto run -r haml +- On feature branch +➜ ✗ pronto run -c origin/develop \ No newline at end of file diff --git a/spec/files/README_ONLY_NO_SKIP_SIDEKIQ.md b/spec/files/README_ONLY_NO_SKIP_SIDEKIQ.md new file mode 100644 index 0000000..756521c --- /dev/null +++ b/spec/files/README_ONLY_NO_SKIP_SIDEKIQ.md @@ -0,0 +1,26 @@ +# Dummy_app + +# TODOs +- Change email sender domain address and basic_auth info in `config/settings.yml` +- Change email sender domain address in `config/initializers/devise.rb` +- Create `.pronto.yml` file from `example.pronto.yml` file + +# Infos +- Edit secret keys +➜ ✗ EDITOR=vi bin/rails credentials:edit + + +# Local development + +- run following commands on terminal +➜ ✗ bundle exec rails server +- open in your browser localhost:3000 or lvh.me:3000 + +➜ ✗ redis-server +➜ ✗ bundle exec rake sidekiq:start + +# Development +➜ ✗ pronto run +➜ ✗ pronto run -r haml +- On feature branch +➜ ✗ pronto run -c origin/develop \ No newline at end of file diff --git a/spec/files/README_SKIP_ALL.md b/spec/files/README_SKIP_ALL.md new file mode 100644 index 0000000..4f76234 --- /dev/null +++ b/spec/files/README_SKIP_ALL.md @@ -0,0 +1,23 @@ +# Dummy_app + +# TODOs +- Change email sender domain address and basic_auth info in `config/settings.yml` +- Change email sender domain address in `config/initializers/devise.rb` +- Create `.pronto.yml` file from `example.pronto.yml` file + +# Infos +- Edit secret keys +➜ ✗ EDITOR=vi bin/rails credentials:edit + + +# Local development + +- run following commands on terminal +➜ ✗ bundle exec rails server +- open in your browser localhost:3000 or lvh.me:3000 + +# Development +➜ ✗ pronto run +➜ ✗ pronto run -r haml +- On feature branch +➜ ✗ pronto run -c origin/develop \ No newline at end of file diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 9760ef5..ab998c3 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -11,16 +11,7 @@ RSpec.configure do |config| config.include CybeleTestHelpers - config.include DotenvTestHelper - config.include ConfigTestHelper - config.include DeviseTestHelper - config.include LocaleLanguageTestHelper - config.include ResponderTestHelper - config.include ErrorPagesTestHelper - config.include GitIgnoreTestHelper config.include MailTestHelpers - config.include ForceSSLTestHelper - config.include ProntoTestHelpers config.before(:all) do create_tmp_directory diff --git a/spec/support/config_test_helper.rb b/spec/support/config_test_helper.rb deleted file mode 100644 index 806f4bd..0000000 --- a/spec/support/config_test_helper.rb +++ /dev/null @@ -1,36 +0,0 @@ -# frozen_string_literal: true - -module ConfigTestHelper - def config_test - gemfile_file = content('Gemfile') - expect(gemfile_file).to match(/^gem 'config'/) - expect(File).not_to exist(file_project_path('config/settings.local.yml')) - - config_development_file_test - config_staging_file_test - config_production_file_test - config_test_file_test - end - - private - - def config_development_file_test - config_development_file = content('config/environments/development.rb') - expect(config_development_file).to match(/^Rails.application.configure/) - end - - def config_staging_file_test - config_staging_file = content('config/environments/staging.rb') - expect(config_staging_file).to match(/^Rails.application.configure/) - end - - def config_production_file_test - config_production_file = content('config/environments/production.rb') - expect(config_production_file).to match(/^Rails.application.configure/) - end - - def config_test_file_test - config_test_file = content('config/environments/test.rb') - expect(config_test_file).to match(/^Rails.application.configure/) - end -end diff --git a/spec/support/cybele_test_helpers.rb b/spec/support/cybele_test_helpers.rb index ffb4981..3b8259d 100644 --- a/spec/support/cybele_test_helpers.rb +++ b/spec/support/cybele_test_helpers.rb @@ -23,8 +23,12 @@ def run_cybele(arguments = nil) end end - def cybele_not_default_parameters - '--database=sqlite3 --skip-create-database --skip-sidekiq --skip-simple-form --skip-show-for --skip-haml --skip-docker --skip-view-files' + def cybele_not_default_parameters(no_skips: []) + commands = %w[sidekiq simple-form show-for haml docker view-files] - no_skips + skips = commands.map do |command| + "--skip-#{command}" + end + '--database=sqlite3 ' + skips.join(' ') end def content(file_path) @@ -99,6 +103,10 @@ def file_not_exist_test(files) end end + def file_content(fixture_name) + IO.read(Pathname.new("#{root_path}/spec/files/#{fixture_name}")) + end + private def tmp_path diff --git a/spec/support/devise_test_helper.rb b/spec/support/devise_test_helper.rb deleted file mode 100644 index 98a5a72..0000000 --- a/spec/support/devise_test_helper.rb +++ /dev/null @@ -1,45 +0,0 @@ -# frozen_string_literal: true - -module DeviseTestHelper - def devise_test - gemfile_file = content('Gemfile') - expect(gemfile_file).to match(/^gem 'devise'/) - - devise_initializers_test - devise_route_file_test - devise_model_file_test - file_control_test - end - - private - - def devise_initializers_test - initializers_devise = content('config/initializers/devise.rb') - expect(initializers_devise).to match('mailer') - expect(initializers_devise).to match('mailer_sender') - - filter_parameter_logging = content('config/initializers/filter_parameter_logging.rb') - expect(filter_parameter_logging).to match(':password') - expect(filter_parameter_logging).to match(':password_confirmation') - end - - def devise_route_file_test - devise_route = content('config/routes.rb') - expect(devise_route).to match('devise_for :users') - end - - def devise_model_file_test # rubocop:disable Metrics/AbcSize - devise_model_file = content('app/models/user.rb') - expect(devise_model_file).to match(':database_authenticatable') - expect(devise_model_file).to match(':registerable') - expect(devise_model_file).to match(':recoverable') - expect(devise_model_file).to match(':rememberable') - expect(devise_model_file).to match(':trackable') - expect(devise_model_file).to match(':validatable') - end - - def file_control_test - expect(File).to exist(file_project_path('config/locales/devise.en.yml')) - expect(File).to exist(file_project_path('config/locales/devise.tr.yml')) - end -end diff --git a/spec/support/dotenv_test_helper.rb b/spec/support/dotenv_test_helper.rb deleted file mode 100644 index dd4361e..0000000 --- a/spec/support/dotenv_test_helper.rb +++ /dev/null @@ -1,31 +0,0 @@ -# frozen_string_literal: true - -module DotenvTestHelper - def dotenv_test - gemfile_file = content('Gemfile') - expect(gemfile_file).to match(/^gem 'dotenv-rails'/) - - env_file_test - env_staging_file_test - env_production_file_test - end - - private - - def env_file_test - %w[.env.sample .env.local .environments/.env.local].each do |env| - expect(File).to exist(file_project_path(env)) - expect(content(env)).to match('ROOT_PATH=http://localhost:3000') - end - end - - def env_staging_file_test - env_staging_file = content('.environments/.env.staging') - expect(env_staging_file).to match('ROOT_PATH=https://staging-dummy_app.herokuapp.com') - end - - def env_production_file_test - env_production_file = content('.environments/.env.production') - expect(env_production_file).to match('ROOT_PATH=https://dummy_app.herokuapp.com') - end -end diff --git a/spec/support/error_pages_test_helper.rb b/spec/support/error_pages_test_helper.rb deleted file mode 100644 index 5b80f21..0000000 --- a/spec/support/error_pages_test_helper.rb +++ /dev/null @@ -1,24 +0,0 @@ -# frozen_string_literal: true - -module ErrorPagesTestHelper - def error_pages_test - controller_file_test - routes_file_test - end - - private - - def controller_file_test # rubocop:disable Metrics/AbcSize - application_controller_file = content('app/controllers/application_controller.rb') - expect(application_controller_file).to match('rescue_from Exception') - expect(application_controller_file).to match('rescue_from ActiveRecord::RecordNotFound') - expect(application_controller_file).to match('rescue_from ActionController::RoutingError') - expect(application_controller_file).to match('server_error') - expect(application_controller_file).to match('page_not_found') - end - - def routes_file_test - route_file = content('config/routes.rb') - expect(route_file).to match('unmatched_route') - end -end diff --git a/spec/support/force_ssl_test_helper.rb b/spec/support/force_ssl_test_helper.rb deleted file mode 100644 index 852d92e..0000000 --- a/spec/support/force_ssl_test_helper.rb +++ /dev/null @@ -1,24 +0,0 @@ -# frozen_string_literal: true - -module ForceSSLTestHelper - def force_ssl_test - %w[staging production].each do |env| - expect(content("config/environments/#{env}.rb")).to match('config.force_ssl') - end - force_ssl_environment_test - end - - private - - def force_ssl_environment_test - %w[ - .env.sample - .environments/.env.local - .environments/.env.staging - .environments/.env.production - ].each do |env| - expect(File).to exist(file_project_path(env)) - expect(content(env)).to match('RAILS_FORCE_SSL=') - end - end -end diff --git a/spec/support/git_ignore_test_helper.rb b/spec/support/git_ignore_test_helper.rb deleted file mode 100644 index 80c2164..0000000 --- a/spec/support/git_ignore_test_helper.rb +++ /dev/null @@ -1,10 +0,0 @@ -# frozen_string_literal: true - -module GitIgnoreTestHelper - def git_ignore_test - application_controller_file = content('.gitignore') - expect(application_controller_file).to match('.DS_Store') - expect(application_controller_file).to match('.secret') - expect(application_controller_file).to match('.env') - end -end diff --git a/spec/support/locale_language_test_helper.rb b/spec/support/locale_language_test_helper.rb deleted file mode 100644 index 5c07d36..0000000 --- a/spec/support/locale_language_test_helper.rb +++ /dev/null @@ -1,43 +0,0 @@ -# frozen_string_literal: true - -module LocaleLanguageTestHelper - def locale_language_test - expect(File).to exist(file_project_path('config/locales/en.yml')) - - file_content_control_test - english_file_test - turkish_file_test - end - - private - - def file_content_control_test - locale_file = content('config/locales/tr.yml') - expect(locale_file).to match('phone:') - expect(locale_file).to match('date:') - expect(locale_file).to match('time:') - expect(locale_file).to match('number:') - end - - def english_file_test - locale_file = content('config/locales/mailer.en.yml') - expect(locale_file).to match('mailer:') - - locale_file = content('config/locales/models.en.yml') - expect(locale_file).to match('activerecord:') - - locale_file = content('config/locales/view.en.yml') - expect(locale_file).to match('view:') - end - - def turkish_file_test - locale_file = content('config/locales/mailer.tr.yml') - expect(locale_file).to match('mailer:') - - locale_file = content('config/locales/models.tr.yml') - expect(locale_file).to match('activerecord:') - - locale_file = content('config/locales/view.tr.yml') - expect(locale_file).to match('view:') - end -end diff --git a/spec/support/pronto_test_helpers.rb b/spec/support/pronto_test_helpers.rb deleted file mode 100644 index 7dcb973..0000000 --- a/spec/support/pronto_test_helpers.rb +++ /dev/null @@ -1,41 +0,0 @@ -# frozen_string_literal: true - -module ProntoTestHelpers - def pronto_test - gemfile_file = content('Gemfile') - pronto_gems.each do |gem| - expect(gemfile_file).to match(gem) - end - file_exist_test( - %w[ - example.pronto.yml - .pronto.yml - .haml-lint.yml - config.reek - .rubocop.yml - bin/rubo - ] - ) - pronto_gitignore_test - end - - private - - def pronto_gems - [ - "gem 'pronto'", - "gem 'pronto-brakeman'", - "gem 'pronto-fasterer'", - "gem 'pronto-flay'", - "gem 'pronto-haml'", - "gem 'pronto-poper'", - "gem 'pronto-reek'", - "gem 'pronto-rubocop'" - ] - end - - def pronto_gitignore_test - gemfile_file = content('.gitignore') - expect(gemfile_file).to match('.pronto.yml') - end -end diff --git a/spec/support/responder_test_helper.rb b/spec/support/responder_test_helper.rb deleted file mode 100644 index e038d40..0000000 --- a/spec/support/responder_test_helper.rb +++ /dev/null @@ -1,32 +0,0 @@ -# frozen_string_literal: true - -module ResponderTestHelper - def responder_test - gemfile_file = content('Gemfile') - expect(gemfile_file).to match(/^gem 'responders'/) - - lib_file = content('lib/application_responder.rb') - expect(lib_file).to match(/^class ApplicationResponder/) - - controller_file_test - i18n_file_test - end - - private - - def controller_file_test - controller_file = content('app/controllers/application_controller.rb') - expect(controller_file).to match("^require 'application_responder'") - expect(controller_file).to match('# self.responder = ApplicationResponder') - expect(controller_file).to match('respond_to :html, :js, :json') - end - - def i18n_file_test # rubocop:disable Metrics/AbcSize - expect(File).to exist(file_project_path('config/locales/responders.en.yml')) - locale_file = content('config/locales/responders.tr.yml') - expect(locale_file).not_to match('# alert:') - expect(locale_file).to match('create:') - expect(locale_file).to match('update:') - expect(locale_file).to match('destroy:') - end -end diff --git a/spec/support/shared_examples/config_test_helper.rb b/spec/support/shared_examples/config_test_helper.rb new file mode 100644 index 0000000..6742d30 --- /dev/null +++ b/spec/support/shared_examples/config_test_helper.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +shared_examples 'uses config' do + context do + it do + gemfile_file = content('Gemfile') + expect(gemfile_file).to match(/^gem 'config'/) + expect(File).not_to exist(file_project_path('config/settings.local.yml')) + + config_development_file_test + config_staging_file_test + config_production_file_test + config_test_file_test + end + + def config_development_file_test + config_development_file = content('config/environments/development.rb') + expect(config_development_file).to match(/^Rails.application.configure/) + end + + def config_staging_file_test + config_staging_file = content('config/environments/staging.rb') + expect(config_staging_file).to match(/^Rails.application.configure/) + end + + def config_production_file_test + config_production_file = content('config/environments/production.rb') + expect(config_production_file).to match(/^Rails.application.configure/) + end + + def config_test_file_test + config_test_file = content('config/environments/test.rb') + expect(config_test_file).to match(/^Rails.application.configure/) + end + end +end diff --git a/spec/support/shared_examples/devise_test_helper.rb b/spec/support/shared_examples/devise_test_helper.rb new file mode 100644 index 0000000..6a558b3 --- /dev/null +++ b/spec/support/shared_examples/devise_test_helper.rb @@ -0,0 +1,45 @@ +# frozen_string_literal: true + +shared_examples 'uses devise' do + context do + it do + gemfile_file = content('Gemfile') + expect(gemfile_file).to match(/^gem 'devise'/) + + devise_initializers_test + devise_route_file_test + devise_model_file_test + file_control_test + end + + def devise_initializers_test + initializers_devise = content('config/initializers/devise.rb') + expect(initializers_devise).to match('mailer') + expect(initializers_devise).to match('mailer_sender') + + filter_parameter_logging = content('config/initializers/filter_parameter_logging.rb') + expect(filter_parameter_logging).to match(':password') + expect(filter_parameter_logging).to match(':password_confirmation') + end + + def devise_route_file_test + devise_route = content('config/routes.rb') + expect(devise_route).to match('devise_for :users') + end + + def devise_model_file_test # rubocop:disable Metrics/AbcSize + devise_model_file = content('app/models/user.rb') + expect(devise_model_file).to match(':database_authenticatable') + expect(devise_model_file).to match(':registerable') + expect(devise_model_file).to match(':recoverable') + expect(devise_model_file).to match(':rememberable') + expect(devise_model_file).to match(':trackable') + expect(devise_model_file).to match(':validatable') + end + + def file_control_test + expect(File).to exist(file_project_path('config/locales/devise.en.yml')) + expect(File).to exist(file_project_path('config/locales/devise.tr.yml')) + end + end +end diff --git a/spec/support/shared_examples/docker_development_environment.rb b/spec/support/shared_examples/docker_development_environment.rb new file mode 100644 index 0000000..e6a1b94 --- /dev/null +++ b/spec/support/shared_examples/docker_development_environment.rb @@ -0,0 +1,78 @@ +# frozen_string_literal: true + +shared_examples 'uses docker development environment' do + it do + file_exist_test( + %w[ + docker-compose.yml + Dockerfile + bin/start-app.sh + bin/start-sidekiq.sh + ] + ) + + file_exist_test( + %w[ + .env.sample + .env.local + .environments/.env.local + ] + ) do |env| + file = content(env) + expect(file).to match('SIDEKIG_REDIS_URL=redis://redis:6379/0') + expect(file).to match('RACK_ENV=development') + expect(file).to match('POSTGRESQL_HOST=postgres') + expect(file).to match('REDIS_HOST=redis') + end + + file_exist_test( + %w[ + .environments/.env.staging + .environments/.env.production + ] + ) do |env| + expect(content(env)).to match('SIDEKIG_REDIS_URL=') + end + end +end + +shared_examples 'uses docker development environment without sidekiq' do + it do + file_exist_test( + %w[ + docker-compose.yml + Dockerfile + bin/start-app.sh + ] + ) + + file_not_exist_test( + %w[ + bin/start-sidekiq.sh + ] + ) + + file_exist_test( + %w[ + .env.sample + .env.local + .environments/.env.local + ] + ) do |env| + file = content(env) + expect(file).not_to match('SIDEKIG_REDIS_URL=redis://redis:6379/0') + expect(file).to match('RACK_ENV=development') + expect(file).to match('POSTGRESQL_HOST=postgres') + expect(file).not_to match('REDIS_HOST=redis') + end + + file_exist_test( + %w[ + .environments/.env.staging + .environments/.env.production + ] + ) do |env| + expect(content(env)).not_to match('SIDEKIG_REDIS_URL=') + end + end +end diff --git a/spec/support/shared_examples/dotenv_test_helper.rb b/spec/support/shared_examples/dotenv_test_helper.rb new file mode 100644 index 0000000..298ac5c --- /dev/null +++ b/spec/support/shared_examples/dotenv_test_helper.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +shared_examples 'has .env files' do + context do + it do + gemfile_file = content('Gemfile') + expect(gemfile_file).to match(/^gem 'dotenv-rails'/) + + env_file_test + env_staging_file_test + env_production_file_test + end + + def env_file_test + %w[.env.sample .env.local .environments/.env.local].each do |env| + expect(File).to exist(file_project_path(env)) + expect(content(env)).to match('ROOT_PATH=http://localhost:3000') + end + end + + def env_staging_file_test + env_staging_file = content('.environments/.env.staging') + expect(env_staging_file).to match('ROOT_PATH=https://staging-dummy_app.herokuapp.com') + end + + def env_production_file_test + env_production_file = content('.environments/.env.production') + expect(env_production_file).to match('ROOT_PATH=https://dummy_app.herokuapp.com') + end + end +end diff --git a/spec/support/shared_examples/error_pages_test_helper.rb b/spec/support/shared_examples/error_pages_test_helper.rb new file mode 100644 index 0000000..0139c7e --- /dev/null +++ b/spec/support/shared_examples/error_pages_test_helper.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +shared_examples 'uses error_pages' do + context do + it do + controller_file_test + routes_file_test + end + + def controller_file_test # rubocop:disable Metrics/AbcSize + application_controller_file = content('app/controllers/application_controller.rb') + expect(application_controller_file).to match('rescue_from Exception') + expect(application_controller_file).to match('rescue_from ActiveRecord::RecordNotFound') + expect(application_controller_file).to match('rescue_from ActionController::RoutingError') + expect(application_controller_file).to match('server_error') + expect(application_controller_file).to match('page_not_found') + end + + def routes_file_test + route_file = content('config/routes.rb') + expect(route_file).to match('unmatched_route') + end + end +end diff --git a/spec/support/shared_examples/force_ssl_test_helper.rb b/spec/support/shared_examples/force_ssl_test_helper.rb new file mode 100644 index 0000000..5a69d1d --- /dev/null +++ b/spec/support/shared_examples/force_ssl_test_helper.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +shared_examples 'uses ssl_setting' do + context do + it do + %w[staging production].each do |env| + expect(content("config/environments/#{env}.rb")).to match('config.force_ssl') + end + force_ssl_environment_test + end + + def force_ssl_environment_test + %w[ + .env.sample + .environments/.env.local + .environments/.env.staging + .environments/.env.production + ].each do |env| + expect(File).to exist(file_project_path(env)) + expect(content(env)).to match('RAILS_FORCE_SSL=') + end + end + end +end diff --git a/spec/support/shared_examples/git_ignore_test_helper.rb b/spec/support/shared_examples/git_ignore_test_helper.rb new file mode 100644 index 0000000..d659706 --- /dev/null +++ b/spec/support/shared_examples/git_ignore_test_helper.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +shared_examples 'uses gitignore' do + context do + it do + application_controller_file = content('.gitignore') + expect(application_controller_file).to match('.DS_Store') + expect(application_controller_file).to match('.secret') + expect(application_controller_file).to match('.env') + end + end +end diff --git a/spec/support/shared_examples/locale_language_test_helper.rb b/spec/support/shared_examples/locale_language_test_helper.rb new file mode 100644 index 0000000..7aa53d8 --- /dev/null +++ b/spec/support/shared_examples/locale_language_test_helper.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +shared_examples 'uses locale_language' do + context do + it do + expect(File).to exist(file_project_path('config/locales/en.yml')) + + file_content_control_test + english_file_test + turkish_file_test + end + + def file_content_control_test + locale_file = content('config/locales/tr.yml') + expect(locale_file).to match('phone:') + expect(locale_file).to match('date:') + expect(locale_file).to match('time:') + expect(locale_file).to match('number:') + end + + def english_file_test + locale_file = content('config/locales/mailer.en.yml') + expect(locale_file).to match('mailer:') + + locale_file = content('config/locales/models.en.yml') + expect(locale_file).to match('activerecord:') + + locale_file = content('config/locales/view.en.yml') + expect(locale_file).to match('view:') + end + + def turkish_file_test + locale_file = content('config/locales/mailer.tr.yml') + expect(locale_file).to match('mailer:') + + locale_file = content('config/locales/models.tr.yml') + expect(locale_file).to match('activerecord:') + + locale_file = content('config/locales/view.tr.yml') + expect(locale_file).to match('view:') + end + end +end diff --git a/spec/support/shared_examples/pronto_test_helper.rb b/spec/support/shared_examples/pronto_test_helper.rb new file mode 100644 index 0000000..545661c --- /dev/null +++ b/spec/support/shared_examples/pronto_test_helper.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +shared_examples 'uses pronto' do + context do + it do + gemfile_file = content('Gemfile') + pronto_gems.each do |gem| + expect(gemfile_file).to match(gem) + end + file_exist_test( + %w[ + example.pronto.yml + .pronto.yml + .haml-lint.yml + .erb-lint.yml + .rubocop.yml + bin/rubo + ] + ) + pronto_gitignore_test + end + + def pronto_gems + [ + "gem 'pronto'", + "gem 'pronto-brakeman'", + "gem 'pronto-erb_lint'", + "gem 'pronto-fasterer'", + "gem 'pronto-flay'", + "gem 'pronto-haml'", + "gem 'pronto-poper'", + "gem 'pronto-rubocop'" + ] + end + + def pronto_gitignore_test + gemfile_file = content('.gitignore') + expect(gemfile_file).to match('.pronto.yml') + end + end +end diff --git a/spec/support/shared_examples/responder_test_helper.rb b/spec/support/shared_examples/responder_test_helper.rb new file mode 100644 index 0000000..b31056b --- /dev/null +++ b/spec/support/shared_examples/responder_test_helper.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +shared_examples 'uses responders' do + context do + it do + gemfile_file = content('Gemfile') + expect(gemfile_file).to match(/^gem 'responders'/) + + lib_file = content('lib/application_responder.rb') + expect(lib_file).to match(/^class ApplicationResponder/) + + controller_file_test + i18n_file_test + end + + def controller_file_test + controller_file = content('app/controllers/application_controller.rb') + expect(controller_file).to match("^require 'application_responder'") + expect(controller_file).to match('# self.responder = ApplicationResponder') + expect(controller_file).to match('respond_to :html, :js, :json') + end + + def i18n_file_test # rubocop:disable Metrics/AbcSize + expect(File).to exist(file_project_path('config/locales/responders.en.yml')) + locale_file = content('config/locales/responders.tr.yml') + expect(locale_file).not_to match('# alert:') + expect(locale_file).to match('create:') + expect(locale_file).to match('update:') + expect(locale_file).to match('destroy:') + end + end +end diff --git a/spec/support/shared_examples/sidekiq_environment.rb b/spec/support/shared_examples/sidekiq_environment.rb new file mode 100644 index 0000000..0a7642f --- /dev/null +++ b/spec/support/shared_examples/sidekiq_environment.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +shared_examples 'uses sidekiq' do + it do + gemfile_file = content('Gemfile') + expect(gemfile_file).to match(/^gem 'sidekiq'/) + expect(gemfile_file).to match(/^gem 'sidekiq-cron'/) + expect(gemfile_file).to match(/^gem 'cocaine'/) + expect(gemfile_file).to match(/^gem 'devise-async'/) + + sidekiq_file = content('config/sidekiq.yml') + expect(sidekiq_file).to match('[high_priority, 2]') + + sidekiq_schedule_file = content('config/sidekiq_schedule.yml') + expect(sidekiq_schedule_file).to match(/-> Daily at midnight/) + + initializers_file = content('config/initializers/sidekiq.rb') + expect(initializers_file).to match("^require 'sidekiq'") + expect(initializers_file).to match("^require 'sidekiq/web'") + + routes_file = content('config/routes.rb') + expect(routes_file).to match("^require 'sidekiq/web'") + expect(routes_file).to match("^require 'sidekiq/cron/web'") + expect(routes_file).to match(/# ========== Sidekiq ==========/) + + rake_file = content('lib/tasks/sidekiq.rake') + expect(rake_file).to match(/^namespace :sidekiq/) + end +end diff --git a/templates/README.md.erb b/templates/README.md.erb index 65e804a..4ae900b 100644 --- a/templates/README.md.erb +++ b/templates/README.md.erb @@ -23,7 +23,7 @@ <% end %> # Local development <% unless @options[:skip_docker] %> -- Change <%= @options[:skip_sidekiq] ? '' : 'REDISTOGO_URL and' %> POSTGRESQL_HOST environment in `.env.local` file +- Change <%= @options[:skip_sidekiq] ? '' : 'SIDEKIG_REDIS_URL and' %> POSTGRESQL_HOST environment in `.env.local` file <% end %> - run following commands on terminal ➜ ✗ bundle exec rails server diff --git a/templates/docker/docker_env_local_sample_sidekiq.erb b/templates/docker/docker_env_local_sample_sidekiq.erb index 380febe..c15da9b 100644 --- a/templates/docker/docker_env_local_sample_sidekiq.erb +++ b/templates/docker/docker_env_local_sample_sidekiq.erb @@ -1,2 +1,2 @@ -REDISTOGO_URL=redis://redis:6379/0 +SIDEKIG_REDIS_URL=redis://redis:6379/0 diff --git a/templates/docker/docker_env_staging_production_sidekiq.erb b/templates/docker/docker_env_staging_production_sidekiq.erb index 5dde62f..103af3b 100644 --- a/templates/docker/docker_env_staging_production_sidekiq.erb +++ b/templates/docker/docker_env_staging_production_sidekiq.erb @@ -1,2 +1,2 @@ -REDISTOGO_URL= +SIDEKIG_REDIS_URL= diff --git a/templates/sidekiq/sidekiq.rb.erb b/templates/sidekiq/sidekiq.rb.erb index 1e9a419..f67541d 100644 --- a/templates/sidekiq/sidekiq.rb.erb +++ b/templates/sidekiq/sidekiq.rb.erb @@ -3,7 +3,7 @@ require 'sidekiq/web' labels = "<%= app_name.parameterize %>_#{Rails.env}" settings = { - url: ENV['REDISTOGO_URL'] || 'redis://localhost:6379/0' + url: ENV['SIDEKIG_REDIS_URL'] || 'redis://localhost:6379/0' } Sidekiq.configure_server { |config| config.redis = settings }