def setUp(self):

        threads = {
            'test_owner,test_user':
            ChatThread(participants=['test_owner', 'test_user']).add_message(
                ChatMessage(_NOW, 'test_owner', '白人看不懂', 0)),
            'test_user,test_user_1,test_user_2':
            ChatThread(
                participants=['test_owner', 'test_user_1', 'test_user_2']).
            add_message(ChatMessage(
                _NOW, 'test_owner', '白人看不懂', 1)).add_message(
                    ChatMessage(_NOW, 'test_user_1', 'Что это?',
                                2)).add_message(
                                    ChatMessage(_NOW, 'test_user_2',
                                                'En ymmärrä', 2)),
        }

        self.history = FacebookChatHistory(user="******", threads=threads)
        self.output = BytesIO()

        if six.PY3:
            import io
            self.output_handle = io.TextIOWrapper(self.output,
                                                  encoding='UTF-8',
                                                  errors='replace')
        else:
            from encodings.utf_8 import StreamWriter
            self.output_handle = StreamWriter(self.output)
    def test_thread_message_ordering(self):

        # Within thread
        m1 = ChatMessage(timestamp=datetime(2015, 1, 1, 0, 0),
                         seq_num=-3,
                         sender="Sender 1",
                         content="1")
        m2 = ChatMessage(timestamp=datetime(2015, 1, 2, 0, 0),
                         seq_num=-1,
                         sender="Sender 2",
                         content="2")
        m3 = ChatMessage(timestamp=datetime(2015, 1, 2, 0, 0),
                         seq_num=-2,
                         sender="Sender 3",
                         content="3")

        for p in permutations([m1, m2, m3]):
            thread = ChatThread([])

            for m in p:
                thread.add_message(m)
            thread.messages.sort()

            self.assertEqual([1, 3, 2],
                             [int(m.content) for m in thread.messages])
    def test_message_comparison(self):

        m1 = ChatMessage(timestamp=datetime(2015, 1, 1, 0, 0),
                         seq_num=0,
                         sender="Sender 1",
                         content="Chat message 1")

        m2 = ChatMessage(timestamp=datetime(2015, 1, 1, 0, 0),
                         seq_num=-1,
                         sender="Sender 2",
                         content="Chat message 2")

        self.assertTrue(m2 < m1, "Message sequence ordering failed")

        # Order by time
        m2 = m2._replace(timestamp=datetime(2015, 1, 1, 0, 1))
        self.assertTrue(m2 > m1, "Message time ordering failed")
    def test_message_comparison(self):

        m1 = ChatMessage(timestamp=datetime(2015, 1, 1, 0, 0),
                         seq_num=0,
                         sender="Sender 1",
                         content="Chat message 1")

        m2 = ChatMessage(timestamp=datetime(2015, 1, 1, 0, 0),
                         seq_num=-1,
                         sender="Sender 2",
                         content="Chat message 2")

        self.assertTrue(m2 < m1, "Message sequence ordering failed")

        # Order by time
        m2 = m2._replace(timestamp=datetime(2015, 1, 1, 0, 1))
        self.assertTrue(m2 > m1, "Message time ordering failed")