def test_generate_dictionary():
    # given
    config = {
        "schema_dir": "tap_test_data_generator/schemas",
        "metadata_dir": "tap_test_data_generator/metadatas",
        "object_repository_dir": "tap_test_data_generator/object-repositories",
        "static_input_dir": "",
        "record_number": 100,
        "apply_record_number_on_pairwise": True,
        "data_locale_list": ["en_US", "fr_FR"]
    }
    object_repositories = load_repositories(config)
    catalog = discover(config)
    stream = catalog.get_stream("sample")
    schema_json = load_schema_json(config, stream)
    definitions = load_definitions(schema_json, config)
    value_lists = data_generator.extract_value_lists(None, schema_json,
                                                     object_repositories,
                                                     definitions)
    pairwise_values = AllPairs(value_lists)
    pairs = pairwise_values.next()
    faker_factory = Faker()
    # when
    generated_dict = data_generator.generate_dictionary(
        None, schema_json, {}, faker_factory, object_repositories, pairs,
        definitions, 5)
    # then
    assert generated_dict is not None
    assert "checked" in generated_dict
    assert "dimensions" in generated_dict
    assert "id" in generated_dict
    assert "color" in generated_dict
    assert "price" in generated_dict
    assert "tags" in generated_dict
    assert "hour" in generated_dict
def test_generate_object_repository():
    # given
    property_name = "test_property"
    schema_json = {
        "type": "object",
        "$generator": "#/object-repository/dim-sample",
        "$pairwise": True
    }
    config = {
        "object_repository_dir": "tap_test_data_generator/object-repositories"
    }
    object_repositories = load_repositories(config)
    faker_factory = Faker()
    value_lists = data_generator.extract_value_lists("test_property",
                                                     schema_json,
                                                     object_repositories, {})
    # adding a second property into value_lists because at least 2 properties are required in order to AllPairs works
    value_lists["boolean"] = [True, False]
    pairwise_values = AllPairs(value_lists)
    pairs = pairwise_values.next()
    # when
    dictionary = data_generator.generate_object({}, property_name, schema_json,
                                                faker_factory,
                                                object_repositories, pairs, {},
                                                5)
    # then
    assert dictionary is not None
    assert "test_property" in dictionary
    assert "width" in dictionary["test_property"]
    assert "height" in dictionary["test_property"]
def test_generate_boolean_pair():
    # given
    property_name = "test_property"
    schema_json = {"type": "boolean", "$pairwise": True}
    faker_factory = Faker()
    value_lists = data_generator.extract_value_lists(property_name,
                                                     schema_json, None, {})
    # adding a second property into value_lists because at least 2 properties are required in order to AllPairs works
    value_lists["test2"] = ["A", "B"]
    pairwise_values = AllPairs(value_lists)
    pairs = pairwise_values.next()
    # when
    generated_boolean = data_generator.generate_boolean(
        property_name, schema_json, faker_factory, pairs, 0)
    # then
    assert generated_boolean is not None
    assert isinstance(generated_boolean, bool)
    assert getattr(pairs, property_name) == generated_boolean
def test_generate_string_pair_pattern():
    # given
    property_name = "test_property"
    schema_json = {"type": "string", "pattern": "(A|P)M", "$pairwise": True}
    faker_factory = Faker()
    value_lists = data_generator.extract_value_lists_from_string(
        property_name, schema_json)
    # adding a second property into value_lists because at least 2 properties are required in order to AllPairs works
    value_lists["boolean"] = [True, False]
    pairwise_values = AllPairs(value_lists)
    pairs = pairwise_values.next()
    # when
    generated_string = data_generator.generate_string(property_name,
                                                      schema_json,
                                                      faker_factory, pairs, 0)
    # then
    assert generated_string is not None
    assert "" != generated_string
    assert getattr(pairs, property_name) == generated_string