def test_first_step_validate_line_columns_nok(self): """Ensure that every lines have the same number of columns""" request = self.layer["request"] csv = StringIO() lines = [ ["", "key1", "Key 1"], ["key1", "key1.1"], ["key1.1", "key1.1.1", "Key 1.1.1", "foo"], ] for line in lines: csv.write(";".join(line) + "\n") csv.seek(0) source = FileUpload( type( "obj", (object, ), { "file": csv, "filename": "foo.csv", "headers": "text/csv" }, )()) request.form = { "form.buttons.continue": u"continuer", "form.widgets.separator": [u";"], "form.widgets.separator-empty-marker": u"1", "form.widgets.source": source, "form.widgets.has_header": u"False", } form = importform.ImportFormFirstStep(self.container, request) form.update() data, errors = form.extractData() self.assertEqual(1, len(errors)) self.assertTrue("Lines 2, 3" in translate(errors[0].error.message))
def test_first_step_validate_csv_encoding_nok(self): """Ensure that we can decode csv file""" request = self.layer["request"] csv = StringIO() lines = [ [u"猫", u"èè", u"ùù"], ["", "key1", "Key 1"], [u"猫", u"ààà", u"ééé"], ] for line in lines: csv.write(";".join(line).encode("utf-16") + "\n") csv.seek(0) source = FileUpload( type( "obj", (object, ), { "file": csv, "filename": "foo.csv", "headers": "text/csv" }, )()) request.form = { "form.buttons.continue": u"continuer", "form.widgets.separator": [u";"], "form.widgets.separator-empty-marker": u"1", "form.widgets.source": source, "form.widgets.has_header": u"True", } form = importform.ImportFormFirstStep(self.container, request) form.update() data, errors = form.extractData() self.assertEqual(1, len(errors)) self.assertEqual("File encoding is not utf8", errors[0].error.message)
def test_first_step_set_data(self): form = importform.ImportFormFirstStep(self.container, self.layer["request"]) data = { "source": NamedBlobFile( data=self._csv.read(), contentType=u"text/csv", filename=u"test.csv", ), "separator": u";", "has_header": False, } form._set_data(data) annotations = IAnnotations(self.container) self.assertTrue(importform.ANNOTATION_KEY in annotations) annotation = annotations[importform.ANNOTATION_KEY] self.assertEqual(data["separator"], annotation["separator"]) self.assertEqual(data["source"], annotation["source"]) self.assertEqual(data["has_header"], annotation["has_header"])
def test_first_step_validate_columns_number_correct(self): """Ensure that csv file contains at least 2 columns""" request = self.layer["request"] source = FileUpload( type( "obj", (object, ), { "file": self._csv, "filename": "foo.csv", "headers": "text/csv" }, )()) request.form = { "form.buttons.continue": u"Continuer", "form.widgets.separator": [u";"], "form.widgets.separator-empty-marker": u"1", "form.widgets.source": source, "form.widgets.has_header": u"False", } form = importform.ImportFormFirstStep(self.container, request) form.update() data, errors = form.extractData() self.assertEqual(0, len(errors))