mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-11-10 17:36:33 +08:00
194 lines
7 KiB
Ruby
194 lines
7 KiB
Ruby
require 'rails_helper'
|
|
|
|
describe User, type: :model do
|
|
it 'should be of class User' do
|
|
expect(subject.class).to eq User
|
|
end
|
|
|
|
describe 'Database table' do
|
|
it { should have_db_column :id }
|
|
it { should have_db_column :full_name }
|
|
it { should have_db_column :initials }
|
|
it { should have_db_column :email }
|
|
it { should have_db_column :encrypted_password }
|
|
it { should have_db_column :reset_password_token }
|
|
it { should have_db_column :reset_password_sent_at }
|
|
it { should have_db_column :sign_in_count }
|
|
it { should have_db_column :current_sign_in_at }
|
|
it { should have_db_column :last_sign_in_at }
|
|
it { should have_db_column :current_sign_in_ip }
|
|
it { should have_db_column :last_sign_in_ip }
|
|
it { should have_db_column :created_at }
|
|
it { should have_db_column :updated_at }
|
|
it { should have_db_column :avatar_file_name }
|
|
it { should have_db_column :avatar_content_type }
|
|
it { should have_db_column :avatar_file_size }
|
|
it { should have_db_column :avatar_updated_at }
|
|
it { should have_db_column :confirmation_token }
|
|
it { should have_db_column :confirmed_at }
|
|
it { should have_db_column :confirmation_sent_at }
|
|
it { should have_db_column :unconfirmed_email }
|
|
it { should have_db_column :time_zone }
|
|
it { should have_db_column :invitation_token }
|
|
it { should have_db_column :invitation_created_at }
|
|
it { should have_db_column :invitation_sent_at }
|
|
it { should have_db_column :invitation_accepted_at }
|
|
it { should have_db_column :invitation_limit }
|
|
it { should have_db_column :invited_by_id }
|
|
it { should have_db_column :invited_by_type }
|
|
it { should have_db_column :invitations_count }
|
|
it { should have_db_column :tutorial_status }
|
|
it { should have_db_column :assignments_notification }
|
|
it { should have_db_column :recent_notification }
|
|
it { should have_db_column :assignments_notification_email }
|
|
it { should have_db_column :recent_notification_email }
|
|
it { should have_db_column :current_team_id }
|
|
it { should have_db_column :system_message_notification_email }
|
|
it { should have_db_column :authentication_token }
|
|
end
|
|
|
|
describe 'Relations' do
|
|
it { should have_many :user_teams }
|
|
it { should have_many :teams }
|
|
it { should have_many :user_projects }
|
|
it { should have_many :projects }
|
|
it { should have_many :user_my_modules }
|
|
it { should have_many :comments }
|
|
it { should have_many :activities }
|
|
it { should have_many :results }
|
|
it { should have_many :samples }
|
|
it { should have_many :samples_tables }
|
|
it { should have_many :repositories }
|
|
it { should have_many :repository_table_states }
|
|
it { should have_many :steps }
|
|
it { should have_many :custom_fields }
|
|
it { should have_many :reports }
|
|
it { should have_many :created_assets }
|
|
it { should have_many :modified_assets }
|
|
it { should have_many :created_checklists }
|
|
it { should have_many :modified_checklists }
|
|
it { should have_many :created_checklist_items }
|
|
it { should have_many :modified_checklist_items }
|
|
it { should have_many :modified_comments }
|
|
it { should have_many :modified_custom_fields }
|
|
it { should have_many :created_my_module_groups }
|
|
it { should have_many :created_my_module_tags }
|
|
it { should have_many :created_my_modules }
|
|
it { should have_many :modified_my_modules }
|
|
it { should have_many :archived_my_modules }
|
|
it { should have_many :restored_my_modules }
|
|
it { should have_many :created_teams }
|
|
it { should have_many :modified_teams }
|
|
it { should have_many :created_projects }
|
|
it { should have_many :modified_projects }
|
|
it { should have_many :archived_projects }
|
|
it { should have_many :restored_projects }
|
|
it { should have_many :modified_reports }
|
|
it { should have_many :modified_results }
|
|
it { should have_many :archived_results }
|
|
it { should have_many :restored_results }
|
|
it { should have_many :created_sample_groups }
|
|
it { should have_many :modified_sample_groups }
|
|
it { should have_many :assigned_sample_my_modules }
|
|
it { should have_many :created_sample_types }
|
|
it { should have_many :modified_sample_types }
|
|
it { should have_many :modified_samples }
|
|
it { should have_many :modified_steps }
|
|
it { should have_many :created_tables }
|
|
it { should have_many :modified_tables }
|
|
it { should have_many :created_tags }
|
|
it { should have_many :tokens }
|
|
it { should have_many :modified_tags }
|
|
it { should have_many :assigned_user_my_modules }
|
|
it { should have_many :assigned_user_teams }
|
|
it { should have_many :assigned_user_projects }
|
|
it { should have_many :added_protocols }
|
|
it { should have_many :archived_protocols }
|
|
it { should have_many :restored_protocols }
|
|
it { should have_many :assigned_my_module_repository_rows }
|
|
it { should have_many :user_notifications }
|
|
it { should have_many :notifications }
|
|
it { should have_many :zip_exports }
|
|
end
|
|
|
|
describe 'Should be a valid object' do
|
|
it { should validate_presence_of :full_name }
|
|
it { should validate_presence_of :initials }
|
|
it { should validate_presence_of :email }
|
|
it { should validate_presence_of :time_zone }
|
|
|
|
it do
|
|
should validate_length_of(:full_name).is_at_most(
|
|
Constants::NAME_MAX_LENGTH
|
|
)
|
|
end
|
|
|
|
it do
|
|
should validate_length_of(:initials).is_at_most(
|
|
Constants::USER_INITIALS_MAX_LENGTH
|
|
)
|
|
end
|
|
|
|
it do
|
|
should validate_length_of(:email).is_at_most(
|
|
Constants::EMAIL_MAX_LENGTH
|
|
)
|
|
end
|
|
end
|
|
|
|
describe 'Should return a user name' do
|
|
let(:user) { build :user, full_name: 'Tinker' }
|
|
|
|
it 'should return a user full name' do
|
|
expect(user.name).to eq 'Tinker'
|
|
end
|
|
|
|
it 'should to be able to change full name' do
|
|
user.name = 'Axe'
|
|
expect(user.name).to_not eq 'Tinker'
|
|
expect(user.name).to eq 'Axe'
|
|
end
|
|
end
|
|
|
|
describe 'teams_data should return a list of teams' do
|
|
# needs persistence because is testing a sql query
|
|
let(:team) { create :team }
|
|
let(:user_one) do
|
|
create :user, email: 'user1@asdf.com', current_team_id: team.id
|
|
end
|
|
let(:user_two) { create :user, email: 'user2@asdf.com' }
|
|
|
|
it 'in a specific format' do
|
|
create :user_team, team: team, user: user_one
|
|
expected_result = {
|
|
id: team.id,
|
|
name: team.name,
|
|
members: 1,
|
|
role: 2,
|
|
current_team: true,
|
|
can_be_leaved: false
|
|
}
|
|
|
|
user_one.teams_data.first.each do |k, v|
|
|
expect(v).to eq(expected_result.fetch(k.to_sym))
|
|
end
|
|
end
|
|
|
|
it 'should return correct number of team members' do
|
|
create :user_team, team: team, user: user_one
|
|
create :user_team, team: team, user: user_two
|
|
expected_result = {
|
|
id: team.id,
|
|
name: team.name,
|
|
members: 2,
|
|
role: 2,
|
|
current_team: true,
|
|
can_be_leaved: true
|
|
}
|
|
|
|
user_one.teams_data.first.each do |k, v|
|
|
expect(v).to eq(expected_result.fetch(k.to_sym))
|
|
end
|
|
end
|
|
end
|
|
end
|