File: formats_helper_spec.rb

package info (click to toggle)
ruby-fog-core 2.3.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 676 kB
  • sloc: ruby: 4,719; makefile: 5
file content (121 lines) | stat: -rw-r--r-- 4,108 bytes parent folder | download | duplicates (5)
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
require "spec_helper"
require "fog/test_helpers/formats_helper"
require "fog/test_helpers/types_helper"

module Shindo
  class Tests
    def test(_str, &_block)
      yield
    end
  end
end

describe "formats_helper" do
  let(:shindo) { Shindo::Tests.new }

  it "comparing welcome data against schema" do
    data = { :welcome => "Hello" }
    assert shindo.data_matches_schema(:welcome => String) { data }
  end

  describe "#data_matches_schema" do
    it "when value matches schema expectation" do
      assert shindo.data_matches_schema("key" => String) { { "key" => "Value" } }
    end

    it "when values within an array all match schema expectation" do
      assert shindo.data_matches_schema("key" => [Integer]) { { "key" => [1, 2] } }
    end

    it "when nested values match schema expectation" do
      assert shindo.data_matches_schema("key" => { :nested_key => String }) { { "key" => { :nested_key => "Value" } } }
    end

    it "when collection of values all match schema expectation" do
      assert shindo.data_matches_schema([{ "key" => String }]) { [{ "key" => "Value" }, { "key" => "Value" }] }
    end

    it "when collection is empty although schema covers optional members" do
      assert shindo.data_matches_schema([{ "key" => String }], :allow_optional_rules => true) { [] }
    end

    it "when additional keys are passed and not strict" do
      assert shindo.data_matches_schema({ "key" => String }, { :allow_extra_keys => true }) { { "key" => "Value", :extra => "Bonus" } }
    end

    it "when value is nil and schema expects NilClass" do
      assert shindo.data_matches_schema("key" => NilClass) { { "key" => nil } }
    end

    it "when value and schema match as hashes" do
      assert shindo.data_matches_schema({}) { {} }
    end

    it "when value and schema match as arrays" do
      assert shindo.data_matches_schema([]) { [] }
    end

    it "when value is a Time" do
      assert shindo.data_matches_schema("time" => Time) { { "time" => Time.now } }
    end

    it "when key is missing but value should be NilClass (#1477)" do
      assert shindo.data_matches_schema({ "key" => NilClass }, { :allow_optional_rules => true }) { {} }
    end

    it "when key is missing but value is nullable (#1477)" do
      assert shindo.data_matches_schema({ "key" => Fog::Nullable::String }, { :allow_optional_rules => true }) { {} }
    end
  end

  describe "#formats backwards compatible changes" do

    it "when value matches schema expectation" do
      assert shindo.formats("key" => String) { { "key" => "Value" } }
    end

    it "when values within an array all match schema expectation" do
      assert shindo.formats("key" => [Integer]) { { "key" => [1, 2] } }
    end

    it "when nested values match schema expectation" do
      assert shindo.formats("key" => { :nested_key => String }) { { "key" => { :nested_key => "Value" } } }
    end

    it "when collection of values all match schema expectation" do
      assert shindo.formats([{ "key" => String }]) { [{ "key" => "Value" }, { "key" => "Value" }] }
    end

    it "when collection is empty although schema covers optional members" do
      assert shindo.formats([{ "key" => String }]) { [] }
    end

    it "when additional keys are passed and not strict" do
      assert shindo.formats({ "key" => String }, false) { { "key" => "Value", :extra => "Bonus" } }
    end

    it "when value is nil and schema expects NilClass" do
      assert shindo.formats("key" => NilClass) { { "key" => nil } }
    end

    it "when value and schema match as hashes" do
      assert shindo.formats({}) { {} }
    end

    it "when value and schema match as arrays" do
      assert shindo.formats([]) { [] }
    end

    it "when value is a Time" do
      assert shindo.formats("time" => Time) { { "time" => Time.now } }
    end

    it "when key is missing but value should be NilClass (#1477)" do
      assert shindo.formats("key" => NilClass) { {} }
    end

    it "when key is missing but value is nullable (#1477)" do
      assert shindo.formats("key" => Fog::Nullable::String) { {} }
    end
  end
end