Merge branch 'fakenine-add_more_tests_to_models'
This commit is contained in:
		
						commit
						ccb6a658fd
					
				
							
								
								
									
										3
									
								
								Gemfile
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								Gemfile
									
									
									
									
									
								
							@ -67,9 +67,10 @@ group :development, :test do
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
group :test do
 | 
					group :test do
 | 
				
			||||||
 | 
					  gem 'faker'
 | 
				
			||||||
 | 
					  gem 'rspec-sidekiq'
 | 
				
			||||||
  gem 'simplecov', require: false
 | 
					  gem 'simplecov', require: false
 | 
				
			||||||
  gem 'webmock'
 | 
					  gem 'webmock'
 | 
				
			||||||
  gem 'rspec-sidekiq'
 | 
					 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
group :development do
 | 
					group :development do
 | 
				
			||||||
 | 
				
			|||||||
@ -149,6 +149,8 @@ GEM
 | 
				
			|||||||
    erubis (2.7.0)
 | 
					    erubis (2.7.0)
 | 
				
			||||||
    execjs (2.7.0)
 | 
					    execjs (2.7.0)
 | 
				
			||||||
    fabrication (2.15.2)
 | 
					    fabrication (2.15.2)
 | 
				
			||||||
 | 
					    faker (1.6.6)
 | 
				
			||||||
 | 
					      i18n (~> 0.5)
 | 
				
			||||||
    fast_blank (1.0.0)
 | 
					    fast_blank (1.0.0)
 | 
				
			||||||
    font-awesome-rails (4.6.3.1)
 | 
					    font-awesome-rails (4.6.3.1)
 | 
				
			||||||
      railties (>= 3.2, < 5.1)
 | 
					      railties (>= 3.2, < 5.1)
 | 
				
			||||||
@ -470,6 +472,7 @@ DEPENDENCIES
 | 
				
			|||||||
  doorkeeper
 | 
					  doorkeeper
 | 
				
			||||||
  dotenv-rails
 | 
					  dotenv-rails
 | 
				
			||||||
  fabrication
 | 
					  fabrication
 | 
				
			||||||
 | 
					  faker
 | 
				
			||||||
  fast_blank
 | 
					  fast_blank
 | 
				
			||||||
  font-awesome-rails
 | 
					  font-awesome-rails
 | 
				
			||||||
  fuubar
 | 
					  fuubar
 | 
				
			||||||
 | 
				
			|||||||
@ -3,9 +3,8 @@
 | 
				
			|||||||
class Block < ApplicationRecord
 | 
					class Block < ApplicationRecord
 | 
				
			||||||
  include Paginable
 | 
					  include Paginable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  belongs_to :account
 | 
					  belongs_to :account, required: true
 | 
				
			||||||
  belongs_to :target_account, class_name: 'Account'
 | 
					  belongs_to :target_account, class_name: 'Account', required: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  validates :account, :target_account, presence: true
 | 
					 | 
				
			||||||
  validates :account_id, uniqueness: { scope: :target_account_id }
 | 
					  validates :account_id, uniqueness: { scope: :target_account_id }
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
@ -3,11 +3,14 @@
 | 
				
			|||||||
class Follow < ApplicationRecord
 | 
					class Follow < ApplicationRecord
 | 
				
			||||||
  include Paginable
 | 
					  include Paginable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  belongs_to :account, counter_cache: :following_count
 | 
					  belongs_to :account, counter_cache: :following_count, required: true
 | 
				
			||||||
  belongs_to :target_account, class_name: 'Account', counter_cache: :followers_count
 | 
					
 | 
				
			||||||
 | 
					  belongs_to :target_account,
 | 
				
			||||||
 | 
					             class_name: 'Account',
 | 
				
			||||||
 | 
					             counter_cache: :followers_count,
 | 
				
			||||||
 | 
					             required: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  has_one :notification, as: :activity, dependent: :destroy
 | 
					  has_one :notification, as: :activity, dependent: :destroy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  validates :account, :target_account, presence: true
 | 
					 | 
				
			||||||
  validates :account_id, uniqueness: { scope: :target_account_id }
 | 
					  validates :account_id, uniqueness: { scope: :target_account_id }
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
@ -3,12 +3,11 @@
 | 
				
			|||||||
