octospy 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +19 -0
- data/.rspec +1 -0
- data/.travis.yml +23 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +58 -0
- data/Rakefile +4 -0
- data/bin/octospy +6 -0
- data/lib/cinch/plugins/management.rb +91 -0
- data/lib/cinch/plugins/octospy/job.rb +97 -0
- data/lib/cinch/plugins/octospy/recording.rb +101 -0
- data/lib/cinch/plugins/octospy.rb +68 -0
- data/lib/octospy/configurable.rb +49 -0
- data/lib/octospy/extensions/string.rb +39 -0
- data/lib/octospy/octokit/client.rb +9 -0
- data/lib/octospy/parser/download.rb +13 -0
- data/lib/octospy/parser/gist.rb +20 -0
- data/lib/octospy/parser/issue.rb +43 -0
- data/lib/octospy/parser/organization.rb +22 -0
- data/lib/octospy/parser/pull_request.rb +32 -0
- data/lib/octospy/parser/repository.rb +80 -0
- data/lib/octospy/parser/user.rb +37 -0
- data/lib/octospy/parser/wiki.rb +19 -0
- data/lib/octospy/parser.rb +117 -0
- data/lib/octospy/recordable/channel.rb +23 -0
- data/lib/octospy/recordable/repo.rb +16 -0
- data/lib/octospy/recordable.rb +26 -0
- data/lib/octospy/shortener.rb +48 -0
- data/lib/octospy/version.rb +3 -0
- data/lib/octospy/worker.rb +48 -0
- data/lib/octospy.rb +55 -0
- data/octospy.gemspec +37 -0
- data/spec/fixtures/commit_comment_event.json +59 -0
- data/spec/fixtures/create_event.json +21 -0
- data/spec/fixtures/delete_event.json +23 -0
- data/spec/fixtures/follow_event.json +48 -0
- data/spec/fixtures/fork_event.json +139 -0
- data/spec/fixtures/gist_event.json +27 -0
- data/spec/fixtures/gollum_event.json +30 -0
- data/spec/fixtures/issue_comment_event.json +97 -0
- data/spec/fixtures/issues_event.json +70 -0
- data/spec/fixtures/member_event.json +39 -0
- data/spec/fixtures/public_event.json +16 -0
- data/spec/fixtures/pull_request_event.json +400 -0
- data/spec/fixtures/pull_request_review_comment_event.json +73 -0
- data/spec/fixtures/push_event.json +35 -0
- data/spec/fixtures/team_add_event.json +51 -0
- data/spec/fixtures/watch_event.json +23 -0
- data/spec/helper.rb +79 -0
- data/spec/octospy/extensions/string_spec.rb +84 -0
- data/spec/octospy/parser/download_spec.rb +9 -0
- data/spec/octospy/parser/gist_spec.rb +17 -0
- data/spec/octospy/parser/issue_spec.rb +33 -0
- data/spec/octospy/parser/organization_spec.rb +33 -0
- data/spec/octospy/parser/pull_request_spec.rb +33 -0
- data/spec/octospy/parser/repository_spec.rb +101 -0
- data/spec/octospy/parser/user_spec.rb +44 -0
- data/spec/octospy/parser/wiki_spec.rb +17 -0
- data/spec/octospy/parser_spec.rb +63 -0
- data/spec/octospy/shortener_spec.rb +46 -0
- data/spec/support/shared_context.rb +60 -0
- metadata +345 -0
data/spec/helper.rb
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'simplecov'
|
4
|
+
require 'coveralls'
|
5
|
+
require 'octospy'
|
6
|
+
require 'rspec'
|
7
|
+
require 'json'
|
8
|
+
require 'hashie'
|
9
|
+
require 'awesome_print'
|
10
|
+
require 'webmock/rspec'
|
11
|
+
require 'vcr'
|
12
|
+
|
13
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
14
|
+
SimpleCov::Formatter::HTMLFormatter,
|
15
|
+
Coveralls::SimpleCov::Formatter
|
16
|
+
]
|
17
|
+
SimpleCov.start
|
18
|
+
|
19
|
+
WebMock.disable_net_connect!(allow: 'coveralls.io')
|
20
|
+
RSpec.configure { |c| c.include WebMock::API }
|
21
|
+
|
22
|
+
VCR.configure do |c|
|
23
|
+
c.cassette_library_dir = 'spec/cassettes'
|
24
|
+
c.hook_into :webmock
|
25
|
+
end
|
26
|
+
|
27
|
+
class String
|
28
|
+
def strip_heredoc
|
29
|
+
indent = scan(/^[ \t]*(?=\S)/).min.size || 0
|
30
|
+
gsub(/^[ \t]{#{indent}}/, '')
|
31
|
+
end
|
32
|
+
|
33
|
+
def no_lf
|
34
|
+
gsub(/\n|\r\n/, ' ')
|
35
|
+
end
|
36
|
+
|
37
|
+
def pretty_heredoc
|
38
|
+
strip_heredoc.no_lf.strip
|
39
|
+
end
|
40
|
+
|
41
|
+
def escaping
|
42
|
+
gsub(/https?:\/\//, '').gsub(/\/|\./, '_')
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def fixture_path
|
47
|
+
File.expand_path('../fixtures', __FILE__)
|
48
|
+
end
|
49
|
+
|
50
|
+
def fixture(file)
|
51
|
+
File.read(fixture_path + '/' + file)
|
52
|
+
end
|
53
|
+
|
54
|
+
def decode(file)
|
55
|
+
JSON.parse(fixture file)
|
56
|
+
end
|
57
|
+
|
58
|
+
def json_response(file)
|
59
|
+
{
|
60
|
+
body: fixture(file),
|
61
|
+
headers: { content_type: 'application/json; charset=utf-8' }
|
62
|
+
}
|
63
|
+
end
|
64
|
+
|
65
|
+
def method_missing(method, *args, &block)
|
66
|
+
if method =~ /^a_(get|post|put|delete)$/
|
67
|
+
a_request(Regexp.last_match[1].to_sym, *args, &block)
|
68
|
+
elsif method =~ /^stub_(get|post|put|delete|head|patch)$/
|
69
|
+
stub_request(Regexp.last_match[1].to_sym, *args, &block)
|
70
|
+
else
|
71
|
+
super
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def support_path
|
76
|
+
File.expand_path('../support', __FILE__)
|
77
|
+
end
|
78
|
+
|
79
|
+
Dir["#{support_path}/**/*.rb"].each { |f| require f }
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Octospy::Extensions::String do
|
4
|
+
describe '#underscore' do
|
5
|
+
it { expect('FooBar'.underscore).to eq 'foo_bar' }
|
6
|
+
it { expect('fooBar'.underscore).to eq 'foo_bar' }
|
7
|
+
it { expect('fooBaR'.underscore).to eq 'foo_ba_r' }
|
8
|
+
it { expect('foo-bar'.underscore).to eq 'foo_bar' }
|
9
|
+
it { expect('foo/bar'.underscore).to eq 'foo/bar' }
|
10
|
+
it { expect('Foo::Bar'.underscore).to eq 'foo/bar' }
|
11
|
+
end
|
12
|
+
|
13
|
+
describe '#split_by_linefeed_except_blankline' do
|
14
|
+
subject { sentence.split_by_linefeed_except_blankline }
|
15
|
+
|
16
|
+
context 'when include line feed' do
|
17
|
+
let(:sentence) {
|
18
|
+
<<-RUBY.strip_heredoc
|
19
|
+
That lucid breeze in Ihatov,
|
20
|
+
Blue sky that has coolness at the bottom even in summer,
|
21
|
+
Morio which has been decorated with beautiful forest,
|
22
|
+
grass wave shines garishly in suburb.
|
23
|
+
RUBY
|
24
|
+
}
|
25
|
+
|
26
|
+
it { expect(subject).to be_instance_of Array }
|
27
|
+
it { expect(subject).to have(4).items }
|
28
|
+
it { expect(subject[1]).to include 'Blue sky' }
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'when not include line feed' do
|
32
|
+
let(:sentence) { 'hi, hello world.' }
|
33
|
+
|
34
|
+
it { expect(subject).to be_instance_of Array }
|
35
|
+
it { expect(subject).to have(1).items }
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'have alias_method' do
|
39
|
+
expect(''.respond_to? :split_lfbl).to be_true
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe '#colorize_for_irc' do
|
44
|
+
let(:word) { 'hello world' }
|
45
|
+
|
46
|
+
it 'call StringIrc#new' do
|
47
|
+
expect(StringIrc).to receive(:new).with(word).once.and_call_original
|
48
|
+
expect(word.colorize_for_irc).to be_instance_of StringIrc
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe '#shorten_url' do
|
53
|
+
context 'when it is in the url of github' do
|
54
|
+
let(:url) { 'https://github.com/linyows/octospy' }
|
55
|
+
let(:result) { 'http://git.io/aaaaa' }
|
56
|
+
|
57
|
+
it 'call Octospy::Shortener.shorten_by_github' do
|
58
|
+
expect(Octospy::Shortener).to receive(:shorten_by_github).and_return result
|
59
|
+
expect(url.shorten_url).to eq result
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'when it is not in the url of github' do
|
64
|
+
let(:url) { 'http://www.google.com/search?q=octospy' }
|
65
|
+
let(:result) { 'http://goo.gl/aaaaa' }
|
66
|
+
|
67
|
+
it 'call Octospy::Shortener.shorten_by_google' do
|
68
|
+
expect(Octospy::Shortener).to receive(:shorten_by_google).and_return result
|
69
|
+
expect(url.shorten_url).to eq result
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'when it is not in the url' do
|
74
|
+
let(:url) { 'hello world' }
|
75
|
+
let(:result) { url }
|
76
|
+
|
77
|
+
it 'not call Octospy::Shortener' do
|
78
|
+
expect(Octospy::Shortener).to_not receive(:shorten_by_github)
|
79
|
+
expect(Octospy::Shortener).to_not receive(:shorten_by_google)
|
80
|
+
expect(url.shorten_url).to eq result
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Octospy::Parser do
|
4
|
+
include_context :parser_params
|
5
|
+
|
6
|
+
describe '#parse_gist_event' do
|
7
|
+
let(:event_name) { 'gist_event' }
|
8
|
+
before { parser.instance_variable_set(:@event, event) }
|
9
|
+
|
10
|
+
subject { parser.parse_gist_event }
|
11
|
+
|
12
|
+
it { expect(subject[:status]).to eq 'created gist' }
|
13
|
+
it { expect(subject[:title]).to eq 'testing activegist' }
|
14
|
+
it { expect(subject[:body]).to be_nil }
|
15
|
+
it { expect(subject[:link]).to eq 'https://gist.github.com/5993603' }
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Octospy::Parser do
|
4
|
+
include_context :parser_params
|
5
|
+
|
6
|
+
describe '#parse_issues_event' do
|
7
|
+
let(:event_name) { 'issues_event' }
|
8
|
+
before { parser.instance_variable_set(:@event, event) }
|
9
|
+
|
10
|
+
subject { parser.parse_issues_event }
|
11
|
+
|
12
|
+
it { expect(subject[:status]).to eq 'opened issue #430' }
|
13
|
+
it { expect(subject[:title]).to eq 'mismatching hashes for css' }
|
14
|
+
it { expect(subject[:body]).to be_an_instance_of Array }
|
15
|
+
it { expect(subject[:body]).to include 'Server: nginx/1.4.1' }
|
16
|
+
it { expect(subject[:body]).to have(40).items }
|
17
|
+
it { expect(subject[:link]).to eq 'https://github.com/pagespeed/ngx_pagespeed/issues/430' }
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#parse_issue_comment_event' do
|
21
|
+
let(:event_name) { 'issue_comment_event' }
|
22
|
+
before { parser.instance_variable_set(:@event, event) }
|
23
|
+
|
24
|
+
subject { parser.parse_issue_comment_event }
|
25
|
+
|
26
|
+
it { expect(subject[:status]).to eq 'commented on issue #582' }
|
27
|
+
it { expect(subject[:title]).to eq 'Remove `engines` from package.json.' }
|
28
|
+
it { expect(subject[:body]).to be_an_instance_of Array }
|
29
|
+
it { expect(subject[:body][0]).to include 'anything?' }
|
30
|
+
it { expect(subject[:body]).to have(1).items }
|
31
|
+
it { expect(subject[:link]).to eq 'https://github.com/bower/bower/issues/582#issuecomment-20416296' }
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Octospy::Parser do
|
4
|
+
include_context :parser_params
|
5
|
+
|
6
|
+
describe '#parse_team_add_event' do
|
7
|
+
let(:event_name) { 'team_add_event' }
|
8
|
+
before { parser.instance_variable_set(:@event, event) }
|
9
|
+
|
10
|
+
subject { parser.parse_team_add_event }
|
11
|
+
|
12
|
+
it { expect(subject[:status]).to eq 'add team' }
|
13
|
+
it { expect(subject[:title]).to eq 'dev' }
|
14
|
+
it { expect(subject[:body]).to be_nil }
|
15
|
+
it { expect(subject[:link]).to be_nil }
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '#parse_member_event' do
|
19
|
+
let(:event_name) { 'member_event' }
|
20
|
+
|
21
|
+
before do
|
22
|
+
client.stub(:web_endpoint).and_return Octokit.web_endpoint
|
23
|
+
parser.instance_variable_set(:@event, event)
|
24
|
+
end
|
25
|
+
|
26
|
+
subject { parser.parse_member_event }
|
27
|
+
|
28
|
+
it { expect(subject[:status]).to eq 'added member' }
|
29
|
+
it { expect(subject[:title]).to eq 'jamiesarahg' }
|
30
|
+
it { expect(subject[:body]).to be_nil }
|
31
|
+
it { expect(subject[:link]).to eq 'https://github.com//jamiesarahg' }
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Octospy::Parser do
|
4
|
+
include_context :parser_params
|
5
|
+
|
6
|
+
describe '#parse_pull_request_event' do
|
7
|
+
let(:event_name) { 'pull_request_event' }
|
8
|
+
before { parser.instance_variable_set(:@event, event) }
|
9
|
+
|
10
|
+
subject { parser.parse_pull_request_event }
|
11
|
+
|
12
|
+
it { expect(subject[:status]).to eq 'closed pull request #11363' }
|
13
|
+
it { expect(subject[:title]).to eq 'Fix 2 grammatical errors/typos in Active Record Basics guide.' }
|
14
|
+
it { expect(subject[:body]).to eq [] }
|
15
|
+
it { expect(subject[:link]).to eq 'https://github.com/rails/rails/pull/11363' }
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '#parse_pull_request_review_comment_event' do
|
19
|
+
let(:pull) { double(Octokit::Client, title: 'Mocking title') }
|
20
|
+
let(:client) { double(Octokit::Client, pull: pull) }
|
21
|
+
let(:event_name) { 'pull_request_review_comment_event' }
|
22
|
+
before { parser.instance_variable_set(:@event, event) }
|
23
|
+
|
24
|
+
subject { parser.parse_pull_request_review_comment_event }
|
25
|
+
|
26
|
+
it { expect(subject[:status]).to eq 'commented on pull request' }
|
27
|
+
it { expect(subject[:title]).to eq 'Mocking title: packages/ember-handlebars/lib/helpers/collection.js' }
|
28
|
+
it { expect(subject[:body]).to be_an_instance_of Array }
|
29
|
+
it { expect(subject[:body][0]).to include 'Of course.' }
|
30
|
+
it { expect(subject[:body]).to have(1).items }
|
31
|
+
it { expect(subject[:link]).to eq 'https://github.com/emberjs/ember.js/pull/2930#discussion_r5064430' }
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Octospy::Parser do
|
4
|
+
include_context :parser_params
|
5
|
+
|
6
|
+
describe '#parse_push_event' do
|
7
|
+
let(:shorten_url) { 'http://git.io/Qq_ufw' }
|
8
|
+
let(:client) {
|
9
|
+
client = double(Octokit::Client)
|
10
|
+
client.stub_chain(:commit, :author, :login).and_return('mockingname')
|
11
|
+
client.stub(:web_endpoint).and_return(Octokit.web_endpoint)
|
12
|
+
String.any_instance.stub(:shorten).and_return shorten_url
|
13
|
+
client
|
14
|
+
}
|
15
|
+
let(:event_name) { 'push_event' }
|
16
|
+
|
17
|
+
before { parser.instance_variable_set(:@event, event) }
|
18
|
+
|
19
|
+
subject { parser.parse_push_event }
|
20
|
+
|
21
|
+
it { expect(subject[:status]).to eq 'pushed to master' }
|
22
|
+
it { expect(subject[:title]).to be_nil }
|
23
|
+
it { expect(subject[:body]).to be_an_instance_of Array }
|
24
|
+
it {
|
25
|
+
expect(subject[:body][0]).to eq <<-BODY.pretty_heredoc
|
26
|
+
\u000315mockingname\u000F:
|
27
|
+
update send and connect - \u000302#{shorten_url}\u000F
|
28
|
+
BODY
|
29
|
+
}
|
30
|
+
it { expect(subject[:body]).to have(2).items }
|
31
|
+
it { expect(subject[:link]).to eq 'https://github.com//visionmedia/express' }
|
32
|
+
end
|
33
|
+
|
34
|
+
describe '#parse_create_event' do
|
35
|
+
let(:client) { double(Octokit::Client, web_endpoint: Octokit.web_endpoint) }
|
36
|
+
let(:event_name) { 'create_event' }
|
37
|
+
before { parser.instance_variable_set(:@event, event) }
|
38
|
+
|
39
|
+
subject { parser.parse_create_event }
|
40
|
+
|
41
|
+
it { expect(subject[:status]).to eq 'created tag:3.3.3' }
|
42
|
+
it {
|
43
|
+
expect(subject[:title]).to eq <<-TITLE.pretty_heredoc
|
44
|
+
Sinatra inspired web development framework for node.js -- insanely fast,
|
45
|
+
flexible, and simple
|
46
|
+
TITLE
|
47
|
+
}
|
48
|
+
it { expect(subject[:body]).to be_nil }
|
49
|
+
it { expect(subject[:link]).to eq 'https://github.com//visionmedia/express' }
|
50
|
+
end
|
51
|
+
|
52
|
+
describe '#parse_commit_comment_event' do
|
53
|
+
let(:event_name) { 'commit_comment_event' }
|
54
|
+
before { parser.instance_variable_set(:@event, event) }
|
55
|
+
|
56
|
+
subject { parser.parse_commit_comment_event }
|
57
|
+
|
58
|
+
it { expect(subject[:status]).to eq 'commented on commit' }
|
59
|
+
it { expect(subject[:title]).to eq '' }
|
60
|
+
it { expect(subject[:body]).to be_an_instance_of Array }
|
61
|
+
it { expect(subject[:body][0]).to include 'AFAIK' }
|
62
|
+
it { expect(subject[:body]).to have(1).items }
|
63
|
+
it { expect(subject[:link]).to eq 'https://github.com/boxen/our-boxen/commit/08009e9b0718869d269d9b1c48383e6e145950db#commitcomment-3583654' }
|
64
|
+
end
|
65
|
+
|
66
|
+
describe '#parse_delete_event' do
|
67
|
+
let(:client) { double(Octokit::Client, web_endpoint: Octokit.web_endpoint) }
|
68
|
+
let(:event_name) { 'delete_event' }
|
69
|
+
before { parser.instance_variable_set(:@event, event) }
|
70
|
+
|
71
|
+
subject { parser.parse_delete_event }
|
72
|
+
|
73
|
+
it { expect(subject[:status]).to eq 'deleted branch:jefftk-fix-beacon' }
|
74
|
+
it { expect(subject[:title]).to be_nil }
|
75
|
+
it { expect(subject[:body]).to be_nil }
|
76
|
+
it { expect(subject[:link]).to eq 'https://github.com//pagespeed/ngx_pagespeed' }
|
77
|
+
end
|
78
|
+
|
79
|
+
describe '#parse_fork_event' do
|
80
|
+
end
|
81
|
+
|
82
|
+
describe '#parse_fork_apply_event' do
|
83
|
+
it { expect(parser.parse_fork_apply_event).to eq({}) }
|
84
|
+
end
|
85
|
+
|
86
|
+
describe '#parse_public_event' do
|
87
|
+
let(:event_name) { 'public_event' }
|
88
|
+
|
89
|
+
before do
|
90
|
+
client.stub(:web_endpoint).and_return Octokit.web_endpoint
|
91
|
+
parser.instance_variable_set(:@event, event)
|
92
|
+
end
|
93
|
+
|
94
|
+
subject { parser.parse_public_event }
|
95
|
+
|
96
|
+
it { expect(subject[:status]).to eq 'published JustinBeaudry/brudniakbook' }
|
97
|
+
it { expect(subject[:title]).to be_nil }
|
98
|
+
it { expect(subject[:body]).to be_nil }
|
99
|
+
it { expect(subject[:link]).to eq 'https://github.com//JustinBeaudry/brudniakbook' }
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Octospy::Parser do
|
4
|
+
include_context :parser_params
|
5
|
+
|
6
|
+
describe '#parse_watch_event' do
|
7
|
+
let(:client) { double(Octokit::Client, web_endpoint: Octokit.web_endpoint) }
|
8
|
+
let(:event_name) { 'watch_event' }
|
9
|
+
before { parser.instance_variable_set(:@event, event) }
|
10
|
+
|
11
|
+
subject { parser.parse_watch_event }
|
12
|
+
|
13
|
+
it { expect(subject[:status]).to eq 'started repository' }
|
14
|
+
it { expect(subject[:title]).to eq 'intridea/hashie' }
|
15
|
+
it { expect(subject[:body]).to be_nil }
|
16
|
+
it { expect(subject[:link]).to eq 'https://github.com//intridea/hashie' }
|
17
|
+
it { expect(subject[:repository]).to be_nil }
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#parse_follow_event' do
|
21
|
+
let(:client) { double(Octokit::Client, web_endpoint: Octokit.web_endpoint) }
|
22
|
+
let(:event_name) { 'follow_event' }
|
23
|
+
before { parser.instance_variable_set(:@event, event) }
|
24
|
+
|
25
|
+
subject { parser.parse_follow_event }
|
26
|
+
|
27
|
+
it { expect(subject[:status]).to eq 'followed' }
|
28
|
+
it { expect(subject[:title]).to eq 'Watson1978 (Watson)' }
|
29
|
+
it {
|
30
|
+
expect(subject[:body]).to eq <<-BODY.pretty_heredoc
|
31
|
+
\u000315repos\u000F: 66,
|
32
|
+
\u000315followers\u000F: 101,
|
33
|
+
\u000315following\u000F: 15,
|
34
|
+
\u000315location\u000F: Japan,
|
35
|
+
\u000315company\u000F: -,
|
36
|
+
\u000315bio\u000F: -,
|
37
|
+
\u000315blog\u000F: http://watson1978.github.io/
|
38
|
+
BODY
|
39
|
+
}
|
40
|
+
it { expect(subject[:link]).to eq 'https://github.com//Watson1978' }
|
41
|
+
it { expect(subject[:repository]).to be_nil }
|
42
|
+
it { expect(subject[:notice]).to be_true }
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Octospy::Parser do
|
4
|
+
include_context :parser_params
|
5
|
+
|
6
|
+
describe '#parse_gollum_event' do
|
7
|
+
let(:event_name) { 'gollum_event' }
|
8
|
+
before { parser.instance_variable_set(:@event, event) }
|
9
|
+
|
10
|
+
subject { parser.parse_gollum_event }
|
11
|
+
|
12
|
+
it { expect(subject[:status]).to eq 'edited the component/component wiki' }
|
13
|
+
it { expect(subject[:title]).to eq 'Components' }
|
14
|
+
it { expect(subject[:body]).to be_nil }
|
15
|
+
it { expect(subject[:link]).to eq 'https://github.com/component/component/wiki/Components/_compare/3df147%5E...3df147' }
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Octospy::Parser do
|
4
|
+
include_context :parser_params
|
5
|
+
|
6
|
+
describe '#initialize' do
|
7
|
+
it { expect(parser).to be_an_instance_of Octospy::Parser }
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '#default_params' do
|
11
|
+
it { expect(parser.default_params).to eq default_params }
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#parse' do
|
15
|
+
it {
|
16
|
+
expect(parser).to receive(:parsing_method).once.and_return(parsing_method)
|
17
|
+
expect(parser).to receive(parsing_method).once.and_return(parsed_params)
|
18
|
+
expect(parser).to receive(:build).once.with(merged_params).and_return(built_params)
|
19
|
+
expect(parser.parse event).to eq built_params
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '#build' do
|
24
|
+
it {
|
25
|
+
expect_any_instance_of(String).to receive(:shorten).once.and_return('http://git.io/A0ARbg')
|
26
|
+
expect(parser.build merged_params).to eq built_params
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#parsing_method' do
|
31
|
+
let(:event) { double(Octokit::Client, type: 'FooBarBaz') }
|
32
|
+
before { parser.instance_variable_set(:@event, event) }
|
33
|
+
it { expect(parser.parsing_method).to eq :parse_foo_bar_baz }
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '#behavior_color' do
|
37
|
+
{
|
38
|
+
pink: 'created',
|
39
|
+
yellow: 'commented',
|
40
|
+
lime: 'pushed',
|
41
|
+
orange: 'forked',
|
42
|
+
brown: 'closed',
|
43
|
+
red: 'deleted',
|
44
|
+
green: 'edited',
|
45
|
+
blue: 'published',
|
46
|
+
rainbow: 'started',
|
47
|
+
seven_eleven: 'followed',
|
48
|
+
aqua: 'foobar'
|
49
|
+
}.each { |color, word|
|
50
|
+
it { expect(parser.behavior_color word).to eq color }
|
51
|
+
}
|
52
|
+
end
|
53
|
+
|
54
|
+
describe '#colorize_to' do
|
55
|
+
let(:sentence) { 'created issue' }
|
56
|
+
|
57
|
+
it {
|
58
|
+
expect_any_instance_of(StringIrc).to receive(:pink).
|
59
|
+
once.with(no_args).and_call_original
|
60
|
+
expect(parser.colorize_to sentence).to eq "\u000313#{sentence}\u000F"
|
61
|
+
}
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Octospy::Shortener do
|
4
|
+
let(:url) { 'https://github.com/linyows/octospy' }
|
5
|
+
|
6
|
+
describe '.shorten_by_github' do
|
7
|
+
subject {
|
8
|
+
VCR.use_cassette "git.io/#{url.escaping}" do
|
9
|
+
described_class.shorten_by_github url
|
10
|
+
end
|
11
|
+
}
|
12
|
+
|
13
|
+
it { expect(subject).to be_an_instance_of String }
|
14
|
+
it { expect(subject).to eq 'http://git.io/Pd8gXg' }
|
15
|
+
|
16
|
+
context 'when it is not in the url of github' do
|
17
|
+
let(:url) { 'https://www.google.co.jp/search?q=octospy' }
|
18
|
+
it { expect(subject).to eq url }
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'when raise error' do
|
22
|
+
it 'return url of argument' do
|
23
|
+
expect(Faraday).to receive(:new).and_raise Faraday::Error
|
24
|
+
expect(described_class.shorten_by_github url).to eq url
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '.shorten_by_google' do
|
30
|
+
subject {
|
31
|
+
VCR.use_cassette "googleapis.com/urlshortener/#{url.escaping}" do
|
32
|
+
described_class.shorten_by_google url
|
33
|
+
end
|
34
|
+
}
|
35
|
+
|
36
|
+
it { expect(subject).to be_an_instance_of String }
|
37
|
+
it { expect(subject).to eq 'http://goo.gl/8vrLj' }
|
38
|
+
|
39
|
+
context 'when raise error' do
|
40
|
+
it 'return url of argument' do
|
41
|
+
expect(Faraday).to receive(:new).and_raise Faraday::Error
|
42
|
+
expect(described_class.shorten_by_google url).to eq url
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
shared_context :parser_params do
|
2
|
+
let(:client) { double Octokit::Client }
|
3
|
+
let(:parser) { described_class.new client }
|
4
|
+
let(:event_name) { 'issue_comment_event' }
|
5
|
+
let(:parsing_method) { :"parse_#{event_name}" }
|
6
|
+
let(:file) { "#{event_name}.json" }
|
7
|
+
let(:event) { Hashie::Mash.new.deep_merge(decode file) }
|
8
|
+
|
9
|
+
let(:default_params) do
|
10
|
+
{
|
11
|
+
notice_body: false,
|
12
|
+
none_repository: false,
|
13
|
+
nick: '',
|
14
|
+
repository: '',
|
15
|
+
status: '',
|
16
|
+
link: '',
|
17
|
+
title: '',
|
18
|
+
body: []
|
19
|
+
}
|
20
|
+
end
|
21
|
+
|
22
|
+
let(:parsed_params) do
|
23
|
+
{
|
24
|
+
status: 'commented on issue #582',
|
25
|
+
title: 'Remove `engines` from package.json.',
|
26
|
+
body: [
|
27
|
+
<<-BODY.pretty_heredoc
|
28
|
+
Has is ever done anything? It still has a purpose though;
|
29
|
+
To warn users that they're using antdated version.
|
30
|
+
BODY
|
31
|
+
],
|
32
|
+
link: 'https://github.com/bower/bower/issues/582#issuecomment-20416296'
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
let(:merged_params) do
|
37
|
+
default_params.merge(parsed_params).merge(
|
38
|
+
nick: 'sindresorhus',
|
39
|
+
repository: 'bower/bower'
|
40
|
+
)
|
41
|
+
end
|
42
|
+
|
43
|
+
let(:built_params) do
|
44
|
+
[
|
45
|
+
{
|
46
|
+
nick: merged_params[:nick],
|
47
|
+
type: :notice,
|
48
|
+
message: <<-MSG.pretty_heredoc
|
49
|
+
(bower/bower) \u0002sindresorhus\u000F \u000308commented on issue #582\u000F
|
50
|
+
Remove `engines` from package.json. - \u000302http://git.io/A0ARbg\u000F
|
51
|
+
MSG
|
52
|
+
},
|
53
|
+
{
|
54
|
+
nick: merged_params[:nick],
|
55
|
+
type: :private,
|
56
|
+
message: parsed_params[:body]
|
57
|
+
}
|
58
|
+
]
|
59
|
+
end
|
60
|
+
end
|