Skip to content

Commit

Permalink
Merge pull request #83 from valthon/factory_bot
Browse files Browse the repository at this point in the history
Factory bot
  • Loading branch information
ujh authored Jun 4, 2018
2 parents aaad1d4 + cfa7dcf commit 041cb48
Show file tree
Hide file tree
Showing 28 changed files with 239 additions and 238 deletions.
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

0 comments on commit 041cb48

Please sign in to comment.