summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2015-02-23 22:12:01 +0100
committerDouwe Maan <douwe@gitlab.com>2015-02-23 23:23:29 +0100
commita7ce4b52e9d4f68d02b52b1bc1f8d2a8faf19e17 (patch)
treedd26c70c317c6482ccfe7ee23fc9a1b6e62c69d0
parent9a863145dd8c33154efe6e955952e96e3cae0b84 (diff)
downloadgitlab-shell-a7ce4b52e9d4f68d02b52b1bc1f8d2a8faf19e17.tar.gz
Add tests.
-rw-r--r--lib/gitlab_post_receive.rb4
-rw-r--r--spec/gitlab_post_receive_spec.rb83
2 files changed, 78 insertions, 9 deletions
diff --git a/lib/gitlab_post_receive.rb b/lib/gitlab_post_receive.rb
index d4aff3d..f7ff153 100644
--- a/lib/gitlab_post_receive.rb
+++ b/lib/gitlab_post_receive.rb
@@ -16,7 +16,7 @@ class GitlabPostReceive
# get value from it
ENV['GL_ID'] = nil
- success = update_redis
+ result = update_redis
begin
broadcast_message = GitlabNet.new.broadcast_message
@@ -29,7 +29,7 @@ class GitlabPostReceive
nil
end
- success
+ result
end
protected
diff --git a/spec/gitlab_post_receive_spec.rb b/spec/gitlab_post_receive_spec.rb
index dc84e4a..fdb9e27 100644
--- a/spec/gitlab_post_receive_spec.rb
+++ b/spec/gitlab_post_receive_spec.rb
@@ -4,18 +4,87 @@ require 'gitlab_post_receive'
describe GitlabPostReceive do
let(:repository_path) { "/home/git/repositories" }
let(:repo_name) { 'dzaporozhets/gitlab-ci' }
+ let(:actor) { 'key-123' }
+ let(:changes) { 'wow' }
let(:repo_path) { File.join(repository_path, repo_name) + ".git" }
- let(:gitlab_post_receive) { GitlabPostReceive.new(repo_path, 'key-123', 'wow') }
+ let(:gitlab_post_receive) { GitlabPostReceive.new(repo_path, actor, changes) }
+ let(:message) { "test " * 10 + "message " * 10 }
before do
GitlabConfig.any_instance.stub(repos_path: repository_path)
- Kernel.stub(system: true)
- GitlabNet.any_instance.stub(broadcast_message: { "message" => "test " * 10 + "message " * 10 })
+ GitlabNet.any_instance.stub(broadcast_message: { "message" => message })
end
- describe :initialize do
- it { gitlab_post_receive.repo_path.should == repo_path }
- it { gitlab_post_receive.changes.should == 'wow' }
- it { gitlab_post_receive.exec }
+ describe "#exec" do
+
+ before do
+ GitlabConfig.any_instance.stub(redis_command: %w(env -i redis-cli))
+ allow(gitlab_post_receive).to receive(:system).and_return(true)
+ end
+
+ it "resets the GL_ID environment variable" do
+ ENV["GL_ID"] = actor
+
+ gitlab_post_receive.exec
+
+ expect(ENV["GL_ID"]).to be_nil
+ end
+
+ it "prints the broadcast message" do
+ expect(gitlab_post_receive).to receive(:puts).ordered
+ expect(gitlab_post_receive).to receive(:puts).with(
+ "========================================================================"
+ ).ordered
+ expect(gitlab_post_receive).to receive(:puts).ordered
+
+ expect(gitlab_post_receive).to receive(:puts).with(
+ " test test test test test test test test test test message message"
+ ).ordered
+ expect(gitlab_post_receive).to receive(:puts).with(
+ " message message message message message message message message"
+ ).ordered
+
+ expect(gitlab_post_receive).to receive(:puts).ordered
+ expect(gitlab_post_receive).to receive(:puts).with(
+ "========================================================================"
+ ).ordered
+
+ gitlab_post_receive.exec
+ end
+
+ it "pushes a Sidekiq job onto the queue" do
+ expect(gitlab_post_receive).to receive(:system).with(
+ *[
+ *%w(env -i redis-cli rpush resque:gitlab:queue:post_receive),
+ %Q/{"class":"PostReceive","args":["#{repo_path}","#{actor}","#{changes}"]}/,
+ { err: "/dev/null", out: "/dev/null" }
+ ]
+ ).and_return(true)
+
+ gitlab_post_receive.exec
+ end
+
+ context "when the redis command succeeds" do
+
+ before do
+ allow(gitlab_post_receive).to receive(:system).and_return(true)
+ end
+
+ it "returns true" do
+ expect(gitlab_post_receive.exec).to eq(true)
+ end
+ end
+
+ context "when the redis command fails" do
+
+ before do
+ allow(gitlab_post_receive).to receive(:system).and_return(false)
+ allow($?).to receive(:exitstatus).and_return(nil)
+ end
+
+ it "returns false" do
+ expect(gitlab_post_receive.exec).to eq(false)
+ end
+ end
end
end