def test_check_non_matching_header_problem(log): errors = [] cells = [ { 'number': 1, 'header': 'name1', 'field': Field({'name': 'name2'}) }, { 'number': 2, 'header': 'name2', 'field': Field({'name': 'name1'}) }, { 'number': 3, 'header': 'name3' }, ] non_matching_header = NonMatchingHeader() non_matching_header.check_headers(errors, cells) assert log(errors) == [ (None, 1, 'non-matching-header'), (None, 2, 'non-matching-header'), ] assert len(cells) == 1
def test_check_missing_header(log): cells = [ goodtables.cells.create_cell('name1', field=Field({'name': 'name1'}), column_number=1), goodtables.cells.create_cell('name2', field=Field({'name': 'name2'}), column_number=2), ] errors = missing_header(cells, None) assert log(errors) == [] assert len(cells) == 2
def test_check_non_matching_header_order_fields(log): cells = [ goodtables.cells.create_cell('name1', field=Field({'name': 'name2'}), column_number=1), goodtables.cells.create_cell('name2', field=Field({'name': 'name1'}), column_number=2), goodtables.cells.create_cell('name3', column_number=3), ] non_matching_header = NonMatchingHeader(order_fields=True) errors = non_matching_header.check_headers(cells) assert log(errors) == [] assert len(cells) == 3
def test_check_extra_header(log): cells = [ goodtables.cells.create_cell('name1', field=Field({'name': 'name1'}), column_number=1), goodtables.cells.create_cell('name2', field=Field({'name': 'name2'}), column_number=2), ] sample = [] extra_header = ExtraHeader() errors = extra_header.check_headers(cells, sample=sample) assert log(errors) == [] assert len(cells) == 2
def test_check_extra_header(log): errors = [] cells = [ {'number': 1, 'header': 'name1', 'field': Field({'name': 'name1'})}, {'number': 2, 'header': 'name2', 'field': Field({'name': 'name2'})}, ] sample = [] extra_header = ExtraHeader() extra_header.check_headers(errors, cells, sample=sample) assert log(errors) == [] assert len(cells) == 2
def test_check_non_matching_header_order_fields(log): cells = [ goodtables.cells.create_cell('name1', field=Field({'name': 'name2'}), column_number=1), goodtables.cells.create_cell('name2', field=Field({'name': 'name1'}), column_number=2), goodtables.cells.create_cell('name3', column_number=3), ] non_matching_header = NonMatchingHeader(order_fields=True) errors = non_matching_header.check_headers(cells) assert log(errors) == [] # A new header cell will be added by the non-matching-header check because # there is no field for the "name3" header assert len(cells) == 4
def test_check_type_or_format_error(log): field = Field({'name': 'name', 'type': 'integer'}) cells = [ goodtables.cells.create_cell('name1', '1', field, column_number=1) ] errors = type_or_format_error(cells) assert log(errors) == [] assert len(cells) == 1
def test_check_missing_header(log): errors = [] cells = [ { 'number': 1, 'header': 'name1', 'field': Field({'name': 'name1'}) }, { 'number': 2, 'header': 'name2', 'field': Field({'name': 'name2'}) }, ] missing_header(errors, cells) assert log(errors) == [] assert len(cells) == 2
def test_check_non_matching_header_problem(log): cells = [ goodtables.cells.create_cell('name1', field=Field({'name': 'name2'}), column_number=1), goodtables.cells.create_cell('name2', field=Field({'name': 'name1'}), column_number=2), goodtables.cells.create_cell('name3', column_number=3), ] non_matching_header = NonMatchingHeader() errors = non_matching_header.check_headers(cells) assert log(errors) == [ (None, 1, 'non-matching-header'), (None, 2, 'non-matching-header'), ] assert len(cells) == 1
def test_check_non_matching_header_order_fields_problem(log): cells = [ goodtables.cells.create_cell('name1', field=Field({'name': 'name4'}), column_number=1), goodtables.cells.create_cell('name2', field=Field({'name': 'name1'}), column_number=2), goodtables.cells.create_cell('name3', column_number=3), ] non_matching_header = NonMatchingHeader(order_fields=True) errors = non_matching_header.check_headers(cells) assert log(errors) == [ (None, 2, 'non-matching-header'), ] # New header cells will be added by the non-matching-header check because # there are no fields for the "name2" and "name3" headers assert len(cells) == 4
def test_check_missing_header_problem(log): errors = [] cells = [ { 'number': 1, 'header': 'name1', 'field': Field({'name': 'name1'}) }, { 'number': 2, 'field': Field({'name': 'name2'}) }, ] missing_header(errors, cells) assert log(errors) == [ (None, 2, 'missing-header'), ] assert len(cells) == 1
def test_number_missingValues(): field = Field({ 'name': 'name', 'type': 'number', }, missing_values=['', 'NA', 'N/A']) cast = field.cast_value assert cast('') == None assert cast('NA') == None assert cast('N/A') == None
def test_check_non_matching_header_with_empty_header_name(log): # When the header is None, it means there's a missing header. cells = [ goodtables.cells.create_cell(None, field=Field({'name': 'name3'}), column_number=1), ] non_matching_header = NonMatchingHeader(order_fields=True) errors = non_matching_header.check_headers(cells) assert log(errors) == [] assert len(cells) == 1
def test_test_value_unique(): field = Field({ 'name': 'name', 'type': 'integer', 'constraints': { 'unique': True } }) test = partial(field.test_value, constraints=['unique']) assert test(30000) == True assert test('bad') == False
def test_test_value_pattern(): field = Field({ 'name': 'name', 'type': 'string', 'constraints': { 'pattern': '3.*' } }) test = partial(field.test_value, constraints=['pattern']) assert test('3') == True assert test('321') == True assert test('123') == False
def test_test_value_maxLength(): field = Field({ 'name': 'name', 'type': 'string', 'constraints': { 'maxLength': 1 } }) test = partial(field.test_value, constraints=['maxLength']) assert test('') == True assert test('a') == True assert test('ab') == False
def test_check_non_matching_header_with_empty_header_name(log): cells = [ goodtables.cells.create_cell(None, field=Field({'name': 'name3'}), column_number=1), ] non_matching_header = NonMatchingHeader(order_fields=True) errors = non_matching_header.check_headers(cells) assert log(errors) == [ (None, 1, 'non-matching-header'), ] assert len(cells) == 0
def test_check_non_matching_header_order_fields(log): errors = [] cells = [ { 'number': 1, 'header': 'name1', 'field': Field({'name': 'name2'}) }, { 'number': 2, 'header': 'name2', 'field': Field({'name': 'name1'}) }, { 'number': 3, 'header': 'name3' }, ] non_matching_header = NonMatchingHeader(order_fields=True) non_matching_header.check_headers(errors, cells) assert log(errors) == [] assert len(cells) == 3
def test_test_value_enum(): field = Field({ 'name': 'name', 'type': 'integer', 'constraints': { 'enum': ['1', '2', '3'] } }) test = partial(field.test_value, constraints=['enum']) assert test('1') == True assert test(1) == True assert test('4') == False assert test(4) == False
def test_check_type_or_format_error_problem(log): field = Field({'name': 'name', 'type': 'integer'}) cells = [ goodtables.cells.create_cell('name1', 'value1', field, column_number=1, row_number=1) ] errors = type_or_format_error(cells) assert log(errors) == [ (1, 1, 'type-or-format-error'), ] assert len(cells) == 0
def test_check_extra_header_infer(log): errors = [] cells = [ {'number': 1, 'header': 'name1', 'field': Field({'name': 'name1'})}, {'number': 2, 'header': 'name2'}, ] sample = [] extra_header = ExtraHeader(infer_fields=True) extra_header.check_headers(errors, cells, sample=sample) assert log(errors) == [] assert len(cells) == 2 assert cells[1]['field'].name == 'name2'
def test_test_value_maximum(): field = Field({ 'name': 'name', 'type': 'integer', 'constraints': { 'maximum': 1 } }) test = partial(field.test_value, constraints=['maximum']) assert test('0') == True assert test(0) == True assert test('1') == True assert test(1) == True assert test('2') == False assert test(2) == False
def test_check_type_or_format_error(log): errors = [] cells = [ { 'number': 1, 'header': 'name1', 'value': '1', 'field': Field({ 'name': 'name', 'type': 'integer' }) }, ] type_or_format_error(errors, cells, 1) assert log(errors) == [] assert len(cells) == 1 assert cells[0]['value'] == 1
def test_check_type_or_format_error_problem(log): errors = [] cells = [ { 'number': 1, 'header': 'name1', 'value': 'value1', 'field': Field({ 'name': 'name', 'type': 'integer' }) }, ] type_or_format_error(errors, cells, 1) assert log(errors) == [ (1, 1, 'type-or-format-error'), ] assert len(cells) == 0
def test_check_extra_header_infer_with_empty_data(log): cells = [ goodtables.cells.create_cell('name1', field=Field({'name': 'name1'}), column_number=1), goodtables.cells.create_cell('name2', column_number=2), ] sample = [ ['123', ''], ['456', ''], ['789', ''], ] extra_header = ExtraHeader(infer_fields=True) errors = extra_header.check_headers(cells, sample=sample) assert log(errors) == [] assert len(cells) == 2 assert cells[1]['field'].name == 'name2' assert cells[1]['field'].type == 'string'
def test_check_extra_header_infer_with_empty_data(log): errors = [] cells = [ {'number': 1, 'header': 'name1', 'field': Field({'name': 'name1'})}, {'number': 2, 'header': 'name2'}, ] sample = [ ['123', ''], ['456', ''], ['789', ''], ] extra_header = ExtraHeader(infer_fields=True) extra_header.check_headers(errors, cells, sample=sample) assert log(errors) == [] assert len(cells) == 2 assert cells[1]['field'].name == 'name2' assert cells[1]['field'].type == 'string'
def test_test_value_required(): field = Field( { 'name': 'name', 'type': 'string', 'constraints': { 'required': True } }, missing_values=['', 'NA', 'N/A']) test = partial(field.test_value, constraints=['required']) assert test('test') == True assert test('null') == True assert test('none') == True assert test('nil') == True assert test('nan') == True assert test('NA') == False assert test('N/A') == False assert test('-') == True assert test('') == False assert test(None) == False
def test_test_value(): assert Field(DESCRIPTOR_MAX).test_value('1') == True assert Field(DESCRIPTOR_MAX).test_value('string') == False assert Field(DESCRIPTOR_MAX).test_value('') == False
def test_cast_value_null_with_missing_values(): field = Field({'name': 'name', 'type': 'number'}, missing_values=['null']) assert field.cast_value('null') == None
def test_test_value_constraints_false(): assert Field(DESCRIPTOR_MIN).test_value('', constraints=False) == True