require 'rails_helper' RSpec.describe UserPreferences, type: :model do let(:default_prefs) { YAML.load_file("#{Rails.root}/config/default_preferences.yml") } describe ".load" do it "provides default values when no preferences are stored yet" do expect(UserPreferences.load(nil)).to eq(default_prefs) end it "provides default values for unset preferences" do prefs = UserPreferences.load("lightning_notify_sats_received: xmpp") expect(prefs[:lightning_notify_sats_received]).to eq("xmpp") expect(prefs[:xmpp_exchange_contacts_with_invitees]).to eq(true) end end describe ".process" do it "turns all keys into strings" do res = UserPreferences.process({ foo: "bar" }) expect(res[:foo]).to be(nil) expect(res['foo']).to eq("bar") end it "converts value 'true' to boolean" do res = UserPreferences.process({ lightning_notify_sats_received: "true" }) expect(res['lightning_notify_sats_received']).to be(true) end it "converts value 'false' to boolean" do res = UserPreferences.process({ lightning_notify_sats_received: "false" }) expect(res['lightning_notify_sats_received']).to be(false) end it "converts value string with integer into integer" do res = UserPreferences.process({ lightning_notify_sats_received_threshold: 1000 }) expect(res['lightning_notify_sats_received_threshold']).to be_a(Integer) expect(res['lightning_notify_sats_received_threshold']).to eq(1000) end end describe ".pref_keys" do let(:default_prefs) { YAML.load_file("#{Rails.root}/config/default_preferences.yml") } it "returns the keys of all default preferences as an array of symbols" do expect(UserPreferences.pref_keys).to be_a(Array) expect(UserPreferences.pref_keys).to include(:lightning_notify_sats_received) expect(UserPreferences.pref_keys).to include(:xmpp_exchange_contacts_with_invitees) expect(UserPreferences.pref_keys.length).to eq(default_prefs.keys.length) end end end