def test_concurrent_account_switches_cannot_leak_another_accounts_page(self): other = fixtures.WeChatMessageBrowserTests()._database(self.root, '777') self.update('UPDATE message_table SET server_id=? WHERE server_id=?', ('account-777', 's2'), other / 'message.db') def read(account): return browser.load_browser_snapshot(cache_roots=[self.root], selected_account=account, selected_conversation='M:200') with concurrent.futures.ThreadPoolExecutor(max_workers=4) as pool: results = list(pool.map(read, ['100', '777'] * 8)) for index, result in enumerate(results): account = '100' if index % 2 == 0 else '777' self.assertEqual(result['selectedAccount'], account) self.assertEqual(result['messages'][-1]['senderId'], account) self.assertEqual(result['messages'][-1]['id'], 's2' if account == '100' else 'account-777') def test_deletion_invalidates_message_and_conversation_counts(self): self.snapshot(selected_conversation='M:200') self.update('DELETE FROM message_table WHERE conversation_id=?', ('M:200',)) result = self.snapshot(selected_conversation='M:200') self.assertEqual(result['messageCount'], 1) self.assertEqual(result['conversationCount'], 1) self.assertEqual(result['selectedConversation'], 'S:100_300') self.assertEqual(result['messages'][0]['id'], 's3')