Delegate archived methods to parent repository

This commit is contained in:
Urban Rotnik 2020-06-23 17:12:31 +02:00
parent e89bf58e1c
commit 6de322498b
2 changed files with 132 additions and 0 deletions

View file

@ -51,6 +51,26 @@ class RepositoryRow < ApplicationRecord
true
end
def row_archived?
self[:archived]
end
def archived
row_archived? || repository&.archived?
end
def archived?
row_archived? ? super : repository.archived?
end
def archived_by
row_archived? ? super : repository.archived_by
end
def archived_on
row_archived? ? super : repository.archived_on
end
def snapshot!(repository_snapshot)
row_snapshot = dup
row_snapshot.assign_attributes(

View file

@ -42,4 +42,116 @@ describe RepositoryRow, type: :model do
it { is_expected.to validate_presence_of :created_by }
end
end
describe '.archived' do
context 'when archived' do
let(:repository_row) { build :repository_row, :archived }
it 'returns true' do
expect(repository_row.archived).to be_truthy
end
end
context 'when not archived' do
context 'when parent not archived' do
let(:repository_row) { build :repository_row }
it 'returns false' do
expect(repository_row.archived).to be_falsey
end
end
context 'when parent archived' do
let(:repository_row) { build :repository_row, repository: archived_repository }
let(:archived_repository) { create :repository, :archived }
it 'returns true' do
expect(repository_row.archived).to be_truthy
end
end
end
end
describe '.archived?' do
context 'when archived' do
let(:repository_row) { build :repository_row, :archived }
it 'returns true' do
expect(repository_row.archived?).to be_truthy
end
end
context 'when not archived' do
context 'when parent not archived' do
let(:repository_row) { build :repository_row }
it 'returns false' do
expect(repository_row.archived?).to be_falsey
end
end
context 'when parent archived' do
let(:repository_row) { build :repository_row, repository: archived_repository }
let(:archived_repository) { create :repository, :archived }
it 'returns true' do
expect(repository_row.archived?).to be_truthy
end
end
end
end
describe '.archived_by' do
context 'when archived' do
let(:repository_row) { build :repository_row, :archived }
it 'returns user' do
expect(repository_row.archived_by).to be_instance_of User
end
end
context 'when not archived' do
context 'when parent not archived' do
let(:repository_row) { build :repository_row }
it 'returns nil' do
expect(repository_row.archived_by).to be_nil
end
end
context 'when parent archived' do
let(:repository_row) { build :repository_row, repository: archived_repository }
let(:archived_repository) { create :repository, :archived }
it 'returns repository archived_by user' do
expect(repository_row.archived_by).to be_eql(archived_repository.archived_by)
end
end
end
end
describe '.archived_on' do
context 'when archived' do
let(:repository_row) { build :repository_row, :archived }
it 'returns time' do
expect(repository_row.archived_on).not_to be_nil
end
end
context 'when not archived' do
context 'when parent not archived' do
let(:repository_row) { build :repository_row }
it 'returns nil' do
expect(repository_row.archived_on).to be_nil
end
end
context 'when parent archived' do
let(:repository_row) { create :repository_row, repository: archived_repository }
let(:archived_repository) { create :repository, :archived }
it 'returns times of archiving parent' do
expect(repository_row.archived_on).to be_eql(archived_repository.archived_on)
end
end
end
end
end