party_foul 1.3.1 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|