From 3ff1605f7d054d6dfc360c09ba5860e81250d5e4 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 15 Nov 2023 09:15:53 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- .../resolvers/ml/model_detail_resolver_spec.rb | 41 ++++++++++++++++++++++ spec/graphql/types/ml/model_type_spec.rb | 13 +++++++ .../types/ml/model_version_links_type_spec.rb | 11 ++++++ spec/graphql/types/ml/model_version_type_spec.rb | 13 +++++++ spec/graphql/types/query_type_spec.rb | 10 ++++++ 5 files changed, 88 insertions(+) create mode 100644 spec/graphql/resolvers/ml/model_detail_resolver_spec.rb create mode 100644 spec/graphql/types/ml/model_type_spec.rb create mode 100644 spec/graphql/types/ml/model_version_links_type_spec.rb create mode 100644 spec/graphql/types/ml/model_version_type_spec.rb (limited to 'spec') diff --git a/spec/graphql/resolvers/ml/model_detail_resolver_spec.rb b/spec/graphql/resolvers/ml/model_detail_resolver_spec.rb new file mode 100644 index 00000000000..1da208eb4d8 --- /dev/null +++ b/spec/graphql/resolvers/ml/model_detail_resolver_spec.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Resolvers::Ml::ModelDetailResolver, feature_category: :mlops do + include GraphqlHelpers + + describe '#resolve' do + let_it_be(:project) { create(:project) } + let_it_be(:model) { create(:ml_models, project: project) } + let_it_be(:user) { project.owner } + + let(:args) { { id: global_id_of(model) } } + let(:read_model_registry) { true } + + before do + allow(Ability).to receive(:allowed?).and_call_original + allow(Ability).to receive(:allowed?) + .with(user, :read_model_registry, project) + .and_return(read_model_registry) + end + + subject { force(resolve(described_class, ctx: { current_user: user }, args: args)) } + + context 'when user is allowed and model exists' do + it { is_expected.to eq(model) } + end + + context 'when user does not have permission' do + let(:read_model_registry) { false } + + it { is_expected.to be_nil } + end + + context 'when model does not exist' do + let(:args) { { id: global_id_of(id: non_existing_record_id, model_name: 'Ml::Model') } } + + it { is_expected.to be_nil } + end + end +end diff --git a/spec/graphql/types/ml/model_type_spec.rb b/spec/graphql/types/ml/model_type_spec.rb new file mode 100644 index 00000000000..9320b251dd4 --- /dev/null +++ b/spec/graphql/types/ml/model_type_spec.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe GitlabSchema.types['MlModel'], feature_category: :mlops do + specify { expect(described_class.description).to eq('Machine learning model in the model registry') } + + it 'includes all the package fields' do + expected_fields = %w[id name versions] + + expect(described_class).to include_graphql_fields(*expected_fields) + end +end diff --git a/spec/graphql/types/ml/model_version_links_type_spec.rb b/spec/graphql/types/ml/model_version_links_type_spec.rb new file mode 100644 index 00000000000..d2a11643c35 --- /dev/null +++ b/spec/graphql/types/ml/model_version_links_type_spec.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe GitlabSchema.types['MLModelVersionLinks'], feature_category: :mlops do + it 'has the expected fields' do + expected_fields = %w[showPath] + + expect(described_class).to include_graphql_fields(*expected_fields) + end +end diff --git a/spec/graphql/types/ml/model_version_type_spec.rb b/spec/graphql/types/ml/model_version_type_spec.rb new file mode 100644 index 00000000000..03652c55e20 --- /dev/null +++ b/spec/graphql/types/ml/model_version_type_spec.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe GitlabSchema.types['MlModelVersion'], feature_category: :mlops do + specify { expect(described_class.description).to eq('Version of a machine learning model') } + + it 'includes all the package fields' do + expected_fields = %w[id version created_at _links] + + expect(described_class).to include_graphql_fields(*expected_fields) + end +end diff --git a/spec/graphql/types/query_type_spec.rb b/spec/graphql/types/query_type_spec.rb index 8bda738751d..f2a63fbeb57 100644 --- a/spec/graphql/types/query_type_spec.rb +++ b/spec/graphql/types/query_type_spec.rb @@ -137,4 +137,14 @@ RSpec.describe GitlabSchema.types['Query'], feature_category: :shared do is_expected.to have_graphql_resolver(Resolvers::BoardListResolver) end end + + describe 'mlModel field' do + subject { described_class.fields['mlModel'] } + + it 'returns metadata', :aggregate_failures do + is_expected.to have_graphql_type(Types::Ml::ModelType) + is_expected.to have_graphql_arguments(:id) + is_expected.to have_graphql_resolver(Resolvers::Ml::ModelDetailResolver) + end + end end -- cgit v1.2.3