describe CC::Service::Jira, type: :service do it "successful receive" do response = assert_jira_receives( event(:quality, to: "D", from: "C"), "Refactor User from a D on Code Climate", "https://codeclimate.com/repos/1/feed", ) expect(response[:id]).to eq("10000") end it "quality" do assert_jira_receives( event(:quality, to: "D", from: "C"), "Refactor User from a D on Code Climate", "https://codeclimate.com/repos/1/feed", ) end it "vulnerability" do assert_jira_receives( event(:vulnerability, vulnerabilities: [{ "warning_type" => "critical", "location" => "app/user.rb line 120", }]), "New critical issue found in app/user.rb line 120", "A critical vulnerability was found by Code Climate in app/user.rb line 120.\n\nhttps://codeclimate.com/repos/1/feed", ) end it "issue" do payload = { issue: { "check_name" => "Style/LongLine", "description" => "Line is too long [1000/80]", }, constant_name: "foo.rb", details_url: "http://example.com/repos/id/foo.rb#issue_123", } assert_jira_receives( event(:issue, payload), "Fix \"Style/LongLine\" issue in foo.rb", "Line is too long [1000/80]\n\nhttp://example.com/repos/id/foo.rb#issue_123", ) end it "receive test" do http_stubs.post "/rest/api/2/issue" do |_env| [200, {}, '{"id": 12345, "key": "CC-123", "self": "http://foo.bar"}'] end response = receive_event(name: "test") expect(response[:message]).to eq("Ticket 12345 created.") end private def assert_jira_receives(event_data, title, ticket_body) http_stubs.post "/rest/api/2/issue" do |env| body = JSON.parse(env[:body]) expect(env[:request_headers]["Authorization"]).to eq("Basic Zm9vOmJhcg==") expect(body["fields"]["summary"]).to eq(title) expect(body["fields"]["description"]).to eq(ticket_body) expect(body["fields"]["issuetype"]["name"]).to eq("Task") [200, {}, '{"id":"10000"}'] end receive_event(event_data) end def receive_event(event_data = nil) service_receive( CC::Service::Jira, { domain: "foo.com", username: "foo", password: "bar", project_id: "100" }, event_data || event(:quality, from: "C", to: "D"), ) end end