spec/lib/fourchette/github_spec.rb in fourchette-0.0.8 vs spec/lib/fourchette/github_spec.rb in fourchette-0.1.0

- old
+ new

@@ -1,126 +1,253 @@ \ No newline at end of file +require "spec_helper" + +describe Fourchette::GitHub do + subject { described_class.new } + + let(:fake_hooks) { [] } + + let(:fake_hook) do + hook = double("hook") + hook.stub(:config).and_return(nil) + hook.stub(:id).and_return(123) + hook + end + + let(:fake_fourchette_hook) do + fake_hook.config.stub(:fourchette_env).and_return("something") + fake_hook + end + + let(:fake_enabled_fourchette_hook) do + fake_fourchette_hook.stub(:active).and_return(true) + fake_fourchette_hook + end + + let(:fake_disabled_fourchette_hook) do + fake_fourchette_hook.stub(:active).and_return(false) + fake_fourchette_hook + end + + before do + allow_message_expectations_on_nil + subject.stub(:hooks).and_return(fake_hooks) + Octokit::Client.any_instance.stub(:edit_hook) + end + + describe "#enable_hook" do + context "when there is alerady a Fourchette hook" do + + context "when the hook was enabled" do + let(:fake_hooks) { [fake_enabled_fourchette_hook] } + + it "does NOT enable the hook" do + Octokit::Client.any_instance.should_not_receive(:edit_hook) + + subject.enable_hook + end + end + + context "when the hook was disabled" do + let(:fake_hooks) { [fake_disabled_fourchette_hook] } + + it "enables the hook" do + Octokit::Client.any_instance.should_receive(:edit_hook) + + subject.enable_hook + end + end + end + + context "when there is no Fourchette hook yet" do + it "adds a hook" do + Octokit::Client.any_instance.should_receive(:create_hook) + + subject.enable_hook + end + end + end + + describe "#disable_hook" do + context "where there is an active Fourchette hook" do + let(:fake_hooks) { [fake_enabled_fourchette_hook] } + + it "disables the hook" do + Octokit::Client.any_instance.should_receive(:edit_hook) + + subject.disable_hook + end + end + + context "when there is a disabled Fourchette hook" do + let(:fake_hooks) { [fake_disabled_fourchette_hook] } + it "does not try to disable a hook" do + subject.should_not_receive(:disable) + subject.disable_hook + end + end + + context "when there is no Fourchette hook" do + it "does not try to disable a hook" do + subject.should_not_receive(:disable) + subject.disable_hook + end + end + end + + describe "#update_hook" do + let(:fake_hooks) { [fake_enabled_fourchette_hook] } + + it "calls toggle_active_state_to" do + subject + .should_receive(:toggle_active_state_to) + subject.update_hook + end + end + + describe "#delete_hook" do + it "deletes the hook on GitHub" do + subject.stub(:fourchette_hook).and_return(fake_hook) + Octokit::Client.any_instance.should_receive(:remove_hook) + + subject.delete_hook + end + end + + describe "#comment_pr" do + before do + stub_const("ENV", "FOURCHETTE_GITHUB_PROJECT" => "my-project") + end + + it "adds a comment" do + Octokit::Client.any_instance + .should_receive(:add_comment).with("my-project", 1, "yo!") + + subject.comment_pr(1, "yo!") + end + end +end