Skip to content

Commit

Permalink
Disable users on vacation dblock#1 , add byebug
Browse files Browse the repository at this point in the history
  • Loading branch information
ashkan18 committed Aug 27, 2017
1 parent b121d5d commit 4ca72da
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 14 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@
.bundle
log
.env
.byebug_history
1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ gem 'time_ago_in_words'
gem 'wannabe_bool'

group :development, :test do
gem 'byebug'
gem 'foreman'
gem 'rake', '~> 10.4'
gem 'rubocop', '0.49.1'
Expand Down
4 changes: 3 additions & 1 deletion Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ GEM
thread_safe (~> 0.3, >= 0.3.1)
bson (4.2.2)
builder (3.2.3)
byebug (9.0.6)
capybara (2.15.1)
addressable
mini_mime (>= 0.1.3)
Expand Down Expand Up @@ -272,6 +273,7 @@ PLATFORMS

DEPENDENCIES
ambit
byebug
capybara
chronic
database_cleaner
Expand Down Expand Up @@ -305,4 +307,4 @@ RUBY VERSION
ruby 2.4.1p111

BUNDLED WITH
1.15.3
1.15.4
21 changes: 14 additions & 7 deletions slack-sup/models/team.rb
Original file line number Diff line number Diff line change
Expand Up @@ -142,13 +142,7 @@ def update_cc_text
def sync!
client = Slack::Web::Client.new(token: token)
members = client.paginate(:users_list, presence: false).map(&:members).flatten
humans = members.select do |member|
!member.is_bot &&
!member.deleted &&
!member.is_restricted &&
!member.is_ultra_restricted &&
member.id != 'USLACKBOT'
end.map do |member|
humans = members.select { |member| active_member?(member) }.map do |member|
existing_user = User.where(user_id: member.id).first
existing_user ||= User.new(user_id: member.id, team: self)
existing_user.user_name = member.name
Expand Down Expand Up @@ -181,6 +175,19 @@ def sync!

private

def active_member?(member)
!member.is_bot &&
!member.deleted &&
!member.is_restricted &&
!member.is_ultra_restricted &&
!on_vacation?(member) &&
member.id != 'USLACKBOT'
end

def on_vacation?(member)
[member.name, member.real_name, member.profile.status_text].join =~ /(ooo|vacationing)/i
end

def validate_team_field_label
return unless team_field_label && team_field_label_changed?
client = Slack::Web::Client.new(token: access_token)
Expand Down
56 changes: 50 additions & 6 deletions spec/models/team_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -108,16 +108,57 @@
end
context 'team' do
let(:team) { Fabricate(:team, sup_wday: Time.now.utc.in_time_zone('Eastern Time (US & Canada)').wday) }
before do
allow(team).to receive(:sync!)
end
context '#sync!' do
pending 'adds new users'
pending 'disables dead users'
pending 'reactivates users that are back'
let(:member_default_attr) do
{
id: 'member-id',
is_bot: false,
deleted: false,
is_restricted: false,
is_ultra_restricted: false,
name: 'Forrest Gump',
real_name: 'Real Forrest Gump',
profile: double(email: nil, status: nil, status_text: nil)
}
end
let(:bot_member) { double(member_default_attr.merge(id: 'bot-user', is_bot: true)) }
let(:deleted_member) { double(member_default_attr.merge(id: 'deleted-user', deleted: true)) }
let(:restricted_member) { double(member_default_attr.merge(id: 'restricted-user', is_restricted: true)) }
let(:ultra_restricted_member) { double(member_default_attr.merge(id: 'ult-rest-user', is_ultra_restricted: true)) }
let(:ooo_member) { double(member_default_attr.merge(id: 'ooo-user', name: 'member-name-on-ooo')) }
let(:available_member) { double(member_default_attr) }
let(:members) do
[bot_member, deleted_member, restricted_member, ultra_restricted_member, ooo_member, available_member]
end
before do
allow_any_instance_of(Slack::Web::Client).to receive(:paginate).and_return([double(members: members)])
end
it 'adds new users' do
expect { team.sync! }.to change(User, :count).by(1)
new_user = User.last
expect(new_user.user_id).to eq 'member-id'
expect(new_user.user_name).to eq 'Forrest Gump'
end
it 'disables dead users' do
available_user = Fabricate(:user, team: team, user_id: available_member.id, enabled: true)
to_be_disabled_users = [deleted_member, restricted_member, ultra_restricted_member, ooo_member].map do |member|
Fabricate(:user, team: team, user_id: member.id, enabled: true)
end
expect { team.sync! }.to change(User, :count).by(0)
expect(to_be_disabled_users.map(&:reload).map(&:enabled)).to eq [false] * 4
expect(available_user.reload.enabled).to be true
end
it 'reactivates users that are back' do
disabled_user = Fabricate(:user, team: team, enabled: false, user_id: available_member.id)
expect { team.sync! }.to change(User, :count).by(0)
expect(disabled_user.reload.enabled).to be true
end
pending 'fetches user custom team information'
end
context '#sup!' do
before do
allow(team).to receive(:sync!)
end
it 'creates a round for a team' do
expect do
team.sup!
Expand All @@ -127,6 +168,9 @@
end
end
context '#sup?' do
before do
allow(team).to receive(:sync!)
end
context 'without rounds' do
it 'is true' do
expect(team.sup?).to be true
Expand Down

0 comments on commit 4ca72da

Please sign in to comment.