Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Factory bot #83

Merged
merged 2 commits into from
Jun 4, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ group :development, :test do
gem 'byebug', platform: :mri
gem 'letter_opener'
gem 'rspec-rails'
gem 'factory_bot_rails'
end

group :development do
Expand Down
6 changes: 6 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,11 @@ GEM
actionmailer (>= 4.0, < 6)
activesupport (>= 4.0, < 6)
execjs (2.7.0)
factory_bot (4.8.2)
activesupport (>= 3.0.0)
factory_bot_rails (4.8.2)
factory_bot (~> 4.8.2)
railties (>= 3.0.0)
ffi (1.9.23)
font-awesome-rails (4.7.0.4)
railties (>= 3.2, < 6.0)
Expand Down Expand Up @@ -279,6 +284,7 @@ DEPENDENCIES
color
devise
exception_notification
factory_bot_rails
font-awesome-rails
jbuilder
jquery-rails
Expand Down
3 changes: 1 addition & 2 deletions spec/controllers/accounts_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

describe AccountsController do

fixtures :users
render_views

describe '#show' do
Expand All @@ -14,7 +13,7 @@

context 'signed in' do

let(:user) { users(:moni) }
let(:user) { create(:user) }

before(:each) do
sign_in(user)
Expand Down
9 changes: 2 additions & 7 deletions spec/controllers/admins/users_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,7 @@
require 'csv'

describe Admins::UsersController do

fixtures :admins

let(:admin) { admins(:urban) }
let(:admin) { create(:admin) }

describe '#index' do
it 'requires authentication' do
Expand All @@ -26,8 +23,6 @@
end

describe '#import' do
fixtures :users

let(:csv) do
name = Rails.root.join('tmp', 'import.csv')
CSV.open(name, 'w') do |csv|
Expand All @@ -39,7 +34,7 @@
name
end
let(:file_upload) { fixture_file_upload(csv) }
let(:user) { users(:moni) }
let(:user) { create(:user) }

it 'requires authentication' do
post :import, params: { id: user.id, file: file_upload }
Expand Down
10 changes: 5 additions & 5 deletions spec/controllers/brands_controller_spec.rb
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
require 'rails_helper'

describe BrandsController do
fixtures :collected_inks

pending '#index' do
describe '#index' do

before(:each) do
# Trigger simplification
CollectedInk.all.map(&:save)
sleep 1
create_list(:collected_ink, 7, brand_name: 'Diamine')
create_list(:collected_ink, 2, brand_name: 'Robert Oster')
create(:collected_ink, brand_name: 'ROBERTOSTER ')
create(:collected_ink, brand_name: 'diamine?!?')
end

it 'returns all brands by default' do
Expand Down
44 changes: 27 additions & 17 deletions spec/controllers/collected_inks_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,9 @@

describe CollectedInksController do

fixtures :collected_inks, :users
render_views

let(:user) { users(:moni) }
let(:user) { create(:user) }

describe '#index' do
it 'requires authentication' do
Expand All @@ -14,10 +13,25 @@
end

context 'signed in' do
let(:ink) { collected_inks(:monis_marine) }
let(:user_inks) do
[
create(:collected_ink, user: user, ink_name: 'Marine'),
create(:collected_ink, user: user, ink_name: 'Syrah'),
create(:collected_ink, user: user, brand_name: 'Robert Oster', ink_name: 'Fire and Ice')
]
end
let(:other_inks) do
[
create(:collected_ink, ink_name: 'Pumpkin'),
create(:collected_ink, ink_name: 'Twilight'),
create(:collected_ink, brand_name: 'Robert Oster', ink_name: 'Peppermint')
]
end

before(:each) do
before do
sign_in(user)
user_inks
other_inks
end

