Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Validation not working as expected. #260

Open
RobertMcGinn opened this issue May 23, 2022 · 0 comments
Open

Validation not working as expected. #260

RobertMcGinn opened this issue May 23, 2022 · 0 comments

Comments

@RobertMcGinn
Copy link

RobertMcGinn commented May 23, 2022

I have a rails app where you upload a csv file. I want to use Csvlint to validate the format of the file.

In the app controller I have the following:

file_path(connect) -> the uploaded csv file, the contents are as follows:

Date,Time,Product,ISIN,Reference,Venue,Quantity,Price,,Local value,,Value,,Exchange rate,Transaction and/or third,,Total,,Order ID
11-02-2022,11:29,VANGUARD S&P500,IE00B3XXRP09,LSE,MSEU,43,62.7350,GBP,-2697.61,GBP,-2697.61,GBP,,-2.11,GBP,-2699.72,GBP,8b7ae994-e727-4fa2-bb1d-89f7bfc31e6e
14-12-2021,10:49,VANGUARD S&P500,IE00B3XXRP09,LSE,MSEU,17,67.1300,GBP,-1141.21,GBP,-1141.21,GBP,,-2.05,GBP,-1143.26,GBP,eb1f8861-43b9-4de2-8276-21a18f42eedb

In the lib/csv folder I have a file called degiro.csv which includes the following (i am using this for testing purposes)

{
  "@context": "http://www.w3.org/ns/csvw",
  "url": "http://example.com/example1.csv",
  "tableSchema": {
    "columns": [
      {
        "name": "Date",
        "required": true,
        "datatype": { "base": "integer" }
      },
      {
        "name": "Time",
        "required": true,
        "datatype": { "base": "string", "maxLength": 1 }
      },
      {
        "name": "Product",
        "required": true
      }
    ]
  }
}

When I run the following, I get the following error:

path = Rails.root.join('lib', 'csv', 'degiro.csv')
schema = Csvlint::Schema.load_from_uri(path)
validator = Csvlint::Validator.new(file_path(connect), nil, schema)

NoMethodError: undefined method []' for nil:NilClass from /Users/robert.mcginn/.rvm/gems/ruby-2.7.1/gems/csvlint-0.4.0/lib/csvlint/validate.rb:289:in set_dialect'

it appears that a dialect is required for the error not to be thrown.

If i supply an empty hash rather than nil i get a valid "Csvlint::Validator" object returned but without any errors found
@errors=[]

# validator = Csvlint::Validator.new(file_path(connect), {} , schema)

Initially, I wanted to test that the schema validator was working appropriately, I am expecting at least the "Time" column which is accepting a string of maxLength 1 to return an error. But, that's not working.

Any help would be appreciated.

Expected Behaviour

What should happen?

I'm expecting validator.errors.any? to be true (errors to be found)

Desired Behaviour (for improvement suggestions only)

if relevant include images or hyperlinks to other resources that clarify the enhancement you're seeking

Current Behaviour (for problems)

validator.errors.any? = false

Steps to Reproduce (for problems)

Provide a link to a live example, or an unambiguous set of steps to reproduce this bug. Include code to reproduce, if relevant

As above.

Your Environment

Include as many relevant details about the environment you experienced the bug in - this will help us resolve the bug more expediently

local development environment

Rails 7.0.1
ruby "2.7.1"
gem "csvlint"
chrome = Version 101.0.4951.64

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant