1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Packages::MlModel::Package, feature_category: :mlops do
let_it_be(:project) { create(:project) }
let_it_be(:ml_model) { create(:ml_model_package, project: project) }
let_it_be(:generic_package) { create(:generic_package, project: project) }
describe 'associations' do
it { is_expected.to have_one(:model_version) }
end
describe 'all' do
it 'fetches only ml_model packages' do
expect(described_class.all).to eq([ml_model])
end
end
describe '#valid?' do
using RSpec::Parameterized::TableSyntax
let_it_be(:valid_version) { '1.0.0' }
let_it_be(:valid_name) { 'some_model' }
let(:version) { valid_version }
let(:name) { valid_name }
let(:ml_model) { described_class.new(version: version, name: name, project: project) }
subject(:errors) do
ml_model.validate
ml_model.errors
end
it { expect(ml_model).to validate_presence_of(:name) }
it { expect(ml_model).to validate_presence_of(:version) }
it 'validates a valid ml_model package' do
expect(errors).to be_empty
end
context 'when name' do
where(:case_name, :name) do
'is blank' | ''
'is nil' | nil
'is not valid package name' | '!!()()'
'is too large' | ('a' * 256)
end
with_them do
it 'is invalid' do
expect(errors).to include(:name)
end
end
end
context 'when version' do
where(:case_name, :version) do
'is semver' | '1.2.0-rc.1+metadata'
'is candidate_(id)' | 'candidate_123'
end
with_them do
it 'is valid' do
expect(errors).not_to include(:version)
end
end
where(:case_name, :version) do
'is blank' | ''
'is nil' | nil
'is not valid semver' | 'v1.0.0'
'is too large' | ('a' * 256)
end
with_them do
it 'is invalid' do
expect(errors).to include(:version)
end
end
end
end
describe '.installable' do
it_behaves_like 'installable packages', :ml_model_package
end
end
|