spec/github/repos/hooks_spec.rb in github_api-0.1.1 vs spec/github/repos/hooks_spec.rb in github_api-0.1.2
- old
+ new
@@ -1,5 +1,307 @@
require 'spec_helper'
describe Github::Repos::Hooks do
- pending
-end
+
+ let(:github) { Github.new }
+ let(:user) { 'peter-murach' }
+ let(:repo) { 'github' }
+
+ describe "hooks" do
+ context "resource found" do
+ before do
+ stub_get("/repos/#{user}/#{repo}/hooks").
+ to_return(:body => fixture('repos/hooks.json'), :status => 200, :headers => {:content_type => "application/json; charset=utf-8"})
+ end
+
+ it "should fail to get resource without username" do
+ github.user, github.repo = nil, nil
+ expect { github.repos.hooks }.to raise_error(ArgumentError)
+ end
+
+ it "should get the resources" do
+ github.repos.hooks(user, repo)
+ a_get("/repos/#{user}/#{repo}/hooks").should have_been_made
+ end
+
+ it "should return array of resources" do
+ hooks = github.repos.hooks user, repo
+ hooks.should be_an Array
+ hooks.should have(1).items
+ end
+
+ it "should be a mash type" do
+ hooks = github.repos.hooks user, repo
+ hooks.first.should be_a Hashie::Mash
+ end
+
+ it "should get hook information" do
+ hooks = github.repos.hooks(user, repo)
+ hooks.first.name.should == 'web'
+ end
+
+ it "should yield to a block" do
+ github.repos.should_receive(:hooks).with(user, repo).and_yield('web')
+ github.repos.hooks(user, repo) { |param| 'web' }
+ end
+ end
+
+ context "resource not found" do
+ before do
+ stub_get("/repos/#{user}/#{repo}/hooks").
+ to_return(:body => "", :status => [404, "Not Found"])
+ end
+
+ it "should return 404 with a message 'Not Found'" do
+ expect {
+ github.repos.hooks user, repo
+ }.to raise_error(Github::ResourceNotFound)
+ end
+ end
+ end # hooks
+
+ describe "hook" do
+ let(:hook_id) { 1 }
+
+ context "resource found" do
+ before do
+ stub_get("/repos/#{user}/#{repo}/hooks/#{hook_id}").
+ to_return(:body => fixture('repos/hook.json'), :status => 200, :headers => {:content_type => "application/json; charset=utf-8"})
+ end
+
+ it "should fail to get resource without hook id" do
+ expect { github.repos.hook(user, repo, nil)}.to raise_error(ArgumentError)
+ end
+
+ it "should get the resource" do
+ github.repos.hook user, repo, hook_id
+ a_get("/repos/#{user}/#{repo}/hooks/#{hook_id}").should have_been_made
+ end
+
+ it "should get hook information" do
+ hook = github.repos.hook user, repo, hook_id
+ hook.id.should == hook_id
+ hook.name.should == 'web'
+ end
+
+ it "should return mash" do
+ hook = github.repos.hook user, repo, hook_id
+ hook.should be_a Hashie::Mash
+ end
+
+ end
+
+ context "resource not found" do
+ before do
+ stub_get("/repos/#{user}/#{repo}/hooks/#{hook_id}").
+ to_return(:body => fixture('repos/hook.json'), :status => 404, :headers => {:content_type => "application/json; charset=utf-8"})
+ end
+
+ it "should fail to retrive resource" do
+ expect {
+ github.repos.hook(user, repo, hook_id)
+ }.to raise_error(Github::ResourceNotFound)
+ end
+ end
+ end # hook
+
+ describe "create_hook" do
+ let(:inputs) { {:name => 'web', :config => {:url => "http://something.com/webhook"}, :active => true}}
+
+ context "resouce created" do
+ before do
+ stub_post("/repos/#{user}/#{repo}/hooks").with(inputs).
+ to_return(:body => fixture('repos/hook.json'), :status => 201, :headers => {:content_type => "application/json; charset=utf-8"})
+
+ end
+
+ it "should fail to create resource if 'name' input is missing" do
+ expect {
+ github.repos.create_hook(user, repo, inputs.except(:name) )
+ }.to raise_error(ArgumentError)
+ end
+
+ it "should failt to create resource if 'config' input is missing" do
+ expect {
+ github.repos.create_hook(user, repo, inputs.except(:config) )
+ }.to raise_error(ArgumentError)
+ end
+
+ it "should create resource successfully" do
+ github.repos.create_hook(user, repo, inputs)
+ a_post("/repos/#{user}/#{repo}/hooks").with(inputs).should have_been_made
+ end
+
+ it "should return the resource" do
+ hook = github.repos.create_hook user, repo, inputs
+ hook.should be_a Hashie::Mash
+ end
+
+ it "should get the hook information" do
+ hook = github.repos.create_hook(user, repo, inputs)
+ hook.name.should == 'web'
+ end
+ end
+
+ context "failed to create resource" do
+ before do
+ stub_post("/repos/#{user}/#{repo}/hooks").with(inputs).
+ to_return(:body => fixture('repos/hook.json'), :status => 404, :headers => {:content_type => "application/json; charset=utf-8"})
+
+ end
+
+ it "should faile to retrieve resource" do
+ expect {
+ github.repos.create_hook(user, repo, inputs)
+ }.to raise_error(Github::ResourceNotFound)
+ end
+ end
+ end # create_hook
+
+ describe "edit_hook" do
+ let(:hook_id) { 1 }
+ let(:inputs) { {:name => 'web', :config => {:url => "http://something.com/webhook"}, :active => true}}
+
+ context "resource edited successfully" do
+ before do
+ stub_patch("/repos/#{user}/#{repo}/hooks/#{hook_id}").with(inputs).
+ to_return(:body => fixture("repos/hook.json"), :status => 200, :headers => { :content_type => "application/json; charset=utf-8"})
+ end
+
+ it "should fail to edit without 'user/repo' parameters" do
+ github.user, github.repo = nil, nil
+ expect { github.repos.edit_hook }.to raise_error(ArgumentError)
+ end
+
+ it "should fail to edit resource without 'name' parameter" do
+ expect{
+ github.repos.edit_hook user, repo, inputs.except(:name)
+ }.to raise_error(ArgumentError)
+ end
+
+ it "should fail to edit resource without 'hook_id'" do
+ expect {
+ github.repos.edit_hook user, repo
+ }.to raise_error(ArgumentError)
+ end
+
+ it "should fail to edit resource without 'config' parameter" do
+ expect {
+ github.repos.edit_hook user, repo, hook_id, inputs.except(:config)
+ }.to raise_error(ArgumentError)
+ end
+
+ it "should edit the resource" do
+ github.repos.edit_hook user, repo, hook_id, inputs
+ a_patch("/repos/#{user}/#{repo}/hooks/#{hook_id}").with(inputs).should have_been_made
+ end
+
+ it "should return resource" do
+ hook = github.repos.edit_hook user, repo, hook_id, inputs
+ hook.should be_a Hashie::Mash
+ end
+
+ it "should be able to retrieve information" do
+ hook = github.repos.edit_hook user, repo, hook_id, inputs
+ hook.name.should == 'web'
+ end
+
+ end
+
+ context "failed to edit resource" do
+ before do
+ stub_patch("/repos/#{user}/#{repo}/hooks/#{hook_id}").with(inputs).
+ to_return(:body => fixture("repos/hook.json"), :status => 404, :headers => { :content_type => "application/json; charset=utf-8"})
+
+ end
+
+ it "should fail to find resource" do
+ expect {
+ github.repos.edit_hook user, repo, hook_id, inputs
+ }.to raise_error(Github::ResourceNotFound)
+ end
+ end
+ end # edit_hook
+
+ describe "delete_key" do
+ let(:hook_id) { 1 }
+
+ context "resource edited successfully" do
+ before do
+ stub_delete("/repos/#{user}/#{repo}/hooks/#{hook_id}").
+ to_return(:body => '', :status => 204, :headers => { :content_type => "application/json; charset=utf-8"})
+ end
+
+ it "should fail to delete without 'user/repo' parameters" do
+ github.user, github.repo = nil, nil
+ expect { github.repos.delete_hook }.to raise_error(ArgumentError)
+ end
+
+ it "should fail to delete resource without 'hook_id'" do
+ expect {
+ github.repos.edit_hook user, repo
+ }.to raise_error(ArgumentError)
+ end
+
+ it "should delete the resource" do
+ github.repos.delete_hook user, repo, hook_id
+ a_delete("/repos/#{user}/#{repo}/hooks/#{hook_id}").should have_been_made
+ end
+ end
+
+ context "failed to edit resource" do
+ before do
+ stub_delete("/repos/#{user}/#{repo}/hooks/#{hook_id}").
+ to_return(:body => fixture("repos/hook.json"), :status => 404, :headers => { :content_type => "application/json; charset=utf-8"})
+
+ end
+
+ it "should fail to find resource" do
+ expect {
+ github.repos.delete_hook user, repo, hook_id
+ }.to raise_error(Github::ResourceNotFound)
+ end
+ end
+ end # delete_hook
+
+ describe "test_hook" do
+ let(:hook_id) { 1 }
+
+ context "resource edited successfully" do
+ before do
+ stub_post("/repos/#{user}/#{repo}/hooks/#{hook_id}/test").
+ to_return(:body => '', :status => 204, :headers => { :content_type => "application/json; charset=utf-8"})
+ end
+
+ it "should fail to test without 'user/repo' parameters" do
+ github.user, github.repo = nil, nil
+ expect { github.repos.test_hook }.to raise_error(ArgumentError)
+ end
+
+ it "should fail to test resource without 'hook_id'" do
+ expect {
+ github.repos.test_hook user, repo
+ }.to raise_error(ArgumentError)
+ end
+
+ it "should trigger test for the resource" do
+ github.repos.test_hook user, repo, hook_id
+ a_post("/repos/#{user}/#{repo}/hooks/#{hook_id}/test").should have_been_made
+ end
+ end
+
+ context "failed to test resource" do
+ before do
+ stub_post("/repos/#{user}/#{repo}/hooks/#{hook_id}/test").
+ to_return(:body => '', :status => 404, :headers => { :content_type => "application/json; charset=utf-8"})
+
+ end
+
+ it "should fail to find resource" do
+ expect {
+ github.repos.test_hook user, repo, hook_id
+ }.to raise_error(Github::ResourceNotFound)
+ end
+ end
+ end # test_hook
+
+end # Github::Repos::Hooks