require 'spec_helper' describe 'expect_json with path' do it 'should allow simple path and verify only that path' do mock_get('simple_path_get') get '/simple_path_get' expect_json('address', {street: "Area 51", city: "Roswell", state: "NM"}) end it 'should allow nested paths' do mock_get('simple_nested_path') get '/simple_nested_path' expect_json('address.coordinates', {lattitude: 33.3872, longitutde: 104.5281} ) end it 'should index into array and test against specific element' do mock_get('array_with_index') get '/array_with_index' expect_json('cars.0', {make: "Tesla", model: "Model S"}) end it 'should test against all elements in the array' do mock_get('array_with_index') get '/array_with_index' expect_json('cars.?', {make: "Tesla", model: "Model S"}) expect_json('cars.?', {make: "Lamborghini", model: "Aventador"}) end it 'should test against properties in the array' do mock_get('array_with_index') get '/array_with_index' expect_json('cars.?.make', "Tesla") end it 'should ensure at least one match' do mock_get('array_with_index') get '/array_with_index' expect{expect_json('cars.?.make', "Teslas")}.to raise_error end it 'should check for at least one match' do mock_get('array_with_nested') get '/array_with_nested' expect_json('cars.?.owners.?', {name: "Bart Simpson"}) end it 'should ensure at least one match' do mock_get('array_with_nested') get '/array_with_nested' expect{expect_json('cars.?.owners.?', {name: "Bart Simpsons"})}.to raise_error end it 'should check for one match that matches all ' do mock_get('array_with_nested') get '/array_with_nested' expect_json('cars.?.owners.*', {name: "Bart Simpson"}) end it 'should check for one match that matches all with lambda' do mock_get('array_with_nested') get '/array_with_nested' expect_json('cars.?.owners.*', {name: ->(name){expect(name).to eq("Bart Simpson")}}) end it 'should ensure one match that matches all with lambda' do mock_get('array_with_nested') get '/array_with_nested' expect{expect_json('cars.?.owners.*', {name: ->(name){expect(name).to eq("Bart Simpsons")}})}.to raise_error end it 'should ensure one match that matches all' do mock_get('array_with_nested') get '/array_with_nested' expect{expect_json('cars.?.owners.*', {name: "Bart Simpsons"})}.to raise_error end it 'should allow indexing' do mock_get('array_with_nested') get '/array_with_nested' expect_json('cars.0.owners.0', {name: "Bart Simpson"}) end it 'should allow strings (String) to be tested against a path' do mock_get('simple_nested_path') get '/simple_nested_path' expect_json('address.city', "Roswell" ) end it 'should allow floats (Float) to be tested against a path' do mock_get('simple_nested_path') get '/simple_nested_path' expect_json('address.coordinates.lattitude', 33.3872 ) end it 'should allow integers (Fixnum, Bignum) to be tested against a path' do mock_get('simple_get') get '/simple_get' expect_json('age', 32 ) end it "should raise ExpectationError when expectation expects an object instead of value" do mock_get('array_with_index') get '/array_with_index' expect do expect_json('cars.0.make', {make: "Tesla"}) end.to raise_error(Airborne::ExpectationError, "Expected String Tesla\nto be an object with property make") end end