Refactoring: Migrate setting_test.rb to RSpec
This commit is contained in:
parent
a7e2f9092f
commit
175db6f123
3 changed files with 65 additions and 63 deletions
9
spec/factories/setting.rb
Normal file
9
spec/factories/setting.rb
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
FactoryBot.define do
|
||||||
|
factory :setting do
|
||||||
|
title { 'ABC API Token' }
|
||||||
|
name { 'abc_api_token' }
|
||||||
|
area { 'Integration::ABC' }
|
||||||
|
description { 'API Token for ABC to access ABC.' }
|
||||||
|
frontend { false }
|
||||||
|
end
|
||||||
|
end
|
56
spec/models/setting_spec.rb
Normal file
56
spec/models/setting_spec.rb
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe Setting, type: :model do
|
||||||
|
subject(:setting) { create(:setting) }
|
||||||
|
|
||||||
|
describe '.get' do
|
||||||
|
context 'when given a valid Setting#name' do
|
||||||
|
it 'returns #state_current[:value]' do
|
||||||
|
expect { setting.update(state_current: { value: 'foo' }) }
|
||||||
|
.to change { Setting.get(setting.name) }.to('foo')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '.set' do
|
||||||
|
context 'when given a valid Setting#name' do
|
||||||
|
it 'sets #state_current = { value: <arg> }' do
|
||||||
|
expect { Setting.set(setting.name, 'foo') }
|
||||||
|
.to change { setting.reload.state_current }.to({ 'value' => 'foo' })
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when #preferences hash includes a :cache key' do
|
||||||
|
subject(:setting) { create(:setting, preferences: { cache: ['foo'] }) }
|
||||||
|
before { Cache.write('foo', 'bar') }
|
||||||
|
|
||||||
|
it 'resets the cache key' do
|
||||||
|
expect { Setting.set(setting.name, 'baz') }
|
||||||
|
.to change { Cache.get('foo') }.to(nil)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '.reset' do
|
||||||
|
context 'when given a valid Setting#name' do
|
||||||
|
it 'sets #state_current = { value: <orig> } (via #state_initial[:value])' do
|
||||||
|
setting.update(state_initial: { value: 'foo' })
|
||||||
|
Setting.set(setting.name, 'bar')
|
||||||
|
|
||||||
|
expect { Setting.reset(setting.name) }
|
||||||
|
.to change { setting.reload.state_current }.to({ value: 'foo' })
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'attributes' do
|
||||||
|
describe '#state_initial' do
|
||||||
|
subject(:setting) { build(:setting, state: 'foo') }
|
||||||
|
|
||||||
|
it 'is set on creation, based on #state' do
|
||||||
|
expect { setting.save }
|
||||||
|
.to change { setting.state_initial }.from({}).to({ value: 'foo' })
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,63 +0,0 @@
|
||||||
require 'test_helper'
|
|
||||||
|
|
||||||
class SettingTest < ActiveSupport::TestCase
|
|
||||||
|
|
||||||
test 'basics' do
|
|
||||||
Setting.create!(
|
|
||||||
title: 'ABC API Token',
|
|
||||||
name: 'abc_api_token',
|
|
||||||
area: 'Integration::ABC',
|
|
||||||
description: 'API Token for ABC to access ABC.',
|
|
||||||
options: {
|
|
||||||
form: [
|
|
||||||
{
|
|
||||||
display: '',
|
|
||||||
null: false,
|
|
||||||
name: 'abc_token',
|
|
||||||
tag: 'input',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
state: 'abc',
|
|
||||||
frontend: false
|
|
||||||
)
|
|
||||||
assert_equal(Setting.get('abc_api_token'), 'abc')
|
|
||||||
assert(Setting.set('abc_api_token', 'new_abc'))
|
|
||||||
assert_equal(Setting.get('abc_api_token'), 'new_abc')
|
|
||||||
assert(Setting.reset('abc_api_token'))
|
|
||||||
assert_equal(Setting.get('abc_api_token'), 'abc')
|
|
||||||
end
|
|
||||||
|
|
||||||
test 'cache reset via preferences' do
|
|
||||||
Setting.create!(
|
|
||||||
title: 'ABC API Token',
|
|
||||||
name: 'abc_api_token',
|
|
||||||
area: 'Integration::ABC',
|
|
||||||
description: 'API Token for ABC to access ABC.',
|
|
||||||
options: {
|
|
||||||
form: [
|
|
||||||
{
|
|
||||||
display: '',
|
|
||||||
null: false,
|
|
||||||
name: 'abc_token',
|
|
||||||
tag: 'input',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
state: '',
|
|
||||||
preferences: {
|
|
||||||
permission: ['admin.integration'],
|
|
||||||
cache: ['abcGetVoipUsers'],
|
|
||||||
},
|
|
||||||
frontend: false
|
|
||||||
)
|
|
||||||
|
|
||||||
Cache.write('abcGetVoipUsers', { a: 1 })
|
|
||||||
assert_equal(Cache.get('abcGetVoipUsers'), { a: 1 })
|
|
||||||
|
|
||||||
Setting.set('abc_api_token', 'some_new_value')
|
|
||||||
assert_nil(Cache.get('abcGetVoipUsers'))
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
Loading…
Reference in a new issue