Skip to content

Commit

Permalink
Add: UpdateStatusExpirationServiceのテスト
Browse files Browse the repository at this point in the history
  • Loading branch information
kmycode committed Nov 13, 2024
1 parent a41f515 commit b95a15d
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 0 deletions.
7 changes: 7 additions & 0 deletions spec/fabricators/scheduled_expiration_status_fabricator.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# frozen_string_literal: true

Fabricator(:scheduled_expiration_status) do
account { Fabricate.build(:account) }
status { Fabricate.build(:status) }
scheduled_at { 20.hours.from_now }
end
74 changes: 74 additions & 0 deletions spec/services/update_status_expiration_service_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# frozen_string_literal: true

require 'rails_helper'

RSpec.describe UpdateStatusExpirationService do
subject { described_class.new.call(status) }

let(:status) { Fabricate(:status, text: text) }

shared_examples 'set expire date' do |offset|
it 'set expire date' do
travel_to '2023-01-01T00:00:00Z'
subject
expect(ScheduledExpirationStatus.where(status: status).count).to eq 1
expect(ScheduledExpirationStatus.exists?(scheduled_at: Time.now.utc + offset, status: status)).to be true
end
end

shared_examples 'did not set expire date' do
it 'did not set expire date' do
subject
expect(ScheduledExpirationStatus.exists?(status: status)).to be false
end
end

context 'when 30 minutes' do
let(:text) { 'ohagi #exp30m' }

it_behaves_like 'set expire date', 30.minutes
end

context 'when 1 hour' do
let(:text) { 'ohagi #exp1h' }

it_behaves_like 'set expire date', 1.hour
end

context 'with multiple tags' do
let(:text) { 'ohagi #exp3h #exp1d' }

it_behaves_like 'set expire date', 3.hours
end

context 'when too long hours' do
let(:text) { 'ohagi #exp9999999999h' }

it_behaves_like 'did not set expire date'
end

context 'without tags' do
let(:text) { 'ohagi is ohagi' }

it_behaves_like 'did not set expire date'
end

context 'when update status text' do
before do
travel_to '2023-01-01T00:00:00Z'
Fabricate(:scheduled_expiration_status, account: status.account, status: status)
end

context 'with new date' do
let(:text) { 'ohagi #exp1h' }

it_behaves_like 'set expire date', 1.hour
end

context 'without new date' do
let(:text) { 'ohagi' }

it_behaves_like 'did not set expire date'
end
end
end

0 comments on commit b95a15d

Please sign in to comment.