rails_template/spec/models/user_spec.rb

57 lines
2.6 KiB
Ruby

# frozen_string_literal: true
require 'rails_helper'
describe User, type: :model do
subject { FactoryBot.build_stubbed(:user) }
context 'fields' do
## Database authenticatable
it { is_expected.to have_db_column(:email).of_type(:string) }
it { is_expected.to have_db_column(:username).of_type(:string) }
it { is_expected.to have_db_column(:encrypted_password).of_type(:string) }
## Recoverable
it { is_expected.to have_db_column(:reset_password_token).of_type(:string) }
it { is_expected.to have_db_column(:reset_password_sent_at).of_type(:datetime) }
## Trackable
it { is_expected.to have_db_column(:sign_in_count).of_type(:integer).with_options(default: 0) }
it { is_expected.to have_db_column(:current_sign_in_at).of_type(:datetime) }
it { is_expected.to have_db_column(:last_sign_in_at).of_type(:datetime) }
it { is_expected.to have_db_column(:current_sign_in_ip).of_type(:inet) }
it { is_expected.to have_db_column(:last_sign_in_ip).of_type(:inet) }
## Confirmable
it { is_expected.to have_db_column(:confirmation_token).of_type(:string) }
it { is_expected.to have_db_column(:confirmed_at).of_type(:datetime) }
it { is_expected.to have_db_column(:confirmation_sent_at).of_type(:datetime) }
it { is_expected.to have_db_column(:unconfirmed_email).of_type(:string) }
## Lockable
it { is_expected.to have_db_column(:failed_attempts).of_type(:integer).with_options(default: 0) }
it { is_expected.to have_db_column(:unlock_token).of_type(:string) }
it { is_expected.to have_db_column(:locked_at).of_type(:datetime) }
## Dates
it { is_expected.to have_db_column(:deleted_at).of_type(:datetime) }
it { is_expected.to have_db_column(:created_at).of_type(:datetime) }
it { is_expected.to have_db_column(:updated_at).of_type(:datetime) }
# admin/employee
it { is_expected.to have_db_column(:admin).of_type(:boolean).with_options(default: false) }
it { is_expected.to have_db_index(:confirmation_token).unique }
it { is_expected.to have_db_index(:email).unique }
it { is_expected.to have_db_index(:reset_password_token).unique }
it { is_expected.to have_db_index(:unlock_token).unique }
it { is_expected.to have_db_index(:username).unique }
it { is_expected.to be_paranoid }
end
describe 'associations' do
# it { is_expected.to have_many(:user_notification_subscriptions) }
end
describe 'callbacks' do
end
describe 'validations' do
it { should validate_email_format_of(:email).with_message('format is not valid') }
# it { is_expected.to callback(:activate_beta_code).after(:create) }
end
end