After review on the pull request, the final fix differs from the one described in the previous comment:
Failures are handled with then() / catch() instead of fail().
The two changes of the combined options are applied by an asyncperformChainedChanges(...changes) helper, which awaits each change before sending the next one.
performChange() now returns a rejected promise for an unsupported option, so it always returns a promise. The guards comparing against the string 'undefined' are removed instead of being turned into truthy checks.
Out of scope, filed separately:
XWIKI-25264: the user is still not told when saving fails, and the console message prints [object Object] instead of the reason.
XWIKI-25265: NotificationsSettingsIT#watchAndRename fails locally when run after the other tests of its class. It's unrelated to this fix.
This message was sent by Atlassian Jira (v9.3.0#930000-sha1:287aeb6)
If image attachments aren't displayed, see this article.