require "spec_helper" describe UserManager do describe "#save" do let(:admin) { create(:admin) } let(:user) { create(:user) } let(:orphan) { create(:user, login: "orphan_account") } it "returns error without user" do manager = UserManager.new(admin, nil, {}) expect(manager.save).to be_falsey expect(manager.errors).to eq ["Must have a valid user and admin account to proceed."] end it "returns error if user is orphan_account" do manager = UserManager.new(admin, orphan, admin_action: "suspend", suspend_days: "7") expect(manager.save).to be_falsey expect(manager.errors).to eq ["orphan_account cannot be warned, suspended, or banned."] end it "does nothing without an admin action" do manager = UserManager.new(admin, user, {}) expect do manager.save end.to avoid_changing { user.reload.updated_at } .and avoid_changing { user.reload.log_items.count } expect(manager.save).to be_truthy expect(manager.successes).to be_empty end it "returns error if notes are missing when suspending" do manager = UserManager.new(admin, user, admin_action: "suspend", suspend_days: "7") expect(manager.save).to be_falsey expect(manager.errors).to eq ["You must include notes in order to perform this action."] end it "returns error for suspension without time span" do manager = UserManager.new(admin, user, admin_action: "suspend", admin_note: "User violated community guidelines") expect(manager.save).to be_falsey expect(manager.errors).to eq ["Please enter the number of days for which the user should be suspended."] end it "returns error for invalid admin actions" do manager = UserManager.new(admin, user, admin_action: "something_wicked") expect(manager.save).to be_falsey end it "succeeds in suspending user" do manager = UserManager.new(admin, user, admin_action: "suspend", suspend_days: "5", admin_note: "User violated community guidelines") expect(manager.save).to be_truthy expect(manager.successes).to eq ["User has been temporarily suspended."] end it "succeeds in banning user" do manager = UserManager.new(admin, user, admin_action: "ban", admin_note: "User violated community guidelines") expect(manager.save).to be_truthy expect(manager.successes).to eq ["User has been permanently suspended."] end it "succeeds in unsuspending user" do user.update!(suspended: true, suspended_until: 4.days.from_now) manager = UserManager.new(admin, user, admin_action: "unsuspend", admin_note: "There was a mistake in the review process") expect(manager.save).to be_truthy expect(manager.successes).to eq ["Suspension has been lifted."] end it "succeeds in unbanning user" do user.update!(banned: true) manager = UserManager.new(admin, user, admin_action: "unban", admin_note: "There was a mistake in the review process") expect(manager.save).to be_truthy expect(manager.successes).to eq ["Suspension has been lifted."] end end end