party_foul 1.3.1 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/party_foul.rb +1 -1
- data/lib/party_foul/exception_handler.rb +14 -14
- data/lib/party_foul/issue_renderers/base.rb +1 -1
- data/lib/party_foul/issue_renderers/rack.rb +15 -5
- data/lib/party_foul/version.rb +1 -1
- data/test/generator_test.rb +2 -1
- data/test/party_foul/configure_test.rb +2 -2
- data/test/party_foul/exception_handler_test.rb +25 -21
- data/test/party_foul/issue_renderers/base_test.rb +6 -0
- data/test/party_foul/issue_renderers/rack_test.rb +60 -6
- data/test/test_helper.rb +6 -1
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8f80dcba58cf47603afe74982f963afc9e5bc188
|
4
|
+
data.tar.gz: b44e5e15e8288f829b85835e3c33ea5ca27a6f03
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 28bd2e96700f5e2932b85671579830ad9ed28f9fd6c04ab62f16a528ed46ce044a8b485dd8c39c65bfa5c2ffb9140439f6ea7e1d08f95efae4a9ba05bc5e6b09
|
7
|
+
data.tar.gz: 5f6527076d22d9c696d7a6c44e0e887bdf40493d9fe5b85fb8b4a62addf63aa097938362dd55f721d22e69837907070a83645155f4d4d9f422eea0d95296bc7a
|
data/lib/party_foul.rb
CHANGED
@@ -80,7 +80,7 @@ module PartyFoul
|
|
80
80
|
# @param [Block]
|
81
81
|
def self.configure(&block)
|
82
82
|
yield self
|
83
|
-
self.github ||= Octokit.new
|
83
|
+
self.github ||= Octokit::Client.new access_token: oauth_token, api_endpoint: api_endpoint
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
@@ -36,37 +36,33 @@ class PartyFoul::ExceptionHandler
|
|
36
36
|
|
37
37
|
# Hits the GitHub API to find the matching issue using the fingerprint.
|
38
38
|
def find_issue
|
39
|
-
|
40
|
-
issue = PartyFoul.github.search_issues(PartyFoul.repo_path, fingerprint, 'closed').first
|
41
|
-
end
|
42
|
-
|
43
|
-
issue
|
39
|
+
find_first_issue('open') || find_first_issue('closed')
|
44
40
|
end
|
45
41
|
|
46
42
|
# Will create a new issue and a comment with the proper details. All issues are labeled as 'bug'.
|
47
43
|
def create_issue
|
48
44
|
self.sha = PartyFoul.github.references(PartyFoul.repo_path, "heads/#{PartyFoul.branch}").object.sha
|
49
45
|
issue = PartyFoul.github.create_issue(PartyFoul.repo_path, rendered_issue.title, rendered_issue.body, labels: ['bug'] + rendered_issue.labels)
|
50
|
-
PartyFoul.github.add_comment(PartyFoul.repo_path, issue[
|
46
|
+
PartyFoul.github.add_comment(PartyFoul.repo_path, issue[:number], rendered_issue.comment)
|
51
47
|
end
|
52
48
|
|
53
49
|
# Updates the given issue. If the issue is labeled as 'wontfix' nothing is done. If the issue is closed the issue is reopened and labeled as 'regression'.
|
54
50
|
#
|
55
|
-
# @param [
|
51
|
+
# @param [Sawyer::Resource]
|
56
52
|
def update_issue(issue)
|
57
|
-
unless issue.key?(
|
58
|
-
body = rendered_issue.update_body(issue[
|
53
|
+
unless issue.key?(:labels) && issue[:labels].include?('wontfix')
|
54
|
+
body = rendered_issue.update_body(issue[:body])
|
59
55
|
params = {state: 'open'}
|
60
56
|
|
61
|
-
if issue[
|
62
|
-
params[:labels] = (['bug', 'regression'] + issue[
|
57
|
+
if issue[:state] == 'closed'
|
58
|
+
params[:labels] = (['bug', 'regression'] + issue[:labels]).uniq
|
63
59
|
end
|
64
60
|
|
65
61
|
self.sha = PartyFoul.github.references(PartyFoul.repo_path, "heads/#{PartyFoul.branch}").object.sha
|
66
|
-
PartyFoul.github.update_issue(PartyFoul.repo_path, issue[
|
62
|
+
PartyFoul.github.update_issue(PartyFoul.repo_path, issue[:number], issue.title, body, params)
|
67
63
|
|
68
|
-
unless comment_limit_met?(issue[
|
69
|
-
PartyFoul.github.add_comment(PartyFoul.repo_path, issue[
|
64
|
+
unless comment_limit_met?(issue[:body])
|
65
|
+
PartyFoul.github.add_comment(PartyFoul.repo_path, issue[:number], rendered_issue.comment)
|
70
66
|
end
|
71
67
|
end
|
72
68
|
end
|
@@ -93,4 +89,8 @@ class PartyFoul::ExceptionHandler
|
|
93
89
|
def comment_limit_met?(body)
|
94
90
|
!!PartyFoul.comment_limit && PartyFoul.comment_limit <= occurrence_count(body)
|
95
91
|
end
|
92
|
+
|
93
|
+
def find_first_issue(state)
|
94
|
+
PartyFoul.github.legacy_search_issues(PartyFoul.repo_path, fingerprint, state).first
|
95
|
+
end
|
96
96
|
end
|
@@ -1,4 +1,9 @@
|
|
1
1
|
class PartyFoul::IssueRenderers::Rack < PartyFoul::IssueRenderers::Base
|
2
|
+
|
3
|
+
def request
|
4
|
+
@request ||= ::Rack::Request.new(env)
|
5
|
+
end
|
6
|
+
|
2
7
|
def comment_options
|
3
8
|
super.merge(URL: url, Params: params, Session: session, 'IP Address' => ip_address, 'HTTP Headers' => http_headers)
|
4
9
|
end
|
@@ -7,25 +12,25 @@ class PartyFoul::IssueRenderers::Rack < PartyFoul::IssueRenderers::Base
|
|
7
12
|
#
|
8
13
|
# @return [Hash]
|
9
14
|
def params
|
10
|
-
|
15
|
+
request.params
|
11
16
|
end
|
12
17
|
|
13
18
|
# IP address of the client who triggered the exception
|
14
19
|
#
|
15
20
|
# @return [String]
|
16
21
|
def ip_address
|
17
|
-
|
22
|
+
request.ip
|
18
23
|
end
|
19
24
|
|
20
25
|
def url
|
21
|
-
"[#{
|
26
|
+
"[#{request.request_method}] #{env['REQUEST_URI']}"
|
22
27
|
end
|
23
28
|
|
24
29
|
# The session hash for the client at the time of the exception
|
25
30
|
#
|
26
31
|
# @return [Hash]
|
27
32
|
def session
|
28
|
-
|
33
|
+
request.session
|
29
34
|
end
|
30
35
|
|
31
36
|
# HTTP Headers hash from the request. Headers can be filtered out by
|
@@ -33,7 +38,12 @@ class PartyFoul::IssueRenderers::Rack < PartyFoul::IssueRenderers::Base
|
|
33
38
|
#
|
34
39
|
# @return [Hash]
|
35
40
|
def http_headers
|
36
|
-
{
|
41
|
+
{
|
42
|
+
Version: env['HTTP_VERSION'],
|
43
|
+
'User Agent' => request.user_agent,
|
44
|
+
'Accept Encoding' => env['HTTP_ACCEPT_ENCODING'],
|
45
|
+
Accept: env['HTTP_ACCEPT'],
|
46
|
+
}
|
37
47
|
end
|
38
48
|
|
39
49
|
private
|
data/lib/party_foul/version.rb
CHANGED
data/test/generator_test.rb
CHANGED
@@ -5,11 +5,12 @@ require 'generators/party_foul/install_generator'
|
|
5
5
|
class PartyFoul::GeneratorTest < Rails::Generators::TestCase
|
6
6
|
destination File.expand_path('../tmp', __FILE__)
|
7
7
|
tests PartyFoul::InstallGenerator
|
8
|
+
|
8
9
|
test 'it copies the initializer' do
|
9
10
|
owner = 'test_owner'
|
10
11
|
repo = 'test_repo'
|
11
12
|
octokit = mock('Octokit')
|
12
|
-
octokit.expects(:create_authorization).with(scopes: ['repo'], note: 'PartyFoul test_owner/test_repo', note_url: 'http://example.com/test_owner/test_repo').returns(
|
13
|
+
octokit.expects(:create_authorization).with(scopes: ['repo'], note: 'PartyFoul test_owner/test_repo', note_url: 'http://example.com/test_owner/test_repo').returns(sawyer_resource({token: 'test_token'}))
|
13
14
|
Octokit.stubs(:new).with(:login => 'test_login', :password => 'test_password', :api_endpoint => 'http://api.example.com').returns(octokit)
|
14
15
|
$stdin.stubs(:gets).returns('test_login').then.returns('test_password').then.returns(owner).then.returns(repo).then.returns('http://api.example.com').then.returns('http://example.com').then.returns('')
|
15
16
|
run_generator
|
@@ -20,8 +20,8 @@ describe 'Party Foul Confg' do
|
|
20
20
|
|
21
21
|
PartyFoul.blacklisted_exceptions.must_equal ['StandardError']
|
22
22
|
PartyFoul.github.must_be_instance_of Octokit::Client
|
23
|
-
PartyFoul.github.
|
24
|
-
PartyFoul.github.api_endpoint.must_equal 'http://api.example.com'
|
23
|
+
PartyFoul.github.access_token.must_equal 'test_token'
|
24
|
+
PartyFoul.github.api_endpoint.must_equal 'http://api.example.com/'
|
25
25
|
PartyFoul.owner.must_equal 'test_owner'
|
26
26
|
PartyFoul.repo.must_equal 'test_repo'
|
27
27
|
PartyFoul.repo_path.must_equal 'test_owner/test_repo'
|
@@ -17,10 +17,10 @@ describe 'Party Foul Exception Handler' do
|
|
17
17
|
it 'will open a new error on GitHub' do
|
18
18
|
PartyFoul::IssueRenderers::Rails.any_instance.stubs(:body).returns('Test Body')
|
19
19
|
PartyFoul::IssueRenderers::Rails.any_instance.stubs(:comment).returns('Test Comment')
|
20
|
-
PartyFoul.github.expects(:
|
21
|
-
PartyFoul.github.expects(:
|
22
|
-
PartyFoul.github.expects(:create_issue).with('test_owner/test_repo', 'Test Title', 'Test Body', :
|
23
|
-
PartyFoul.github.expects(:references).with('test_owner/test_repo', 'heads/deploy').returns(
|
20
|
+
PartyFoul.github.expects(:legacy_search_issues).with('test_owner/test_repo', 'test_fingerprint', 'open').returns([])
|
21
|
+
PartyFoul.github.expects(:legacy_search_issues).with('test_owner/test_repo', 'test_fingerprint', 'closed').returns([])
|
22
|
+
PartyFoul.github.expects(:create_issue).with('test_owner/test_repo', 'Test Title', 'Test Body', labels: ['bug']).returns( {number: 1} )
|
23
|
+
PartyFoul.github.expects(:references).with('test_owner/test_repo', 'heads/deploy').returns( sawyer_resource({object: {sha: 'abcdefg1234567890'}}) )
|
24
24
|
PartyFoul.github.expects(:add_comment).with('test_owner/test_repo', 1, 'Test Comment')
|
25
25
|
PartyFoul::ExceptionHandler.new(nil, {}).run
|
26
26
|
end
|
@@ -37,10 +37,10 @@ describe 'Party Foul Exception Handler' do
|
|
37
37
|
it 'will open a new error on GitHub with the additional labels' do
|
38
38
|
PartyFoul::IssueRenderers::Rails.any_instance.stubs(:body).returns('Test Body')
|
39
39
|
PartyFoul::IssueRenderers::Rails.any_instance.stubs(:comment).returns('Test Comment')
|
40
|
-
PartyFoul.github.expects(:
|
41
|
-
PartyFoul.github.expects(:
|
42
|
-
PartyFoul.github.expects(:create_issue).with('test_owner/test_repo', 'Test Title', 'Test Body', :labels => ['bug', 'custom', 'label']).returns(
|
43
|
-
PartyFoul.github.expects(:references).with('test_owner/test_repo', 'heads/deploy').returns(
|
40
|
+
PartyFoul.github.expects(:legacy_search_issues).with('test_owner/test_repo', 'test_fingerprint', 'open').returns([])
|
41
|
+
PartyFoul.github.expects(:legacy_search_issues).with('test_owner/test_repo', 'test_fingerprint', 'closed').returns([])
|
42
|
+
PartyFoul.github.expects(:create_issue).with('test_owner/test_repo', 'Test Title', 'Test Body', :labels => ['bug', 'custom', 'label']).returns( { number: 1 } )
|
43
|
+
PartyFoul.github.expects(:references).with('test_owner/test_repo', 'heads/deploy').returns( sawyer_resource({object: {sha: 'abcdefg1234567890'}}) )
|
44
44
|
PartyFoul.github.expects(:add_comment).with('test_owner/test_repo', 1, 'Test Comment')
|
45
45
|
PartyFoul::ExceptionHandler.new(nil, {}).run
|
46
46
|
end
|
@@ -59,9 +59,9 @@ describe 'Party Foul Exception Handler' do
|
|
59
59
|
end
|
60
60
|
PartyFoul::IssueRenderers::Rails.any_instance.stubs(:body).returns('Test Body')
|
61
61
|
PartyFoul::IssueRenderers::Rails.any_instance.stubs(:comment).returns('Test Comment')
|
62
|
-
PartyFoul.github.expects(:
|
63
|
-
PartyFoul.github.expects(:
|
64
|
-
PartyFoul.github.expects(:references).with('test_owner/test_repo', 'heads/deploy').returns(
|
62
|
+
PartyFoul.github.expects(:legacy_search_issues).with('test_owner/test_repo', 'test_fingerprint', 'open').returns([])
|
63
|
+
PartyFoul.github.expects(:legacy_search_issues).with('test_owner/test_repo', 'test_fingerprint', 'closed').returns([])
|
64
|
+
PartyFoul.github.expects(:references).with('test_owner/test_repo', 'heads/deploy').returns( sawyer_resource({object: {sha: 'abcdefg1234567890'}}) )
|
65
65
|
PartyFoul.github.expects(:add_comment).with('test_owner/test_repo', 1, 'Test Comment')
|
66
66
|
end
|
67
67
|
after do
|
@@ -69,17 +69,17 @@ describe 'Party Foul Exception Handler' do
|
|
69
69
|
end
|
70
70
|
|
71
71
|
it 'will open a new error on GitHub with the default labels if no additional labels are returned from the proc' do
|
72
|
-
PartyFoul.github.expects(:create_issue).with('test_owner/test_repo', 'Test Title', 'Test Body', :labels => ['bug']).returns(
|
72
|
+
PartyFoul.github.expects(:create_issue).with('test_owner/test_repo', 'Test Title', 'Test Body', :labels => ['bug']).returns({ number: 1 })
|
73
73
|
PartyFoul::ExceptionHandler.new(stub(:message => ''), {}).run
|
74
74
|
end
|
75
75
|
|
76
76
|
it 'will open a new error on GitHub with the additional labels based on the exception message' do
|
77
|
-
PartyFoul.github.expects(:create_issue).with('test_owner/test_repo', 'Test Title', 'Test Body', :labels => ['bug', 'database_error']).returns(
|
77
|
+
PartyFoul.github.expects(:create_issue).with('test_owner/test_repo', 'Test Title', 'Test Body', :labels => ['bug', 'database_error']).returns({ number: 1 })
|
78
78
|
PartyFoul::ExceptionHandler.new(stub(:message => 'Database'), {}).run
|
79
79
|
end
|
80
80
|
|
81
81
|
it 'will open a new error on GitHub with the additional labels based on the env' do
|
82
|
-
PartyFoul.github.expects(:create_issue).with('test_owner/test_repo', 'Test Title', 'Test Body', :labels => ['bug', 'beta']).returns(
|
82
|
+
PartyFoul.github.expects(:create_issue).with('test_owner/test_repo', 'Test Title', 'Test Body', :labels => ['bug', 'beta']).returns({ number: 1 })
|
83
83
|
PartyFoul::ExceptionHandler.new(stub(:message => ''), {:http_host => 'beta.example.com'}).run
|
84
84
|
end
|
85
85
|
end
|
@@ -93,9 +93,11 @@ describe 'Party Foul Exception Handler' do
|
|
93
93
|
|
94
94
|
context 'and open' do
|
95
95
|
before do
|
96
|
-
PartyFoul.github.expects(:
|
96
|
+
PartyFoul.github.expects(:legacy_search_issues).with('test_owner/test_repo', 'test_fingerprint', 'open').returns(
|
97
|
+
[sawyer_resource({title: 'Test Title', body: 'Test Body', state: 'open', number: 1})] )
|
97
98
|
PartyFoul.github.expects(:update_issue).with('test_owner/test_repo', 1, 'Test Title', 'New Body', state: 'open')
|
98
|
-
PartyFoul.github.expects(:references).with('test_owner/test_repo', 'heads/deploy').returns(
|
99
|
+
PartyFoul.github.expects(:references).with('test_owner/test_repo', 'heads/deploy').returns(
|
100
|
+
sawyer_resource({object: {sha: 'abcdefg1234567890'}}) )
|
99
101
|
end
|
100
102
|
|
101
103
|
it 'will update the issue' do
|
@@ -115,11 +117,12 @@ describe 'Party Foul Exception Handler' do
|
|
115
117
|
|
116
118
|
context 'and closed' do
|
117
119
|
it 'will update the count on the body and re-open the issue' do
|
118
|
-
PartyFoul.github.expects(:
|
119
|
-
PartyFoul.github.expects(:
|
120
|
+
PartyFoul.github.expects(:legacy_search_issues).with('test_owner/test_repo', 'test_fingerprint', 'open').returns([])
|
121
|
+
PartyFoul.github.expects(:legacy_search_issues).with('test_owner/test_repo', 'test_fingerprint', 'closed').returns(
|
122
|
+
[sawyer_resource({title: 'Test Title', body: 'Test Body', state: 'closed', number: 1, labels: ['staging']})] )
|
120
123
|
PartyFoul.github.expects(:update_issue).with('test_owner/test_repo', 1, 'Test Title', 'New Body', state: 'open', labels: ['bug', 'regression', 'staging'])
|
121
124
|
PartyFoul.github.expects(:add_comment).with('test_owner/test_repo', 1, 'Test Comment')
|
122
|
-
PartyFoul.github.expects(:references).with('test_owner/test_repo', 'heads/deploy').returns(
|
125
|
+
PartyFoul.github.expects(:references).with('test_owner/test_repo', 'heads/deploy').returns(sawyer_resource({object: {sha: 'abcdefg1234567890'}}))
|
123
126
|
PartyFoul::ExceptionHandler.new(nil, {}).run
|
124
127
|
end
|
125
128
|
end
|
@@ -128,8 +131,9 @@ describe 'Party Foul Exception Handler' do
|
|
128
131
|
context 'when issue is marked as "wontfix"' do
|
129
132
|
it 'does nothing' do
|
130
133
|
PartyFoul::IssueRenderers::Rails.any_instance.stubs(:body).returns('Test Body')
|
131
|
-
PartyFoul.github.expects(:
|
132
|
-
PartyFoul.github.expects(:
|
134
|
+
PartyFoul.github.expects(:legacy_search_issues).with('test_owner/test_repo', 'test_fingerprint', 'open').returns([])
|
135
|
+
PartyFoul.github.expects(:legacy_search_issues).with('test_owner/test_repo', 'test_fingerprint', 'closed').returns(
|
136
|
+
[sawyer_resource({title: 'Test Title', body: 'Test Body', state: 'closed', number: 1, labels: ['wontfix']})] )
|
133
137
|
PartyFoul.github.expects(:create_issue).never
|
134
138
|
PartyFoul.github.expects(:update_issue).never
|
135
139
|
PartyFoul.github.expects(:add_comment).never
|
@@ -111,6 +111,12 @@ Fingerprint: `abcdefg1234567890`
|
|
111
111
|
rendered_issue.stubs(:raw_title).returns('Error for #<ClassName:0xabcdefg1234567>')
|
112
112
|
rendered_issue.title.must_equal 'Error for #<ClassName:0xXXXXXX>'
|
113
113
|
end
|
114
|
+
|
115
|
+
it 'masks the extended object ids in the raw_title' do
|
116
|
+
rendered_issue = PartyFoul::IssueRenderers::Base.new(nil, nil)
|
117
|
+
rendered_issue.stubs(:raw_title).returns('Error for #<#<ClassName:0x007fbddbdcd340>:0x007fbddf6be0a0>')
|
118
|
+
rendered_issue.title.must_equal 'Error for #<#<ClassName:0xXXXXXX>:0xXXXXXX>'
|
119
|
+
end
|
114
120
|
end
|
115
121
|
|
116
122
|
describe '#stack_trace' do
|
@@ -3,22 +3,76 @@ require 'test_helper'
|
|
3
3
|
describe 'Rack Issue Renderer' do
|
4
4
|
describe '#params' do
|
5
5
|
before do
|
6
|
-
@
|
6
|
+
@issue_renderer = PartyFoul::IssueRenderers::Rack.new(nil, ::Rack::MockRequest.env_for("/?status=ok"))
|
7
7
|
end
|
8
8
|
|
9
|
-
it 'returns
|
10
|
-
@
|
9
|
+
it 'returns the value of the query param' do
|
10
|
+
@issue_renderer.params['status'].must_equal 'ok'
|
11
11
|
end
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
describe '#raw_title' do
|
15
15
|
before do
|
16
16
|
@exception = Exception.new('message')
|
17
17
|
end
|
18
18
|
|
19
19
|
it 'constructs the title with the class and instance method' do
|
20
|
-
@
|
21
|
-
@
|
20
|
+
@issue_renderer = PartyFoul::IssueRenderers::Rack.new(@exception, {})
|
21
|
+
@issue_renderer.send(:raw_title).must_equal %{(Exception) "message"}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '#request' do
|
26
|
+
it 'builds a rack request' do
|
27
|
+
issue_renderer = PartyFoul::IssueRenderers::Rack.new(nil, {})
|
28
|
+
assert issue_renderer.request.is_a?(::Rack::Request)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '#ip_address' do
|
33
|
+
# we are delegating to rack, see
|
34
|
+
# https://github.com/rack/rack/blob/master/test/spec_request.rb
|
35
|
+
|
36
|
+
it 'returns the IP address when REMOTE_ADDR is set' do
|
37
|
+
issue_renderer = PartyFoul::IssueRenderers::Rack.new(nil, { 'REMOTE_ADDR' => '1.2.3.4' })
|
38
|
+
issue_renderer.ip_address.must_equal '1.2.3.4'
|
22
39
|
end
|
40
|
+
|
41
|
+
it 'return the IP address when HTTP_X_FORWARDED_FOR is set' do
|
42
|
+
issue_renderer = PartyFoul::IssueRenderers::Rack.new(nil, { 'HTTP_X_FORWARDED_FOR' => '10.0.0.1, 10.0.0.1, 3.4.5.6' })
|
43
|
+
issue_renderer.ip_address.must_equal '3.4.5.6'
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe '#url' do
|
48
|
+
it 'returns the method and uri' do
|
49
|
+
issue_renderer = PartyFoul::IssueRenderers::Rack.new(nil, { 'REQUEST_METHOD' => 'GET', 'REQUEST_URI' => '/something' })
|
50
|
+
issue_renderer.url.must_equal '[GET] /something'
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe '#session' do
|
55
|
+
it 'returns the session' do
|
56
|
+
issue_renderer = PartyFoul::IssueRenderers::Rack.new(nil, { 'rack.session' => 'abc:123' })
|
57
|
+
issue_renderer.session.must_equal 'abc:123'
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe '#http_headers' do
|
62
|
+
it 'returns http headers' do
|
63
|
+
issue_renderer = PartyFoul::IssueRenderers::Rack.new(nil,
|
64
|
+
{
|
65
|
+
'HTTP_VERSION' => 'version',
|
66
|
+
'HTTP_USER_AGENT' => 'user agent',
|
67
|
+
'HTTP_ACCEPT_ENCODING' => 'accept encoding',
|
68
|
+
'HTTP_ACCEPT' => 'accept'
|
69
|
+
})
|
70
|
+
|
71
|
+
issue_renderer.http_headers[:Version].must_equal 'version'
|
72
|
+
issue_renderer.http_headers['User Agent'].must_equal 'user agent'
|
73
|
+
issue_renderer.http_headers['Accept Encoding'].must_equal 'accept encoding'
|
74
|
+
issue_renderer.http_headers[:Accept].must_equal 'accept'
|
75
|
+
end
|
23
76
|
end
|
77
|
+
|
24
78
|
end
|
data/test/test_helper.rb
CHANGED
@@ -12,7 +12,7 @@ end
|
|
12
12
|
require 'rack/test'
|
13
13
|
require 'mocha/setup'
|
14
14
|
require 'party_foul'
|
15
|
-
|
15
|
+
|
16
16
|
|
17
17
|
class MiniTest::Spec
|
18
18
|
class << self
|
@@ -29,3 +29,8 @@ def clean_up_party
|
|
29
29
|
PartyFoul.send("#{attr}=", nil)
|
30
30
|
end
|
31
31
|
end
|
32
|
+
|
33
|
+
def sawyer_resource(attrs)
|
34
|
+
agent = Sawyer::Agent.new(PartyFoul.api_endpoint)
|
35
|
+
Sawyer::Resource.new(agent, attrs)
|
36
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: party_foul
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Cardarella
|
@@ -9,22 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-10-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: octokit
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - ~>
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 2.
|
20
|
+
version: 2.3.1
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- -
|
25
|
+
- - ~>
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: 2.
|
27
|
+
version: 2.3.1
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: actionpack
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -196,7 +196,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
196
196
|
version: '0'
|
197
197
|
requirements: []
|
198
198
|
rubyforge_project:
|
199
|
-
rubygems_version: 2.
|
199
|
+
rubygems_version: 2.1.5
|
200
200
|
signing_key:
|
201
201
|
specification_version: 4
|
202
202
|
summary: Auto-submit Rails exceptions as new issues on GitHub
|