class FollowRequest < ApplicationRecord
 | 
					class FollowRequest < ApplicationRecord
 | 
				
			||||||
  include Paginable
 | 
					  include Paginable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  belongs_to :account
 | 
					  belongs_to :account, required: true
 | 
				
			||||||
  belongs_to :target_account, class_name: 'Account'
 | 
					  belongs_to :target_account, class_name: 'Account', required: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  has_one :notification, as: :activity, dependent: :destroy
 | 
					  has_one :notification, as: :activity, dependent: :destroy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  validates :account, :target_account, presence: true
 | 
					 | 
				
			||||||
  validates :account_id, uniqueness: { scope: :target_account_id }
 | 
					  validates :account_id, uniqueness: { scope: :target_account_id }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def authorize!
 | 
					  def authorize!
 | 
				
			||||||
 | 
				
			|||||||
@ -1,11 +1,10 @@
 | 
				
			|||||||
# frozen_string_literal: true
 | 
					# frozen_string_literal: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Mention < ApplicationRecord
 | 
					class Mention < ApplicationRecord
 | 
				
			||||||
  belongs_to :account, inverse_of: :mentions
 | 
					  belongs_to :account, inverse_of: :mentions, required: true
 | 
				
			||||||
  belongs_to :status
 | 
					  belongs_to :status, required: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  has_one :notification, as: :activity, dependent: :destroy
 | 
					  has_one :notification, as: :activity, dependent: :destroy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  validates :account, :status, presence: true
 | 
					 | 
				
			||||||
  validates :account, uniqueness: { scope: :status }
 | 
					  validates :account, uniqueness: { scope: :status }
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
@ -5,8 +5,8 @@ en:
 | 
				
			|||||||
    about_this: About this instance
 | 
					    about_this: About this instance
 | 
				
			||||||
    apps: Apps
 | 
					    apps: Apps
 | 
				
			||||||
    business_email: 'Business e-mail:'
 | 
					    business_email: 'Business e-mail:'
 | 
				
			||||||
    contact: Contact
 | 
					 | 
				
			||||||
    closed_registrations: Registrations are currently closed on this instance.
 | 
					    closed_registrations: Registrations are currently closed on this instance.
 | 
				
			||||||
 | 
					    contact: Contact
 | 
				
			||||||
    description_headline: What is %{domain}?
 | 
					    description_headline: What is %{domain}?
 | 
				
			||||||
    domain_count_after: other instances
 | 
					    domain_count_after: other instances
 | 
				
			||||||
    domain_count_before: Connected to
 | 
					    domain_count_before: Connected to
 | 
				
			||||||
 | 
				
			|||||||
@ -1,3 +1,3 @@
 | 
				
			|||||||
Fabricator(:account) do
 | 
					Fabricator(:account) do
 | 
				
			||||||
  username "alice"
 | 
					  username { Faker::Internet.user_name(nil, %w(_)) }
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
@ -1,3 +1,4 @@
 | 
				
			|||||||
Fabricator(:block) do
 | 
					Fabricator(:block) do
 | 
				
			||||||
 | 
					  account
 | 
				
			||||||
 | 
					  target_account { Fabricate(:account) }
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
@ -1,3 +1,4 @@
 | 
				
			|||||||
Fabricator(:follow) do
 | 
					Fabricator(:follow) do
 | 
				
			||||||
 | 
					  account
 | 
				
			||||||
 | 
					  target_account { Fabricate(:account) }
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
@ -1,3 +1,4 @@
 | 
				
			|||||||
