diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2024-01-16 13:42:19 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2024-01-16 13:42:19 +0300 |
commit | 84d1bd786125c1c14a3ba5f63e38a4cc736a9027 (patch) | |
tree | f550fa965f507077e20dbb6d61a8269a99ef7107 /spec/models/ml | |
parent | 3a105e36e689f7b75482236712f1a47fd5a76814 (diff) |
Add latest changes from gitlab-org/gitlab@16-8-stable-eev16.8.0-rc42
Diffstat (limited to 'spec/models/ml')
-rw-r--r-- | spec/models/ml/candidate_metric_spec.rb | 2 | ||||
-rw-r--r-- | spec/models/ml/candidate_param_spec.rb | 2 | ||||
-rw-r--r-- | spec/models/ml/experiment_spec.rb | 14 | ||||
-rw-r--r-- | spec/models/ml/model_metadata_spec.rb | 2 | ||||
-rw-r--r-- | spec/models/ml/model_version_metadata_spec.rb | 29 | ||||
-rw-r--r-- | spec/models/ml/model_version_spec.rb | 29 |
6 files changed, 76 insertions, 2 deletions
diff --git a/spec/models/ml/candidate_metric_spec.rb b/spec/models/ml/candidate_metric_spec.rb index 9f9a6e8e3ba..9ceaa83a6fa 100644 --- a/spec/models/ml/candidate_metric_spec.rb +++ b/spec/models/ml/candidate_metric_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Ml::CandidateMetric do +RSpec.describe Ml::CandidateMetric, feature_category: :mlops do describe 'associations' do it { is_expected.to belong_to(:candidate) } end diff --git a/spec/models/ml/candidate_param_spec.rb b/spec/models/ml/candidate_param_spec.rb index ff38e471219..89232b10855 100644 --- a/spec/models/ml/candidate_param_spec.rb +++ b/spec/models/ml/candidate_param_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Ml::CandidateParam do +RSpec.describe Ml::CandidateParam, feature_category: :mlops do describe 'associations' do it { is_expected.to belong_to(:candidate) } end diff --git a/spec/models/ml/experiment_spec.rb b/spec/models/ml/experiment_spec.rb index 36bdb611833..1864c04d2fd 100644 --- a/spec/models/ml/experiment_spec.rb +++ b/spec/models/ml/experiment_spec.rb @@ -37,6 +37,20 @@ RSpec.describe Ml::Experiment, feature_category: :mlops do end end + describe '.by_project' do + subject { described_class.by_project(exp.project) } + + it { is_expected.to match_array([exp, exp2]) } + end + + describe '.including_project' do + subject { described_class.including_project } + + it 'loads latest version' do + expect(subject.first.association_cached?(:project)).to be(true) + end + end + describe '#by_project_id_and_iid' do subject { described_class.by_project_id_and_iid(exp.project_id, iid) } diff --git a/spec/models/ml/model_metadata_spec.rb b/spec/models/ml/model_metadata_spec.rb index f06c7a2ce50..0afc7bb7a2e 100644 --- a/spec/models/ml/model_metadata_spec.rb +++ b/spec/models/ml/model_metadata_spec.rb @@ -5,6 +5,8 @@ require 'spec_helper' RSpec.describe Ml::ModelMetadata, feature_category: :mlops do describe 'associations' do it { is_expected.to belong_to(:model).required } + it { is_expected.to validate_length_of(:name).is_at_most(255) } + it { is_expected.to validate_length_of(:value).is_at_most(5000) } end describe 'validations' do diff --git a/spec/models/ml/model_version_metadata_spec.rb b/spec/models/ml/model_version_metadata_spec.rb new file mode 100644 index 00000000000..7c8ffb9b0d7 --- /dev/null +++ b/spec/models/ml/model_version_metadata_spec.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Ml::ModelVersionMetadata, feature_category: :mlops do + describe 'associations' do + it { is_expected.to belong_to(:model_version).required } + it { is_expected.to belong_to(:project).required } + it { is_expected.to validate_length_of(:name).is_at_most(255) } + it { is_expected.to validate_length_of(:value).is_at_most(5000) } + end + + describe 'validations' do + let_it_be(:metadata) { create(:ml_model_version_metadata, name: 'some_metadata') } + let_it_be(:model_version) { metadata.model_version } + + it 'is unique within the model version' do + expect do + model_version.metadata.create!(name: 'some_metadata', value: 'blah') + end.to raise_error.with_message(/Name 'some_metadata' already taken/) + end + + it 'a model version is required' do + expect do + described_class.create!(name: 'some_metadata', value: 'blah') + end.to raise_error.with_message(/Model version must exist/) + end + end +end diff --git a/spec/models/ml/model_version_spec.rb b/spec/models/ml/model_version_spec.rb index 95d4a545f52..9db9f7e34ab 100644 --- a/spec/models/ml/model_version_spec.rb +++ b/spec/models/ml/model_version_spec.rb @@ -19,6 +19,7 @@ RSpec.describe Ml::ModelVersion, feature_category: :mlops do it { is_expected.to belong_to(:model) } it { is_expected.to belong_to(:package).class_name('Packages::MlModel::Package') } it { is_expected.to have_one(:candidate).class_name('Ml::Candidate') } + it { is_expected.to have_many(:metadata) } end describe 'validation' do @@ -99,6 +100,34 @@ RSpec.describe Ml::ModelVersion, feature_category: :mlops do end end + describe '#add_metadata' do + it 'accepts an array of metadata and persists it to the model version' do + input = [ + { project_id: base_project.id, key: 'tag1', value: 'value1' }, + { project_id: base_project.id, key: 'tag2', value: 'value2' } + ] + + expect { model_version1.add_metadata(input) }.to change { model_version1.metadata.count }.by(2) + end + + it 'raises an error when duplicate key names are supplied' do + input = [ + { project_id: base_project.id, key: 'tag1', value: 'value1' }, + { project_id: base_project.id, key: 'tag1', value: 'value2' } + ] + + expect { model_version1.add_metadata(input) }.to raise_error(ActiveRecord::RecordInvalid) + end + + it 'raises an error when validation fails' do + input = [ + { project_id: base_project.id, key: nil, value: 'value1' } + ] + + expect { model_version1.add_metadata(input) }.to raise_error(ActiveRecord::RecordInvalid) + end + end + describe '#find_or_create!' do let_it_be(:existing_model_version) { create(:ml_model_versions, model: model1, version: '1.0.0') } |