| @@ -21,25 +21,25 @@ module Agents | ||
| 21 | 21 | event_description <<-MD | 
| 22 | 22 | Events are the raw JSON provided by the Basecamp API. Should look something like: | 
| 23 | 23 |  | 
| 24 | -        { | |
| 25 | -          "creator": { | |
| 26 | - "fullsize_avatar_url": "https://dge9rmgqjs8m1.cloudfront.net/global/dfsdfsdfdsf/original.gif?r=3", | |
| 27 | - "avatar_url": "http://dge9rmgqjs8m1.cloudfront.net/global/dfsdfsdfdsf/avatar.gif?r=3", | |
| 28 | - "name": "Dominik Sander", | |
| 29 | - "id": 123456 | |
| 30 | - }, | |
| 31 | - "attachments": [], | |
| 32 | - "raw_excerpt": "test test", | |
| 33 | - "excerpt": "test test", | |
| 34 | - "id": 6454342343, | |
| 35 | - "created_at": "2014-04-17T10:25:31.000+02:00", | |
| 36 | - "updated_at": "2014-04-17T10:25:31.000+02:00", | |
| 37 | - "summary": "commented on whaat", | |
| 38 | - "action": "commented on", | |
| 39 | - "target": "whaat", | |
| 40 | - "url": "https://basecamp.com/12456/api/v1/projects/76454545-explore-basecamp/messages/76454545-whaat.json", | |
| 41 | - "html_url": "https://basecamp.com/12456/projects/76454545-explore-basecamp/messages/76454545-whaat#comment_76454545" | |
| 42 | - } | |
| 24 | +          { | |
| 25 | +            "creator": { | |
| 26 | + "fullsize_avatar_url": "https://dge9rmgqjs8m1.cloudfront.net/global/dfsdfsdfdsf/original.gif?r=3", | |
| 27 | + "avatar_url": "http://dge9rmgqjs8m1.cloudfront.net/global/dfsdfsdfdsf/avatar.gif?r=3", | |
| 28 | + "name": "Dominik Sander", | |
| 29 | + "id": 123456 | |
| 30 | + }, | |
| 31 | + "attachments": [], | |
| 32 | + "raw_excerpt": "test test", | |
| 33 | + "excerpt": "test test", | |
| 34 | + "id": 6454342343, | |
| 35 | + "created_at": "2014-04-17T10:25:31.000+02:00", | |
| 36 | + "updated_at": "2014-04-17T10:25:31.000+02:00", | |
| 37 | + "summary": "commented on whaat", | |
| 38 | + "action": "commented on", | |
| 39 | + "target": "whaat", | |
| 40 | + "url": "https://basecamp.com/12456/api/v1/projects/76454545-explore-basecamp/messages/76454545-whaat.json", | |
| 41 | + "html_url": "https://basecamp.com/12456/projects/76454545-explore-basecamp/messages/76454545-whaat#comment_76454545" | |
| 42 | + } | |
| 43 | 43 | MD | 
| 44 | 44 |  | 
| 45 | 45 | default_schedule "every_10m" | 
| @@ -61,12 +61,13 @@ module Agents | ||
| 61 | 61 | def check | 
| 62 | 62 | service.prepare_request | 
| 63 | 63 | reponse = HTTParty.get request_url, request_options.merge(query_parameters) | 
| 64 | - memory[:last_run] = Time.now.utc.iso8601 | |
| 65 | - if last_check_at != nil | |
| 66 | - JSON.parse(reponse.body).each do |event| | |
| 64 | + events = JSON.parse(reponse.body) | |
| 65 | + if !memory[:last_event].nil? | |
| 66 | + events.each do |event| | |
| 67 | 67 | create_event :payload => event | 
| 68 | 68 | end | 
| 69 | 69 | end | 
| 70 | + memory[:last_event] = events.first['created_at'] if events.length > 0 | |
| 70 | 71 | save! | 
| 71 | 72 | end | 
| 72 | 73 |  | 
| @@ -80,7 +81,7 @@ module Agents | ||
| 80 | 81 | end | 
| 81 | 82 |  | 
| 82 | 83 | def query_parameters | 
| 83 | -      memory[:last_run].present? ? { :query => {:since => memory[:last_run]} } : {} | |
| 84 | +      memory[:last_event].present? ? { :query => {:since => memory[:last_event]} } : {} | |
| 84 | 85 | end | 
| 85 | 86 | end | 
| 86 | 87 | end | 
| @@ -6,7 +6,7 @@ describe Agents::BasecampAgent do | ||
| 6 | 6 |  | 
| 7 | 7 | before(:each) do | 
| 8 | 8 |      stub_request(:get, /json$/).to_return(:body => File.read(Rails.root.join("spec/data_fixtures/basecamp.json")), :status => 200, :headers => {"Content-Type" => "text/json"}) | 
| 9 | -    stub_request(:get, /Z$/).to_return(:body => File.read(Rails.root.join("spec/data_fixtures/basecamp.json")), :status => 200, :headers => {"Content-Type" => "text/json"}) | |
| 9 | +    stub_request(:get, /02:00$/).to_return(:body => File.read(Rails.root.join("spec/data_fixtures/basecamp.json")), :status => 200, :headers => {"Content-Type" => "text/json"}) | |
| 10 | 10 |      @valid_params = { :project_id => 6789 } | 
| 11 | 11 |  | 
| 12 | 12 | @checker = Agents::BasecampAgent.new(:name => "somename", :options => @valid_params) | 
| @@ -43,7 +43,7 @@ describe Agents::BasecampAgent do | ||
| 43 | 43 |  | 
| 44 | 44 | it "should provide the since attribute after the first run" do | 
| 45 | 45 | time = (Time.now-1.minute).iso8601 | 
| 46 | - @checker.memory[:last_run] = time | |
| 46 | + @checker.memory[:last_event] = time | |
| 47 | 47 | @checker.save | 
| 48 | 48 |        @checker.reload.send(:query_parameters).should == {:query => {:since => time}} | 
| 49 | 49 | end | 
| @@ -51,9 +51,10 @@ describe Agents::BasecampAgent do | ||
| 51 | 51 | describe "#check" do | 
| 52 | 52 | it "should not emit events on its first run" do | 
| 53 | 53 |        expect { @checker.check }.to change { Event.count }.by(0) | 
| 54 | + expect(@checker.memory[:last_event]).to eq '2014-04-17T10:25:31.000+02:00' | |
| 54 | 55 | end | 
| 55 | 56 | it "should check that initial run creates an event" do | 
| 56 | - @checker.last_check_at = Time.now - 1.minute | |
| 57 | + @checker.memory[:last_event] = '2014-04-17T10:25:31.000+02:00' | |
| 57 | 58 |        expect { @checker.check }.to change { Event.count }.by(1) | 
| 58 | 59 | end | 
| 59 | 60 | end | 
| @@ -61,7 +62,7 @@ describe Agents::BasecampAgent do | ||
| 61 | 62 | describe "#working?" do | 
| 62 | 63 | it "it is working when at least one event was emited" do | 
| 63 | 64 | @checker.should_not be_working | 
| 64 | - @checker.last_check_at = Time.now - 1.minute | |
| 65 | + @checker.memory[:last_event] = '2014-04-17T10:25:31.000+02:00' | |
| 65 | 66 | @checker.check | 
| 66 | 67 | @checker.reload.should be_working | 
| 67 | 68 | end |