From 6589e3a74e7ef2189a7ee10da00995f03fec2231 Mon Sep 17 00:00:00 2001 From: Jennifer Konikowski Date: Fri, 14 Jun 2019 08:45:25 -0400 Subject: [PATCH] do not need to edit users --- app/controllers/users_controller.rb | 67 +++----- app/models/ability.rb | 4 +- app/models/user.rb | 12 +- app/views/devise/registrations/new.html.erb | 5 - app/views/layouts/_navbar.html.erb | 3 - app/views/users/_form.html.erb | 35 ---- app/views/users/_list.html.erb | 13 +- app/views/users/_user.json.jbuilder | 2 +- app/views/users/edit.html.erb | 3 - app/views/users/index.html.erb | 1 - app/views/users/new.html.erb | 3 - config/routes.rb | 4 +- ...0190614114620_default_value_to_is_admin.rb | 5 + .../20190614114700_remove_years_experience.rb | 6 + db/schema.rb | 108 ++++++------ spec/controllers/users_controller_spec.rb | 157 ++++-------------- spec/factories/users.rb | 6 +- spec/models/review_spec.rb | 24 +++ spec/models/user_spec.rb | 15 +- spec/routing/users_routing_spec.rb | 24 +-- 20 files changed, 181 insertions(+), 316 deletions(-) delete mode 100644 app/views/users/_form.html.erb delete mode 100644 app/views/users/edit.html.erb delete mode 100644 app/views/users/new.html.erb create mode 100644 db/migrate/20190614114620_default_value_to_is_admin.rb create mode 100644 db/migrate/20190614114700_remove_years_experience.rb diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 8154a821..8765e81a 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class UsersController < ApplicationController - before_action :set_user, only: %i[edit promote demote update destroy] + before_action :set_user, only: %i[promote demote deactivate reactivate] load_and_authorize_resource before_action :authenticate_user! @@ -18,49 +18,31 @@ def index @users = @filterrific.find.page(params[:page]) end - # GET /users/new - def new - @user = User.new - end - - def edit; end - - # POST /users - # POST /users.json - def create - @user = User.new(user_params) - - respond_to do |format| - if @user.save - format.html { redirect_to users_url, notice: "User #{@user.email} was successfully created." } - else - format.html { render :new } - format.json { render json: @user.errors, status: :unprocessable_entity } - end - end - end + # def edit; end # PATCH/PUT /users/1 # PATCH/PUT /users/1.json - def update - respond_to do |format| - if @user.update(user_params) - format.html { redirect_to users_url, notice: 'User was successfully updated.' } - else - format.html { render :edit } - format.json { render json: @user.errors, status: :unprocessable_entity } - end - end + # def update + # respond_to do |format| + # if @user.update(user_params) + # format.html { redirect_to users_url, notice: 'User was successfully updated.' } + # else + # format.html { render :edit } + # format.json { render json: @user.errors, status: :unprocessable_entity } + # end + # end + # end + + # PUT /users/1/deactivate + def deactivate + @user.update(deactivated: true) + redirect_to users_url, notice: "#{@user.email} was successfully deactivated." end - # DELETE /users/1 - # DELETE /users/1.json - def destroy - @user.destroy - respond_to do |format| - format.html { redirect_to users_url, notice: 'User was successfully destroyed.' } - format.json { head :no_content } - end + # PUT /users/1/reactivate + def reactivate + @user.update(deactivated: false) + redirect_to users_url, notice: "#{@user.email} was successfully reactivated." end # PUT /users/1/promote @@ -79,12 +61,7 @@ def demote # Use callbacks to share common setup or constraints between actions. def set_user - @user = User.find(params[:id]) if params[:id] + # @user = User.find(params[:id]) if params[:id] @user = User.find(params[:user_id]) if params[:user_id] end - - # Never trust parameters from the scary internet, only allow the white list through. - def user_params - params.require(:user).permit(:name, :email, :years_experience, :is_admin) - end end diff --git a/app/models/ability.rb b/app/models/ability.rb index 5b11a2ee..fddde190 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -8,6 +8,7 @@ def initialize(user) can :read, Course can :read, Review return if user.blank? + return if user.deactivated can :read, Course can :read, School @@ -15,9 +16,6 @@ def initialize(user) can [:update, :delete], Review do |r| r.user == user end - can [:read, :update, :delete], User do |u| - u == user - end return unless user.admin? can :manage, :all diff --git a/app/models/user.rb b/app/models/user.rb index 0482c600..9315941f 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -10,6 +10,8 @@ class User < ApplicationRecord validates :email, presence: true, uniqueness: { case_sensitive: false } + has_many :reviews, dependent: :destroy + filterrific( default_filter_params: { sorted_by: 'email_desc' }, available_filters: %i[ @@ -53,10 +55,10 @@ class User < ApplicationRecord case sort_option.to_s when /^email_/ order(Arel.sql("LOWER(users.email) #{direction}")) - when /^years_experience_/ - order(Arel.sql("users.years_experience #{direction}")) when /^admin_/ order(Arel.sql("users.is_admin #{direction}")) + when /^deactivated_/ + order(Arel.sql("users.deactivated #{direction}")) else raise(ArgumentError, "Invalid sort option: #{sort_option.inspect}") end @@ -75,8 +77,6 @@ def self.options_for_sorted_by [ ['Email (a-z)', 'email_asc'], ['Email (z-a)', 'email_desc'], - ['Years Experience (lowest first)', 'years_experience_asc'], - ['Years Experience (highest first)', 'years_experience_desc'], ['Admin? (false first)', 'admin_asc'], ['Admin? (true first)', 'admin_desc'] ] @@ -93,9 +93,10 @@ def self.options_for_sorted_by # confirmed_at :datetime # current_sign_in_at :datetime # current_sign_in_ip :inet +# deactivated :boolean default(FALSE) # email :string default(""), not null # encrypted_password :string default(""), not null -# is_admin :boolean +# is_admin :boolean default(FALSE) # last_sign_in_at :datetime # last_sign_in_ip :inet # remember_created_at :datetime @@ -103,7 +104,6 @@ def self.options_for_sorted_by # reset_password_token :string # sign_in_count :integer default(0), not null # unconfirmed_email :string -# years_experience :integer # created_at :datetime not null # updated_at :datetime not null # diff --git a/app/views/devise/registrations/new.html.erb b/app/views/devise/registrations/new.html.erb index fbd3e1f2..4552e2d8 100644 --- a/app/views/devise/registrations/new.html.erb +++ b/app/views/devise/registrations/new.html.erb @@ -8,11 +8,6 @@ <%= f.text_field :email, class: 'form-control', autofocus: true, autocomplete: "email", placeholder: 'Email Address' %> -
- <%= f.label :years_experience %> - <%= f.number_field :years_experience, class: 'form-control' %> -
-
<%= f.label :password %> <% if @minimum_password_length %> diff --git a/app/views/layouts/_navbar.html.erb b/app/views/layouts/_navbar.html.erb index cd27f738..4afa3260 100644 --- a/app/views/layouts/_navbar.html.erb +++ b/app/views/layouts/_navbar.html.erb @@ -18,9 +18,6 @@ - diff --git a/app/views/users/_form.html.erb b/app/views/users/_form.html.erb deleted file mode 100644 index de7cd964..00000000 --- a/app/views/users/_form.html.erb +++ /dev/null @@ -1,35 +0,0 @@ -<%= form_with(model: user, local: true) do |form| %> - <% if user.errors.any? %> -
-

