From fa3b93c5046f23ebbb2e82ac4944357683f8c5d8 Mon Sep 17 00:00:00 2001
From: Elvin Efendi <elvin.efendiev@shopify.com>
Date: Wed, 9 Dec 2015 22:53:16 -0500
Subject: let user configure which auth method to use

---
 spec/githubrepo_spec.rb | 50 ++++++++++++++++++++++++++++++++++---------------
 1 file changed, 35 insertions(+), 15 deletions(-)

(limited to 'spec')

diff --git a/spec/githubrepo_spec.rb b/spec/githubrepo_spec.rb
index 07296f3..a3b4953 100644
--- a/spec/githubrepo_spec.rb
+++ b/spec/githubrepo_spec.rb
@@ -4,30 +4,50 @@ require 'oxidized/hook/githubrepo'
 
 describe Oxidized::Node do
   before(:each) do
-    asetus = Asetus.new
-    asetus.cfg.output.git.repo = 'foo.git'
-    asetus.cfg.hooks.github_repo_hook.remote_repo = 'https://github.com/blah/blah.git'
-    asetus.cfg.hooks.github_repo_hook.username = 'username'
-    asetus.cfg.hooks.github_repo_hook.password = 'password'
-    GithubRepo.any_instance.stubs(:cfg).returns(asetus.cfg.hooks.github_repo_hook)
-    Oxidized.stubs(:asetus).returns(asetus)
-    repo = mock()
+    Oxidized.asetus = Asetus.new
+    Oxidized.config.output.git.repo = 'foo.git'
+
+    @credentials = mock()
+
     remote = mock()
-    remote.expects(:url).returns('github.com/foo.git')
-    remote.expects(:push).returns(true)
-    repo.expects(:remotes).returns({'origin' => remote})
-    repo.expects(:path).returns('foo.git')
+    remote.expects(:url).returns('https://github.com/username/foo.git')
+    remote.expects(:push).with(['refs/heads/master'], credentials: @credentials).returns(true)
+
     repo_head = mock()
-    repo_head.expects(:name).twice.returns('origin/master')
+    repo_head.expects(:name).twice.returns('refs/heads/master')
+
+    repo = mock()
+    repo.expects(:path).returns('foo.git')
+    repo.expects(:remotes).returns({'origin' => remote})
     repo.expects(:head).twice.returns(repo_head)
-    repo.expects(:fetch).returns(true)
+    repo.expects(:fetch).with('origin', ['refs/heads/master'], credentials: @credentials).returns(true)
     repo.expects(:branches).returns({})
+
     Rugged::Repository.expects(:new).with('foo.git').returns(repo)
   end
 
   describe "#run_hook" do
-    it "will push to the remote repository" do
+    it "will push to the remote repository using https" do
+      Oxidized.config.hooks.github_repo_hook.remote_repo = 'https://github.com/username/foo.git'
+      Oxidized.config.hooks.github_repo_hook.username = 'username'
+      Oxidized.config.hooks.github_repo_hook.password = 'password'
+
+      Rugged::Credentials::UserPassword.expects(:new).with(username: 'username', password: 'password').returns(@credentials)
+
+      gr = GithubRepo.new
+      gr.cfg = Oxidized.config.hooks.github_repo_hook
+
+      gr.run_hook(nil).must_equal true
+    end
+
+    it "will push to the remote repository using ssh" do
+      Oxidized.config.hooks.github_repo_hook.remote_repo = 'git@github.com:username/foo.git'
+
+      Rugged::Credentials::SshKeyFromAgent.expects(:new).with(username: 'git').returns(@credentials)
+
       gr = GithubRepo.new
+      gr.cfg = Oxidized.config.hooks.github_repo_hook
+
       gr.run_hook(nil).must_equal true
     end
   end
-- 
cgit v1.2.3