123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- require 'rails_helper'
- describe Agents::JiraAgent do
- before(:each) do
- stub_request(:get, /atlassian.com/).to_return(:body => File.read(Rails.root.join("spec/data_fixtures/jira.json")), :status => 200, :headers => {"Content-Type" => "text/json"})
- @valid_params = {
- :username => "user",
- :password => "pass",
- :jira_url => 'https://jira.atlassian.com',
- :jql => 'resolution = unresolved',
- :expected_update_period_in_days => '7',
- :timeout => '1'
- }
- @checker = Agents::JiraAgent.new(:name => "jira-agent", :options => @valid_params)
- @checker.user = users(:jane)
- @checker.save!
- end
- describe "validating" do
- before do
- expect(@checker).to be_valid
- end
- it "should work without username" do
- @checker.options['username'] = nil
- expect(@checker).to be_valid
- end
- it "should require the jira password if username is specified" do
- @checker.options['username'] = 'user'
- @checker.options['password'] = nil
- expect(@checker).not_to be_valid
- end
- it "should require the jira url" do
- @checker.options['jira_url'] = nil
- expect(@checker).not_to be_valid
- end
- it "should work without jql" do
- @checker.options['jql'] = nil
- expect(@checker).to be_valid
- end
- it "should require the expected_update_period_in_days" do
- @checker.options['expected_update_period_in_days'] = nil
- expect(@checker).not_to be_valid
- end
- it "should require timeout" do
- @checker.options['timeout'] = nil
- expect(@checker).not_to be_valid
- end
- end
- describe "helpers" do
- it "should generate a correct request options hash" do
- expect(@checker.send(:request_options)).to eq({basic_auth: {username: "user", password: "pass"}, headers: {"User-Agent" => "Huginn - https://github.com/huginn/huginn"}})
- end
- it "should generate a correct request url" do
- expect(@checker.send(:request_url, 'foo=bar', 10)).to eq("https://jira.atlassian.com/rest/api/2/search?jql=foo%3Dbar&fields=*all&startAt=10")
- end
- it "should not set the 'since' time on the first run" do
- expected_url = "https://jira.atlassian.com/rest/api/2/search?jql=resolution+%3D+unresolved&fields=*all&startAt=0"
- expected_headers = {headers: {"User-Agent"=>"Huginn - https://github.com/huginn/huginn"}, basic_auth: {username: "user", password: "pass"}}
- reply = JSON.parse(File.read(Rails.root.join("spec/data_fixtures/jira.json")))
- expect(@checker).to receive(:get).with(expected_url, expected_headers).and_return(reply)
- @checker.check
- end
- it "should provide set the 'since' time after the first run" do
- expected_url_1 = "https://jira.atlassian.com/rest/api/2/search?jql=resolution+%3D+unresolved&fields=*all&startAt=0"
- expected_url_2 = "https://jira.atlassian.com/rest/api/2/search?jql=resolution+%3D+unresolved&fields=*all&startAt=0"
- expected_headers = {headers: {"User-Agent"=>"Huginn - https://github.com/huginn/huginn"}, basic_auth: {username: "user", password: "pass"}}
- reply = JSON.parse(File.read(Rails.root.join("spec/data_fixtures/jira.json")))
- expect(@checker).to receive(:get).with(expected_url_1, expected_headers).and_return(reply)
- @checker.check
- expect(@checker).to receive(:get).with(/\d+-\d+-\d+\+\d+%3A\d+/, expected_headers).and_return(reply)
- @checker.check
- end
- end
- describe "#check" do
- it "should be able to retrieve issues" do
- reply = JSON.parse(File.read(Rails.root.join("spec/data_fixtures/jira.json")))
- expect(@checker).to receive(:get).and_return(reply)
- expect { @checker.check }.to change { Event.count }.by(50)
- end
- end
- describe "#working?" do
- it "it is working when at least one event was emited" do
- expect(@checker).not_to be_working
- @checker.check
- expect(@checker.reload).to be_working
- end
- end
- end
|