Commit 3630a070 authored by Alex Kalderimis's avatar Alex Kalderimis

Add tests for image field in design types

This verifies to result, and that the field is N+1 safe.
parent 0085a5be
...@@ -36,7 +36,9 @@ module Types ...@@ -36,7 +36,9 @@ module Types
def image(parent:) def image(parent:)
sha = cached_stateful_version(parent).sha sha = cached_stateful_version(parent).sha
::Gitlab::Routing.url_helpers.project_design_url(design.project, design, sha) GitlabSchema.after_lazy(project) do |proj|
::Gitlab::Routing.url_helpers.project_design_url(proj, design, sha)
end
end end
def event(parent:) def event(parent:)
......
...@@ -7,5 +7,9 @@ require 'spec_helper' ...@@ -7,5 +7,9 @@ require 'spec_helper'
describe ::Types::DesignManagement::DesignAtVersionType.to_graphql do describe ::Types::DesignManagement::DesignAtVersionType.to_graphql do
it_behaves_like 'a GraphQL type with design fields' do it_behaves_like 'a GraphQL type with design fields' do
let(:extra_design_fields) { %i[version design] } let(:extra_design_fields) { %i[version design] }
let_it_be(:design) { create(:design, :with_versions) }
let(:object) { create(:design_at_version, design: design, version: version) }
let(:version) { design.versions.first }
let(:object_type) { ::Types::DesignManagement::DesignAtVersionType }
end end
end end
...@@ -5,5 +5,8 @@ require 'spec_helper' ...@@ -5,5 +5,8 @@ require 'spec_helper'
describe GitlabSchema.types['Design'] do describe GitlabSchema.types['Design'] do
it_behaves_like 'a GraphQL type with design fields' do it_behaves_like 'a GraphQL type with design fields' do
let(:extra_design_fields) { %i[notes discussions versions] } let(:extra_design_fields) { %i[notes discussions versions] }
let_it_be(:object) { create(:design, :with_versions) }
let(:object_type) { ::Types::DesignManagement::DesignType }
let(:design) { object }
end end
end end
...@@ -23,4 +23,32 @@ shared_examples 'a GraphQL type with design fields' do ...@@ -23,4 +23,32 @@ shared_examples 'a GraphQL type with design fields' do
is_expected.to have_graphql_fields(*expected_fields).only is_expected.to have_graphql_fields(*expected_fields).only
end end
describe '#image' do
let(:schema) { GitlabSchema }
let(:query) { GraphQL::Query.new(schema) }
let(:context) { double('Context', schema: schema, query: query, parent: nil) }
let(:field) { described_class.fields['image'] }
let(:args) { GraphQL::Query::Arguments::NO_ARGS }
let(:instance) { object_type.authorized_new(object, query.context) }
it 'resolves to the design image URL' do
image = field.resolve(instance, args, context).value
sha = design.versions.first.sha
url = ::Gitlab::Routing.url_helpers.project_design_url(design.project, design, sha)
expect(image).to eq(url)
end
it 'has better than O(N) peformance' do
baseline = ActiveRecord::QueryRecorder.new { field.resolve(instance, args, context).value }
baseline.count
expect do
image_a = field.resolve(instance, args, context)
image_b = field.resolve(instance, args, context)
expect(image_a.value).to eq(image_b.value)
end.not_to exceed_query_limit(baseline)
end
end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment