hubstats 0.4.4 → 0.5.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 +5 -13
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.markdown +5 -0
- data/README.md +64 -22
- data/app/assets/javascripts/hubstats/pull_requests.js +5 -0
- data/app/assets/javascripts/hubstats/select2.js +46 -3
- data/app/assets/javascripts/hubstats/users.js +8 -0
- data/app/assets/stylesheets/hubstats/application.css +5 -1
- data/app/controllers/hubstats/pull_requests_controller.rb +2 -3
- data/app/controllers/hubstats/repos_controller.rb +7 -12
- data/app/controllers/hubstats/teams_controller.rb +62 -0
- data/app/controllers/hubstats/users_controller.rb +9 -8
- data/app/models/hubstats/comment.rb +1 -0
- data/app/models/hubstats/pull_request.rb +40 -8
- data/app/models/hubstats/repo.rb +1 -1
- data/app/models/hubstats/team.rb +159 -0
- data/app/models/hubstats/user.rb +10 -1
- data/app/views/hubstats/deploys/show.html.erb +1 -4
- data/app/views/hubstats/partials/_comment-condensed.html.erb +1 -0
- data/app/views/hubstats/partials/_comment.html.erb +1 -0
- data/app/views/hubstats/partials/_footer.html.erb +3 -0
- data/app/views/hubstats/partials/_header.html.erb +5 -3
- data/app/views/hubstats/partials/_team.html.erb +40 -0
- data/app/views/hubstats/partials/_user-condensed.html.erb +6 -5
- data/app/views/hubstats/partials/_user.html.erb +2 -1
- data/app/views/hubstats/pull_requests/index.html.erb +4 -0
- data/app/views/hubstats/repos/dashboard.html.erb +0 -1
- data/app/views/hubstats/repos/show.html.erb +1 -1
- data/app/views/hubstats/tables/_comments-condensed.html.erb +1 -1
- data/app/views/hubstats/tables/_comments.html.erb +1 -1
- data/app/views/hubstats/tables/_deploys.html.erb +1 -1
- data/app/views/hubstats/tables/_grouped_deploys.html.erb +1 -1
- data/app/views/hubstats/tables/_grouped_pulls.html.erb +1 -1
- data/app/views/hubstats/tables/_pulls-condensed.html.erb +1 -1
- data/app/views/hubstats/tables/_pulls.html.erb +1 -1
- data/app/views/hubstats/tables/_repos-condensed.html.erb +1 -1
- data/app/views/hubstats/tables/_repos.html.erb +2 -2
- data/app/views/hubstats/tables/_teams.html.erb +28 -0
- data/app/views/hubstats/tables/_users-condensed.html.erb +1 -1
- data/app/views/hubstats/tables/_users.html.erb +2 -2
- data/app/views/hubstats/teams/index.html.erb +10 -0
- data/app/views/hubstats/teams/show.html.erb +28 -0
- data/app/views/hubstats/users/show.html.erb +2 -2
- data/config/routes.rb +4 -3
- data/db/migrate/20150706204910_create_hubstats_teams.rb +8 -0
- data/db/migrate/20150706205049_create_hubstats_teams_users.rb +8 -0
- data/db/migrate/20150713185013_add_team_id_to_prs.rb +5 -0
- data/hubstats.gemspec +2 -1
- data/lib/generators/hubstats/octokit.example.yml +3 -1
- data/lib/hubstats/events_handler.rb +20 -0
- data/lib/hubstats/github_api.rb +71 -15
- data/lib/hubstats/version.rb +1 -1
- data/lib/tasks/hubstats_tasks.rake +19 -0
- data/lib/tasks/populate_task.rake +35 -2
- data/spec/controllers/hubstats/repos_controller_spec.rb +1 -0
- data/spec/controllers/hubstats/teams_controller_spec.rb +39 -0
- data/spec/controllers/hubstats/users_controller_spec.rb +2 -0
- data/spec/factories/pull_requests.rb +1 -1
- data/spec/factories/teams.rb +24 -0
- data/spec/factories/users.rb +0 -1
- data/spec/lib/hubstats/events_handler_spec.rb +37 -7
- data/spec/lib/hubstats/github_api_spec.rb +55 -2
- data/spec/lib/hubstats_spec.rb +7 -1
- data/spec/models/hubstats/pull_request_spec.rb +34 -0
- data/spec/models/hubstats/team_spec.rb +23 -0
- data/spec/models/hubstats/user_spec.rb +26 -0
- data/test/dummy/config/initializers/octokit_patch.rb +3 -0
- data/test/dummy/db/schema.rb +51 -40
- metadata +62 -29
data/lib/hubstats/version.rb
CHANGED
@@ -9,6 +9,7 @@ namespace :hubstats do
|
|
9
9
|
Rake::Task['db:migrate'].invoke
|
10
10
|
puts "Pulling data from Github. This may take a while..."
|
11
11
|
Rake::Task['hubstats:populate:setup_repos'].invoke
|
12
|
+
Rake::Task['hubstats:populate:setup_teams'].invoke
|
12
13
|
end
|
13
14
|
|
14
15
|
desc "Drops the database, then runs rake hubstats:setup"
|
@@ -30,4 +31,22 @@ namespace :hubstats do
|
|
30
31
|
Rake::Task['db:seed'].invoke
|
31
32
|
end
|
32
33
|
|
34
|
+
desc "Updates the teams for past pull requests"
|
35
|
+
task :update_teams_in_pulls => :environment do
|
36
|
+
puts "Updating teams for past pull requests"
|
37
|
+
Rake::Task['hubstats:populate:update_teams_in_pulls'].invoke
|
38
|
+
end
|
39
|
+
|
40
|
+
desc "Updates the teams"
|
41
|
+
task :update_teams => :environment do
|
42
|
+
puts "Updating teams"
|
43
|
+
Rake::Task['hubstats:populate:update_teams'].invoke
|
44
|
+
end
|
45
|
+
|
46
|
+
desc "Creates webhook from github for organization"
|
47
|
+
task :make_org_webhook => :environment do
|
48
|
+
puts "Making a webhook for an organization in octokit.yml"
|
49
|
+
Rake::Task['hubstats:populate:setup_teams'].invoke
|
50
|
+
end
|
51
|
+
|
33
52
|
end
|
@@ -7,8 +7,10 @@ namespace :hubstats do
|
|
7
7
|
Hubstats::GithubAPI.get_repos.each do |repo|
|
8
8
|
Rake::Task["hubstats:populate:setup_repo"].execute({repo: repo})
|
9
9
|
end
|
10
|
-
puts "Finished with initial population,
|
10
|
+
puts "Finished with initial population, grabbing extra info about pull requests"
|
11
11
|
Rake::Task["hubstats:populate:update_pulls"].execute
|
12
|
+
puts "Finished grabbing info about pull requests, populating teams"
|
13
|
+
Rake::Task["hubstats:populate:teams"].execute
|
12
14
|
end
|
13
15
|
|
14
16
|
desc "Updates which repos hubstats tracks"
|
@@ -20,6 +22,27 @@ namespace :hubstats do
|
|
20
22
|
end
|
21
23
|
puts "Finished with initial updating, grabbing extra info about pull requests"
|
22
24
|
Rake::Task["hubstats:populate:update_pulls"].execute
|
25
|
+
puts "Finished grabbing info about pull requests, populating teams"
|
26
|
+
Rake::Task["hubstats:populate:teams"].execute
|
27
|
+
end
|
28
|
+
|
29
|
+
desc "Updates teams for past pull requests"
|
30
|
+
task :update_teams_in_pulls => :environment do
|
31
|
+
Rake::Task["hubstats:populate:update_teams_in_prs"].execute
|
32
|
+
end
|
33
|
+
|
34
|
+
desc "Updates the teams"
|
35
|
+
task :update_teams => :environment do
|
36
|
+
Rake::Task['hubstats:populate:teams'].execute
|
37
|
+
end
|
38
|
+
|
39
|
+
desc "Creates the webhook for the current org"
|
40
|
+
task :setup_teams => :environment do
|
41
|
+
Rake::Task['hubstats:populate:create_org_hook'].execute
|
42
|
+
end
|
43
|
+
|
44
|
+
task :create_org_hook => :environment do
|
45
|
+
Hubstats::GithubAPI.create_org_hook(config.github_config["org_name"])
|
23
46
|
end
|
24
47
|
|
25
48
|
desc "Pulls in all information for an indivdual repo"
|
@@ -31,7 +54,7 @@ namespace :hubstats do
|
|
31
54
|
Rake::Task["hubstats:populate:pulls"].execute({repo: repo})
|
32
55
|
Rake::Task["hubstats:populate:comments"].execute({repo: repo})
|
33
56
|
Rake::Task["hubstats:populate:labels"].execute({repo: repo})
|
34
|
-
end
|
57
|
+
end
|
35
58
|
|
36
59
|
desc "Pull members from Github saves in database"
|
37
60
|
task :users, [:repo] => :environment do |t, args|
|
@@ -80,6 +103,16 @@ namespace :hubstats do
|
|
80
103
|
end
|
81
104
|
end
|
82
105
|
|
106
|
+
desc "indivdually gets and updates all of the teams"
|
107
|
+
task :teams => :environment do
|
108
|
+
Hubstats::GithubAPI.update_teams
|
109
|
+
end
|
110
|
+
|
111
|
+
desc "updates the teams for all pull requests from past 365 days"
|
112
|
+
task :update_teams_in_prs => :environment do
|
113
|
+
Hubstats::PullRequest.update_teams_in_pulls(365)
|
114
|
+
end
|
115
|
+
|
83
116
|
desc "Updates WebHooks for all repos"
|
84
117
|
task :update_hooks, [:old_endpoint] => :environment do |t, args|
|
85
118
|
Hubstats::Repo.all.each do |repo|
|
@@ -45,6 +45,7 @@ module Hubstats
|
|
45
45
|
expect(assigns(:repo).pull_requests).to contain_exactly(pull1, pull2)
|
46
46
|
expect(assigns(:repo).deploys).to contain_exactly(deploy1, deploy2)
|
47
47
|
expect(assigns(:repo).owner_id).to eq(user.id)
|
48
|
+
expect(response).to have_http_status(200)
|
48
49
|
end
|
49
50
|
end
|
50
51
|
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Hubstats
|
4
|
+
describe TeamsController, :type => :controller do
|
5
|
+
routes { Hubstats::Engine.routes }
|
6
|
+
|
7
|
+
describe "#index" do
|
8
|
+
it "should return all of the teams" do
|
9
|
+
team1 = create(:team, :name => "Team One", :hubstats => true)
|
10
|
+
team2 = create(:team, :name => "Team Two", :hubstats => false)
|
11
|
+
team3 = create(:team, :name => "Team Three", :hubstats => true)
|
12
|
+
team4 = create(:team, :name => "Team Four", :hubstats => true)
|
13
|
+
expect(Hubstats::Team).to receive_message_chain("with_id.custom_order.paginate").and_return([team1, team2, team3, team4])
|
14
|
+
allow(Hubstats).to receive_message_chain(:config, :github_config, :[]).with("ignore_users_list") { ["user"] }
|
15
|
+
get :index
|
16
|
+
expect(response).to have_http_status(200)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#show" do
|
21
|
+
it "should return the team and all of its users and pull requests" do
|
22
|
+
team = create(:team, :name => "Team Tests Passing", :hubstats => true, :id => 1)
|
23
|
+
user1 = create(:user, :id => 101010, :login => "examplePerson1")
|
24
|
+
user2 = create(:user, :id => 202020, :login => "examplePerson2")
|
25
|
+
team.users << user1
|
26
|
+
team.users << user2
|
27
|
+
pull1 = create(:pull_request, :user => user1, :id => 303030, :team => team)
|
28
|
+
pull2 = create(:pull_request, :user => user2, :id => 404040, :team => team, :repo => pull1.repo)
|
29
|
+
allow(Hubstats).to receive_message_chain(:config, :github_config, :[]).with("ignore_users_list") { ["user"] }
|
30
|
+
get :show, id: 1
|
31
|
+
expect(assigns(:team)).to eq(team)
|
32
|
+
expect(pull1.team_id).to eq(team.id)
|
33
|
+
expect(pull2.team_id).to eq(team.id)
|
34
|
+
expect(assigns(:team).users).to contain_exactly(user1, user2)
|
35
|
+
expect(response).to have_http_status(200)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -12,6 +12,7 @@ module Hubstats
|
|
12
12
|
user4 = create(:user, :id => 404040, :login => "examplePerson4")
|
13
13
|
expect(Hubstats::User).to receive_message_chain("with_id.custom_order.paginate").and_return([user2, user3, user1, user4])
|
14
14
|
get :index
|
15
|
+
expect(response).to have_http_status(200)
|
15
16
|
end
|
16
17
|
end
|
17
18
|
|
@@ -29,6 +30,7 @@ module Hubstats
|
|
29
30
|
expect(assigns(:user).pull_requests).to contain_exactly(pull1, pull2)
|
30
31
|
expect(assigns(:user).deploys).to contain_exactly(deploy1, deploy2)
|
31
32
|
expect(assigns(:user).comments).to contain_exactly(comment2, comment1)
|
33
|
+
expect(response).to have_http_status(200)
|
32
34
|
end
|
33
35
|
end
|
34
36
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# Generates fake team data we can use to test with
|
2
|
+
FactoryGirl.define do
|
3
|
+
factory :team, :class => Hubstats::Team do
|
4
|
+
name "Team One"
|
5
|
+
hubstats true
|
6
|
+
end
|
7
|
+
|
8
|
+
factory :team_hash, class:Hash do
|
9
|
+
association :user, factory: :user_hash, strategy: :build
|
10
|
+
id {Faker::Number.number(6).to_i}
|
11
|
+
name "Team One"
|
12
|
+
hubstats true
|
13
|
+
action "added"
|
14
|
+
initialize_with { attributes }
|
15
|
+
end
|
16
|
+
|
17
|
+
factory :team_payload_hash, class:Hash do
|
18
|
+
id {Faker::Number.number(6).to_i}
|
19
|
+
type "MembershipEvent"
|
20
|
+
association :user, factory: :user_hash, strategy: :build
|
21
|
+
association :team, factory: :team_hash, strategy: :build
|
22
|
+
initialize_with { attributes }
|
23
|
+
end
|
24
|
+
end
|
data/spec/factories/users.rb
CHANGED
@@ -10,7 +10,7 @@ module Hubstats
|
|
10
10
|
subject {Hubstats::EventsHandler.new()}
|
11
11
|
it 'should successfully route the event' do
|
12
12
|
expect(subject).to receive(:pull_processor)
|
13
|
-
subject.route(payload,payload[:type])
|
13
|
+
subject.route(payload, payload[:type])
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'should add labels to pull request' do
|
@@ -18,7 +18,7 @@ module Hubstats
|
|
18
18
|
allow(Repo).to receive(:where) {[repo,repo]}
|
19
19
|
allow(GithubAPI).to receive(:get_labels_for_pull) {['low','high']}
|
20
20
|
expect(pull).to receive(:add_labels).with(['low','high'])
|
21
|
-
subject.route(payload,payload[:type])
|
21
|
+
subject.route(payload, payload[:type])
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
@@ -27,22 +27,52 @@ module Hubstats
|
|
27
27
|
ehandler = EventsHandler.new()
|
28
28
|
payload = build(:comment_payload_hash)
|
29
29
|
expect(ehandler).to receive(:comment_processor)
|
30
|
-
|
31
|
-
ehandler.route(payload,payload[:type])
|
30
|
+
ehandler.route(payload, payload[:type])
|
32
31
|
end
|
33
32
|
|
34
33
|
it 'should successfully process the event' do
|
35
34
|
ehandler = Hubstats::EventsHandler.new()
|
36
35
|
payload = build(:comment_payload_hash)
|
37
36
|
expect(Hubstats::Comment).to receive(:create_or_update)
|
38
|
-
|
39
|
-
ehandler.route(payload,payload[:type])
|
37
|
+
ehandler.route(payload, payload[:type])
|
40
38
|
end
|
41
39
|
|
42
40
|
it 'should successfully creates_or_updates the event' do
|
43
41
|
ehandler = Hubstats::EventsHandler.new()
|
44
42
|
payload = build(:comment_payload_hash)
|
45
|
-
expect(ehandler.route(payload,payload[:type]).class).to eq(Hubstats::Comment)
|
43
|
+
expect(ehandler.route(payload, payload[:type]).class).to eq(Hubstats::Comment)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context "TeamEvent" do
|
48
|
+
it 'should successfully route the team' do
|
49
|
+
ehandler = EventsHandler.new()
|
50
|
+
payload = build(:team_payload_hash)
|
51
|
+
expect(ehandler).to receive(:team_processor)
|
52
|
+
ehandler.route(payload, payload[:type])
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'should successfully process the team' do
|
56
|
+
ehandler = Hubstats::EventsHandler.new()
|
57
|
+
payload = build(:team_payload_hash)
|
58
|
+
user = build(:user)
|
59
|
+
allow(Hubstats).to receive_message_chain(:config, :github_config, :[]).with("team_list") { ["Team One", "Team Two", "Team Three"] }
|
60
|
+
allow(Hubstats::User).to receive(:create_or_update).and_return(user)
|
61
|
+
expect(Hubstats::Team).to receive(:create_or_update)
|
62
|
+
expect(Hubstats::Team).to receive(:update_users_in_team)
|
63
|
+
ehandler.route(payload, payload[:type])
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'should successfully create_or_update the team' do
|
67
|
+
ehandler = Hubstats::EventsHandler.new()
|
68
|
+
payload = build(:team_payload_hash)
|
69
|
+
team = build(:team)
|
70
|
+
user = build(:user)
|
71
|
+
allow(Hubstats).to receive_message_chain(:config, :github_config, :[]).with("team_list") { ["Team One", "Team Two", "Team Three"] }
|
72
|
+
allow(Hubstats::User).to receive(:create_or_update).and_return(user)
|
73
|
+
expect(Hubstats::Team).to receive(:update_users_in_team)
|
74
|
+
expect(Hubstats::Team).to receive(:create_or_update).and_return(team)
|
75
|
+
ehandler.route(payload, payload[:type])
|
46
76
|
end
|
47
77
|
end
|
48
78
|
|
@@ -67,6 +67,38 @@ module Hubstats
|
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
70
|
+
context '.update_teams' do
|
71
|
+
subject {Hubstats::GithubAPI}
|
72
|
+
let(:org) {'sportngin'}
|
73
|
+
let(:team1) {build(:team_hash, :name => "Team One")}
|
74
|
+
let(:team2) {build(:team_hash, :name => "Team Four")}
|
75
|
+
let(:team3) {build(:team_hash, :name => "Team Five")}
|
76
|
+
let(:team4) {build(:team_hash, :name => "Team Six")}
|
77
|
+
let(:team) {build(:team)}
|
78
|
+
let(:user1) {build(:user_hash)}
|
79
|
+
let(:user2) {build(:user_hash)}
|
80
|
+
let(:user3) {build(:user_hash)}
|
81
|
+
let(:hubstats_user) {build(:user)}
|
82
|
+
let(:access_token) { "access_token" }
|
83
|
+
let(:user) { double }
|
84
|
+
let(:client) { double(:user => user) }
|
85
|
+
|
86
|
+
it 'should successfully update all teams' do
|
87
|
+
allow_message_expectations_on_nil
|
88
|
+
allow(client).to receive(:organization_teams).with("sportngin").and_return([team1, team2, team3, team4])
|
89
|
+
allow(client).to receive(:team_members).with(team1[:id]).and_return([user1, user2, user3])
|
90
|
+
allow(Hubstats).to receive_message_chain(:config, :github_config, :[]).with("team_list") { ["Team One", "Team Two", "Team Three"] }
|
91
|
+
allow(Hubstats).to receive_message_chain(:config, :github_config, :[]).with("org_name") {"sportngin"}
|
92
|
+
allow(Hubstats::GithubAPI).to receive(:client).and_return(client)
|
93
|
+
allow(client).to receive(:rate_limit)
|
94
|
+
allow(Hubstats::Team).to receive_message_chain(:where, :name).with("Team One")
|
95
|
+
allow(Hubstats::Team.where(name: "Team One")).to receive(:first).and_return(team)
|
96
|
+
allow(client).to receive_message_chain(:rate_limit, :remaining).and_return(500)
|
97
|
+
expect(Hubstats::Team).to receive(:create_or_update).at_least(:once)
|
98
|
+
subject.update_teams
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
70
102
|
context ".update_hook" do
|
71
103
|
subject {Hubstats::GithubAPI}
|
72
104
|
let(:repo) {'hubstats'}
|
@@ -98,16 +130,37 @@ module Hubstats
|
|
98
130
|
allow(subject).to receive(:client) {client}
|
99
131
|
end
|
100
132
|
|
101
|
-
it "should call octokit create_hook" do
|
133
|
+
it "should call octokit create_hook for repositories" do
|
102
134
|
expect(client).to receive(:create_hook)
|
103
135
|
subject.create_hook(repo)
|
104
136
|
end
|
105
137
|
|
106
|
-
it "should rescue unprocessable entity" do
|
138
|
+
it "should rescue unprocessable entity from repo hook" do
|
107
139
|
allow(client).to receive(:create_hook) { raise Octokit::UnprocessableEntity }
|
108
140
|
subject.create_hook(repo)
|
109
141
|
end
|
110
142
|
end
|
111
143
|
|
144
|
+
context ".create_org_hook" do
|
145
|
+
subject {Hubstats::GithubAPI}
|
146
|
+
let(:config) {double(:webhook_secret => 'a1b2c3d4', :webhook_endpoint => "hubstats.com")}
|
147
|
+
let(:client) {double}
|
148
|
+
let(:org) {double(:full_name => 'sportngin') }
|
149
|
+
before do
|
150
|
+
allow(Hubstats).to receive(:config) {config}
|
151
|
+
allow(subject).to receive(:client) {client}
|
152
|
+
end
|
153
|
+
|
154
|
+
it "should call octokit create_hook for organizations" do
|
155
|
+
expect(client).to receive(:create_hook)
|
156
|
+
subject.create_hook(org)
|
157
|
+
end
|
158
|
+
|
159
|
+
it "should rescue unprocessable entity from organization hook" do
|
160
|
+
allow(client).to receive(:create_hook) { raise Octokit::UnprocessableEntity }
|
161
|
+
subject.create_hook(org)
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
112
165
|
end
|
113
166
|
end
|
data/spec/lib/hubstats_spec.rb
CHANGED
@@ -3,9 +3,15 @@ require 'spec_helper'
|
|
3
3
|
describe Hubstats
|
4
4
|
context ".config" do
|
5
5
|
subject { Hubstats }
|
6
|
-
|
6
|
+
|
7
|
+
before do
|
7
8
|
Hubstats.class_variable_set(:@@config, nil)
|
8
9
|
end
|
10
|
+
|
11
|
+
after do
|
12
|
+
Hubstats.remove_class_variable(:@@config)
|
13
|
+
end
|
14
|
+
|
9
15
|
it "creates a new config object" do
|
10
16
|
expect(Hubstats::Config).to receive(:parse).once { double(:config) }
|
11
17
|
subject.config
|
@@ -41,5 +41,39 @@ module Hubstats
|
|
41
41
|
expect(deploy.user_id).to eq(nil)
|
42
42
|
expect(pull_request.deploy.user_id).to eq(202020)
|
43
43
|
end
|
44
|
+
|
45
|
+
it "should track the team_id when making a pull request" do
|
46
|
+
user_hash = {login: 'name', id: '12345'}
|
47
|
+
user = User.create(user_hash)
|
48
|
+
team = create(:team, id: 1010)
|
49
|
+
team.users << user
|
50
|
+
pull = build(:pull_request_hash, :user => user_hash)
|
51
|
+
pull_request = PullRequest.create_or_update(pull)
|
52
|
+
expect(pull_request.user_id).to eq(user[:id])
|
53
|
+
expect(pull_request.team_id).to eq(team[:id])
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should leave the team_id of a pull request blank if user is not part of a team" do
|
57
|
+
user_hash = {login: 'name', id: '12345'}
|
58
|
+
user = User.create(user_hash)
|
59
|
+
pull = build(:pull_request_hash, :user => user_hash)
|
60
|
+
pull_request = PullRequest.create_or_update(pull)
|
61
|
+
expect(pull_request.user_id).to eq(user[:id])
|
62
|
+
expect(pull_request.team_id).to eq(nil)
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'should update the team_ids in pull requests' do
|
66
|
+
team = build(:team)
|
67
|
+
repo = build(:repo)
|
68
|
+
user1 = build(:user)
|
69
|
+
user2 = build(:user, :id => 7)
|
70
|
+
team.users << user1
|
71
|
+
team.users << user2
|
72
|
+
pull1 = build(:pull_request, :created_at => Date.today - 250, :user => user1)
|
73
|
+
pull2 = build(:pull_request, :created_at => Date.today - 3, :repo => repo, :user => user2)
|
74
|
+
Hubstats::PullRequest.update_teams_in_pulls(365)
|
75
|
+
expect(pull1.team_id).to eq(team.id)
|
76
|
+
expect(pull2.team_id).to eq(team.id)
|
77
|
+
end
|
44
78
|
end
|
45
79
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Hubstats
|
4
|
+
describe Team, :type => :model do
|
5
|
+
it 'should create a team' do
|
6
|
+
team_hash = {name: "Team Tippy-Tappy-Toes",
|
7
|
+
hubstats: true}
|
8
|
+
team = Team.create(team_hash)
|
9
|
+
expect(Team.count).to eq(1)
|
10
|
+
expect(team.name).to eq("Team Tippy-Tappy-Toes")
|
11
|
+
expect(team.hubstats).to eq(true)
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should add a member to a team' do
|
15
|
+
user = build(:user)
|
16
|
+
action = "added"
|
17
|
+
team = build(:team)
|
18
|
+
Hubstats::Team.update_users_in_team(team, user, action)
|
19
|
+
expect(team.users).to eq([user])
|
20
|
+
expect(team.users.length).to eq(1)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|