def METHOD_NAME(click_runner, custom_filepath: Path, config_class, monkeypatch, test_registry, test_registry_source_manager):
    def fake_get_latest_registry(*args, **kwargs):
        return test_registry
    monkeypatch.setattr(InMemoryContractRegistry, 'from_latest_publication', fake_get_latest_registry)
    monkeypatch.setattr(CharacterConfiguration, 'DEFAULT_PAYMENT_NETWORK', TEMPORARY_DOMAIN)
    custom_config_filepath = custom_filepath / config_class.generate_filename()
    view_args = (config_class.CHARACTER_CLASS.__name__.lower(), 'config',
                 '--config-file', str(custom_config_filepath.absolute()),
                 '--debug')
    result = click_runner.invoke(nucypher_cli, view_args, env=ENV)
    assert result.exit_code == 0, result.output
    # Ensure all config fields are displayed
    config = config_class.from_configuration_file(custom_config_filepath)
    analog_payload = json.loads(config.serialize())
    for field in analog_payload:
        assert field in result.output
    # Read pre-edit state
    config = config_class.from_configuration_file(custom_config_filepath)
    assert config.eth_provider_uri != TEST_ETH_PROVIDER_URI
    del config
    # Write
    view_args = (config_class.CHARACTER_CLASS.__name__.lower(), 'config',
                 '--config-file', str(custom_config_filepath.absolute()),
                 '--eth-provider', TEST_ETH_PROVIDER_URI)
    result = click_runner.invoke(nucypher_cli, view_args, env=ENV)
    assert result.exit_code == 0
    # Read again
    config = config_class.from_configuration_file(custom_config_filepath)
    analog_payload = json.loads(config.serialize())
    for field in analog_payload:
        assert field in result.output
    assert str(custom_filepath) in result.output
    # After editing the fields have been updated
    assert config.eth_provider_uri == TEST_ETH_PROVIDER_URI