spec/models/data_grid_spec.rb in marty-1.0.1 vs spec/models/data_grid_spec.rb in marty-1.0.3

- old
+ new

@@ -127,10 +127,29 @@ true\t1\t<10\t<10.0\tY \t2\t\t\tM false\t\t>10\t\tN EOS +Gg = <<EOS +lenient +i1\tinteger\tv +i2\tinteger\tv + +\t1\t1 +2\t1\t21 +2\t\t20 +EOS + +Gh = <<EOS +lenient +property_state\tstring\tv +county_name\tstring\tv + +NY\t\t10 +\tR\t8 +EOS + before(:each) do #Mcfly.whodunnit = Marty::User.find_by_login('marty') marty_whodunnit end @@ -138,10 +157,24 @@ dg=Marty::DataGrid.lookup(pt, gridname) res=dg.lookup_grid_distinct_entry(pt, params, nil, follow) [res["result"], res["name"]] end + describe "imports" do + it "should not allow imports with trailing blank columns" do + expect { + dg_from_import("G1", G1.gsub("\n", "\t\n")) + }.to raise_error(RuntimeError) + end + + it "should not allow imports with last blank row" do + expect { + dg_from_import("Gh", Gh+"\t\t\n") + }.to raise_error(RuntimeError) + end + end + describe "validations" do it "a basic data grid should load ok" do dg_from_import("G1", G1) dg_from_import("G2", G2) dg_from_import("G3", G3) @@ -221,61 +254,82 @@ describe "lookups for infinity" do let(:pt) { 'infinity'} before(:each) do ["G1", "G2", "G3", "G4", "G5", "G6", "G7", "G8", "Ga", "Gb", - "Gc", "Gd", "Ge", "Gf"].each { |g| + "Gc", "Gd", "Ge", "Gf", "Gg", "Gh"].each { |g| dg_from_import(g, "Marty::DataGridSpec::#{g}".constantize) } end context "should handle NULL key values" do let(:dg) { Marty::DataGrid.lookup(pt, "Gf") } it 'true returns Y' do - res = Marty::DataGrid. - lookup_grid(pt, dg, {"b"=>true}, true) + res = Marty::DataGrid.lookup_grid(pt, dg, {"b"=>true}, false) expect(res).to eq('Y') end it '13 returns N' do - res = Marty::DataGrid. - lookup_grid(pt, dg, {"i"=>13}, true) + res = Marty::DataGrid.lookup_grid(pt, dg, {"i"=>13}, true) expect(res).to eq('N') end it '13 & numrange 0 returns nil' do - res = Marty::DataGrid. - lookup_grid(pt, dg, {"i"=>13, "n"=>0}, true) - expect(res).to be_nil + res = Marty::DataGrid.lookup_grid(pt, dg, {"i"=>13, "n"=>0}, true) + expect(res).to eq('N') end it '13 & int4range 15 returns N' do - res = Marty::DataGrid. - lookup_grid(pt, dg, {"i"=>13, "i4"=>15}, true) + res = Marty::DataGrid.lookup_grid(pt, dg, {"i"=>13, "i4"=>15}, true) expect(res).to eq('N') end it '13 & int4range 1 returns nil' do - res = Marty::DataGrid. - lookup_grid(pt, dg, {"i"=>13, "i4"=>1}, true) + res = Marty::DataGrid.lookup_grid(pt, dg, {"i"=>13, "i4"=>1}, true) expect(res).to be_nil end it 'false, 3, numrange 15 returns N' do res = Marty::DataGrid. lookup_grid(pt, dg, {"b"=>false, "i"=>3, "n"=>15}, true) expect(res).to eq('N') end it '13, numrange 15 returns N' do - res = Marty::DataGrid. - lookup_grid(pt, dg, {"i"=>13, "n"=>15}, true) + res = Marty::DataGrid.lookup_grid(pt, dg, {"i"=>13, "n"=>15}, true) expect(res).to eq('N') end end + it "should handle ambiguous lookups" do + dg = Marty::DataGrid.lookup(pt, "Gh") + + h1 = { + "property_state" => "NY", + "county_name" => "R", + } + + res = Marty::DataGrid.lookup_grid(pt, dg, h1, false) + expect(res).to eq(10) + end + + it "should handle ambiguous lookups (2)" do + dg = Marty::DataGrid.lookup(pt, "Gg") + res = Marty::DataGrid. + lookup_grid(pt, dg, {"i1"=>2, "i2"=>1}, false) + expect(res).to eq(1) + + res = Marty::DataGrid. + lookup_grid(pt, dg, {"i1"=>3, "i2"=>1}, false) + expect(res).to eq(1) + + res = Marty::DataGrid. + lookup_grid(pt, dg, {"i1"=>2, "i2"=>3}, false) + expect(res).to eq(20) + end + it "should handle non-distinct lookups" do dg = Marty::DataGrid.lookup(pt, "Ge") res = Marty::DataGrid.lookup_grid(pt, dg, {"ltv"=>500}, false) expect(res).to eq(1.1) @@ -370,15 +424,16 @@ end it "should handle matches which also have a wildcard match" do dg_from_import("G9", G9) - res = lookup_grid_helper('infinity', - "G9", - {"state" => "CA", "ltv" => 81}, - ) - expect(res).to eq [123,"G9"] + expect { + res = lookup_grid_helper('infinity', + "G9", + {"state" => "CA", "ltv" => 81}, + ) + }.to raise_error(RuntimeError) res = lookup_grid_helper('infinity', "G9", {"state" => "GU", "ltv" => 81}, ) @@ -447,11 +502,12 @@ ) expect(res).to eq ["test","G7"] end it "should handle DataGrid typed data grids" do - expect(Marty::DataGrid.lookup('infinity', "G8").data_type).to eq "Marty::DataGrid" + expect(Marty::DataGrid.lookup('infinity', "G8").data_type). + to eq "Marty::DataGrid" g1 = Marty::DataGrid.lookup('infinity', "G1") res = lookup_grid_helper('infinity', "G8", {"ltv" => 80, @@ -459,10 +515,11 @@ ) expect(res).to eq [g1,"G8"] end it "should handle multi DataGrid lookups" do - expect(Marty::DataGrid.lookup('infinity', "G8").data_type).to eq "Marty::DataGrid" + expect(Marty::DataGrid.lookup('infinity', "G8").data_type). + to eq "Marty::DataGrid" g1 = Marty::DataGrid.lookup('infinity', "G1") h = { "fico" => 600, "state" => "RI",