require "spec_helper" describe Lita::Handlers::GithubCommits, lita_handler: true do it { routes_http(:post, "/github-commits").to(:receive) } describe "#receive" do let(:request) do request = double("Rack::Request") allow(request).to receive(:params).and_return(params) request end let(:response) { Rack::Response.new } let(:params) { double("Hash") } let(:valid_payload) do <<-JSON.chomp { "after":"1481a2de7b2a7d02428ad93446ab166be7793fbb", "before":"17c497ccc7cca9c2f735aa07e9e3813060ce9a6a", "commits":[ { "added":[ ], "author":{ "email":"lolwut@noway.biz", "name":"Garen Torikian", "username":"octokitty" }, "committer":{ "email":"lolwut@noway.biz", "name":"Garen Torikian", "username":"octokitty" }, "distinct":true, "id":"c441029cf673f84c8b7db52d0a5944ee5c52ff89", "message":"Test", "modified":[ "README.md" ], "removed":[ ], "timestamp":"2013-02-22T13:50:07-08:00", "url":"https://github.com/octokitty/testing/commit/c441029cf673f84c8b7db52d0a5944ee5c52ff89" }, { "added":[ ], "author":{ "email":"lolwut@noway.biz", "name":"Garen Torikian", "username":"octokitty" }, "committer":{ "email":"lolwut@noway.biz", "name":"Garen Torikian", "username":"octokitty" }, "distinct":true, "id":"36c5f2243ed24de58284a96f2a643bed8c028658", "message":"This is me testing the windows client.", "modified":[ "README.md" ], "removed":[ ], "timestamp":"2013-02-22T14:07:13-08:00", "url":"https://github.com/octokitty/testing/commit/36c5f2243ed24de58284a96f2a643bed8c028658" }, { "added":[ "words/madame-bovary.txt" ], "author":{ "email":"lolwut@noway.biz", "name":"Garen Torikian", "username":"octokitty" }, "committer":{ "email":"lolwut@noway.biz", "name":"Garen Torikian", "username":"octokitty" }, "distinct":true, "id":"1481a2de7b2a7d02428ad93446ab166be7793fbb", "message":"Rename madame-bovary.txt to words/madame-bovary.txt", "modified":[ ], "removed":[ "madame-bovary.txt" ], "timestamp":"2013-03-12T08:14:29-07:00", "url":"https://github.com/octokitty/testing/commit/1481a2de7b2a7d02428ad93446ab166be7793fbb" } ], "compare":"https://github.com/octokitty/testing/compare/17c497ccc7cc...1481a2de7b2a", "created":false, "deleted":false, "forced":false, "head_commit":{ "added":[ "words/madame-bovary.txt" ], "author":{ "email":"lolwut@noway.biz", "name":"Garen Torikian", "username":"octokitty" }, "committer":{ "email":"lolwut@noway.biz", "name":"Garen Torikian", "username":"octokitty" }, "distinct":true, "id":"1481a2de7b2a7d02428ad93446ab166be7793fbb", "message":"Rename madame-bovary.txt to words/madame-bovary.txt", "modified":[ ], "removed":[ "madame-bovary.txt" ], "timestamp":"2013-03-12T08:14:29-07:00", "url":"https://github.com/octokitty/testing/commit/1481a2de7b2a7d02428ad93446ab166be7793fbb" }, "pusher":{ "email":"lolwut@noway.biz", "name":"Garen Torikian" }, "ref":"refs/heads/master", "repository":{ "created_at":1332977768, "description":"", "fork":false, "forks":0, "has_downloads":true, "has_issues":true, "has_wiki":true, "homepage":"", "id":3860742, "language":"Ruby", "master_branch":"master", "name":"testing", "open_issues":2, "owner":{ "email":"lolwut@noway.biz", "name":"octokitty" }, "private":false, "pushed_at":1363295520, "size":2156, "stargazers":1, "url":"https://github.com/octokitty/testing", "watchers":1 } } JSON end let(:created_payload) do <<-JSON.chomp { "after":"1481a2de7b2a7d02428ad93446ab166be7793fbb", "before":"17c497ccc7cca9c2f735aa07e9e3813060ce9a6a", "commits":[], "compare":"https://github.com/octokitty/testing/compare/17c497ccc7cc...1481a2de7b2a", "created":true, "deleted":false, "forced":false, "head_commit":{ "added":[ "words/madame-bovary.txt" ], "author":{ "email":"lolwut@noway.biz", "name":"Garen Torikian", "username":"octokitty" }, "committer":{ "email":"lolwut@noway.biz", "name":"Garen Torikian", "username":"octokitty" }, "distinct":true, "id":"1481a2de7b2a7d02428ad93446ab166be7793fbb", "message":"Rename madame-bovary.txt to words/madame-bovary.txt", "modified":[ ], "removed":[ "madame-bovary.txt" ], "timestamp":"2013-03-12T08:14:29-07:00", "url":"https://github.com/octokitty/testing/commit/1481a2de7b2a7d02428ad93446ab166be7793fbb" }, "pusher":{ "email":"lolwut@noway.biz", "name":"Garen Torikian" }, "ref":"refs/heads/master", "repository":{ "created_at":1332977768, "description":"", "fork":false, "forks":0, "has_downloads":true, "has_issues":true, "has_wiki":true, "homepage":"", "id":3860742, "language":"Ruby", "master_branch":"master", "name":"testing", "open_issues":2, "owner":{ "email":"lolwut@noway.biz", "name":"octokitty" }, "private":false, "pushed_at":1363295520, "size":2156, "stargazers":1, "url":"https://github.com/octokitty/testing", "watchers":1 } } JSON end let(:deleted_payload) do <<-JSON.chomp { "after":"1481a2de7b2a7d02428ad93446ab166be7793fbb", "before":"17c497ccc7cca9c2f735aa07e9e3813060ce9a6a", "commits":[], "compare":"https://github.com/octokitty/testing/compare/17c497ccc7cc...1481a2de7b2a", "created":false, "deleted":true, "forced":false, "head_commit":{ "added":[ "words/madame-bovary.txt" ], "author":{ "email":"lolwut@noway.biz", "name":"Garen Torikian", "username":"octokitty" }, "committer":{ "email":"lolwut@noway.biz", "name":"Garen Torikian", "username":"octokitty" }, "distinct":true, "id":"1481a2de7b2a7d02428ad93446ab166be7793fbb", "message":"Rename madame-bovary.txt to words/madame-bovary.txt", "modified":[ ], "removed":[ "madame-bovary.txt" ], "timestamp":"2013-03-12T08:14:29-07:00", "url":"https://github.com/octokitty/testing/commit/1481a2de7b2a7d02428ad93446ab166be7793fbb" }, "pusher":{ "email":"lolwut@noway.biz", "name":"Garen Torikian" }, "ref":"refs/heads/master", "repository":{ "created_at":1332977768, "description":"", "fork":false, "forks":0, "has_downloads":true, "has_issues":true, "has_wiki":true, "homepage":"", "id":3860742, "language":"Ruby", "master_branch":"master", "name":"testing", "open_issues":2, "owner":{ "email":"lolwut@noway.biz", "name":"octokitty" }, "private":false, "pushed_at":1363295520, "size":2156, "stargazers":1, "url":"https://github.com/octokitty/testing", "watchers":1 } } JSON end context "request with commits" do before do Lita.config.handlers.github_commits.repos["octokitty/testing"] = "#baz" allow(params).to receive(:[]).with("payload").and_return(valid_payload) end it "sends a notification message to the applicable rooms" do expect(robot).to receive(:send_message) do |target, message| expect(target.room).to eq("#baz") expect(message).to include("[GitHub] Got") end subject.receive(request, response) end end context "create payload" do before do Lita.config.handlers.github_commits.repos["octokitty/testing"] = "#baz" allow(params).to receive(:[]).with("payload").and_return(created_payload) end it "sends a notification message to the applicable rooms" do expect(robot).to receive(:send_message) do |target, message| expect(target.room).to eq("#baz") expect(message).to include("[GitHub] Garen Torikian created") end subject.receive(request, response) end end context "delete payload" do before do Lita.config.handlers.github_commits.repos["octokitty/testing"] = "#baz" allow(params).to receive(:[]).with("payload").and_return(deleted_payload) end it "sends a notification message to the applicable rooms" do expect(robot).to receive(:send_message) do |target, message| expect(target.room).to eq("#baz") expect(message).to include("[GitHub] Garen Torikian deleted") end subject.receive(request, response) end end context "bad payload" do before do Lita.config.handlers.github_commits.repos["octokitty/testing"] = "#baz" allow(params).to receive(:[]).with("payload").and_return("yaryary") end it "sends a notification message to the applicable rooms" do expect(Lita.logger).to receive(:error) do |error| expect(error).to include("Could not parse JSON payload from Github") end subject.receive(request, response) end end context "improper config" do before do allow(params).to receive(:[]).with("payload").and_return(deleted_payload) end it "sends a notification message to the applicable rooms" do expect(Lita.logger).to receive(:warn) do |warning| expect(warning).to include("Notification from GitHub Commits for unconfigured project") end subject.receive(request, response) end end end end