require "spec_helper" require "octopolo/scripts/deployable" module Octopolo module Scripts describe Deployable do let(:cli) { stub(:Cli) } let(:config) { stub(:user_notifications => ['NickLaMuro'], :github_repo => 'foo', :deployable_label => true) } before { Deployable.any_instance.stub(:cli => cli, :config => config) } context "#execute" do subject { Deployable.new 42} it "calls merge_and_label" do expect(subject).to receive(:merge_and_label) subject.execute end context "#merge_and_label" do before do allow(PullRequestMerger).to receive(:perform) end context "deployable_label is set to true" do it "calls ensure_label_was_created" do expect(subject).to receive(:ensure_label_was_created) subject.execute end end context "deployable_label is set to false " do let(:config) { stub(:user_notifications => ['NickLaMuro'], :github_repo => 'foo', :deployable_label => false) } it "skips add_to_pull when deployable_label is false" do expect(subject).to_not receive(:ensure_label_was_created) subject.execute end end end end context "#ensure_label_was_created" do subject { Deployable.new 42} let(:pull_request) {Octopolo::GitHub::PullRequest.new('foo', subject.pull_request_id, nil)} before do allow_any_instance_of(Octopolo::GitHub::PullRequest).to receive(:add_labels) end context "with a PR passed in via the command args" do it "delegates the work to PullRequestMerger" do expect(PullRequestMerger).to receive(:perform).with(Git::DEPLOYABLE_PREFIX, 42, :user_notifications => ["NickLaMuro"]) {true} subject.ensure_label_was_created end end context "with no PR passed in from the command args" do subject { Deployable.new } context "with a PR passed in through the cli" do before do cli.should_receive(:prompt) .with("Pull Request ID: ") .and_return("42") end it "delegates the work to PullRequestMerger" do expect(PullRequestMerger).to receive(:perform).with(Git::DEPLOYABLE_PREFIX, 42, :user_notifications => ["NickLaMuro"]) {true} subject.execute end end context "with no PR passed in from the cli" do before do cli.should_receive(:prompt) .with("Pull Request ID: ") .and_return("foo") end it "delegates the work to PullRequestMerger" do expect{ subject.execute }.to raise_error(ArgumentError) end end end context "when it creates a label successfully" do it "calls remove_label when pull_request_merge fails" do allow(PullRequestMerger).to receive(:perform) {nil} expect_any_instance_of(Octopolo::GitHub::PullRequest).to receive(:remove_labels) subject.ensure_label_was_created end end end end end end