<%= pluralize(user.errors.uniq.count, "error") %> prohibited this user from being saved:

- -
    - <% user.errors.full_messages.uniq.each do |message| %> -
  • <%= message %>
  • - <% end %> -
-
- <% end %> - -
- <%= form.label :email %> - <%= form.text_field :email, class: 'form-control', autofocus: true, autocomplete: "email", placeholder: 'Email Address' %> -
- -
- <%= form.label :years_experience %> - <%= form.number_field :years_experience, class: 'form-control' %> -
- <% if current_user && current_user.admin? %> -
- <%= form.check_box :is_admin, class: 'form-check-input' %> - <%= form.label :is_admin %> -
- <% end %> - -
- <%= form.submit 'Submit', class: 'btn btn-primary' %> -
-<% end %> - - diff --git a/app/views/users/_list.html.erb b/app/views/users/_list.html.erb index 2cfeb071..d95d7753 100644 --- a/app/views/users/_list.html.erb +++ b/app/views/users/_list.html.erb @@ -17,8 +17,8 @@ <%= filterrific_sorting_link(@filterrific, :email) %> - <%= filterrific_sorting_link(@filterrific, :years_experience) %> <%= filterrific_sorting_link(@filterrific, :admin) %> + <%= filterrific_sorting_link(@filterrific, :deactivated) %> @@ -27,15 +27,18 @@ <% @users.each do |user| %> <%= user.email %> - <%= user.years_experience %> - <%= user.is_admin %> + <%= user.is_admin ? "👍" : "" %> + <%= user.deactivated ? "👍" : "" %> <% if user.admin? %> <%= link_to 'Demote', user_demote_path(user), method: :put %> <% else %> <%= link_to 'Promote', user_promote_path(user), method: :put %> <% end %> - <%= link_to 'Edit', edit_user_path(user) %> - <%= link_to 'Destroy', user, method: :delete, data: { confirm: 'Are you sure?' } %> + <% if user.deactivated %> + <%= link_to 'Reactivate', user_reactivate_path(user), method: :put, data: { confirm: 'Are you sure?' } %> + <% else %> + <%= link_to 'Deactivate', user_deactivate_path(user), method: :put, data: { confirm: 'Are you sure?' } %> + <% end %> <% end %> diff --git a/app/views/users/_user.json.jbuilder b/app/views/users/_user.json.jbuilder index 38de4aaa..edc63741 100644 --- a/app/views/users/_user.json.jbuilder +++ b/app/views/users/_user.json.jbuilder @@ -1,4 +1,4 @@ # frozen_string_literal: true -json.extract! user, :id, :name, :email, :years_experience, :is_admin, :created_at, :updated_at +json.extract! user, :id, :email, :is_admin, :deactivated, :created_at, :updated_at json.url user_url(user, format: :json) diff --git a/app/views/users/edit.html.erb b/app/views/users/edit.html.erb deleted file mode 100644 index a08176b7..00000000 --- a/app/views/users/edit.html.erb +++ /dev/null @@ -1,3 +0,0 @@ -

