def test_get_boolean_data(self): boolean_field = DataField("boolean", "BOOL_HEADER", options="Not Bool, Other Thing, True") boolean_data = boolean_field.get_data() assert isinstance(boolean_data, str) assert boolean_data == "TRUE" or boolean_data == "FALSE"
def test_get_integer_data(self): integer_field = DataField("integer", "INT_HEADER", min_length=3, max_length=20) integer_data = integer_field.get_data() assert isinstance(int(integer_data), int) assert 3 <= len(integer_data) <= 20
def test_get_str_starts_with(self): str_field = DataField("STRING", "STRING_HEADER", starts_with="Michael", min_length=10, max_length=12) str_data = str_field.get_data() assert isinstance(str_data, str) assert 10 <= len(str_data) <= 12 assert str_data.index("Michael") == 0
def test_get_int_starts_with(self): int_field = DataField("INTEGER", "INT_HEADER", starts_with=3000, min_length=15, max_length=15) int_data = int_field.get_data() assert isinstance(int(int_data), int) assert len(int_data) == 15 assert int_data[:4] == "3000"
def test_get_string_data_with_characters(self): string_field = DataField("STRING", "STRING_HEADER", min_length=10, max_length=50, characters="letters") string_data = string_field.get_data() assert 10 <= len(string_data) <= 50 for char in string_data: assert char in string.ascii_letters
def test_get_regexp_data(self): regexp_field = DataField("STRING", "REGEXP_HEADER", regexp="\\d{1,2}/\\d{1,2}/\\d{4}") regexp_data = regexp_field.get_data() pattern = re.compile(regexp_field.regexp) match_object = re.match(pattern, regexp_data) try: match_object.group() except AttributeError: pytest.fail( "Generated data did not match regular expression pattern: {}". format(regexp_data))
def test_invalid_regexp(self): with pytest.raises(AssertionError) as e: f = DataField("string", "test_field_name", regexp="[]", characters="urlsafe") assert "Invalid regular expression syntax `[]`: " in str(e)
def test_get_options_data(self): int_options_field = DataField("INTEGER", "OPTIONS_HEADER", options="1, 2, 3, 4, 5, 6, 7, 8, 9, 0", regexp="\\d{1,2}/\\d{1,2}/\\d{4}") int_options_data = int_options_field.get_data() assert int_options_data in string.digits assert isinstance(int(int_options_data), int) string_options_field = DataField( "STRING", "OPTIONS_HEADER", options="1, 2, 3, 4, 5, 6, 7, 8, 9, 0", regexp="\\d{1,2}/\\d{1,2}/\\d{4}") string_options_data = string_options_field.get_data() assert string_options_data in string.digits assert isinstance(string_options_data, str)
class TestDataRow: # Create a test field for each major type of data for testing. integer_field = DataField("integer", "INT_HEADER", min_length=3, max_length=20) boolean_field = DataField("Boolean", "BOOL_HEADER", options="Not Bool, Other Thing, True") string_field = DataField("STRING", "STRING_HEADER", min_length=10, max_length=50, characters="letters") options_field = DataField("string", "OPTIONS_HEADER", options="Not Bool, Other Thing, True") regexp_field = DataField("STRING", "REGEXP_HEADER", regexp="\\d{1,2}/\\d{1,2}/\\d{4}") test_fields = [ integer_field, boolean_field, string_field, options_field, regexp_field ] not_data_field = "Michael test" def test_add_data_field(self): row = DataRow() for field in self.test_fields: row.add_data_field(field) assert row.field_count == 5 assert len(row.fields) == 5 def test_add_not_data_field_fails(self): row = DataRow() with pytest.raises(AssertionError) as e: row.add_data_field(self.not_data_field) assert "Only objects of type SnowLibrary.keywords.file_creator.DataField can be added. Instead got: <class 'str'>" in str( e) def test_create_header_row(self): row = DataRow() for field in self.test_fields: row.add_data_field(field) header_row = row.create_header_row() for f in row.fields: assert f.header in header_row assert isinstance(header_row, list) def test_create_detail_row(self): row = DataRow() for field in self.test_fields: row.add_data_field(field) detail_row = row.create_detail_row() for f in row.fields: assert f.header not in detail_row assert isinstance(detail_row, list) def test_data_row_has_no_fields(self): """Don't create a row if no fields have been specified. Raise an AssertionError.""" row = DataRow() with pytest.raises(AssertionError) as e: h = row.create_header_row() assert "No data fields have been added to the data row. Header row would be empty." in str( e) with pytest.raises(AssertionError) as e: h = row.create_detail_row() assert "No data fields have been added to the data row. Detail row would be empty." in str( e)
def test_get_string_data_no_characters(self): string_field = DataField("STRING", "STRING_HEADER") string_data = string_field.get_data() assert 1 <= len(string_data) <= 1000 for char in string_data: assert char in string.printable
def test_invalid_characters(self): with pytest.raises(AssertionError) as e: f = DataField("string", "test_field_name", characters="junk") assert "Invalid character type specified: `junk`." in str(e)
def test_invalid_data_type(self): with pytest.raises(AssertionError) as e: f = DataField("test_no_data", "test_field_name") assert "Invalid data type specified. Expected either integer, string, or boolean, but `test_no_data` was " \ "provided." in str(e)