123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- require 'rails_helper'
- describe Agents::WebhookAgent do
- let(:agent) do
- _agent = Agents::WebhookAgent.new(:name => 'webhook',
- :options => { 'secret' => 'foobar', 'payload_path' => 'some_key' })
- _agent.user = users(:bob)
- _agent.save!
- _agent
- end
- let(:payload) { {'people' => [{ 'name' => 'bob' }, { 'name' => 'jon' }] } }
- describe 'receive_web_request' do
- it 'should create event if secret matches' do
- out = nil
- expect {
- out = agent.receive_web_request({ 'secret' => 'foobar', 'some_key' => payload }, "post", "text/html")
- }.to change { Event.count }.by(1)
- expect(out).to eq(['Event Created', 201])
- expect(Event.last.payload).to eq(payload)
- end
- it 'should be able to create multiple events when given an array' do
- out = nil
- agent.options['payload_path'] = 'some_key.people'
- expect {
- out = agent.receive_web_request({ 'secret' => 'foobar', 'some_key' => payload }, "post", "text/html")
- }.to change { Event.count }.by(2)
- expect(out).to eq(['Event Created', 201])
- expect(Event.last.payload).to eq({ 'name' => 'jon' })
- end
- it 'should not create event if secrets dont match' do
- out = nil
- expect {
- out = agent.receive_web_request({ 'secret' => 'bazbat', 'some_key' => payload }, "post", "text/html")
- }.to change { Event.count }.by(0)
- expect(out).to eq(['Not Authorized', 401])
- end
- describe "receiving events" do
- context "default settings" do
- it "should not accept GET" do
- out = nil
- expect {
- out = agent.receive_web_request({ 'secret' => 'foobar', 'some_key' => payload }, "get", "text/html")
- }.to change { Event.count }.by(0)
- expect(out).to eq(['Please use POST requests only', 401])
- end
- it "should accept POST" do
- out = nil
- expect {
- out = agent.receive_web_request({ 'secret' => 'foobar', 'some_key' => payload }, "post", "text/html")
- }.to change { Event.count }.by(1)
- expect(out).to eq(['Event Created', 201])
- end
- end
- context "accepting get and post" do
- before { agent.options['verbs'] = 'get,post' }
- it "should accept GET" do
- out = nil
- expect {
- out = agent.receive_web_request({ 'secret' => 'foobar', 'some_key' => payload }, "get", "text/html")
- }.to change { Event.count }.by(1)
- expect(out).to eq(['Event Created', 201])
- end
- it "should accept POST" do
- out = nil
- expect {
- out = agent.receive_web_request({ 'secret' => 'foobar', 'some_key' => payload }, "post", "text/html")
- }.to change { Event.count }.by(1)
- expect(out).to eq(['Event Created', 201])
- end
- it "should not accept PUT" do
- out = nil
- expect {
- out = agent.receive_web_request({ 'secret' => 'foobar', 'some_key' => payload }, "put", "text/html")
- }.to change { Event.count }.by(0)
- expect(out).to eq(['Please use GET/POST requests only', 401])
- end
- end
- context "accepting only get" do
- before { agent.options['verbs'] = 'get' }
- it "should accept GET" do
- out = nil
- expect {
- out = agent.receive_web_request({ 'secret' => 'foobar', 'some_key' => payload }, "get", "text/html")
- }.to change { Event.count }.by(1)
- expect(out).to eq(['Event Created', 201])
- end
- it "should not accept POST" do
- out = nil
- expect {
- out = agent.receive_web_request({ 'secret' => 'foobar', 'some_key' => payload }, "post", "text/html")
- }.to change { Event.count }.by(0)
- expect(out).to eq(['Please use GET requests only', 401])
- end
- end
- context "accepting only post" do
- before { agent.options['verbs'] = 'post' }
- it "should not accept GET" do
- out = nil
- expect {
- out = agent.receive_web_request({ 'secret' => 'foobar', 'some_key' => payload }, "get", "text/html")
- }.to change { Event.count }.by(0)
- expect(out).to eq(['Please use POST requests only', 401])
- end
- it "should accept POST" do
- out = nil
- expect {
- out = agent.receive_web_request({ 'secret' => 'foobar', 'some_key' => payload }, "post", "text/html")
- }.to change { Event.count }.by(1)
- expect(out).to eq(['Event Created', 201])
- end
- end
- context "accepting only put" do
- before { agent.options['verbs'] = 'put' }
- it "should accept PUT" do
- out = nil
- expect {
- out = agent.receive_web_request({ 'secret' => 'foobar', 'some_key' => payload }, "put", "text/html")
- }.to change { Event.count }.by(1)
- expect(out).to eq(['Event Created', 201])
- end
- it "should not accept GET" do
- out = nil
- expect {
- out = agent.receive_web_request({ 'secret' => 'foobar', 'some_key' => payload }, "get", "text/html")
- }.to change { Event.count }.by(0)
- expect(out).to eq(['Please use PUT requests only', 401])
- end
- it "should not accept POST" do
- out = nil
- expect {
- out = agent.receive_web_request({ 'secret' => 'foobar', 'some_key' => payload }, "post", "text/html")
- }.to change { Event.count }.by(0)
- expect(out).to eq(['Please use PUT requests only', 401])
- end
- end
- context "flaky content with commas" do
- before { agent.options['verbs'] = ',, PUT,POST, gEt , ,' }
- it "should accept PUT" do
- out = nil
- expect {
- out = agent.receive_web_request({ 'secret' => 'foobar', 'some_key' => payload }, "put", "text/html")
- }.to change { Event.count }.by(1)
- expect(out).to eq(['Event Created', 201])
- end
- it "should accept GET" do
- out = nil
- expect {
- out = agent.receive_web_request({ 'secret' => 'foobar', 'some_key' => payload }, "get", "text/html")
- }.to change { Event.count }.by(1)
- expect(out).to eq(['Event Created', 201])
- end
- it "should accept POST" do
- out = nil
- expect {
- out = agent.receive_web_request({ 'secret' => 'foobar', 'some_key' => payload }, "post", "text/html")
- }.to change { Event.count }.by(1)
- expect(out).to eq(['Event Created', 201])
- end
- it "should not accept DELETE" do
- out = nil
- expect {
- out = agent.receive_web_request({ 'secret' => 'foobar', 'some_key' => payload }, "delete", "text/html")
- }.to change { Event.count }.by(0)
- expect(out).to eq(['Please use PUT/POST/GET requests only', 401])
- end
- end
- end
- end
- end
|