Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models/ml/model_version_spec.rb')
-rw-r--r--spec/models/ml/model_version_spec.rb73
1 files changed, 71 insertions, 2 deletions
diff --git a/spec/models/ml/model_version_spec.rb b/spec/models/ml/model_version_spec.rb
index 83639fca9e1..95d4a545f52 100644
--- a/spec/models/ml/model_version_spec.rb
+++ b/spec/models/ml/model_version_spec.rb
@@ -18,6 +18,7 @@ RSpec.describe Ml::ModelVersion, feature_category: :mlops do
it { is_expected.to belong_to(:project) }
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') }
end
describe 'validation' do
@@ -26,11 +27,15 @@ RSpec.describe Ml::ModelVersion, feature_category: :mlops do
build_stubbed(:ml_model_package, project: base_project, version: valid_version, name: model1.name)
end
+ let_it_be(:valid_description) { 'Valid description' }
+
let(:package) { valid_package }
let(:version) { valid_version }
+ let(:description) { valid_description }
subject(:errors) do
- mv = described_class.new(version: version, model: model1, package: package, project: model1.project)
+ mv = described_class.new(version: version, model: model1, package: package, project: model1.project,
+ description: description)
mv.validate
mv.errors
end
@@ -60,6 +65,14 @@ RSpec.describe Ml::ModelVersion, feature_category: :mlops do
end
end
+ describe 'description' do
+ context 'when description is too large' do
+ let(:description) { 'a' * 501 }
+
+ it { expect(errors).to include(:description) }
+ end
+ end
+
describe 'model' do
context 'when project is different' do
before do
@@ -91,8 +104,9 @@ RSpec.describe Ml::ModelVersion, feature_category: :mlops do
let(:version) { existing_model_version.version }
let(:package) { nil }
+ let(:description) { 'Some description' }
- subject(:find_or_create) { described_class.find_or_create!(model1, version, package) }
+ subject(:find_or_create) { described_class.find_or_create!(model1, version, package, description) }
context 'if model version exists' do
it 'returns the model version', :aggregate_failures do
@@ -111,11 +125,66 @@ RSpec.describe Ml::ModelVersion, feature_category: :mlops do
expect(model_version.version).to eq(version)
expect(model_version.model).to eq(model1)
+ expect(model_version.description).to eq(description)
expect(model_version.package).to eq(package)
end
end
end
+ describe '#by_project_id_and_id' do
+ let(:id) { model_version1.id }
+ let(:project_id) { model_version1.project.id }
+
+ subject { described_class.by_project_id_and_id(project_id, id) }
+
+ context 'if exists' do
+ it { is_expected.to eq(model_version1) }
+ end
+
+ context 'if id has no match' do
+ let(:id) { non_existing_record_id }
+
+ it { is_expected.to be(nil) }
+ end
+
+ context 'if project id does not match' do
+ let(:project_id) { non_existing_record_id }
+
+ it { is_expected.to be(nil) }
+ end
+ end
+
+ describe '.by_project_id_name_and_version' do
+ let(:version) { model_version1.version }
+ let(:project_id) { model_version1.project.id }
+ let(:model_name) { model_version1.model.name }
+ let_it_be(:latest_version) { create(:ml_model_versions, model: model_version1.model) }
+
+ subject { described_class.by_project_id_name_and_version(project_id, model_name, version) }
+
+ context 'if exists' do
+ it { is_expected.to eq(model_version1) }
+ end
+
+ context 'if id has no match' do
+ let(:version) { non_existing_record_id }
+
+ it { is_expected.to be(nil) }
+ end
+
+ context 'if project id does not match' do
+ let(:project_id) { non_existing_record_id }
+
+ it { is_expected.to be(nil) }
+ end
+
+ context 'if model name does not match' do
+ let(:model_name) { non_existing_record_id }
+
+ it { is_expected.to be(nil) }
+ end
+ end
+
describe '.order_by_model_id_id_desc' do
subject { described_class.order_by_model_id_id_desc }