Editing User

- -<%= render 'form', user: @user %> diff --git a/app/views/users/index.html.erb b/app/views/users/index.html.erb index 03647ff0..7284e5c3 100644 --- a/app/views/users/index.html.erb +++ b/app/views/users/index.html.erb @@ -1,6 +1,5 @@ <% if can? :manage, User %>

Users

- <%= link_to 'New User', new_user_path %>
<%= form_for_filterrific @filterrific do |f| %> diff --git a/app/views/users/new.html.erb b/app/views/users/new.html.erb deleted file mode 100644 index fdc0e62d..00000000 --- a/app/views/users/new.html.erb +++ /dev/null @@ -1,3 +0,0 @@ -

New User

- -<%= render 'form', user: @user %> \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index e309ec7e..0830f77b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -9,9 +9,11 @@ end end - resources :users, only: %i[index new edit create update destroy] do + resources :users, only: %i[index] do put '/promote', to: 'users#promote' put '/demote', to: 'users#demote' + put '/deactivate', to: 'users#deactivate' + put '/reactivate', to: 'users#reactivate' end devise_for :users, path: '' end diff --git a/db/migrate/20190614114620_default_value_to_is_admin.rb b/db/migrate/20190614114620_default_value_to_is_admin.rb new file mode 100644 index 00000000..809406f0 --- /dev/null +++ b/db/migrate/20190614114620_default_value_to_is_admin.rb @@ -0,0 +1,5 @@ +class DefaultValueToIsAdmin < ActiveRecord::Migration[5.2] + def change + change_column :users, :is_admin, :boolean, default: false + end +end diff --git a/db/migrate/20190614114700_remove_years_experience.rb b/db/migrate/20190614114700_remove_years_experience.rb new file mode 100644 index 00000000..30c7970d --- /dev/null +++ b/db/migrate/20190614114700_remove_years_experience.rb @@ -0,0 +1,6 @@ +class RemoveYearsExperience < ActiveRecord::Migration[5.2] + def change + remove_column :users, :years_experience + add_column :users, :deactivated, :boolean, default: false + end +end diff --git a/db/schema.rb b/db/schema.rb index f3498847..7b18fdfd 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -1,5 +1,3 @@ -# frozen_string_literal: true - # This file is auto-generated from the current state of the database. Instead # of editing this file, please use the migrations feature of Active Record to # incrementally modify your database, and then regenerate this schema definition. @@ -12,65 +10,67 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20_190_605_160_727) do +ActiveRecord::Schema.define(version: 2019_06_14_114700) do + # These are extensions that must be enabled in order to support this database - enable_extension 'plpgsql' + enable_extension "plpgsql" - create_table 'courses', force: :cascade do |t| - t.string 'name' - t.string 'number' - t.string 'department' - t.bigint 'school_id' - t.datetime 'created_at', null: false - t.datetime 'updated_at', null: false - t.index ['school_id'], name: 'index_courses_on_school_id' + create_table "courses", force: :cascade do |t| + t.string "name" + t.string "number" + t.string "department" + t.bigint "school_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["school_id"], name: "index_courses_on_school_id" end - create_table 'reviews', force: :cascade do |t| - t.bigint 'course_id' - t.bigint 'user_id' - t.string 'notes' - t.integer 'work_required' - t.integer 'difficulty' - t.integer 'rating' - t.boolean 'experience_with_topic' - t.integer 'year' - t.integer 'term' - t.integer 'grade' - t.datetime 'created_at', null: false - t.datetime 'updated_at', null: false - t.index ['course_id'], name: 'index_reviews_on_course_id' - t.index ['user_id'], name: 'index_reviews_on_user_id' + create_table "reviews", force: :cascade do |t| + t.bigint "course_id" + t.bigint "user_id" + t.string "notes" + t.integer "work_required" + t.integer "difficulty" + t.integer "rating" + t.boolean "experience_with_topic" + t.integer "year" + t.integer "term" + t.integer "grade" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["course_id"], name: "index_reviews_on_course_id" + t.index ["user_id"], name: "index_reviews_on_user_id" end - create_table 'schools', force: :cascade do |t| - t.string 'name' - t.string 'short_name' - t.datetime 'created_at', null: false - t.datetime 'updated_at', null: false + create_table "schools", force: :cascade do |t| + t.string "name" + t.string "short_name" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false end - create_table 'users', force: :cascade do |t| - t.string 'email', default: '', null: false - t.integer 'years_experience' - t.boolean 'is_admin' - t.string 'encrypted_password', default: '', null: false - t.string 'reset_password_token' - t.datetime 'reset_password_sent_at' - t.datetime 'remember_created_at' - t.integer 'sign_in_count', default: 0, null: false - t.datetime 'current_sign_in_at' - t.datetime 'last_sign_in_at' - t.inet 'current_sign_in_ip' - t.inet 'last_sign_in_ip' - t.string 'confirmation_token' - t.datetime 'confirmed_at' - t.datetime 'confirmation_sent_at' - t.string 'unconfirmed_email' - t.datetime 'created_at', null: false - t.datetime 'updated_at', null: false - t.index ['confirmation_token'], name: 'index_users_on_confirmation_token', unique: true - t.index ['email'], name: 'index_users_on_email', unique: true - t.index ['reset_password_token'], name: 'index_users_on_reset_password_token', unique: true + create_table "users", force: :cascade do |t| + t.string "email", default: "", null: false + t.boolean "is_admin", default: false + t.string "encrypted_password", default: "", null: false + t.string "reset_password_token" + t.datetime "reset_password_sent_at" + t.datetime "remember_created_at" + t.integer "sign_in_count", default: 0, null: false + t.datetime "current_sign_in_at" + t.datetime "last_sign_in_at" + t.inet "current_sign_in_ip" + t.inet "last_sign_in_ip" + t.string "confirmation_token" + t.datetime "confirmed_at" + t.datetime "confirmation_sent_at" + t.string "unconfirmed_email" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.boolean "deactivated", default: false + t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true + t.index ["email"], name: "index_users_on_email", unique: true + t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true end + end diff --git a/spec/controllers/users_controller_spec.rb b/spec/controllers/users_controller_spec.rb index c56185f5..29e91cde 100644 --- a/spec/controllers/users_controller_spec.rb +++ b/spec/controllers/users_controller_spec.rb @@ -32,165 +32,80 @@ end end - describe 'GET #new' do - it 'returns a success response' do - get :new - expect(response).to be_successful - end - it 'renders the new template' do - get :new - expect(response).to render_template(:new) - end - end - - describe 'POST #create' do - let(:user) { create(:user) } - - before do - allow_any_instance_of(User).to receive(:id).and_return(2) - end - - context 'with valid attributes' do - before do - allow_any_instance_of(User).to receive(:save).and_return(user) - end - it 'saves the new add on in the database' do - expect_any_instance_of(User).to receive(:save) - post :create, params: { user: { email: 'pony@party.com' } } - end - - it 'renders the create template' do - post :create, params: { user: { email: 'pony@party.com' } } - expect(response).to redirect_to users_path - end - - it 'assigns the new user to user' do - post :create, params: { user: { email: 'pony@party.com' } } - expect(assigns(:user)).to be_a_kind_of(User) - end - end - - context 'with invalid attributes' do - it "doesn't save the new user in the database" do - expect do - post :create, params: { user: { email: nil } } - end.to_not change(User, :count) - end - - it 'renders the create template' do - post :create, params: { user: { email: nil } } - expect(response).to render_template :new - end - end - end - - describe 'PUT #update' do - let(:user) { create(:user) } + describe 'PUT #promote' do + let(:user) { build_stubbed(:user) } before do allow(User).to receive(:find).and_return(user) - allow_any_instance_of(User).to receive(:id).and_return(2) + allow(user).to receive(:update).and_return(true) end - context 'with valid attributes' do - before do - allow_any_instance_of(User).to receive(:update).and_return(true) - end - it 'updates user in the database' do - expect_any_instance_of(User).to receive(:update) - put :update, params: { id: 2, user: { email: 'pony@party.com' } } - end - - it 'renders the update template' do - put :update, params: { id: 2, user: { email: 'pony@party.com' } } - expect(response).to redirect_to users_path - end - - it 'assigns the user to user' do - put :update, params: { id: 2, user: { email: 'pony@party.com' } } - expect(assigns(:user)).to be_a_kind_of(User) - end + it 'updates user' do + expect(user).to receive(:update) + put :promote, params: { user_id: 2 } end - context 'with invalid attributes' do - before do - allow_any_instance_of(User).to receive(:update).and_return(false) - end - - it "doesn't save the new user in the database" do - expect do - put :update, params: { id: 2, user: { email: nil } } - end.to_not change(User, :count) - end - - it 'renders the update template' do - put :update, params: { id: 2, user: { email: nil } } - expect(response).to render_template :edit - end + it 'redirects to users' do + put :promote, params: { user_id: 2 } + expect(response).to redirect_to users_path end end - describe 'PUT #promote' do + describe 'PUT #demote' do let(:user) { build_stubbed(:user) } before do allow(User).to receive(:find).and_return(user) allow(user).to receive(:update).and_return(true) end - it 'locates UserAdmin is created' do + it 'updates user' do expect(user).to receive(:update) - put :promote, params: { user_id: 2 } + put :demote, params: { user_id: 2 } end - it 'redirects to organization users' do - put :promote, params: { user_id: 2 } + it 'redirects to users' do + put :demote, params: { user_id: 2 } expect(response).to redirect_to users_path end end - describe 'PUT #demote' do + describe 'PUT #deactivate' do let(:user) { build_stubbed(:user) } before do allow(User).to receive(:find).and_return(user) allow(user).to receive(:update).and_return(true) end - it 'locates UserAdmin is created' do + it 'updates user' do expect(user).to receive(:update) - put :demote, params: { user_id: 2 } + put :deactivate, params: { user_id: 2 } end - it 'redirects to organization users' do - put :demote, params: { user_id: 2 } + it 'redirects to users' do + put :deactivate, params: { user_id: 2 } expect(response).to redirect_to users_path end end - describe 'DELETE #destroy' do + describe 'PUT #reactivate' do let(:user) { build_stubbed(:user) } before do allow(User).to receive(:find).and_return(user) - allow(user).to receive(:destroy).and_return(true) + allow(user).to receive(:update).and_return(true) end - it 'deletes the user' do - expect(user).to receive(:destroy) - delete :destroy, params: { id: 1 } + it 'updates user' do + expect(user).to receive(:update) + put :reactivate, params: { user_id: 2 } end - it 'redirects to the users list' do - delete :destroy, params: { id: 1 } - expect(response).to redirect_to(users_path) + it 'redirects to users' do + put :reactivate, params: { user_id: 2 } + expect(response).to redirect_to users_path end end end context 'anonymous user' do - describe 'GET #new' do - it 'returns a access denied' do - expect { get :new }.to raise_error(CanCan::AccessDenied) - end - end - describe 'GET #index' do it 'returns an access denied' do expect { get :index }.to raise_error(CanCan::AccessDenied) @@ -200,34 +115,32 @@ context 'signed in user' do let(:current_user) { build_stubbed(:user) } + let(:user) { build_stubbed(:user) } + before do + allow(User).to receive(:find).and_return(user) sign_in current_user allow(request.env['warden']).to receive(:authenticate!).and_return(current_user) allow(controller).to receive(:current_user).and_return(current_user) end - describe 'GET #new' do + describe 'PUT #deactivate' do it 'returns a access denied' do - expect { get :new }.to raise_error(CanCan::AccessDenied) + expect { put :deactivate, params: { user_id: 1 } }.to raise_error(CanCan::AccessDenied) end end describe 'GET #index' do it 'returns no errors' do - expect { get :index }.not_to raise_error + expect { get :index }.to raise_error(CanCan::AccessDenied) end end - describe 'GET #edit' do + describe 'GET #deactivate' do let(:user) { build_stubbed(:user) } it 'returns an access denied message' do allow(User).to receive(:find).and_return(user) - expect { get :edit, params: { id: 1 } }.to raise_error(CanCan::AccessDenied) - end - - it 'does not return an access denied message' do - allow(User).to receive(:find).and_return(current_user) - expect { get :edit, params: { id: 1 } }.not_to raise_error + expect { put :deactivate, params: { user_id: 1 } }.to raise_error(CanCan::AccessDenied) end end end diff --git a/spec/factories/users.rb b/spec/factories/users.rb index 67add393..ed1bf2be 100644 --- a/spec/factories/users.rb +++ b/spec/factories/users.rb @@ -3,8 +3,8 @@ FactoryBot.define do factory :user do sequence(:email) { |i| Faker::Internet.email("test#{i}") } - years_experience { rand(10) } is_admin { false } + deactivated { false } password { Faker::Internet.password(10, 20) } factory :admin do @@ -23,9 +23,10 @@ # confirmed_at :datetime # current_sign_in_at :datetime # current_sign_in_ip :inet +# deactivated :boolean default(FALSE) # email :string default(""), not null # encrypted_password :string default(""), not null -# is_admin :boolean +# is_admin :boolean default(FALSE) # last_sign_in_at :datetime # last_sign_in_ip :inet # remember_created_at :datetime @@ -33,7 +34,6 @@ # reset_password_token :string # sign_in_count :integer default(0), not null # unconfirmed_email :string -# years_experience :integer # created_at :datetime not null # updated_at :datetime not null # diff --git a/spec/models/review_spec.rb b/spec/models/review_spec.rb index 565e218b..fc4a2d8f 100644 --- a/spec/models/review_spec.rb +++ b/spec/models/review_spec.rb @@ -211,3 +211,27 @@ end end end + +# == Schema Information +# +# Table name: reviews +# +# id :bigint not null, primary key +# difficulty :integer +# experience_with_topic :boolean +# grade :integer +# notes :string +# rating :integer +# term :integer +# work_required :integer +# year :integer +# created_at :datetime not null +# updated_at :datetime not null +# course_id :bigint +# user_id :bigint +# +# Indexes +# +# index_reviews_on_course_id (course_id) +# index_reviews_on_user_id (user_id) +# diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index e6cde374..b16c7c56 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -10,7 +10,7 @@ end context 'associations' do - # it { should have_many :reviews } + it { should have_many :reviews } end context 'scopes' do @@ -44,15 +44,14 @@ describe 'sorted_by' do it 'gets all users sorted' do - user1 = create(:user, email: 'Alphabets@test.com', is_admin: true, years_experience: 3) - user2 = create(:user, email: 'Zebra@test.com', is_admin: false, years_experience: 4) - user3 = create(:user, email: 'Cows@test.com', is_admin: false, years_experience: 5) + user1 = create(:user, email: 'Alphabets@test.com', is_admin: true) + user2 = create(:user, email: 'Zebra@test.com', is_admin: false) + user3 = create(:user, email: 'Cows@test.com', is_admin: false, deactivated: true) aggregate_failures do expect(User.sorted_by('email_asc').first).to eq user1 expect(User.sorted_by('email_desc').first).to eq user2 - expect(User.sorted_by('years_experience_asc').first).to eq user1 - expect(User.sorted_by('years_experience_desc').first).to eq user3 expect(User.sorted_by('admin_desc').first).to eq user1 + expect(User.sorted_by('deactivated_desc').first).to eq user3 expect { User.sorted_by('oh_no') }.to raise_error(ArgumentError, 'Invalid sort option: "oh_no"') end end @@ -88,9 +87,10 @@ # confirmed_at :datetime # current_sign_in_at :datetime # current_sign_in_ip :inet +# deactivated :boolean default(FALSE) # email :string default(""), not null # encrypted_password :string default(""), not null -# is_admin :boolean +# is_admin :boolean default(FALSE) # last_sign_in_at :datetime # last_sign_in_ip :inet # remember_created_at :datetime @@ -98,7 +98,6 @@ # reset_password_token :string # sign_in_count :integer default(0), not null # unconfirmed_email :string -# years_experience :integer # created_at :datetime not null # updated_at :datetime not null # diff --git a/spec/routing/users_routing_spec.rb b/spec/routing/users_routing_spec.rb index c5906167..35292614 100644 --- a/spec/routing/users_routing_spec.rb +++ b/spec/routing/users_routing_spec.rb @@ -8,22 +8,6 @@ expect(get: '/users').to route_to('users#index') end - it 'routes to #new' do - expect(get: '/users/new').to route_to('users#new') - end - - it 'routes to #create' do - expect(post: '/users').to route_to('users#create') - end - - it 'routes to #update via PUT' do - expect(put: '/users/1').to route_to('users#update', id: '1') - end - - it 'routes to #update via PATCH' do - expect(patch: '/users/1').to route_to('users#update', id: '1') - end - it 'routes to #promote via PUT' do expect(put: '/users/1/promote').to route_to('users#promote', user_id: '1') end @@ -32,8 +16,12 @@ expect(put: '/users/1/demote').to route_to('users#demote', user_id: '1') end - it 'routes to #destroy' do - expect(delete: '/users/1').to route_to('users#destroy', id: '1') + it 'routes to #deactivate via PUT' do + expect(put: '/users/1/deactivate').to route_to('users#deactivate', user_id: '1') + end + + it 'routes to #reactivate via PUT' do + expect(put: '/users/1/reactivate').to route_to('users#reactivate', user_id: '1') end end end