diff --git a/.env b/.env index 2f6080e..b0fe633 100644 --- a/.env +++ b/.env @@ -8,3 +8,4 @@ DATABASE_URL_test=postgres://postgres:postgres@postgres/tracking_test # Various other things RAILS_ENV=development +INCONTAINER=true diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..ebfe14f --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,55 @@ +name: CI + +on: + pull_request: + push: + branches: [ master ] + +jobs: + test: + runs-on: ubuntu-latest + + services: + postgres: + image: postgres + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + ports: + - 5432:5432 + options: --health-cmd="pg_isready" --health-interval=10s --health-timeout=5s --health-retries=3 + + # redis: + # image: redis + # ports: + # - 6379:6379 + # options: --health-cmd "redis-cli ping" --health-interval 10s --health-timeout 5s --health-retries 5 + + steps: + - name: Install packages + run: sudo apt-get update && sudo apt-get install --no-install-recommends -y google-chrome-stable curl libjemalloc2 libvips postgresql-client libpq-dev + + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: .ruby-version + bundler-cache: true + + - name: Run tests + env: + RAILS_ENV: test + DATABASE_URL: postgres://postgres:postgres@localhost:5432 + # REDIS_URL: redis://localhost:6379/0 + run: bin/rails spec + # run: bin/rails db:test:prepare spec + + # - name: Keep screenshots from failed system tests + # uses: actions/upload-artifact@v4 + # if: failure() + # with: + # name: screenshots + # path: ${{ github.workspace }}/tmp/capybara + # if-no-files-found: ignore diff --git a/.gitignore b/.gitignore index 5fb66c9..16f1145 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,9 @@ # Ignore master key for decrypting credentials and more. /config/master.key + +# Other random stuff +spec/examples.txt + +/app/assets/builds/* +!/app/assets/builds/.keep diff --git a/.rspec b/.rspec new file mode 100644 index 0000000..9a8e706 --- /dev/null +++ b/.rspec @@ -0,0 +1,3 @@ +--color +--require spec_helper +--format Fuubar diff --git a/.rubocop.yml b/.rubocop.yml index 4bf5098..03e4e9f 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,6 +1,7 @@ require: - rubocop-capybara - rubocop-rails + - rubocop-rspec AllCops: UseCache: false diff --git a/Dockerfile b/Dockerfile index 005b703..b93f116 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,7 @@ WORKDIR /app # Set production environment ENV RAILS_ENV="production" \ - BUNDLE_DEPLOYMENT="1" \ + # BUNDLE_DEPLOYMENT="1" \ BUNDLE_PATH="/usr/local/bundle" \ BUNDLE_WITHOUT="development" @@ -42,9 +42,54 @@ COPY . . RUN bundle exec bootsnap precompile app/ lib/ # Precompiling assets for production without requiring secret RAILS_MASTER_KEY -# RUN SECRET_KEY_BASE_DUMMY=1 bundle exec rake assets:precompile -# RUN SECRET_KEY_BASE_DUMMY=1 ./bin/rails assets:precompile - +RUN SECRET_KEY_BASE_DUMMY=1 ./bin/rails assets:precompile + +# Latest chromedriver to control browser tests +ARG DEBIAN_FRONTEND=noninteractive +SHELL ["/bin/bash", "-c"] +RUN SYSTEM_ARCH=$(arch | sed s/aarch64/arm64/) && \ + if [ "$SYSTEM_ARCH" = "amd64" ]; then \ + mkdir -p /etc/apt/keyrings && \ + curl -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | tee /etc/apt/keyrings/chrome.asc && \ + echo "deb [signed-by=/etc/apt/keyrings/chrome.asc arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" | tee /etc/apt/sources.list.d/google.list && \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + google-chrome-stable && \ + rm -rf /var/lib/apt/lists/* && \ + CHROMEDRIVER_VERSION=$(curl https://chromedriver.storage.googleapis.com/LATEST_RELEASE) && \ + mkdir -p /opt/chromedriver-$CHROMEDRIVER_VERSION && \ + curl -sS -o /tmp/chromedriver_linux64.zip http://chromedriver.storage.googleapis.com/$CHROMEDRIVER_VERSION/chromedriver_linux64.zip && \ + unzip -qq /tmp/chromedriver_linux64.zip -d /opt/chromedriver-$CHROMEDRIVER_VERSION && \ + rm /tmp/chromedriver_linux64.zip && \ + chmod +x /opt/chromedriver-$CHROMEDRIVER_VERSION/chromedriver && \ + ln -fs /opt/chromedriver-$CHROMEDRIVER_VERSION/chromedriver /usr/local/bin/chromedriver ; \ + else \ + apt-get update && \ + echo "============================ 1 =============================" && \ + apt-get install -y --no-install-recommends debian-archive-keyring && \ + echo "============================ 2 =============================" && \ + echo $'Explanation: Allow installing chromium from the debian repo. \n\ +Package: chromium* \n\ +Pin: origin "*.debian.org" \n\ +Pin-Priority: 100 \n\ +\n\ +Explanation: Avoid other packages from the debian repo. \n\ +Package: * \n\ +Pin: origin "*.debian.org" \n\ +Pin-Priority: 1 \n\ +' > /etc/apt/preferences.d/debian-chromium && \ + cat /etc/apt/preferences.d/debian-chromium && \ + echo "============================ 3 =============================" && \ + apt-get update && \ + echo "============================ 4 =============================" && \ + apt-get install -y --no-install-recommends chromium chromium-driver && \ + echo "============================ 5 =============================" && \ + ln -s $(which chromium) /usr/bin/google-chrome && \ + echo "============================ 6 =============================" && \ + rm -rf /var/lib/apt/lists/* && \ + echo "============================ 7 =============================" && \ + echo "Chromium installed for $SYSTEM_ARCH" ; \ + fi # Final stage for app image FROM base @@ -67,4 +112,4 @@ COPY --from=build /app /app ENTRYPOINT ["/app/bin/docker-entrypoint"] # Start the server by default, this can be overwritten at runtime -CMD ["./bin/rails", "server", "-b", "0.0.0.0"] +CMD ["bin/start_server"] diff --git a/Gemfile b/Gemfile index 8f08a5c..1a3d0bc 100644 --- a/Gemfile +++ b/Gemfile @@ -50,10 +50,16 @@ gem "bootsnap", require: false group :development, :test do # See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem gem "debug", platforms: %i[mri windows] + gem "foreman" + gem "rubocop", "1.56.3" + gem "rubocop-capybara" gem "rubocop-rails" + gem "rubocop-rspec" - gem "rubocop-capybara" + gem "rspec-rails", "~> 6.1.0" + + gem "fuubar" end group :development do diff --git a/Gemfile.lock b/Gemfile.lock index 9c4e7a7..d73e6e1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -100,8 +100,13 @@ GEM debug (1.9.2) irb (~> 1.10) reline (>= 0.3.8) + diff-lcs (1.5.1) drb (2.2.1) erubi (1.12.0) + foreman (0.88.1) + fuubar (2.5.1) + rspec-core (~> 3.0) + ruby-progressbar (~> 1.4) globalid (1.2.1) activesupport (>= 6.1) i18n (1.14.5) @@ -211,6 +216,23 @@ GEM reline (0.5.7) io-console (~> 0.5) rexml (3.2.6) + rspec-core (3.13.0) + rspec-support (~> 3.13.0) + rspec-expectations (3.13.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-mocks (3.13.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-rails (6.1.2) + actionpack (>= 6.1) + activesupport (>= 6.1) + railties (>= 6.1) + rspec-core (~> 3.13) + rspec-expectations (~> 3.13) + rspec-mocks (~> 3.13) + rspec-support (~> 3.13) + rspec-support (3.13.1) rubocop (1.56.3) base64 (~> 0.1.1) json (~> 2.3) @@ -227,11 +249,20 @@ GEM parser (>= 3.3.1.0) rubocop-capybara (2.20.0) rubocop (~> 1.41) + rubocop-factory_bot (2.25.1) + rubocop (~> 1.41) rubocop-rails (2.24.1) activesupport (>= 4.2.0) rack (>= 1.1) rubocop (>= 1.33.0, < 2.0) rubocop-ast (>= 1.31.1, < 2.0) + rubocop-rspec (2.29.2) + rubocop (~> 1.40) + rubocop-capybara (~> 2.17) + rubocop-factory_bot (~> 2.22) + rubocop-rspec_rails (~> 2.28) + rubocop-rspec_rails (2.28.3) + rubocop (~> 1.40) ruby-progressbar (1.13.0) rubyzip (2.3.2) selenium-webdriver (4.16.0) @@ -295,14 +326,18 @@ DEPENDENCIES bootsnap capybara debug + foreman + fuubar importmap-rails jbuilder pg (~> 1.1) puma (>= 5.0) rails (~> 7.1.3, >= 7.1.3.2) + rspec-rails (~> 6.1.0) rubocop (= 1.56.3) rubocop-capybara rubocop-rails + rubocop-rspec selenium-webdriver sprockets-rails stimulus-rails diff --git a/Procfile.dev b/Procfile.dev new file mode 100644 index 0000000..3a28793 --- /dev/null +++ b/Procfile.dev @@ -0,0 +1,2 @@ +web: bin/rails server -b "0.0.0.0" +css: bin/rails tailwindcss:watch diff --git a/test/controllers/.keep b/app/assets/builds/.keep similarity index 100% rename from test/controllers/.keep rename to app/assets/builds/.keep diff --git a/app/assets/config/manifest.js b/app/assets/config/manifest.js index 5918193..338a0e8 100644 --- a/app/assets/config/manifest.js +++ b/app/assets/config/manifest.js @@ -1,2 +1,3 @@ //= link_tree ../images //= link_directory ../stylesheets .css +//= link_tree ../builds diff --git a/app/assets/stylesheets/application.tailwind.css b/app/assets/stylesheets/application.tailwind.css index 288b9ab..07b1c92 100644 --- a/app/assets/stylesheets/application.tailwind.css +++ b/app/assets/stylesheets/application.tailwind.css @@ -13,3 +13,7 @@ *= require_tree . *= require_self */ + +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb new file mode 100644 index 0000000..941c3a2 --- /dev/null +++ b/app/controllers/home_controller.rb @@ -0,0 +1,5 @@ +class HomeController < ApplicationController + def index + # @users = User.all + end +end diff --git a/app/views/home/index.erb b/app/views/home/index.erb new file mode 100644 index 0000000..6218c8b --- /dev/null +++ b/app/views/home/index.erb @@ -0,0 +1,3 @@ +

