Skip to content

Commit

Permalink
Add rspec tests
Browse files Browse the repository at this point in the history
  • Loading branch information
VanessaAoki committed May 6, 2021
1 parent b71ee20 commit cf279f4
Show file tree
Hide file tree
Showing 9 changed files with 148 additions and 56 deletions.
6 changes: 3 additions & 3 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '2.7.2'
ruby '2.7.3'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails', branch: 'main'
gem 'rails', '~> 6.1.3', '>= 6.1.3.1'
Expand Down Expand Up @@ -57,10 +57,10 @@ group :development do
end

group :test do
gem 'shoulda-matchers'
gem 'database_cleaner_2', '~> 2.1'
# The RSpec testing framework
gem 'rspec-rails', '~> 5.0', '>= 5.0.1'
gem 'shoulda-matchers'
gem 'database_cleaner_2', '~> 2.1'
# Adds support for Capybara system testing and selenium driver
gem 'capybara', '>= 3.26'
gem 'selenium-webdriver'
Expand Down
2 changes: 1 addition & 1 deletion Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -343,7 +343,7 @@ DEPENDENCIES
webpacker (~> 5.0)

RUBY VERSION
ruby 2.7.2p137
ruby 2.7.3p183

BUNDLED WITH
2.2.16
2 changes: 1 addition & 1 deletion app/helpers/application_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ def navbar_user_control
out = ''
if user_signed_in?
out += '<p>'
out += link_to 'Create Event', new_event_url, class: 'button ml-2 is-primary is-inverted'
out += link_to 'New Event', new_event_url, class: 'button ml-2 is-primary is-inverted'
out += '</p>'
out += '<p>'
out += link_to 'Your events', user_path(current_user), class: 'button ml-2 is-primary has-text-weight-bold'
Expand Down
7 changes: 4 additions & 3 deletions app/models/event.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ class Event < ApplicationRecord
scope :upcoming, -> { where('Date >= ?', Date.today).order('Date ASC') }
scope :past, -> { where('Date < ?', Date.today).order('Date DESC') }

validates :title, presence: true, length: { minumum: 5, maximum: 50 }
validates :description, presence: true, length: { minumum: 5, maximum: 999 }
validates :location, presence: true, length: { minumum: 5, maximum: 100 }
validates :title, presence: true, length: { minimum: 5, maximum: 50 }
validates :description, presence: true, length: { minimum: 5, maximum: 999 }
validates :location, presence: true, length: { minimum: 2, maximum: 100 }
validates :date, presence: true
end
8 changes: 8 additions & 0 deletions spec/event_attendee_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
require 'rails_helper'

RSpec.describe EventAttendee, type: :model do
describe 'Associations' do
it { should belong_to(:attendee).class_name('User') }
it { should belong_to(:attended_event).class_name('Event') }
end
end
32 changes: 32 additions & 0 deletions spec/event_creation_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
require 'rails_helper'

RSpec.describe 'Create Event', type: :feature do
let(:user) { User.create(name: 'Foo Bar', username: 'foobar', email: '[email protected]', password: '12345678') }
scenario 'Create event with valid inputs' do
visit new_user_session_path
fill_in 'Email', with: user.email
fill_in 'Password', with: user.password
click_on 'Log in'
sleep(3)
visit new_event_path
fill_in 'Title', with: 'Event'
fill_in 'Description', with: 'Very Cool Event!'
fill_in 'Location', with: 'USA'
click_on 'Create Event'
expect(page).to have_content('Very Cool Event!')
end

scenario 'Create event with blank inputs' do
visit new_user_session_path
fill_in 'Email', with: user.email
fill_in 'Password', with: user.password
click_on 'Log in'
sleep(3)
visit new_event_path
fill_in 'Title', with: ''
fill_in 'Description', with: ''
fill_in 'Location', with: 'USA'
click_on 'Create Event'
expect(page).to_not have_content('Very Cool Event!')
end
end
54 changes: 54 additions & 0 deletions spec/event_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
require 'rails_helper'

RSpec.describe Event, type: :model do
describe 'Associations' do
it { should have_many(:event_attendees) }
it { should have_many(:attendees) }
it { should belong_to(:creator).class_name('User') }
end
end

RSpec.describe Event, type: :model do
subject do
User.create(id: 8, name: 'Foo', username: 'foozin', email: '[email protected]', password: '123456')
Event.new(title: 'Anything',
description: 'Lorem ipsum',
date: DateTime.now,
location: 'USA',
creator_id: 8)
end

it 'is valid with name, description, date, location and a creator_id(user logged in)' do
expect(subject).to be_valid
end

it 'is not valid without a name' do
subject.title = nil
expect(subject).to_not be_valid
end

it 'is not valid without minimum of 5 characters in description' do
subject.description = 'hey'
expect(subject).to_not be_valid
end

it 'is not valid without a description' do
subject.description = nil
expect(subject).to_not be_valid
end

it 'is not valid without a date' do
subject.date = nil
expect(subject).to_not be_valid
end

it 'is not valid without a location' do
subject.location = nil
expect(subject).to_not be_valid
end

it 'is not valid without a creator_id logged in' do
subject.creator_id = 100
expect(subject).to_not be_valid
end
end
84 changes: 36 additions & 48 deletions spec/rails_helper.rb
Original file line number Diff line number Diff line change
@@ -1,64 +1,52 @@
# This file is copied to spec/ when you run 'rails generate rspec:install'
require 'spec_helper'
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../config/environment', __dir__)
# Prevent database truncation if the environment is production
abort('The Rails environment is running in production mode!') if Rails.env.production?
require 'spec_helper'
require 'rspec/rails'
# Add additional requires below this line. Rails is not loaded until this point!
require 'capybara/rspec'

# 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.
#
# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f }
# Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
Shoulda::Matchers.configure do |config|
config.integrate do |with|
with.test_framework :rspec
with.library :rails
end
end

# 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
puts e.to_s.strip
exit 1
ActiveRecord::Migration.maintain_test_schema!

Capybara.register_driver :selenium_chrome do |app|
Capybara::Selenium::Driver.new(app, browser: :chrome)
end

Capybara.javascript_driver = :selenium_chrome
RSpec.configure do |config|
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.use_transactional_fixtures = false
config.infer_spec_type_from_file_location!
config.filter_rails_from_backtrace!

# 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
config.before(:suite) do
DatabaseCleaner.clean_with(:truncation)
end

# You can uncomment this line to turn off ActiveRecord support entirely.
# config.use_active_record = false
config.before(:each) do
DatabaseCleaner.strategy = :transaction
end

# 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://relishapp.com/rspec/rspec-rails/docs
config.infer_spec_type_from_file_location!
config.before(:each, js: true) do
DatabaseCleaner.strategy = :truncation
end

# 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")
# This block must be here, do not combine with the other `before(:each)` block.
# This makes it so Capybara can see the database.
config.before(:each) do
DatabaseCleaner.start
end

config.after(:each) do
DatabaseCleaner.clean
end
end
9 changes: 9 additions & 0 deletions spec/user_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
require 'rails_helper'

RSpec.describe User, type: :model do
describe 'Associations' do
it { should have_many(:attended_events) }
it { should have_many(:event_attendees) }
it { should have_many(:created_events) }
end
end

0 comments on commit cf279f4

Please sign in to comment.