fedibird-fe/spec/models/time_limit_spec.rb
2022-05-11 00:48:01 +09:00

104 lines
2.6 KiB
Ruby

require 'rails_helper'
describe TimeLimit do
describe '.from_tags' do
it 'returns true' do
tags = [
Fabricate(:tag, name: "hoge"),
Fabricate(:tag, name: "exp1m"),
Fabricate(:tag, name: "fuga"),
Fabricate(:tag, name: "exp10m"),
]
result = TimeLimit.from_tags(tags)
expect(result.to_duration).to eq(1.minute)
end
end
describe '.from_status' do
subject { TimeLimit.from_status(target_status)&.to_duration }
let(:tag) { Fabricate(:tag, name: "exp1m") }
let(:local_status) { Fabricate(:status, tags: [tag]) }
let(:remote_status) { Fabricate(:status, tags: [tag], local: false, account: Fabricate(:account, domain: 'pawoo.net')) }
context 'when status is local' do
let(:target_status) { local_status }
it { is_expected.to eq(1.minute) }
end
context 'when status is remote' do
let(:target_status) { remote_status }
it { is_expected.to be_nil }
end
context 'when status is reblog' do
let(:target_status) { Fabricate(:status, tags: [tag], reblog: reblog_target) }
context 'reblog target is local status' do
let(:reblog_target) { local_status }
it { is_expected.to eq(1.minute) }
end
context 'when status is remote' do
let(:reblog_target) { remote_status }
it { is_expected.to be_nil }
end
end
end
describe '#valid?' do
context 'valid tag_name' do
it 'returns true' do
result = TimeLimit.new('exp1m').valid?
expect(result).to be true
end
end
context 'invalid tag_name' do
it 'returns false' do
result = TimeLimit.new('10m').valid?
expect(result).to be false
end
it 'returns false' do
result = TimeLimit.new('exp10s').valid?
expect(result).to be false
end
end
context 'invalid time' do
it 'returns false' do
result = TimeLimit.new('exp8d').valid?
expect(result).to be false
end
it 'returns false' do
result = TimeLimit.new("exp#{24 * 8}h").valid?
expect(result).to be false
end
end
end
describe '#to_duration' do
context 'valid tag_name' do
it 'returns positive numeric' do
result = TimeLimit.new('exp1m').to_duration
expect(result.positive?).to be true
end
end
context 'invalid tag_name' do
it 'returns 0' do
result = TimeLimit.new('10m').to_duration
expect(result).to be 0
end
it 'returns 0' do
result = TimeLimit.new('exp10s').to_duration
expect(result).to be 0
end
end
end
end