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/requests/api/graphql/project/tree/tree_spec.rb')
-rw-r--r--spec/requests/api/graphql/project/tree/tree_spec.rb50
1 files changed, 49 insertions, 1 deletions
diff --git a/spec/requests/api/graphql/project/tree/tree_spec.rb b/spec/requests/api/graphql/project/tree/tree_spec.rb
index e63e0d3dd04..77b72bf39a1 100644
--- a/spec/requests/api/graphql/project/tree/tree_spec.rb
+++ b/spec/requests/api/graphql/project/tree/tree_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-RSpec.describe 'getting a tree in a project' do
+RSpec.describe 'getting a tree in a project', feature_category: :source_code_management do
include GraphqlHelpers
let_it_be(:project) { create(:project, :repository) }
@@ -166,6 +166,54 @@ RSpec.describe 'getting a tree in a project' do
end
end
+ context 'when the ref points to a SSH-signed commit' do
+ let_it_be(:ref) { 'ssh-signed-commit' }
+ let_it_be(:commit) { project.commit(ref) }
+ let_it_be(:current_user) { create(:user, email: commit.committer_email).tap { |user| project.add_owner(user) } }
+
+ let(:fields) do
+ <<~QUERY
+ tree(path:"#{path}", ref:"#{ref}") {
+ lastCommit {
+ signature {
+ ... on SshSignature {
+ #{all_graphql_fields_for('SshSignature'.classify, max_depth: 2)}
+ }
+ }
+ }
+ }
+ QUERY
+ end
+
+ let_it_be(:key) do
+ create(:key, user: current_user, key: extract_public_key_from_commit(commit), expires_at: 2.days.from_now)
+ end
+
+ def extract_public_key_from_commit(commit)
+ ssh_commit = Gitlab::Ssh::Commit.new(commit)
+ signature_data = ::SSHData::Signature.parse_pem(ssh_commit.signature_text)
+ signature_data.public_key.openssh
+ end
+
+ before do
+ post_graphql(query, current_user: current_user)
+ end
+
+ it 'returns the expected signature data' do
+ signature = graphql_data['project']['repository']['tree']['lastCommit']['signature']
+
+ expect(signature['commitSha']).to eq(commit.id)
+ expect(signature['verificationStatus']).to eq('VERIFIED')
+ expect(signature['project']['id']).to eq("gid://gitlab/Project/#{project.id}")
+ expect(signature['user']['id']).to eq("gid://gitlab/User/#{current_user.id}")
+ expect(signature['key']['id']).to eq("gid://gitlab/Key/#{key.id}")
+ expect(signature['key']['title']).to eq(key.title)
+ expect(signature['key']['createdAt']).to be_present
+ expect(signature['key']['expiresAt']).to be_present
+ expect(signature['key']['key']).to match(key.key)
+ end
+ end
+
context 'when current user is nil' do
it 'returns empty project' do
post_graphql(query, current_user: nil)