Fabricator(:follow_request) do
 | 
					Fabricator(:follow_request) do
 | 
				
			||||||
 | 
					  account
 | 
				
			||||||
 | 
					  target_account { Fabricate(:account) }
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										4
									
								
								spec/fabricators/mention_fabricator.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								spec/fabricators/mention_fabricator.rb
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					Fabricator(:mention) do
 | 
				
			||||||
 | 
					  account
 | 
				
			||||||
 | 
					  status
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
Fabricator(:user) do
 | 
					Fabricator(:user) do
 | 
				
			||||||
  account
 | 
					  account
 | 
				
			||||||
  email        "alice@example.com"
 | 
					  email        { Faker::Internet.email }
 | 
				
			||||||
  password     "123456789"
 | 
					  password     "123456789"
 | 
				
			||||||
  confirmed_at { Time.now }
 | 
					  confirmed_at { Time.now }
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
@ -209,4 +209,73 @@ RSpec.describe Account, type: :model do
 | 
				
			|||||||
      expect(subject.match('Check this out https://medium.com/@alice/some-article#.abcdef123')).to be_nil
 | 
					      expect(subject.match('Check this out https://medium.com/@alice/some-article#.abcdef123')).to be_nil
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  describe 'validations' do
 | 
				
			||||||
 | 
					    it 'has a valid fabricator' do
 | 
				
			||||||
 | 
					      account = Fabricate.build(:account)
 | 
				
			||||||
 | 
					      account.valid?
 | 
				
			||||||
 | 
					      expect(account).to be_valid
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it 'is invalid without a username' do
 | 
				
			||||||
 | 
					      account = Fabricate.build(:account, username: nil)
 | 
				
			||||||
 | 
					      account.valid?
 | 
				
			||||||
 | 
					      expect(account).to model_have_error_on_field(:username)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it 'is invalid if the username already exists' do
 | 
				
			||||||
 | 
					      account_1 = Fabricate(:account, username: 'the_doctor')
 | 
				
			||||||
 | 
					      account_2 = Fabricate.build(:account, username: 'the_doctor')
 | 
				
			||||||
 | 
					      account_2.valid?
 | 
				
			||||||
 | 
					      expect(account_2).to model_have_error_on_field(:username)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    context 'when is local' do
 | 
				
			||||||
 | 
					      it 'is invalid if the username doesn\'t only contains letters, numbers and underscores' do
 | 
				
			||||||
 | 
					        account = Fabricate.build(:account, username: 'the-doctor')
 | 
				
			||||||
 | 
					        account.valid?
 | 
				
			||||||
 | 
					        expect(account).to model_have_error_on_field(:username)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      it 'is invalid if the username is longer then 30 characters' do
 | 
				
			||||||
 | 
					        account = Fabricate.build(:account, username: Faker::Lorem.characters(31))
 | 
				
			||||||
 | 
					        account.valid?
 | 
				
			||||||
 | 
					        expect(account).to model_have_error_on_field(:username)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  describe 'scopes' do
 | 
				
			||||||
 | 
					    describe 'remote' do
 | 
				
			||||||
 | 
					      it 'returns an array of accounts who have a domain' do
 | 
				
			||||||
 | 
					        account_1 = Fabricate(:account, domain: nil)
 | 
				
			||||||
 | 
					        account_2 = Fabricate(:account, domain: 'example.com')
 | 
				
			||||||
 | 
					        expect(Account.remote).to match_array([account_2])
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    describe 'local' do
 | 
				
			||||||
 | 
					      it 'returns an array of accounts who do not have a domain' do
 | 
				
			||||||
 | 
					        account_1 = Fabricate(:account, domain: nil)
 | 
				
			||||||
 | 
					        account_2 = Fabricate(:account, domain: 'example.com')
 | 
				
			||||||
 | 
					        expect(Account.local).to match_array([account_1])
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    describe 'silenced' do
 | 
				
			||||||
 | 
					      it 'returns an array of accounts who are silenced' do
 | 
				
			||||||
 | 
					        account_1 = Fabricate(:account, silenced: true)
 | 
				
			||||||
 | 
					        account_2 = Fabricate(:account, silenced: false)
 | 
				
			||||||
 | 
					        expect(Account.silenced).to match_array([account_1])
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    describe 'suspended' do
 | 
				
			||||||
 | 
					      it 'returns an array of accounts who are suspended' do
 | 
				
			||||||
 | 
					        account_1 = Fabricate(:account, suspended: true)
 | 
				
			||||||
 | 
					        account_2 = Fabricate(:account, suspended: false)
 | 
				
			||||||
 | 
					        expect(Account.suspended).to match_array([account_1])
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,22 @@
 | 
				
			|||||||
require 'rails_helper'
 | 
					require 'rails_helper'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RSpec.describe Block, type: :model do
 | 
					RSpec.describe Block, type: :model do
 | 
				
			||||||
 | 
					  describe 'validations' do
 | 
				
			||||||
 | 
					    it 'has a valid fabricator' do
 | 
				
			||||||
 | 
					      block = Fabricate.build(:block)
 | 
				
			||||||
 | 
					      expect(block).to be_valid
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it 'is invalid without an account' do
 | 
				
			||||||
 | 
					      block = Fabricate.build(:block, account: nil)
 | 
				
			||||||
 | 
					      block.valid?
 | 
				
			||||||
 | 
					      expect(block).to model_have_error_on_field(:account)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it 'is invalid without a target_account' do
 | 
				
			||||||
 | 
					      block = Fabricate.build(:block, target_account: nil)
 | 
				
			||||||
 | 
					      block.valid?
 | 
				
			||||||
 | 
					      expect(block).to model_have_error_on_field(:target_account)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,23 @@
 | 
				
			|||||||
