Files
codeocean/spec/models/internal_user_spec.rb
Sebastian Serth 99bd46af1a Align project files with CodeHarbor
Since both projects are developed together and by the same team, we also want to have the same code structure and utility methods available in both projects. Therefore, this commit changes many files, but without a functional change.
2023-10-11 00:18:33 +02:00

97 lines
2.5 KiB
Ruby

# frozen_string_literal: true
require 'rails_helper'
RSpec.describe InternalUser do
let(:password) { SecureRandom.hex }
let(:user) { described_class.create }
it 'validates the presence of an email address' do
expect(user.errors[:email]).to be_present
end
it 'validates the uniqueness of the email address' do
user.update(email: create(:admin).email)
expect(user.errors[:email]).to be_present
end
context 'when not activated' do
let(:user) { create(:teacher) }
before do
user.send(:setup_activation)
user.send(:send_activation_needed_email!)
end
it 'validates the confirmation of the password' do
user.update(password:, password_confirmation: '')
expect(user.errors[:password_confirmation]).to be_present
end
it 'validates the presence of a password' do
user.update(name: Forgery(:name).full_name)
expect(user.errors[:password]).to be_present
end
end
context 'with a pending password reset' do
let(:user) { create(:teacher) }
before { user.deliver_reset_password_instructions! }
it 'validates the confirmation of the password' do
user.update(password:, password_confirmation: '')
expect(user.errors[:password_confirmation]).to be_present
end
it 'validates the presence of a password' do
user.update(name: Forgery(:name).full_name)
expect(user.errors[:password]).to be_present
end
end
context 'when complete' do
let(:user) { create(:teacher, activation_state: 'active') }
it 'does not validate the confirmation of the password' do
user.update(password:, password_confirmation: '')
expect(user.errors[:password_confirmation]).not_to be_present
end
it 'does not validate the presence of a password' do
expect(user.errors[:password]).not_to be_present
end
end
it 'validates the presence of the platform_admin flag' do
user.update(platform_admin: nil)
expect(user.errors[:platform_admin]).to be_present
end
describe '#admin?' do
it 'is only true for admins' do
expect(build(:admin).admin?).to be true
expect(build(:teacher).admin?).to be false
end
end
describe '#external_user?' do
it 'is false' do
expect(user.external_user?).to be false
end
end
describe '#internal_user?' do
it 'is true' do
expect(user.internal_user?).to be true
end
end
describe '#teacher?' do
it 'is only true for teachers' do
expect(create(:admin).teacher?).to be false
expect(create(:teacher).teacher?).to be true
end
end
end