spec/metadata_spec.rb in rdf-tabular-3.1.0 vs spec/metadata_spec.rb in rdf-tabular-3.1.1

- old
+ new

@@ -1080,9 +1080,92 @@ nums = nums.first(nums.length - columnOffset) expect(rows.first.values.map {|c| c.column.sourceNumber}).to eql nums end end end + + context "virtual columns" do + subject { + described_class.new(JSON.parse(%({ + "@context": "http://www.w3.org/ns/csvw", + "url": "https://example.org/countries.csv", + "aboutUrl": "https://example.org/countries", + "@type": "Table", + "tableSchema": { + "@type": "Schema", + "columns": [{ + "name": "countryCode", + "titles": "countryCode", + "propertyUrl": "https://example.org/countries.csv#countryCode" + }, { + "name": "latitude", + "titles": "latitude", + "propertyUrl": "https://example.org/countries.csv#latitude" + }, { + "name": "longitude", + "titles": "longitude", + "propertyUrl": "https://example.org/countries.csv#longitude" + }, { + "name": "name", + "titles": "name", + "propertyUrl": "https://example.org/countries.csv#name" + }, { + "virtual": true, + "propertyUrl": "https://example.org/countries.csv#virt1", + "valueUrl": "https://example.org/countries.csv#virt1" + }, { + "virtual": true, + "propertyUrl": "https://example.org/countries.csv#virt2", + "default": "default", + "datatype": "string" + }] + } + })), base: RDF::URI("http://example.org/base"), logger: logger) + } + let(:input) {RDF::Util::File.open_file("https://example.org/countries.csv")} + let(:rows) {subject.to_enum(:each_row, input).to_a} + + it "has expected aboutUrls" do + subject.each_row(input) do |row| + expect(row.values[0].aboutUrl).to eq "https://example.org/countries" + expect(row.values[1].aboutUrl).to eq "https://example.org/countries" + expect(row.values[2].aboutUrl).to eq "https://example.org/countries" + expect(row.values[3].aboutUrl).to eq "https://example.org/countries" + expect(row.values[4].aboutUrl).to eq "https://example.org/countries" + expect(row.values[5].aboutUrl).to eq "https://example.org/countries" + end + end + + it "has expected propertyUrls" do + subject.each_row(input) do |row| + expect(row.values[0].propertyUrl).to eq "https://example.org/countries.csv#countryCode" + expect(row.values[1].propertyUrl).to eq "https://example.org/countries.csv#latitude" + expect(row.values[2].propertyUrl).to eq "https://example.org/countries.csv#longitude" + expect(row.values[3].propertyUrl).to eq "https://example.org/countries.csv#name" + expect(row.values[4].propertyUrl).to eq "https://example.org/countries.csv#virt1" + expect(row.values[5].propertyUrl).to eq "https://example.org/countries.csv#virt2" + end + end + + it "has expected valueUrls" do + subject.each_row(input) do |row| + expect(row.values[0].valueUrl).to be_nil + expect(row.values[1].valueUrl).to be_nil + expect(row.values[2].valueUrl).to be_nil + expect(row.values[3].valueUrl).to be_nil + expect(row.values[4].valueUrl).to eq "https://example.org/countries.csv#virt1" + expect(row.values[5].valueUrl).to be_nil + end + end + + it "has expected values" do + rows = subject.to_enum(:each_row, input).to_a + expect(rows[0].values.map(&:to_s)).to produce(%w(AD 42.546245 1.601554 Andorra).push("", "default"), logger) + expect(rows[1].values.map(&:to_s)).to produce((%w(AE 23.424076 53.847818).push("United Arab Emirates", "", "default")), logger) + expect(rows[2].values.map(&:to_s)).to produce(%w(AF 33.93911 67.709953 Afghanistan).push("", "default"), logger) + end + end + end context "datatypes" do { # Strings