Add fallback archived_on and archived_by columns to parent for MyModule and Experiment [SCI-5362]

This commit is contained in:
Urban Rotnik 2021-01-08 12:25:28 +01:00
parent 5f506b7459
commit 2a3bafd6a0
6 changed files with 276 additions and 0 deletions

View file

@ -105,6 +105,26 @@ class Experiment < ApplicationRecord
archived? || project.archived?
end
def experiment_archived?
self[:archived]
end
def archived
experiment_archived? || project&.archived?
end
def archived?
experiment_archived? ? super : project&.archived?
end
def archived_by
experiment_archived? ? super : project&.archived_by
end
def archived_on
experiment_archived? ? super : project&.archived_on
end
def navigable?
!project.archived?
end

View file

@ -137,6 +137,26 @@ class MyModule < ApplicationRecord
archived? || experiment.archived_branch?
end
def my_module_archived?
self[:archived]
end
def archived
my_module_archived? || experiment&.archived?
end
def archived?
my_module_archived? ? super : experiment&.archived?
end
def archived_by
my_module_archived? ? super : experiment&.archived_by
end
def archived_on
my_module_archived? ? super : experiment&.archived_on
end
def repository_rows_count(repository)
my_module_repository_rows.joins(repository_row: :repository)
.where('repositories.id': repository.id)

View file

@ -15,5 +15,11 @@ FactoryBot.define do
create_list :my_module, 3, :with_tag, experiment: e
end
end
trait :archived do
archived { true }
archived_on { Time.zone.now }
archived_by { created_by }
end
end
end

View file

@ -7,5 +7,11 @@ FactoryBot.define do
team { create :team, created_by: created_by }
archived { false }
visibility { 'hidden' }
trait :archived do
archived { true }
archived_on { Time.zone.now }
archived_by { created_by }
end
end
end

View file

@ -75,6 +75,118 @@ describe Experiment, type: :model do
end
end
describe '.archived' do
context 'when archived' do
let(:experiment) { build :experiment, :archived }
it 'returns true' do
expect(experiment.archived).to be_truthy
end
end
context 'when not archived' do
context 'when parent not archived' do
let(:experiment) { build :experiment }
it 'returns false' do
expect(experiment.archived).to be_falsey
end
end
context 'when parent archived' do
let(:experiment) { build :experiment, project: archived_project }
let(:archived_project) { create :project, :archived }
it 'returns true' do
expect(experiment.archived).to be_truthy
end
end
end
end
describe '.archived?' do
context 'when archived' do
let(:experiment) { build :experiment, :archived }
it 'returns true' do
expect(experiment.archived?).to be_truthy
end
end
context 'when not archived' do
context 'when parent not archived' do
let(:experiment) { build :experiment }
it 'returns false' do
expect(experiment.archived?).to be_falsey
end
end
context 'when parent archived' do
let(:experiment) { build :experiment, project: archived_project }
let(:archived_project) { create :project, :archived }
it 'returns true' do
expect(experiment.archived?).to be_truthy
end
end
end
end
describe '.archived_by' do
context 'when archived' do
let(:experiment) { build :experiment, :archived }
it 'returns user' do
expect(experiment.archived_by).to be_instance_of User
end
end
context 'when not archived' do
context 'when parent not archived' do
let(:experiment) { build :experiment }
it 'returns nil' do
expect(experiment.archived_by).to be_nil
end
end
context 'when parent archived' do
let(:experiment) { build :experiment, project: archived_project }
let(:archived_project) { create :project, :archived }
it 'returns project archived_by user' do
expect(experiment.archived_by).to be_eql(archived_project.archived_by)
end
end
end
end
describe '.archived_on' do
context 'when archived' do
let(:experiment) { build :experiment, :archived }
it 'returns time' do
expect(experiment.archived_on).not_to be_nil
end
end
context 'when not archived' do
context 'when parent not archived' do
let(:experiment) { build :experiment }
it 'returns nil' do
expect(experiment.archived_on).to be_nil
end
end
context 'when parent archived' do
let(:experiment) { create :experiment, project: archived_project }
let(:archived_project) { create :project, :archived }
it 'returns times of archiving parent' do
expect(experiment.archived_on).to be_eql(archived_project.archived_on)
end
end
end
end
describe '.update_canvas' do
let(:experiment) { create :experiment, :with_tasks }
let(:user) { experiment.created_by }

View file

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