50 lines
1.2 KiB
Ruby
50 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.describe Fiken::Object do
|
|
subject(:object) do
|
|
described_class.new(
|
|
"invoiceNumber" => 5,
|
|
"customer" => { "name" => "Acme" },
|
|
"lines" => [{ "vat" => 25 }, { "vat" => 0 }]
|
|
)
|
|
end
|
|
|
|
it "exposes camelCase keys via dot access" do
|
|
expect(object.invoiceNumber).to eq(5)
|
|
end
|
|
|
|
it "exposes the same keys via snake_case dot access" do
|
|
expect(object.invoice_number).to eq(5)
|
|
end
|
|
|
|
it "supports hash-style access with string or symbol keys" do
|
|
expect(object[:invoiceNumber]).to eq(5)
|
|
expect(object["invoiceNumber"]).to eq(5)
|
|
end
|
|
|
|
it "wraps nested hashes recursively" do
|
|
expect(object.customer.name).to eq("Acme")
|
|
end
|
|
|
|
it "wraps arrays of hashes recursively" do
|
|
expect(object.lines.map(&:vat)).to eq([25, 0])
|
|
end
|
|
|
|
it "round-trips to a plain hash" do
|
|
expect(object.to_h).to eq(
|
|
invoiceNumber: 5,
|
|
customer: { name: "Acme" },
|
|
lines: [{ vat: 25 }, { vat: 0 }]
|
|
)
|
|
end
|
|
|
|
it "raises NoMethodError for unknown keys" do
|
|
expect { object.nope }.to raise_error(NoMethodError)
|
|
end
|
|
|
|
it "answers key? for present and absent keys" do
|
|
expect(object.key?(:invoiceNumber)).to be(true)
|
|
expect(object.key?(:missing)).to be(false)
|
|
end
|
|
end
|