from __future__ import annotations from cf_temp_email_deploy.app_admin import ( LINUXDO_ACCESS_TOKEN_URL, LINUXDO_AUTHORIZATION_URL, LINUXDO_SCOPE, LINUXDO_USER_INFO_URL, build_linuxdo_oauth2_setting, merge_linuxdo_oauth2_settings, merge_user_settings, ) def test_merge_user_settings_preserves_existing_fields_and_updates_enable() -> None: current = { "enable": True, "enableMailVerify": True, "verifyMailSender": "noreply@example.com", "enableMailAllowList": True, "mailAllowList": ["allowed@example.com"], "maxAddressCount": 9, "enableEmailCheckRegex": True, "emailCheckRegex": ".*", } merged = merge_user_settings(current, False) assert merged["enable"] is False assert merged["enableMailVerify"] is True assert merged["verifyMailSender"] == "noreply@example.com" assert merged["enableMailAllowList"] is True assert merged["mailAllowList"] == ["allowed@example.com"] assert merged["maxAddressCount"] == 9 assert merged["enableEmailCheckRegex"] is True assert merged["emailCheckRegex"] == ".*" def test_build_linuxdo_oauth2_setting_matches_expected_fields() -> None: setting = build_linuxdo_oauth2_setting( pages_domain="email.example.com", client_id="linuxdo-client-id", client_secret="linuxdo-client-secret", ) assert setting["name"] == "LINUX DO" assert setting["clientID"] == "linuxdo-client-id" assert setting["clientSecret"] == "linuxdo-client-secret" assert setting["authorizationURL"] == LINUXDO_AUTHORIZATION_URL assert setting["accessTokenURL"] == LINUXDO_ACCESS_TOKEN_URL assert setting["userInfoURL"] == LINUXDO_USER_INFO_URL assert setting["redirectURL"] == "https://email.example.com/user/oauth2/callback" assert setting["scope"] == LINUXDO_SCOPE assert setting["enableEmailFormat"] is True assert setting["userEmailReplace"] == "linux_do_$1@oauth.linux.do" def test_merge_linuxdo_oauth2_settings_appends_when_missing() -> None: merged = merge_linuxdo_oauth2_settings( [{"name": "GitHub", "clientID": "github-client"}], pages_domain="email.example.com", client_id="linuxdo-client-id", client_secret="linuxdo-client-secret", ) assert len(merged) == 2 assert merged[0]["name"] == "GitHub" assert merged[1]["name"] == "LINUX DO" assert merged[1]["redirectURL"] == "https://email.example.com/user/oauth2/callback" def test_merge_linuxdo_oauth2_settings_replaces_existing_and_preserves_selected_fields() -> None: current = [ { "name": "linux do", "clientID": "old-client-id", "clientSecret": "old-client-secret", "authorizationURL": LINUXDO_AUTHORIZATION_URL, "accessTokenURL": LINUXDO_ACCESS_TOKEN_URL, "userInfoURL": LINUXDO_USER_INFO_URL, "redirectURL": "https://old.example.com/user/oauth2/callback", "logoutURL": "https://connect.linux.do/logout", "enableMailAllowList": True, "mailAllowList": ["allowed@example.com"], } ] merged = merge_linuxdo_oauth2_settings( current, pages_domain="email.example.com", client_id="linuxdo-client-id", client_secret="linuxdo-client-secret", ) assert len(merged) == 1 assert merged[0]["name"] == "LINUX DO" assert merged[0]["clientID"] == "linuxdo-client-id" assert merged[0]["clientSecret"] == "linuxdo-client-secret" assert merged[0]["redirectURL"] == "https://email.example.com/user/oauth2/callback" assert merged[0]["logoutURL"] == "https://connect.linux.do/logout" assert merged[0]["enableMailAllowList"] is True assert merged[0]["mailAllowList"] == ["allowed@example.com"]