it 'renders the ink index page' do
Expand All @@ -28,7 +42,7 @@
it 'renders the CSV' do
get :index, format: "csv"
expect(response).to be_successful
csv = CSV.generate(col_sep: ";") do |csv|
expected_csv = CSV.generate(col_sep: ";") do |csv|
csv << [
"Brand",
"Line",
Expand All @@ -41,8 +55,7 @@
"Archived",
"Usage"
]
[:monis_marine, :monis_syrah, :monis_fire_and_ice].each do |k|
ci = collected_inks(k)
user_inks.each do |ci|
csv << [
ci.brand_name,
ci.line_name,
Expand All @@ -57,14 +70,14 @@
]
end
end
expect(response.body).to eq(csv)
expect(response.body).to eq(expected_csv)
end

it 'renders the JSON' do
get :index, format: :jsonapi
expect(response).to be_successful
expect(response.body).to include(ink.ink_name)
expect(response.body).to include(ink.brand_name)
expect(response.body).to include(user_inks.first.ink_name)
expect(response.body).to include(user_inks.first.brand_name)
end
end
end
Expand Down Expand Up @@ -103,7 +116,6 @@
}}
expect do
post :create, params: { _jsonapi: payload }
collected_ink = CollectedInk.order(:id).last
expect(response).to be_successful
end.to change { user.collected_inks.count }.by(1)
json = JSON.parse(response.body)
Expand Down Expand Up @@ -133,7 +145,6 @@
}}
expect do
post :create, params: { _jsonapi: payload }
collected_ink = CollectedInk.order(:id).last
expect(response).to be_successful
end.to change { user.collected_inks.count }.by(1)
json = JSON.parse(response.body)
Expand All @@ -155,7 +166,7 @@

describe '#update' do

let(:collected_ink) { collected_inks(:monis_marine) }
let(:collected_ink) { create(:collected_ink, user: user) }

it 'requires authentication' do
expect do
Expand All @@ -166,7 +177,6 @@
end

context 'signed in' do
let(:user) { users(:moni) }

before(:each) do
sign_in(user)
Expand Down Expand Up @@ -210,8 +220,9 @@
end

describe '#destroy' do
let!(:collected_ink) { create(:collected_ink, user: user) }
let!(:other_users_ink) { create(:collected_ink) }

let(:collected_ink) { collected_inks(:monis_marine) }
it 'requires authentication' do
expect do
delete :destroy, params: { id: collected_ink.id }
Expand All @@ -220,7 +231,6 @@
end

describe 'signed in' do
let(:user) { users(:moni) }

before(:each) do
sign_in(user)
Expand All @@ -236,7 +246,7 @@
it 'does not delete other users inks' do
expect do
expect do
delete :destroy, params: { id: collected_inks(:toms_marine) }
delete :destroy, params: { id: other_users_ink.id }
end.to raise_error(ActiveRecord::RecordNotFound)
end.to_not change { CollectedInk.count }
end
Expand Down
46 changes: 20 additions & 26 deletions spec/controllers/collected_pens_controller_spec.rb
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
require 'rails_helper'

describe CollectedPensController do
fixtures :collected_pens, :users
render_views

let(:user) { users(:moni) }
let(:user) { create(:user) }
let!(:wing_sung) { create(:collected_pen, user: user) }
let!(:custom74) { create(:collected_pen, user: user, brand: 'Pilot', model: 'Custom 74', nib: 'M', color: 'Orange') }
let!(:platinum) { create(:collected_pen, brand: 'Platinum', model: '3776 Chartres') }

describe '#index' do
it 'requires authentication' do
Expand All @@ -19,18 +21,17 @@

it 'renders the users pens' do
get :index
ws = collected_pens(:monis_wing_sung)
expect(response).to be_successful
expect(response.body).to include(ws.brand)
expect(response.body).to include(ws.model)
expect(response.body).to include(wing_sung.brand)
expect(response.body).to include(wing_sung.model)
end

