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
예제 #2
0
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
예제 #4
0
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
예제 #5
0
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
예제 #6
0
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
예제 #7
0
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
예제 #8
0
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
예제 #10
0
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
예제 #11
0
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
예제 #12
0
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
예제 #13
0
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
예제 #14
0
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
예제 #15
0
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
예제 #16
0
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
예제 #19
0
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
예제 #20
0
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
예제 #21
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'
예제 #22
0
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
예제 #25
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'
예제 #26
0
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'
예제 #27
0
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
예제 #28
0
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
예제 #29
0
def test_cast_value_null_with_missing_values():
    field = Field({'name': 'name', 'type': 'number'}, missing_values=['null'])
    assert field.cast_value('null') == None
예제 #30
0
def test_test_value_constraints_false():
    assert Field(DESCRIPTOR_MIN).test_value('', constraints=False) == True