From 3030d6f0f3c03267a15edb329c83932b21985ce2 Mon Sep 17 00:00:00 2001 From: Sebastian Kippe Date: Wed, 18 Nov 2020 09:17:56 +0100 Subject: [PATCH] Add specs for User#is_admin? --- Gemfile | 1 + Gemfile.lock | 6 ++++++ spec/factories/devise.rb | 8 ++++++++ spec/models/user_spec.rb | 20 ++++++++++++++++++- spec/rails_helper.rb | 6 ++++++ spec/requests/dashboard_request_spec.rb | 12 ----------- spec/support/controller_macros.rb | 19 ++++++++++++++++++ .../admin/dashboard/index.html.erb_spec.rb | 5 ----- spec/views/dashboard/index.html.erb_spec.rb | 5 ----- spec/views/settings/index.html.erb_spec.rb | 5 ----- 10 files changed, 59 insertions(+), 28 deletions(-) create mode 100644 spec/factories/devise.rb delete mode 100644 spec/requests/dashboard_request_spec.rb create mode 100644 spec/support/controller_macros.rb delete mode 100644 spec/views/admin/dashboard/index.html.erb_spec.rb delete mode 100644 spec/views/dashboard/index.html.erb_spec.rb delete mode 100644 spec/views/settings/index.html.erb_spec.rb diff --git a/Gemfile b/Gemfile index 1de8b75..498e526 100644 --- a/Gemfile +++ b/Gemfile @@ -50,6 +50,7 @@ end group :test do gem 'rspec-rails' + gem 'factory_bot_rails' gem 'capybara' gem 'database_cleaner' end diff --git a/Gemfile.lock b/Gemfile.lock index 9dcd176..5c552c3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -90,6 +90,11 @@ GEM dotenv (= 2.7.2) railties (>= 3.2, < 6.1) erubi (1.9.0) + factory_bot (6.1.0) + activesupport (>= 5.0.0) + factory_bot_rails (6.1.0) + factory_bot (~> 6.1.0) + railties (>= 5.0.0) ffi (1.13.1) globalid (0.4.2) activesupport (>= 4.2.0) @@ -244,6 +249,7 @@ DEPENDENCIES devise devise_ldap_authenticatable dotenv-rails + factory_bot_rails jbuilder (~> 2.7) letter_opener letter_opener_web diff --git a/spec/factories/devise.rb b/spec/factories/devise.rb new file mode 100644 index 0000000..f3ccb06 --- /dev/null +++ b/spec/factories/devise.rb @@ -0,0 +1,8 @@ +FactoryBot.define do + factory :user do + id { 1 } + cn { "jimmy" } + email { "jimmy@example.com" } + password { "dis-muh-password" } + end +end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 47a31bb..3bc4941 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -1,5 +1,23 @@ require 'rails_helper' RSpec.describe User, type: :model do - pending "add some examples to (or delete) #{__FILE__}" + let(:user) { create :user } + + describe "#is_admin?" do + it "returns true when admin flag is set in LDAP" do + expect(Devise::LDAP::Adapter).to receive(:get_ldap_param) + .with(user.cn, :admin) + .and_return("true") + + expect(user.is_admin?).to be true + end + + it "returns false when admin flag is not set in LDAP" do + expect(Devise::LDAP::Adapter).to receive(:get_ldap_param) + .with(user.cn, :admin) + .and_return(nil) + + expect(user.is_admin?).to be false + end + end end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 314d33e..1eeb3bd 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -7,6 +7,8 @@ abort("The Rails environment is running in production mode!") if Rails.env.produ require 'rspec/rails' # Add additional requires below this line. Rails is not loaded until this point! require 'capybara' +require 'devise' +require 'support/controller_macros' require 'support/database_cleaner' # Requires supporting ruby files with custom matchers and macros, etc, in @@ -63,4 +65,8 @@ RSpec.configure do |config| config.filter_rails_from_backtrace! # arbitrary gems may also be filtered via: # config.filter_gems_from_backtrace("gem name") + + config.include Devise::Test::ControllerHelpers, :type => :controller + config.include FactoryBot::Syntax::Methods + config.extend ControllerMacros, :type => :controller end diff --git a/spec/requests/dashboard_request_spec.rb b/spec/requests/dashboard_request_spec.rb deleted file mode 100644 index 5d12092..0000000 --- a/spec/requests/dashboard_request_spec.rb +++ /dev/null @@ -1,12 +0,0 @@ -require 'rails_helper' - -RSpec.describe "Dashboards", type: :request do - - describe "GET /index" do - it "returns http success" do - get "/dashboard/index" - expect(response).to have_http_status(:success) - end - end - -end diff --git a/spec/support/controller_macros.rb b/spec/support/controller_macros.rb new file mode 100644 index 0000000..9915667 --- /dev/null +++ b/spec/support/controller_macros.rb @@ -0,0 +1,19 @@ +module ControllerMacros + def login_user + # Before each test, create and login the user + before(:each) do + @request.env["devise.mapping"] = Devise.mappings[:user] + user = FactoryBot.create(:user) + # user.confirm! # Or set a confirmed_at inside the factory. Only necessary if you are using the "confirmable" module + sign_in user + end + end + + # Not used in this tutorial, but left to show an example of different user types + # def login_admin + # before(:each) do + # @request.env["devise.mapping"] = Devise.mappings[:admin] + # sign_in FactoryBot.create(:admin) # Using factory bot as an example + # end + # end +end diff --git a/spec/views/admin/dashboard/index.html.erb_spec.rb b/spec/views/admin/dashboard/index.html.erb_spec.rb deleted file mode 100644 index d9dbe04..0000000 --- a/spec/views/admin/dashboard/index.html.erb_spec.rb +++ /dev/null @@ -1,5 +0,0 @@ -require 'rails_helper' - -RSpec.describe "dashboard/index.html.erb", type: :view do - pending "add some examples to (or delete) #{__FILE__}" -end diff --git a/spec/views/dashboard/index.html.erb_spec.rb b/spec/views/dashboard/index.html.erb_spec.rb deleted file mode 100644 index d9dbe04..0000000 --- a/spec/views/dashboard/index.html.erb_spec.rb +++ /dev/null @@ -1,5 +0,0 @@ -require 'rails_helper' - -RSpec.describe "dashboard/index.html.erb", type: :view do - pending "add some examples to (or delete) #{__FILE__}" -end diff --git a/spec/views/settings/index.html.erb_spec.rb b/spec/views/settings/index.html.erb_spec.rb deleted file mode 100644 index 567a36e..0000000 --- a/spec/views/settings/index.html.erb_spec.rb +++ /dev/null @@ -1,5 +0,0 @@ -require 'rails_helper' - -RSpec.describe "settings/index.html.erb", type: :view do - pending "add some examples to (or delete) #{__FILE__}" -end