require 'rails_helper'
 | 
					require 'rails_helper'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RSpec.describe DomainBlock, type: :model do
 | 
					RSpec.describe DomainBlock, type: :model do
 | 
				
			||||||
 | 
					  describe 'validations' do
 | 
				
			||||||
 | 
					    it 'has a valid fabricator' do
 | 
				
			||||||
 | 
					      domain_block = Fabricate.build(:domain_block)
 | 
				
			||||||
 | 
					      expect(domain_block).to be_valid
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it 'is invalid without a domain' do
 | 
				
			||||||
 | 
					      domain_block = Fabricate.build(:domain_block, domain: nil)
 | 
				
			||||||
 | 
					      domain_block.valid?
 | 
				
			||||||
 | 
					      expect(domain_block).to model_have_error_on_field(:domain)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it 'is invalid if the domain already exists' do
 | 
				
			||||||
 | 
					      domain_block_1 = Fabricate(:domain_block, domain: 'dalek.com')
 | 
				
			||||||
 | 
					      domain_block_2 = Fabricate.build(:domain_block, domain: 'dalek.com')
 | 
				
			||||||
 | 
					      domain_block_2.valid?
 | 
				
			||||||
 | 
					      expect(domain_block_2).to model_have_error_on_field(:domain)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
@ -3,4 +3,23 @@ require 'rails_helper'
 | 
				
			|||||||