+ Hello world! +

diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index b5a0e07..6c635d2 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -5,11 +5,12 @@ <%= csrf_meta_tags %> <%= csp_meta_tag %> - - <%= stylesheet_link_tag "application", "data-turbo-track": "reload" %> + <%= stylesheet_link_tag "tailwind", "inter-font", "data-turbo-track": "reload" %> - <%= yield %> +
+ <%= yield %> +
diff --git a/bin/dev b/bin/dev new file mode 100755 index 0000000..ad72c7d --- /dev/null +++ b/bin/dev @@ -0,0 +1,16 @@ +#!/usr/bin/env sh + +if ! gem list foreman -i --silent; then + echo "Installing foreman..." + gem install foreman +fi + +# Default to port 3000 if not specified +export PORT="${PORT:-3000}" + +# Let the debug gem allow remote connections, +# but avoid loading until `debugger` is called +export RUBY_DEBUG_OPEN="true" +export RUBY_DEBUG_LAZY="true" + +exec foreman start -f Procfile.dev "$@" diff --git a/bin/start_server b/bin/start_server new file mode 100755 index 0000000..f109578 --- /dev/null +++ b/bin/start_server @@ -0,0 +1,8 @@ +#!/usr/bin/env sh + +if [ "${RAILS_ENV:-}" = "development" ] +then + bin/dev +else + rails server -b "0.0.0.0" +fi diff --git a/config/environments/development.rb b/config/environments/development.rb index 2e7fb48..f330875 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -73,4 +73,6 @@ # Raise error when a before_action's only/except options reference missing actions config.action_controller.raise_on_missing_callback_actions = true + + config.hosts.clear end diff --git a/config/routes.rb b/config/routes.rb index a125ef0..d716284 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -6,5 +6,5 @@ get "up" => "rails/health#show", as: :rails_health_check # Defines the root path route ("/") - # root "posts#index" + root "home#index" end diff --git a/config/tailwind.config.js b/config/tailwind.config.js new file mode 100644 index 0000000..09b0f40 --- /dev/null +++ b/config/tailwind.config.js @@ -0,0 +1,22 @@ +const defaultTheme = require("tailwindcss/defaultTheme"); + +module.exports = { + content: [ + "./public/*.html", + "./app/helpers/**/*.rb", + "./app/javascript/**/*.js", + "./app/views/**/*.{erb,haml,html,slim}", + ], + theme: { + extend: { + fontFamily: { + sans: ["Inter var", ...defaultTheme.fontFamily.sans], + }, + }, + }, + plugins: [ + require("@tailwindcss/forms"), + require("@tailwindcss/typography"), + require("@tailwindcss/container-queries"), + ], +}; diff --git a/spec/models/application_record_spec.rb b/spec/models/application_record_spec.rb new file mode 100644 index 0000000..91cf7c3 --- /dev/null +++ b/spec/models/application_record_spec.rb @@ -0,0 +1,7 @@ +require "rails_helper" + +RSpec.describe ApplicationRecord do + it "is a subclass of ActiveRecord::Base" do + expect(described_class < ActiveRecord::Base).to be true + end +end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb new file mode 100644 index 0000000..7bfe017 --- /dev/null +++ b/spec/rails_helper.rb @@ -0,0 +1,69 @@ +# This file is copied to spec/ when you run 'rails generate rspec:install' +require "spec_helper" +ENV["RAILS_ENV"] ||= "test" +require_relative "../config/environment" +# Prevent database truncation if the environment is production +abort("The Rails environment is running in production mode!") if Rails.env.production? +require "rspec/rails" +# Add additional requires below this line. Rails is not loaded until this point! +require "capybara/rails" +require "selenium/webdriver" + +# Requires supporting ruby files with custom matchers and macros, etc, in +# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are +# run as spec files by default. This means that files in spec/support that end +# in _spec.rb will both be required and run as specs, causing the specs to be +# run twice. It is recommended that you do not name files matching this glob to +# end with _spec.rb. You can configure this pattern with the --pattern +# option on the command line or in ~/.rspec, .rspec or `.rspec-local`. +# +# The following line is provided for convenience purposes. It has the downside +# of increasing the boot-up time by auto-requiring all files in the support +# directory. Alternatively, in the individual `*_spec.rb` files, manually +# require only the support files necessary. +# +# Rails.root.glob('spec/support/**/*.rb').sort.each { |f| require f } + +# Checks for pending migrations and applies them before tests are run. +# If you are not using ActiveRecord, you can remove these lines. +begin + ActiveRecord::Migration.maintain_test_schema! +rescue ActiveRecord::PendingMigrationError => e + abort e.to_s.strip +end +RSpec.configure do |config| + # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures + config.fixture_paths = [ + Rails.root.join("spec/fixtures") + ] + + # If you're not using ActiveRecord, or you'd prefer not to run each of your + # examples within a transaction, remove the following line or assign false + # instead of true. + config.use_transactional_fixtures = true + + # You can uncomment this line to turn off ActiveRecord support entirely. + # config.use_active_record = false + + # RSpec Rails can automatically mix in different behaviours to your tests + # based on their file location, for example enabling you to call `get` and + # `post` in specs under `spec/controllers`. + # + # You can disable this behaviour by removing the line below, and instead + # explicitly tag your specs with their type, e.g.: + # + # RSpec.describe UsersController, type: :controller do + # # ... + # end + # + # The different available types are documented in the features, such as in + # https://rspec.info/features/6-0/rspec-rails + config.infer_spec_type_from_file_location! + + # Filter lines from Rails gems in backtraces. + config.filter_rails_from_backtrace! + # arbitrary gems may also be filtered via: + # config.filter_gems_from_backtrace("gem name") + + config.include Capybara::DSL +end diff --git a/spec/requests/home_spec.rb b/spec/requests/home_spec.rb new file mode 100644 index 0000000..486b4ed --- /dev/null +++ b/spec/requests/home_spec.rb @@ -0,0 +1,10 @@ +require "rails_helper" + +RSpec.describe "Home" do + describe "GET /" do + it "returns http success" do + get "/" + expect(response).to have_http_status(:success) + end + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 0000000..3229f9c --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1,121 @@ +# This file was generated by the `rails generate rspec:install` command. Conventionally, all +# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. +# The generated `.rspec` file contains `--require spec_helper` which will cause +# this file to always be loaded, without a need to explicitly require it in any +# files. +# +# Given that it is always loaded, you are encouraged to keep this file as +# light-weight as possible. Requiring heavyweight dependencies from this file +# will add to the boot time of your test suite on EVERY test run, even for an +# individual file that may not need all of that loaded. Instead, consider making +# a separate helper file that requires the additional dependencies and performs +# the additional setup, and require it from the spec files that actually need +# it. +# +# See https://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration + +require "capybara/rspec" + +RSpec.configure do |config| + # rspec-expectations config goes here. You can use an alternate + # assertion/expectation library such as wrong or the stdlib/minitest + # assertions if you prefer. + config.expect_with :rspec do |expectations| + # This option will default to `true` in RSpec 4. It makes the `description` + # and `failure_message` of custom matchers include text for helper methods + # defined using `chain`, e.g.: + # be_bigger_than(2).and_smaller_than(4).description + # # => "be bigger than 2 and smaller than 4" + # ...rather than: + # # => "be bigger than 2" + expectations.include_chain_clauses_in_custom_matcher_descriptions = true + end + + # rspec-mocks config goes here. You can use an alternate test double + # library (such as bogus or mocha) by changing the `mock_with` option here. + config.mock_with :rspec do |mocks| + # Prevents you from mocking or stubbing a method that does not exist on + # a real object. This is generally recommended, and will default to + # `true` in RSpec 4. + mocks.verify_partial_doubles = true + end + + # This option will default to `:apply_to_host_groups` in RSpec 4 (and will + # have no way to turn it off -- the option exists only for backwards + # compatibility in RSpec 3). It causes shared context metadata to be + # inherited by the metadata hash of host groups and examples, rather than + # triggering implicit auto-inclusion in groups with matching metadata. + config.shared_context_metadata_behavior = :apply_to_host_groups + + # The settings below are suggested to provide a good initial experience + # with RSpec, but feel free to customize to your heart's content. + + # This allows you to limit a spec run to individual examples or groups + # you care about by tagging them with `:focus` metadata. When nothing + # is tagged with `:focus`, all examples get run. RSpec also provides + # aliases for `it`, `describe`, and `context` that include `:focus` + # metadata: `fit`, `fdescribe` and `fcontext`, respectively. + config.filter_run_when_matching :focus + + # Allows RSpec to persist some state between runs in order to support + # the `--only-failures` and `--next-failure` CLI options. We recommend + # you configure your source control system to ignore this file. + config.example_status_persistence_file_path = "spec/examples.txt" + + # Limits the available syntax to the non-monkey patched syntax that is + # recommended. For more details, see: + # https://rspec.info/features/3-12/rspec-core/configuration/zero-monkey-patching-mode/ + config.disable_monkey_patching! + + # Many RSpec users commonly either run the entire suite or an individual + # file, and it's useful to allow more verbose output when running an + # individual spec file. + if config.files_to_run.one? + # Use the documentation formatter for detailed output, + # unless a formatter has already been configured + # (e.g. via a command-line flag). + config.default_formatter = "doc" + end + + # Print the 10 slowest examples and example groups at the + # end of the spec run, to help surface which specs are running + # particularly slow. + config.profile_examples = 5 + + # Run specs in random order to surface order dependencies. If you find an + # order dependency and want to debug it, you can fix the order by providing + # the seed, which is printed after each run. + # --seed 1234 + config.order = :random + + # Seed global randomization in this process using the `--seed` CLI option. + # Setting this allows you to use `--seed` to deterministically reproduce + # test failures related to randomization by passing the same `--seed` value + # as the one that triggered the failure. + Kernel.srand config.seed +end + +# Capybara.register_driver :chrome do |app| +# Capybara::Selenium::Driver.new(app, browser: :chrome) +# end + +# Capybara.register_driver :chrome_headless_container_friendly do |app| +# browser_options = ::Selenium::WebDriver::Chrome::Options.new +# browser_options.args << "--headless" +# browser_options.args << "--disable-gpu" +# # Sandbox cannot be used inside unprivileged containers +# browser_options.args << "--no-sandbox" +# # Forces docker to allocate enough memory to chromedriver for page rendering +# # https://developers.google.com/web/tools/puppeteer/troubleshooting#tips +# browser_options.args << "--disable-dev-shm-usage" +# browser_options.args << "--enable-features=ConversionMeasurement,AttributionReportingCrossAppWeb" +# # browser_options.args << "--remote-debugging-pipe" +# Capybara::Selenium::Driver.new(app, browser: :chrome, options: browser_options) +# end + +# # Capybara 3 and later defaults to using puma. +# Capybara.server = :puma + +# Capybara.javascript_driver = ENV["INCONTAINER"] ? :chrome_headless_container_friendly : :chrome + +# Capybara.default_max_wait_time = 15 diff --git a/spec/support/driver.rb b/spec/support/driver.rb new file mode 100644 index 0000000..91e275b --- /dev/null +++ b/spec/support/driver.rb @@ -0,0 +1,5 @@ +RSpec.configure do |config| + config.before(:each, type: :system) do + driven_by :selenium, using: :headless_chrome, screen_size: [1400, 1400] + end +end diff --git a/spec/system/system_spec.rb b/spec/system/system_spec.rb new file mode 100644 index 0000000..9b5a85b --- /dev/null +++ b/spec/system/system_spec.rb @@ -0,0 +1 @@ +require "rails_helper" diff --git a/test/application_system_test_case.rb b/test/application_system_test_case.rb deleted file mode 100644 index d19212a..0000000 --- a/test/application_system_test_case.rb +++ /dev/null @@ -1,5 +0,0 @@ -require "test_helper" - -class ApplicationSystemTestCase < ActionDispatch::SystemTestCase - driven_by :selenium, using: :chrome, screen_size: [1400, 1400] -end diff --git a/test/channels/application_cable/connection_test.rb b/test/channels/application_cable/connection_test.rb deleted file mode 100644 index 6340bf9..0000000 --- a/test/channels/application_cable/connection_test.rb +++ /dev/null @@ -1,13 +0,0 @@ -require "test_helper" - -module ApplicationCable - class ConnectionTest < ActionCable::Connection::TestCase - # test "connects with cookies" do - # cookies.signed[:user_id] = 42 - # - # connect - # - # assert_equal connection.user_id, "42" - # end - end -end diff --git a/test/fixtures/files/.keep b/test/fixtures/files/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/test/helpers/.keep b/test/helpers/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/test/integration/.keep b/test/integration/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/test/mailers/.keep b/test/mailers/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/test/models/.keep b/test/models/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/test/system/.keep b/test/system/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/test/test_helper.rb b/test/test_helper.rb deleted file mode 100644 index 0c22470..0000000 --- a/test/test_helper.rb +++ /dev/null @@ -1,15 +0,0 @@ -ENV["RAILS_ENV"] ||= "test" -require_relative "../config/environment" -require "rails/test_help" - -module ActiveSupport - class TestCase - # Run tests in parallel with specified workers - parallelize(workers: :number_of_processors) - - # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. - fixtures :all - - # Add more helper methods to be used by all tests here... - end -end