Project

General

Profile

Download (3.18 KB) Statistics
| Branch: | Tag: | Revision:
require 'test_helper'

class SettingRegistryTest < ActiveSupport::TestCase
let(:registry) { SettingRegistry.instance }
let(:default) { 5 }
let(:setting_value) { nil }
let(:setting_memo) { {} }
let(:setting) { Setting.create(registry.find('foo').attributes) }

setup do
registry.stubs(settings: setting_memo)
registry._add('foo', type: :integer, category: 'Setting', default: default, full_name: 'test foo', description: 'test foo', context: :test)
setting.update(value: setting_value)
registry.load_values
end

describe 'the value getter' do
context 'with nil default' do
let(:default) { nil }

it 'allows nil default value' do
assert_nil registry['foo']
end
end

it 'provides default if no value defined' do
assert_equal 5, registry['foo']
assert_equal 5, registry[:foo]
end

it 'saves the value on assignment' do
registry[:foo] = 3
assert Setting.find_by(name: 'foo').persisted?
assert_equal 3, registry['foo']
end

it 'returns updated value only after it is saved' do
setting.value = 3
assert_equal 5, registry['foo']

setting.save
registry.load_values
assert_equal 3, setting.value
assert_equal 3, registry['foo']
end

context 'with value' do
let(:setting_value) { 10 }

it 'retrieves the value' do
assert_equal setting_value, registry['foo']
end
end
end

describe '#set_user_value' do
setup do
registry._add('test',
category: 'Setting',
default: default,
type: :integer,
full_name: 'Test Foo',
description: 'test update',
context: :test)
end

it 'initiates the DB model if none exists yet' do
model = registry.set_user_value('test', '10')
assert_not_nil model
assert model.valid?
assert model.save
assert_equal 10, model.reload.value
end

it 'updates the DB model if already exists' do
model = Setting.create(registry.find('test').attributes.merge(value: setting_value))
registry.set_user_value('test', '10').save
assert_equal 10, model.reload.value
end
end

describe '#search_for' do
setup do
registry._add('desc_set_test',
category: 'Setting',
default: default,
type: :integer,
full_name: 'Desc set test',
description: 'unique desc23x description',
context: :test)
end

it 'can find setting by exact name match' do
result = registry.search_for('name = foo').to_a
assert_equal 1, result.size
assert_equal 'foo', result.first.name
end

it 'can find setting by name common match' do
result = registry.search_for('name = "foo"').to_a
assert_equal 1, result.size
assert_equal 'foo', result.first.name
end

it 'can find setting by description' do
result = registry.search_for('test f').to_a
assert_equal 1, result.size
assert_equal 'foo', result.first.name
end

it 'can find setting by "description ~ value"' do
result = registry.search_for('description ~ desc23x').to_a
assert_equal 1, result.size
assert_equal 'desc_set_test', result.first.name
end
end
end
(68-68/74)