RSpec.describe FollowRequest, type: :model do
 | 
					RSpec.describe FollowRequest, type: :model do
 | 
				
			||||||
  describe '#authorize!'
 | 
					  describe '#authorize!'
 | 
				
			||||||
  describe '#reject!'
 | 
					  describe '#reject!'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  describe 'validations' do
 | 
				
			||||||
 | 
					    it 'has a valid fabricator' do
 | 
				
			||||||
 | 
					      follow_request = Fabricate.build(:follow_request)
 | 
				
			||||||
 | 
					      expect(follow_request).to be_valid
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it 'is invalid without an account' do
 | 
				
			||||||
 | 
					      follow_request = Fabricate.build(:follow_request, account: nil)
 | 
				
			||||||
 | 
					      follow_request.valid?
 | 
				
			||||||
 | 
					      expect(follow_request).to model_have_error_on_field(:account)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it 'is invalid without a target account' do
 | 
				
			||||||
 | 
					      follow_request = Fabricate.build(:follow_request, target_account: nil)
 | 
				
			||||||
 | 
					      follow_request.valid?
 | 
				
			||||||
 | 
					      expect(follow_request).to model_have_error_on_field(:target_account)      
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
@ -5,4 +5,23 @@ RSpec.describe Follow, type: :model do
 | 
				
			|||||||
  let(:bob)   { Fabricate(:account, username: 'bob') }
 | 
					  let(:bob)   { Fabricate(:account, username: 'bob') }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  subject { Follow.new(account: alice, target_account: bob) }
 | 
					  subject { Follow.new(account: alice, target_account: bob) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  describe 'validations' do
 | 
				
			||||||
 | 
					    it 'has a valid fabricator' do
 | 
				
			||||||
 | 
					      follow = Fabricate.build(:follow)
 | 
				
			||||||
 | 
					      expect(follow).to be_valid
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it 'is invalid without an account' do
 | 
				
			||||||
 | 
					      follow = Fabricate.build(:follow, account: nil)
 | 
				
			||||||
 | 
					      follow.valid?
 | 
				
			||||||
 | 
					      expect(follow).to model_have_error_on_field(:account)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it 'is invalid without a target_account' do
 | 
				
			||||||
 | 
					      follow = Fabricate.build(:follow, target_account: nil)
 | 
				
			||||||
 | 
					      follow.valid?
 | 
				
			||||||
 | 
					      expect(follow).to model_have_error_on_field(:target_account)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,22 @@
 | 
				
			|||||||
require 'rails_helper'
 | 
					require 'rails_helper'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RSpec.describe Mention, type: :model do
 | 
					RSpec.describe Mention, type: :model do
 | 
				
			||||||
 | 
					  describe 'validations' do
 | 
				
			||||||
 | 
					    it 'has a valid fabricator' do
 | 
				
			||||||
 | 
					      mention = Fabricate.build(:mention)
 | 
				
			||||||
 | 
					      expect(mention).to be_valid
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it 'is invalid without an account' do
 | 
				
			||||||
 | 
					      mention = Fabricate.build(:mention, account: nil)
 | 
				
			||||||
 | 
					      mention.valid?
 | 
				
			||||||
 | 
					      expect(mention).to model_have_error_on_field(:account)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it 'is invalid without a status' do
 | 
				
			||||||
 | 
					      mention = Fabricate.build(:mention, status: nil)
 | 
				
			||||||
 | 
					      mention.valid?
 | 
				
			||||||
 | 
					      expect(mention).to model_have_error_on_field(:status)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,52 @@
 | 
				
			|||||||
require 'rails_helper'
 | 
					require 'rails_helper'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RSpec.describe User, type: :model do
 | 
					RSpec.describe User, type: :model do
 | 
				
			||||||
 | 
					  describe 'validations' do
 | 
				
			||||||
 | 
					    it 'is invalid without an account' do
 | 
				
			||||||
 | 
					      user = Fabricate.build(:user, account: nil)
 | 
				
			||||||
 | 
					      user.valid?
 | 
				
			||||||
 | 
					      expect(user).to model_have_error_on_field(:account)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it 'is invalid without a valid locale' do
 | 
				
			||||||
 | 
					      user = Fabricate.build(:user, locale: 'toto')
 | 
				
			||||||
 | 
					      user.valid?
 | 
				
			||||||
 | 
					      expect(user).to model_have_error_on_field(:locale)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it 'is invalid without a valid email' do
 | 
				
			||||||
 | 
					      user = Fabricate.build(:user, email: 'john@')
 | 
				
			||||||
 | 
					      user.valid?
 | 
				
			||||||
 | 
					      expect(user).to model_have_error_on_field(:email)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  describe 'scopes' do
 | 
				
			||||||
 | 
					    describe 'recent' do
 | 
				
			||||||
 | 
					      it 'returns an array of recent users ordered by id' do
 | 
				
			||||||
 | 
					        user_1 = Fabricate(:user)
 | 
				
			||||||
 | 
					        user_2 = Fabricate(:user)
 | 
				
			||||||
 | 
					        expect(User.recent).to match_array([user_2, user_1])
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    describe 'admins' do
 | 
				
			||||||
 | 
					      it 'returns an array of users who are admin' do
 | 
				
			||||||
 | 
					        user_1 = Fabricate(:user, admin: false)
 | 
				
			||||||
 | 
					        user_2 = Fabricate(:user, admin: true)
 | 
				
			||||||
 | 
					        expect(User.admins).to match_array([user_2])
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    describe 'confirmed' do
 | 
				
			||||||
 | 
					      it 'returns an array of users who are confirmed' do
 | 
				
			||||||
 | 
					        user_1 = Fabricate(:user, confirmed_at: nil)
 | 
				
			||||||
 | 
					        user_2 = Fabricate(:user, confirmed_at: Time.now)
 | 
				
			||||||
 | 
					        expect(User.confirmed).to match_array([user_2])
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  let(:account) { Fabricate(:account, username: 'alice') }
 | 
					  let(:account) { Fabricate(:account, username: 'alice') }
 | 
				
			||||||
  let(:password) { 'abcd1234' }
 | 
					  let(:password) { 'abcd1234' }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -8,6 +8,8 @@ require 'rspec/rails'
 | 
				
			|||||||
require 'webmock/rspec'
 | 
					require 'webmock/rspec'
 | 
				
			||||||
require 'paperclip/matchers'
 | 
					require 'paperclip/matchers'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ActiveRecord::Migration.maintain_test_schema!
 | 
					ActiveRecord::Migration.maintain_test_schema!
 | 
				
			||||||
WebMock.disable_net_connect!(allow: 'localhost:7575')
 | 
					WebMock.disable_net_connect!(allow: 'localhost:7575')
 | 
				
			||||||
Sidekiq::Testing.inline!
 | 
					Sidekiq::Testing.inline!
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										15
									
								
								spec/support/matchers/model/model_have_error_on_field.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								spec/support/matchers/model/model_have_error_on_field.rb
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					RSpec::Matchers.define :model_have_error_on_field do |expected|
 | 
				
			||||||
 | 
					  match do |record|
 | 
				
			||||||
 | 
					    if record.errors.empty?
 | 
				
			||||||
 | 
					      record.valid?
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    record.errors.has_key?(expected)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  failure_message do |record|
 | 
				
			||||||
 | 
					    keys = record.errors.keys
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    "expect record.errors(#{keys}) to include #{expected}"
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user