Initial commit
This commit is contained in:
172
spec/controllers/admin/accounts_controller_spec.rb
Normal file
172
spec/controllers/admin/accounts_controller_spec.rb
Normal file
@@ -0,0 +1,172 @@
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe Admin::AccountsController, type: :controller do
|
||||
render_views
|
||||
|
||||
let(:current_user) { create(:user, :admin) }
|
||||
|
||||
before do
|
||||
sign_in(current_user)
|
||||
end
|
||||
|
||||
describe "#index" do
|
||||
it "returns a successful response" do
|
||||
get :index
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
||||
it "has a search field form" do
|
||||
get :index
|
||||
|
||||
expect(response.body).to have_button("search-button")
|
||||
end
|
||||
|
||||
it "paginates the results" do
|
||||
create_list(:account, 20)
|
||||
|
||||
get :index
|
||||
expect(response.body).to have_link("2", href: admin_accounts_path(page: 2))
|
||||
end
|
||||
|
||||
it "filters the account by a query param" do
|
||||
create(:account, name: "First account")
|
||||
create(:account, name: "Second account")
|
||||
get :index, params: { query: "Second" }
|
||||
|
||||
expect(response.body).not_to have_content("First account")
|
||||
expect(response.body).to have_content("Second account")
|
||||
end
|
||||
end
|
||||
|
||||
describe "#new" do
|
||||
it "returns a successful response" do
|
||||
get :new
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
||||
it "assigns 'account'" do
|
||||
get :new
|
||||
|
||||
expect(assigns(:account)).not_to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
describe "#create" do
|
||||
it "responds with a redirect" do
|
||||
post :create, params: { account: account_params }
|
||||
|
||||
expect(response).to be_redirect
|
||||
end
|
||||
|
||||
it "sets a flash notice" do
|
||||
post :create, params: { account: account_params }
|
||||
|
||||
expect(flash.notice).to eq "The account was created"
|
||||
end
|
||||
|
||||
it "creates a new Account record" do
|
||||
expect {
|
||||
post :create, params: { account: account_params }
|
||||
}.to change(Account, :count).by(1)
|
||||
|
||||
expect(assigns(:account)).not_to be_nil
|
||||
end
|
||||
|
||||
context "when record cannot be saved" do
|
||||
before do
|
||||
allow_any_instance_of(Account).to receive(:save).and_return(false)
|
||||
end
|
||||
|
||||
it "re-displays the form" do
|
||||
post :create, params: { account: account_params }
|
||||
|
||||
expect(response).to be_successful
|
||||
expect(flash.notice).to be_nil
|
||||
end
|
||||
|
||||
it "does not create a new Account record" do
|
||||
expect {
|
||||
post :create, params: { account: account_params }
|
||||
}.not_to change(Account, :count)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#show" do
|
||||
it "returns a successful response" do
|
||||
get :show, params: { id: current_user.primary_account }
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
||||
it "has a video search field form" do
|
||||
get :index
|
||||
|
||||
expect(response.body).to have_button("search-button")
|
||||
end
|
||||
|
||||
it "paginates the video list" do
|
||||
project = create(:project, account: current_user.primary_account)
|
||||
create_list(:video, 20, project: project )
|
||||
|
||||
get :show, params: { id: current_user.primary_account }
|
||||
|
||||
expect(response.body).to have_link("2", href: admin_account_path(current_user.primary_account, page: 2))
|
||||
end
|
||||
|
||||
it "filters the videos by a query param" do
|
||||
project = create(:project, account: current_user.primary_account)
|
||||
create(:video, project: project, name: "First video")
|
||||
create(:video, project: project, name: "Second video")
|
||||
|
||||
get :show, params: { id: current_user.primary_account, query: "Second"}
|
||||
|
||||
expect(response.body).not_to have_content("First video")
|
||||
expect(response.body).to have_content("Second video")
|
||||
end
|
||||
end
|
||||
|
||||
describe "#edit" do
|
||||
it "assigns account" do
|
||||
get :show, params: { id: current_user.primary_account }
|
||||
|
||||
expect(response).to be_successful
|
||||
expect(assigns(:account)).to eq current_user.primary_account
|
||||
end
|
||||
end
|
||||
|
||||
describe "#update" do
|
||||
context "when account successfully updated" do
|
||||
it "returns updates account" do
|
||||
patch :update, params: { id: current_user.primary_account, account: { name: "Fred", plan_uid: "deliverme" } }
|
||||
|
||||
expect(current_user.primary_account.reload.name).to eq "Fred"
|
||||
expect(current_user.primary_account.plan_uid).to eq "deliverme"
|
||||
end
|
||||
|
||||
it "redirects to accounts page" do
|
||||
patch :update, params: { id: current_user.primary_account, account: account_params }
|
||||
|
||||
expect(response).to redirect_to admin_accounts_path
|
||||
end
|
||||
end
|
||||
|
||||
context "when account update fails" do
|
||||
before :each do
|
||||
allow_any_instance_of(Account).to receive(:update).and_return(false)
|
||||
end
|
||||
|
||||
it "renders edit" do
|
||||
patch :update, params: { id: current_user.primary_account, account: account_params }
|
||||
|
||||
expect(response).to render_template :edit
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def account_params
|
||||
attributes_for(:account)
|
||||
end
|
||||
end
|
||||
28
spec/controllers/admin/application_controller_spec.rb
Normal file
28
spec/controllers/admin/application_controller_spec.rb
Normal file
@@ -0,0 +1,28 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe Admin::ApplicationController, type: :controller do
|
||||
controller do
|
||||
def new
|
||||
authorize Account
|
||||
render plain: "Hello world"
|
||||
end
|
||||
end
|
||||
|
||||
it "allows admin users" do
|
||||
admin = create(:user, :admin)
|
||||
|
||||
sign_in(admin)
|
||||
get :new
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
||||
it "redirects non-admin users" do
|
||||
non_admin = create(:user, admin: false)
|
||||
|
||||
sign_in(non_admin)
|
||||
get :new
|
||||
|
||||
expect(response).to be_redirect
|
||||
end
|
||||
end
|
||||
30
spec/controllers/admin/masquerades_controller_spec.rb
Normal file
30
spec/controllers/admin/masquerades_controller_spec.rb
Normal file
@@ -0,0 +1,30 @@
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe Admin::MasqueradesController, type: :controller do
|
||||
render_views
|
||||
|
||||
let!(:current_user) { create(:user, :admin) }
|
||||
let!(:unprivileged_user) { create(:user) }
|
||||
|
||||
before do
|
||||
sign_in(current_user)
|
||||
end
|
||||
|
||||
describe "#create" do
|
||||
it "redirects to the first page" do
|
||||
post :create, params: { user_id: unprivileged_user.id }
|
||||
|
||||
expect(response).to redirect_to signed_in_root_path
|
||||
end
|
||||
end
|
||||
|
||||
describe "#destroy" do
|
||||
it "returns to the users page" do
|
||||
post :create, params: { user_id: unprivileged_user.id }
|
||||
|
||||
delete :destroy
|
||||
|
||||
expect(response).to redirect_to admin_users_path
|
||||
end
|
||||
end
|
||||
end
|
||||
233
spec/controllers/admin/users_controller_spec.rb
Normal file
233
spec/controllers/admin/users_controller_spec.rb
Normal file
@@ -0,0 +1,233 @@
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe Admin::UsersController, type: :controller do
|
||||
render_views
|
||||
|
||||
let!(:current_user) { create(:user, :admin) }
|
||||
|
||||
before do
|
||||
sign_in(current_user)
|
||||
end
|
||||
|
||||
describe "#index" do
|
||||
it "returns a successful response" do
|
||||
get :index
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
||||
describe "for xhr request" do
|
||||
before do
|
||||
users = [
|
||||
create(:user, :with_name),
|
||||
create(:user, :with_different_name)
|
||||
]
|
||||
end
|
||||
|
||||
it "shows all users if search field is empty" do
|
||||
get :index, xhr: true
|
||||
expect(response.body).to have_content("John")
|
||||
expect(response.body).to have_content("Specimen")
|
||||
end
|
||||
|
||||
it "shows only users with first name, last name or email matching search query" do
|
||||
get :index, params: { query: "John" }, xhr: true
|
||||
expect(response.body).to have_content("John")
|
||||
expect(response.body).not_to have_content("Specimen")
|
||||
|
||||
get :index, params: { query: "Simpson" }, xhr: true
|
||||
expect(response.body).not_to have_content("John")
|
||||
expect(response.body).to have_content("Specimen")
|
||||
|
||||
get :index, params: { query: "different@" }, xhr: true
|
||||
expect(response.body).not_to have_content("John")
|
||||
expect(response.body).to have_content("Specimen")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#new" do
|
||||
it "returns a successful response" do
|
||||
get :new
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
||||
it "assigns user, accounts" do
|
||||
get :new
|
||||
|
||||
expect(assigns(:user)).not_to be_nil
|
||||
expect(assigns(:accounts)).to eq Account.all
|
||||
end
|
||||
end
|
||||
|
||||
describe "#create" do
|
||||
it "responds with a redirect" do
|
||||
post :create, params: { user: user_create_params }
|
||||
|
||||
expect(response).to be_redirect
|
||||
expect(response).to redirect_to [:admin, :users]
|
||||
end
|
||||
|
||||
it "sets a flash notice" do
|
||||
post :create, params: { user: user_create_params }
|
||||
|
||||
expect(flash.notice).to eq "The user was created"
|
||||
end
|
||||
|
||||
it "creates a new User record" do
|
||||
expect {
|
||||
post :create, params: { user: user_create_params }
|
||||
}.to change(User, :count).by(1)
|
||||
|
||||
expect(assigns(:user)).to have_attributes(
|
||||
email: "bob@example.com",
|
||||
admin: false,
|
||||
)
|
||||
end
|
||||
|
||||
it "sends a welcome email" do
|
||||
assert_enqueued_emails 1 do
|
||||
post :create, params: { user: user_create_params }
|
||||
end
|
||||
end
|
||||
|
||||
context "when record cannot be saved" do
|
||||
before do
|
||||
allow_any_instance_of(User).to receive(:valid?).and_return(false)
|
||||
end
|
||||
|
||||
it "re-displays the form" do
|
||||
post :create, params: { user: user_create_params }
|
||||
|
||||
expect(response).to be_successful
|
||||
expect(flash.notice).to be_nil
|
||||
end
|
||||
|
||||
it "does not create a new User record" do
|
||||
expect {
|
||||
post :create, params: { user: user_create_params }
|
||||
}.not_to change(User, :count)
|
||||
end
|
||||
|
||||
it "assigns accounts" do
|
||||
post :create, params: { user: user_create_params }
|
||||
|
||||
expect(assigns(:accounts)).to eq Account.all
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#edit" do
|
||||
let(:user) { create(:user) }
|
||||
|
||||
it "returns a successful response" do
|
||||
get :edit, params: { id: user }
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
||||
it "assigns user, accounts" do
|
||||
get :edit, params: { id: user }
|
||||
|
||||
expect(assigns(:user)).to eq user
|
||||
expect(assigns(:accounts)).to eq Account.all
|
||||
end
|
||||
end
|
||||
|
||||
describe "#update" do
|
||||
let(:user) { create(:user) }
|
||||
|
||||
it "redirects to users page" do
|
||||
patch :update, params: { id: user, user: user_update_params }
|
||||
|
||||
expect(response).to be_redirect
|
||||
expect(response).to redirect_to admin_users_path
|
||||
end
|
||||
|
||||
it "sets a flash notice" do
|
||||
patch :update, params: { id: user, user: user_update_params }
|
||||
|
||||
expect(flash.notice).to eq "The user was updated"
|
||||
end
|
||||
|
||||
it "updates the user record" do
|
||||
patch :update, params: { id: user, user: { email: "new-email@example.com" } }
|
||||
|
||||
expect(assigns(:user)).to have_attributes(
|
||||
email: "new-email@example.com",
|
||||
admin: false,
|
||||
)
|
||||
end
|
||||
|
||||
it "updates user's password" do
|
||||
patch :update, params: { id: user, user: { email: "new-email@example.com", password: "New Pass" } }
|
||||
|
||||
expect(user.reload.password_digest).to eq("New Pass")
|
||||
end
|
||||
|
||||
context "when record cannot be saved" do
|
||||
before do
|
||||
allow_any_instance_of(User).to receive(:update).and_return(false)
|
||||
end
|
||||
|
||||
it "re-displays the form" do
|
||||
patch :update, params: { id: user, user: user_update_params }
|
||||
|
||||
expect(response).to be_successful
|
||||
expect(flash.notice).to be_nil
|
||||
end
|
||||
|
||||
it "assigns accounts" do
|
||||
patch :update, params: { id: user, user: user_update_params }
|
||||
|
||||
expect(assigns(:accounts)).to eq Account.all
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#destroy" do
|
||||
let!(:user) { create(:user, accounts: current_user.accounts) }
|
||||
let(:note_author_user) { create(:user, accounts: current_user.accounts) }
|
||||
|
||||
it "deletes user" do
|
||||
expect {
|
||||
delete :destroy, params: { id: user }
|
||||
}.to change(User, :count).by(-1)
|
||||
end
|
||||
|
||||
it "redirects to account edit page" do
|
||||
delete :destroy, params: { id: user }
|
||||
|
||||
expect(response).to redirect_to admin_users_path
|
||||
end
|
||||
|
||||
it "deletes user who posted notes" do
|
||||
note = create(:note, user: note_author_user, email: note_author_user.email)
|
||||
|
||||
expect {
|
||||
delete :destroy, params: { id: note_author_user }
|
||||
}.to change(User, :count).by(-1)
|
||||
expect(response).to redirect_to admin_users_path
|
||||
expect(Note.find(note.id).email).to eq note.email
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def user_create_params
|
||||
{
|
||||
email: "bob@example.com",
|
||||
password: "password",
|
||||
account_id: current_user.primary_account.id,
|
||||
admin: false,
|
||||
role: "account_manager",
|
||||
}
|
||||
end
|
||||
|
||||
def user_update_params
|
||||
{
|
||||
email: "bob@example.com",
|
||||
}
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user