    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')

