require_relative '../spec_helper' feature 'admin/configs' do let(:name) { Faker::Lorem.words(number: rand(2..4)).join(' ') } let(:email) { Faker::Internet.email } let(:admin) { create :admin } before { login admin } it 'has initial value' do FoodsoftConfig[:name] = name visit admin_config_path within('form.config') do expect(find_field('config_name').value).to eq name end end it 'can modify a value' do visit admin_config_path fill_in 'config_name', with: name within('form.config') do find('input[type="submit"]').click expect(find_field('config_name').value).to eq name end expect(FoodsoftConfig[:name]).to eq name end it 'keeps config the same without changes' do orig_values = get_full_config visit admin_config_path within('form.config') do find('input[type="submit"]').click expect(find_field('config_name').value).to eq FoodsoftConfig[:name] end expect(get_full_config).to eq orig_values end it 'can modify a nested value' do visit admin_config_path fill_in 'config_contact_email', with: email within('form.config') do find('input[type="submit"]').click expect(find_field('config_contact_email').value).to eq email end expect(FoodsoftConfig[:contact][:email]).to eq email end def get_full_config cfg = FoodsoftConfig.to_hash.deep_dup compact_hash_deep!(cfg) end def compact_hash_deep!(h) h.each do |k, v| if v.is_a? Hash compact_hash_deep!(v) v.reject! { |k, v| v.blank? } end end h.reject! { |k, v| v.blank? } h end end