summaryrefslogtreecommitdiff
path: root/spec/services/users/set_status_service_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/services/users/set_status_service_spec.rb')
-rw-r--r--spec/services/users/set_status_service_spec.rb40
1 files changed, 32 insertions, 8 deletions
diff --git a/spec/services/users/set_status_service_spec.rb b/spec/services/users/set_status_service_spec.rb
index 2c776a0eeb4..76e86506d94 100644
--- a/spec/services/users/set_status_service_spec.rb
+++ b/spec/services/users/set_status_service_spec.rb
@@ -8,6 +8,18 @@ RSpec.describe Users::SetStatusService do
subject(:service) { described_class.new(current_user, params) }
describe '#execute' do
+ shared_examples_for 'bumps user' do
+ it 'bumps User#updated_at' do
+ expect { service.execute }.to change { current_user.updated_at }
+ end
+ end
+
+ shared_examples_for 'does not bump user' do
+ it 'does not bump User#updated_at' do
+ expect { service.execute }.not_to change { current_user.updated_at }
+ end
+ end
+
context 'when params are set' do
let(:params) { { emoji: 'taurus', message: 'a random status', availability: 'busy' } }
@@ -31,6 +43,8 @@ RSpec.describe Users::SetStatusService do
expect(service.execute).to be(true)
end
+ it_behaves_like 'bumps user'
+
context 'when setting availability to not_set' do
before do
params[:availability] = 'not_set'
@@ -72,6 +86,8 @@ RSpec.describe Users::SetStatusService do
it 'does not update the status if the current user is not allowed' do
expect { service.execute }.not_to change { target_user.status }
end
+
+ it_behaves_like 'does not bump user'
end
end
@@ -79,20 +95,28 @@ RSpec.describe Users::SetStatusService do
let(:params) { {} }
shared_examples 'removes user status record' do
- it 'deletes the status' do
- status = create(:user_status, user: current_user)
-
+ it 'deletes the user status record' do
expect { service.execute }
- .to change { current_user.reload.status }.from(status).to(nil)
+ .to change { current_user.reload.status }.from(user_status).to(nil)
end
- end
- it_behaves_like 'removes user status record'
+ it_behaves_like 'bumps user'
+ end
- context 'when not_set is given for availability' do
- let(:params) { { availability: 'not_set' } }
+ context 'when user has existing user status record' do
+ let!(:user_status) { create(:user_status, user: current_user) }
it_behaves_like 'removes user status record'
+
+ context 'when not_set is given for availability' do
+ let(:params) { { availability: 'not_set' } }
+
+ it_behaves_like 'removes user status record'
+ end
+ end
+
+ context 'when user has no existing user status record' do
+ it_behaves_like 'does not bump user'
end
end
end