OSDN Git Service

specs for api/internal
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Tue, 26 Feb 2013 20:53:59 +0000 (22:53 +0200)
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Tue, 26 Feb 2013 20:53:59 +0000 (22:53 +0200)
lib/api/internal.rb
spec/requests/api/internal_spec.rb [new file with mode: 0644]

index 5d74a76..d4f72d7 100644 (file)
@@ -5,6 +5,12 @@ module Gitlab
       #
       # Check if ssh key has access to project code
       #
+      # Params:
+      #   key_id - SSH Key id
+      #   project - project path with namespace
+      #   action - git action (git-upload-pack or git-receive-pack)
+      #   ref - branch name
+      #
       get "/allowed" do
         key = Key.find(params[:key_id])
         project = Project.find_with_namespace(params[:project])
diff --git a/spec/requests/api/internal_spec.rb b/spec/requests/api/internal_spec.rb
new file mode 100644 (file)
index 0000000..d63429d
--- /dev/null
@@ -0,0 +1,103 @@
+require 'spec_helper'
+
+describe Gitlab::API do
+  include ApiHelpers
+
+  let(:user) { create(:user) }
+  let(:key) { create(:key, user: user) }
+  let(:project) { create(:project) }
+
+  describe "GET /internal/check", no_db: true do
+    it do
+      get api("/internal/check")
+
+      response.status.should == 200
+      json_response['api_version'].should == Gitlab::API.version
+    end
+  end
+
+  describe "GET /internal/discover" do
+    it do
+      get(api("/internal/discover"), key_id: key.id)
+
+      response.status.should == 200
+
+      json_response['email'].should == user.email
+    end
+  end
+
+  describe "GET /internal/allowed" do
+    context "access granted" do
+      before do
+        project.team << [user, :developer]
+      end
+
+      context "git pull" do
+        it do
+          get(
+            api("/internal/allowed"),
+            ref: 'master',
+            key_id: key.id,
+            project: project.path_with_namespace,
+            action: 'git-upload-pack'
+          )
+
+          response.status.should == 200
+          response.body.should == 'true'
+        end
+      end
+
+      context "git push" do
+        it do
+          get(
+            api("/internal/allowed"),
+            ref: 'master',
+            key_id: key.id,
+            project: project.path_with_namespace,
+            action: 'git-receive-pack'
+          )
+
+          response.status.should == 200
+          response.body.should == 'true'
+        end
+      end
+    end
+
+    context "access denied" do
+      before do
+        project.team << [user, :guest]
+      end
+
+      context "git pull" do
+        it do
+          get(
+            api("/internal/allowed"),
+            ref: 'master',
+            key_id: key.id,
+            project: project.path_with_namespace,
+            action: 'git-upload-pack'
+          )
+
+          response.status.should == 200
+          response.body.should == 'false'
+        end
+      end
+
+      context "git push" do
+        it do
+          get(
+            api("/internal/allowed"),
+            ref: 'master',
+            key_id: key.id,
+            project: project.path_with_namespace,
+            action: 'git-receive-pack'
+          )
+
+          response.status.should == 200
+          response.body.should == 'false'
+        end
+      end
+    end
+
+  end
+end