it 'renders the csv export' do
get :index, format: "csv"
expect(response).to be_successful
csv = CSV.generate(col_sep: ";") do |csv|
expected_csv = CSV.generate(col_sep: ";") do |csv|
csv << ["Brand", "Model", "Nib", "Color", "Comment", "Archived", "Archived On", "Usage"]
[collected_pens(:monis_pilot_custom_74), collected_pens(:monis_wing_sung)].each do |cp|
[custom74, wing_sung].each do |cp|
csv << [
cp.brand,
cp.model,
Expand All @@ -43,7 +44,7 @@
]
end
end
expect(response.body).to eq(csv)
expect(response.body).to eq(expected_csv)
end
end
end
Expand All @@ -67,7 +68,6 @@
brand: 'Pelikan',
model: 'M205'
}}
collected_pen = CollectedPen.order(:id).last
expect(response).to redirect_to(collected_pens_path(anchor: "add-form"))
end.to change { user.collected_pens.count }.by(1)
collected_pen = user.collected_pens.order(:id).last
Expand All @@ -81,7 +81,6 @@
brand: ' Pelikan ',
model: ' M205 '
}}
collected_pen = CollectedPen.order(:id).last
expect(response).to redirect_to(collected_pens_path(anchor: "add-form"))
end.to change { user.collected_pens.count }.by(1)
collected_pen = user.collected_pens.order(:id).last
Expand All @@ -93,13 +92,11 @@

describe '#update' do

let(:collected_pen) { collected_pens(:monis_wing_sung) }

it 'requires authentication' do
expect do
put :update, params: { id: collected_pen.id, collected_pen: { brand: 'Not Wing Sung' } }
put :update, params: { id: wing_sung.id, collected_pen: { brand: 'Not Wing Sung' } }
expect(response).to redirect_to(new_user_session_path)
end.to_not change { collected_pen.reload }
end.to_not change { wing_sung.reload }
end

context 'signed in' do
Expand All @@ -109,27 +106,25 @@

it 'updates the pen' do
expect do
put :update, params: { id: collected_pen.id, collected_pen: { brand: 'Not Wing Sung' } }
expect(response).to redirect_to(collected_pens_path(anchor: collected_pen.id))
end.to change { collected_pen.reload.brand }.from('Wing Sung').to('Not Wing Sung')
put :update, params: { id: wing_sung.id, collected_pen: { brand: 'Not Wing Sung' } }
expect(response).to redirect_to(collected_pens_path(anchor: wing_sung.id))
end.to change { wing_sung.reload.brand }.from('Wing Sung').to('Not Wing Sung')
end

it 'strips out whitespace' do
expect do
put :update, params: { id: collected_pen.id, collected_pen: { brand: ' Not Wing Sung ' } }
expect(response).to redirect_to(collected_pens_path(anchor: collected_pen.id))
end.to change { collected_pen.reload.brand }.from('Wing Sung').to('Not Wing Sung')
put :update, params: { id: wing_sung.id, collected_pen: { brand: ' Not Wing Sung ' } }
expect(response).to redirect_to(collected_pens_path(anchor: wing_sung.id))
end.to change { wing_sung.reload.brand }.from('Wing Sung').to('Not Wing Sung')
end
end
end

describe '#destroy' do

let(:collected_pen) { collected_pens(:monis_wing_sung) }

it 'requires authentication' do
expect do
delete :destroy, params: { id: collected_pen.id }
delete :destroy, params: { id: wing_sung.id }
expect(response).to redirect_to(new_user_session_path)
end.to_not change { CollectedPen.count }
end
Expand All @@ -141,15 +136,14 @@

it 'deletes the collected pen' do
expect do
delete :destroy, params: { id: collected_pen.id }
delete :destroy, params: { id: wing_sung.id }
expect(response).to redirect_to(collected_pens_path)
end.to change { CollectedPen.count }.by(-1)
end

it 'does not delete other users pens' do
collected_pen = collected_pens(:toms_platinum)
expect do
delete :destroy, params: { id: collected_pen.id }
delete :destroy, params: { id: platinum.id }
expect(response).to redirect_to(collected_pens_path)
end.to_not change { CollectedPen.count }
end
Expand Down
Loading