Files
movim-rs/tests/e2e/browser_omemo_restore.py
T
2026-10-27 23:49:59 +07:00

59 lines
2.8 KiB
Python

"""OMEMO key backup restored in another browser: the decrypted messages come with it,
including our own (edited) ones that are never encrypted for the sending device."""
import asyncio
from playwright.async_api import async_playwright
from browser import login, BASE, OUT
from browser_edit import send, edit_last, bubbles, open_chat
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch()
actx, alice, aerr = await login(browser, "alice@localhost", "alicepass", "restorealice")
bctx, bob, berr = await login(browser, "bob@localhost", "bobpass", "restorebob")
await alice.wait_for_timeout(4000)
await open_chat(alice, "bob@localhost")
await open_chat(bob, "alice@localhost")
await alice.evaluate("ChatOmemo.enableContactState('bob@localhost', false)")
await alice.wait_for_timeout(5000)
await send(alice, "Khôi phục: bản gốc")
await edit_last(alice, "Khôi phục: đã sửa")
await send(bob, "Khôi phục: trả lời của bob")
print("before, alice:", await bubbles(alice, 2))
# Backup
await alice.goto(BASE + "/configuration")
await alice.wait_for_timeout(3000)
await alice.evaluate("Account_ajaxOmemoBackup()")
await alice.wait_for_selector("form[name=omemo_backup] input[name=password]", timeout=10000)
await alice.fill("form[name=omemo_backup] input[name=password]", "secret")
await alice.fill("form[name=omemo_backup] input[name=password_confirmation]", "secret")
async with alice.expect_download() as dl:
await alice.evaluate("Account.omemoBackup()")
path = f"{OUT}/restore_backup.json"
await (await dl.value).save_as(path)
# Restore in a fresh browser
ctx2, alice2, a2err = await login(browser, "alice@localhost", "alicepass", "restorealice2")
await alice2.wait_for_timeout(4000)
await alice2.goto(BASE + "/configuration")
await alice2.wait_for_timeout(3000)
await alice2.evaluate("Account_ajaxOmemoRestore()")
await alice2.wait_for_selector("form[name=omemo_restore] input[name=file]", timeout=10000)
await alice2.set_input_files("form[name=omemo_restore] input[name=file]", path)
await alice2.fill("form[name=omemo_restore] input[name=password]", "secret")
async with alice2.expect_navigation():
await alice2.evaluate("Account.omemoRestore()")
await alice2.wait_for_timeout(4000)
await open_chat(alice2, "bob@localhost")
print("restored, alice:", await bubbles(alice2, 2))
await alice2.screenshot(path=f"{OUT}/restore_alice2.png")
for e in aerr + berr + a2err:
print(e)
await browser.close()
asyncio.run(main())