File: string_hash_spec.rb

package info (click to toggle)
ruby-configurate 0.5.0-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 200 kB
  • sloc: ruby: 992; makefile: 5
file content (82 lines) | stat: -rw-r--r-- 2,220 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# frozen_string_literal: true

require "spec_helper"

describe Configurate::Provider::StringHash do
  let(:settings) {
    {
      "toplevel" => "bar",
      "some"     => {
        "nested" => {"some" => "lala", "setting" => "foo"}
      }
    }
  }

  describe "#initialize" do
    it "raises if the argument is not hash" do
      expect {
        described_class.new "foo"
      }.to raise_error ArgumentError
    end

    context "with a namespace" do
      it "looks in the hash for that namespace" do
        namespace = "some.nested"
        provider = described_class.new settings, namespace: namespace
        expect(provider.instance_variable_get(:@settings)).to eq settings["some"]["nested"]
      end

      it "raises if the namespace isn't found" do
        expect {
          described_class.new({}, namespace: "bar")
        }.to raise_error ArgumentError
      end

      it "works with an empty namespace in the file" do
        expect {
          described_class.new({"foo" => {"bar" => nil}}, namespace: "foo.bar")
        }.to_not raise_error
      end
    end

    context "with required set to false" do
      it "doesn't raise if a namespace isn't found" do
        expect {
          silence_stderr do
            described_class.new({}, namespace: "foo", required: false)
          end
        }.not_to raise_error
      end
    end
  end

  describe "#lookup_path" do
    before do
      @provider = described_class.new settings
    end

    it "looks up the whole nesting" do
      expect(@provider.lookup_path(%w[some nested some])).to eq settings["some"]["nested"]["some"]
    end

    it "returns nil if no setting is found" do
      expect(@provider.lookup_path(["not_me"])).to be_nil
    end

    context "with raise_on_missing set to true" do
      before do
        @provider = described_class.new settings, raise_on_missing: true
      end

      it "looks up the whole nesting" do
        expect(@provider.lookup_path(%w[some nested some])).to eq settings["some"]["nested"]["some"]
      end

      it "returns nil if no setting is found" do
        expect {
          @provider.lookup_path ["not_me"]
        }.to raise_error Configurate::MissingSetting
      end
    end
  end
end