diff options
Diffstat (limited to 'spec/lib/gitlab/json_spec.rb')
-rw-r--r-- | spec/lib/gitlab/json_spec.rb | 152 |
1 files changed, 128 insertions, 24 deletions
diff --git a/spec/lib/gitlab/json_spec.rb b/spec/lib/gitlab/json_spec.rb index 5186ab041da..ee7c98a5a54 100644 --- a/spec/lib/gitlab/json_spec.rb +++ b/spec/lib/gitlab/json_spec.rb @@ -3,47 +3,151 @@ require "spec_helper" RSpec.describe Gitlab::Json do + before do + stub_feature_flags(json_wrapper_legacy_mode: true) + end + describe ".parse" do - it "parses an object" do - expect(subject.parse('{ "foo": "bar" }')).to eq({ "foo" => "bar" }) - end + context "legacy_mode is disabled by default" do + it "parses an object" do + expect(subject.parse('{ "foo": "bar" }')).to eq({ "foo" => "bar" }) + end - it "parses an array" do - expect(subject.parse('[{ "foo": "bar" }]')).to eq([{ "foo" => "bar" }]) - end + it "parses an array" do + expect(subject.parse('[{ "foo": "bar" }]')).to eq([{ "foo" => "bar" }]) + end - it "raises an error on a string" do - expect { subject.parse('"foo"') }.to raise_error(JSON::ParserError) + it "parses a string" do + expect(subject.parse('"foo"', legacy_mode: false)).to eq("foo") + end + + it "parses a true bool" do + expect(subject.parse("true", legacy_mode: false)).to be(true) + end + + it "parses a false bool" do + expect(subject.parse("false", legacy_mode: false)).to be(false) + end end - it "raises an error on a true bool" do - expect { subject.parse("true") }.to raise_error(JSON::ParserError) + context "legacy_mode is enabled" do + it "parses an object" do + expect(subject.parse('{ "foo": "bar" }', legacy_mode: true)).to eq({ "foo" => "bar" }) + end + + it "parses an array" do + expect(subject.parse('[{ "foo": "bar" }]', legacy_mode: true)).to eq([{ "foo" => "bar" }]) + end + + it "raises an error on a string" do + expect { subject.parse('"foo"', legacy_mode: true) }.to raise_error(JSON::ParserError) + end + + it "raises an error on a true bool" do + expect { subject.parse("true", legacy_mode: true) }.to raise_error(JSON::ParserError) + end + + it "raises an error on a false bool" do + expect { subject.parse("false", legacy_mode: true) }.to raise_error(JSON::ParserError) + end end - it "raises an error on a false bool" do - expect { subject.parse("false") }.to raise_error(JSON::ParserError) + context "feature flag is disabled" do + before do + stub_feature_flags(json_wrapper_legacy_mode: false) + end + + it "parses an object" do + expect(subject.parse('{ "foo": "bar" }', legacy_mode: true)).to eq({ "foo" => "bar" }) + end + + it "parses an array" do + expect(subject.parse('[{ "foo": "bar" }]', legacy_mode: true)).to eq([{ "foo" => "bar" }]) + end + + it "parses a string" do + expect(subject.parse('"foo"', legacy_mode: true)).to eq("foo") + end + + it "parses a true bool" do + expect(subject.parse("true", legacy_mode: true)).to be(true) + end + + it "parses a false bool" do + expect(subject.parse("false", legacy_mode: true)).to be(false) + end end end describe ".parse!" do - it "parses an object" do - expect(subject.parse!('{ "foo": "bar" }')).to eq({ "foo" => "bar" }) - end + context "legacy_mode is disabled by default" do + it "parses an object" do + expect(subject.parse!('{ "foo": "bar" }')).to eq({ "foo" => "bar" }) + end - it "parses an array" do - expect(subject.parse!('[{ "foo": "bar" }]')).to eq([{ "foo" => "bar" }]) - end + it "parses an array" do + expect(subject.parse!('[{ "foo": "bar" }]')).to eq([{ "foo" => "bar" }]) + end + + it "parses a string" do + expect(subject.parse!('"foo"', legacy_mode: false)).to eq("foo") + end - it "raises an error on a string" do - expect { subject.parse!('"foo"') }.to raise_error(JSON::ParserError) + it "parses a true bool" do + expect(subject.parse!("true", legacy_mode: false)).to be(true) + end + + it "parses a false bool" do + expect(subject.parse!("false", legacy_mode: false)).to be(false) + end end - it "raises an error on a true bool" do - expect { subject.parse!("true") }.to raise_error(JSON::ParserError) + context "legacy_mode is enabled" do + it "parses an object" do + expect(subject.parse!('{ "foo": "bar" }', legacy_mode: true)).to eq({ "foo" => "bar" }) + end + + it "parses an array" do + expect(subject.parse!('[{ "foo": "bar" }]', legacy_mode: true)).to eq([{ "foo" => "bar" }]) + end + + it "raises an error on a string" do + expect { subject.parse!('"foo"', legacy_mode: true) }.to raise_error(JSON::ParserError) + end + + it "raises an error on a true bool" do + expect { subject.parse!("true", legacy_mode: true) }.to raise_error(JSON::ParserError) + end + + it "raises an error on a false bool" do + expect { subject.parse!("false", legacy_mode: true) }.to raise_error(JSON::ParserError) + end end - it "raises an error on a false bool" do - expect { subject.parse!("false") }.to raise_error(JSON::ParserError) + context "feature flag is disabled" do + before do + stub_feature_flags(json_wrapper_legacy_mode: false) + end + + it "parses an object" do + expect(subject.parse!('{ "foo": "bar" }', legacy_mode: true)).to eq({ "foo" => "bar" }) + end + + it "parses an array" do + expect(subject.parse!('[{ "foo": "bar" }]', legacy_mode: true)).to eq([{ "foo" => "bar" }]) + end + + it "parses a string" do + expect(subject.parse!('"foo"', legacy_mode: true)).to eq("foo") + end + + it "parses a true bool" do + expect(subject.parse!("true", legacy_mode: true)).to be(true) + end + + it "parses a false bool" do + expect(subject.parse!("false", legacy_mode: true)).to be(false) + end end end |