Hola,
He implementado el Gestor de Configuración de Usuario con add_setting, update_setting, delete_setting y view_settings. Para probarlo, hice un pequeño debugger que recorre todos los casos posibles (clave duplicada, nueva clave, actualización existente, actualización inexistente, eliminación existente o inexistente y mostrar configuraciones).
El problema es que a pesar de que mi debugger muestra que debería funcionar correctamente, cuando lo corro en el laboratorio me salen algunos errores inesperados en ciertas pruebas. No entiendo por qué ocurre esto, porque según mi salida de consola todo debería pasar.
¿Alguien sabe por qué podría estar pasando esto o si hay algún detalle que estoy pasando por alto en la implementación?
def add_setting(config, tupla):
clave, valor = tupla
clave = clave.lower()
valor = valor.lower()
if clave in {clave2.lower() for clave2 in config.keys()}: #existeix
print(f"Setting '{clave}' already exists! Cannot add a new setting with this name.")
else: # no existeix
config\[clave\] = valor
print(f"Setting '{clave}' added with value '{valor}' successfully!")
def update_setting(config, tupla):
clave, valor = tupla
valor = valor.lower()
clave = clave.lower()
if clave in config: #existeix
config\[clave\] = valor
print(f"Setting '{clave}' updated to '{valor}' successfully!")
else: # no existeix
print(f"Setting '{clave}' does not exist! Cannot update a non-existing setting.")
def delete_setting(config, clave):
clave = clave.lower()
if clave in {clave2.lower() for clave2 in config.keys()}: #existeix
del config\[clave\]
print(f"Setting '{clave}' deleted successfully!")
else: #no existeix
print(f"Setting not found!")
def view_settings(config):
if not config: #està buit
print(f"No settings available.")
else: #no està buit
print(f"Current User Settings: ")
for clave, valor in config.items():
print(f"{clave.capitalize()}: {valor}")
test_settings = {
‘theme’: ‘light’,
‘notifications’: ‘enabled’,
‘volume’: ‘high’
}
print(“\n— DEBUGGER: Probando todas las posibilidades —\n”)
# 6. Probar add_setting con clave duplicada
print(“Prueba 6: add_setting con clave duplicada”)
add_setting({‘theme’: ‘light’}, (‘THEME’, ‘dark’))
print()
# 7. Probar add_setting con nueva clave
print(“Prueba 7: add_setting con nueva clave”)
config7 = {‘theme’: ‘light’}
add_setting(config7, (‘volume’, ‘high’))
view_settings(config7)
print()
# 13. Probar update_setting con clave existente
print(“Prueba 13: update_setting clave existente”)
config13 = {‘theme’: ‘light’}
update_setting(config13, (‘theme’, ‘dark’))
view_settings(config13)
print()
# 14. Probar update_setting con clave no existente
print(“Prueba 14: update_setting clave no existente”)
config14 = {‘theme’: ‘light’}
update_setting(config14, (‘volume’, ‘high’))
print()
# 19. Probar delete_setting con clave existente
print(“Prueba 19: delete_setting clave existente”)
config19 = {‘theme’: ‘light’}
delete_setting(config19, ‘theme’)
view_settings(config19)
print()
# 20. Probar delete_setting con clave no existente
print(“Prueba 20: delete_setting clave no existente”)
config20 = {‘theme’: ‘light’}
delete_setting(config20, ‘volume’)
print()
# 24. Probar view_settings con diccionario vacío
print(“Prueba 24: view_settings diccionario vacío”)
view_settings({})
print()
# 25-27. Probar view_settings con diccionario no vacío
print(“Prueba 25-27: view_settings diccionario no vacío”)
view_settings(test_settings)
print(“\n— FIN DEL DEBUGGER —”)
// ejecutando pruebas
6. add_setting({‘theme’: ‘light’}, (‘THEME’, ‘dark’)) debería devolver el mensaje de error Setting ‘theme’ already exists! Cannot add a new setting with this name..
7. add_setting({‘theme’: ‘light’}, (‘volume’, ‘high’)) debería agregar un nuevo par clave-valor y devolver el mensaje de éxito Setting ‘volume’ added with value ‘high’ successfully!.
13. update_setting({‘theme’: ‘light’}, (‘theme’, ‘dark’)) debería actualizar una clave existente y devolver el mensaje de éxito Setting ‘theme’ updated to ‘dark’ successfully!.
14. update_setting({‘theme’: ‘light’}, (‘volume’, ‘high’)) debería devolver el mensaje de error Setting ‘volume’ does not exist! Cannot update a non-existing setting. cuando la clave no exista.
19. delete_setting({‘theme’: ‘light’}, ‘theme’) debería eliminar la clave existente y devolver el mensaje de éxito Setting ‘theme’ deleted successfully!.
20. delete_setting debería devolver el mensaje de error Setting not found! cuando la clave no exista.
24. view_settings debería devolver el mensaje No settings available. si el diccionario dado está vacío.
25. view_settings debe devolver configuraciones formateadas para un diccionario no vacío.
26. view_settings debe capitalizar la primera letra de cada nombre de configuración.
27. view_settings debería mostrar los resultados correctos y terminar con un carácter de nueva línea.
// pruebas completadas
// salida de consola
— DEBUGGER: Probando todas las posibilidades —
Prueba 6: add_setting con clave duplicada
Setting ‘theme’ already exists! Cannot add a new setting with this name.
Prueba 7: add_setting con nueva clave
Setting ‘volume’ added with value ‘high’ successfully!
Current User Settings:
Theme: light
Volume: high
Prueba 13: update_setting clave existente
Setting ‘theme’ updated to ‘dark’ successfully!
Current User Settings:
Theme: dark
Prueba 14: update_setting clave no existente
Setting ‘volume’ does not exist! Cannot update a non-existing setting.
Prueba 19: delete_setting clave existente
Setting ‘theme’ deleted successfully!
No settings available.
Prueba 20: delete_setting clave no existente
Setting not found!
Prueba 24: view_settings diccionario vacío
No settings available.
Prueba 25-27: view_settings diccionario no vacío
Current User Settings:
Theme: light
Notifications: enabled
Volume: high
— FIN DEL DEBUGGER —
