From 0619eb796364cbafd6898081f867c05cad0ae511 Mon Sep 17 00:00:00 2001 From: Aditya Prakash Date: Wed, 9 Mar 2016 21:34:07 +0530 Subject: [PATCH] Enforce non-admin attribute of user factory Change in other specs to match the new factory setup. --- spec/factories/users.rb | 27 ++++++++++++++++++++++++++- spec/models/user_spec.rb | 4 ++-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/spec/factories/users.rb b/spec/factories/users.rb index 1886b955..c7ed7ca1 100644 --- a/spec/factories/users.rb +++ b/spec/factories/users.rb @@ -1,4 +1,18 @@ # Read about factories at https://github.com/thoughtbot/factory_girl + +# It is a feature of our app that first signed up user is admin. This property +# is set in a before create callback `setup_role` in user model. +# We want to override this behavior when we create user factories. We want +# `create(:user)` to create non-admin user by default. We are enforcing it +# with `after create` blocks in following factories. +# +# Following commands won't work: +# `create(:user, is_admin: true)` +# `create(:admin, is_admin: false)` +# +# For a non-admin user, use: `create(:user)` +# For an admin user, use: `create(:admin) + FactoryGirl.define do factory :user do sequence(:email) { |n| "example#{n}@example.com" } @@ -16,8 +30,19 @@ FactoryGirl.define do gravida. EOS + after(:create) do |user| + user.is_admin = false + # save with bang cause we want change in DB and not just in object instance + user.save! + end + factory :admin do - is_admin true + # admin factory needs its own after create block or else after create + # of user factory will override `is_admin` value. + after(:create) do |user| + user.is_admin = true + user.save! + end end end end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 36c6153a..c653f719 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' describe User do # It is necessary to use bang version of let to build roles before user - let!(:user_admin) { create(:user) } + let!(:user_admin) { create(:admin) } let!(:conference) { create(:conference) } let!(:organizer_role) { Role.find_by(name: 'organizer', resource: conference) } let!(:cfp_role) { Role.find_by(name: 'cfp', resource: conference) } @@ -59,7 +59,7 @@ describe User do deleted_user = create(:user, email: 'deleted@localhost.osem', name: 'User deleted') expect(deleted_user.is_admin).to be false - user_after_deleted = create(:user) + user_after_deleted = create(:admin) expect(user_after_deleted.is_admin).to be true end end