def METHOD_NAME(params=None, settings_file_name=None, initial=True) -> GenerateConfigResponse:
    """Generate a configuration given a settings file.
    :param initial: Bool for if this is the first run
    :param settings_file_name: Name of settings file name
    :param params: Configuration parameters
    :returns: Generated config response object
    """
    if params is None:
        params = []
    if settings_file_name:
        settings_file_path = os.path.join(TEST_FIXTURE_DIR, settings_file_name)
        with open(file=settings_file_path, encoding="utf-8") as fh:
            try:
                settings_contents = yaml.load(fh, Loader=Loader)
            except yaml.parser.ParserError:
                # let the configuration subsystem catch the invalid yaml file
                settings_contents = {}
    else:
        settings_file_path = ""
        settings_contents = {}
    # make a deep copy here to ensure we do not modify the original
    application_configuration = deepcopy(NavigatorConfiguration)
    application_configuration.internals.initializing = initial
    application_configuration.application_version = "test"
    application_configuration.internals.settings_file_path = settings_file_path or None
    configurator = Configurator(
        application_configuration=application_configuration,
        params=params,
    )
    messages, exit_messages = configurator.configure()
    return GenerateConfigResponse(
        messages=messages,
        exit_messages=exit_messages,
        application_configuration=application_configuration,
        settings_contents=settings_contents,
    )