Пример #1
0
 def setUp(self):
     self.user = User.objects.create_user('testuser', '*****@*****.**',
                                          'testPass')
     self.user.is_staff = True
     self.user.save()
     self.client.login(username='******', password='******')
     self.store = kittystore.get_store(SettingsModule(),
                                       debug=False,
                                       auto_create=True)
     self.client.defaults = {
         "kittystore.store": self.store,
         "HTTP_USER_AGENT": "testbot",
     }
     ml = FakeList("*****@*****.**")
     ml.subject_prefix = u"[example] "
     # Create 2 threads
     self.messages = []
     for msgnum in range(2):
         msg = Message()
         msg["From"] = "*****@*****.**"
         msg["Message-ID"] = "<id%d>" % (msgnum + 1)
         msg["Subject"] = "Dummy message"
         msg.set_payload("Dummy message")
         msg["Message-ID-Hash"] = self.store.add_to_list(ml, msg)
         self.messages.append(msg)
Пример #2
0
 def setUp(self):
     self.user = User.objects.create_user('testuser', '*****@*****.**', 'testPass')
     self.client.login(username='******', password='******')
     # Create test data
     ml = FakeList("*****@*****.**")
     ml.subject_prefix = u"[example] "
     # Create 3 threads
     messages = []
     for msgnum in range(3):
         msg = Message()
         msg["From"] = "*****@*****.**"
         msg["Message-ID"] = "<id%d>" % (msgnum+1)
         msg["Subject"] = "Dummy message"
         msg.set_payload("Dummy message")
         self.store.add_to_list(ml, msg)
         messages.append(msg)
     # 1st is unread, 2nd is read, 3rd is updated
     LastView.objects.create(list_address="*****@*****.**", user=self.user,
                             threadid=get_message_id_hash("<id2>"))
     LastView.objects.create(list_address="*****@*****.**", user=self.user,
                             threadid=get_message_id_hash("<id3>"))
     msg4 = Message()
     msg4["From"] = "*****@*****.**"
     msg4["Message-ID"] = "<id4>"
     msg4["Subject"] = "Dummy message"
     msg4["In-Reply-To"] = "<id3>"
     msg4.set_payload("Dummy message")
     self.store.add_to_list(ml, msg4)
Пример #3
0
 def setUp(self):
     self.user = User.objects.create_user('testuser', '*****@*****.**', 'testPass')
     self.client.login(username='******', password='******')
     store = kittystore.get_store(SettingsModule(), debug=False, auto_create=True)
     self.client.defaults = {"kittystore.store": store,
                             "HTTP_USER_AGENT": "testbot",
                             }
     # Create test data
     ml = FakeList("*****@*****.**")
     ml.subject_prefix = u"[example] "
     # Create 3 threads
     messages = []
     for msgnum in range(3):
         msg = Message()
         msg["From"] = "*****@*****.**"
         msg["Message-ID"] = "<id%d>" % (msgnum+1)
         msg["Subject"] = "Dummy message"
         msg.set_payload("Dummy message")
         store.add_to_list(ml, msg)
         messages.append(msg)
     # 1st is unread, 2nd is read, 3rd is updated
     LastView.objects.create(list_address="*****@*****.**", user=self.user,
                             threadid=get_message_id_hash("<id2>"))
     LastView.objects.create(list_address="*****@*****.**", user=self.user,
                             threadid=get_message_id_hash("<id3>"))
     msg4 = Message()
     msg4["From"] = "*****@*****.**"
     msg4["Message-ID"] = "<id4>"
     msg4["Subject"] = "Dummy message"
     msg4["In-Reply-To"] = "<id3>"
     msg4.set_payload("Dummy message")
     store.add_to_list(ml, msg4)
Пример #4
0
 def setUp(self):
     self.user = User.objects.create_user('testuser', '*****@*****.**',
                                          'testPass')
     self.client.login(username='******', password='******')
     store = kittystore.get_store(SettingsModule(), debug=False)
     ml = FakeList("*****@*****.**")
     ml.subject_prefix = u"[example] "
     # Create 3 threads
     messages = []
     for msgnum in range(3):
         msg = Message()
         msg["From"] = "*****@*****.**"
         msg["Message-ID"] = "<id%d>" % (msgnum + 1)
         msg["Subject"] = "Dummy message"
         msg.set_payload("Dummy message")
         store.add_to_list(ml, msg)
         messages.append(msg)
     # 1st is unread, 2nd is read, 3rd is updated
     LastView.objects.create(list_address="*****@*****.**",
                             user=self.user,
                             threadid=get_message_id_hash("<id2>"))
     LastView.objects.create(list_address="*****@*****.**",
                             user=self.user,
                             threadid=get_message_id_hash("<id3>"))
     msg4 = Message()
     msg4["From"] = "*****@*****.**"
     msg4["Message-ID"] = "<id4>"
     msg4["Subject"] = "Dummy message"
     msg4["In-Reply-To"] = "<id3>"
     msg4.set_payload("Dummy message")
     store.add_to_list(ml, msg4)
     # Factory
     defaults = {"kittystore.store": store, "HTTP_USER_AGENT": "testbot"}
     self.factory = RequestFactory(**defaults)
Пример #5
0
 def test_private_list(self):
     # emails on private lists must not be found by a search on all lists
     ml = FakeList("example-list")
     ml.archive_policy = ArchivePolicy.private
     msg = Message()
     msg["From"] = "*****@*****.**"
     msg["Message-ID"] = "<dummy>"
     msg.set_payload("Dummy message")
     self.store.add_to_list(ml, msg)
     result = self.store.search("dummy")
     self.assertEqual(result["total"], 0)
Пример #6
0
    def add_fetch_data(self):
        msg = Message()
        msg["From"] = "*****@*****.**"
        msg["Subject"] = "Fake Subject"
        msg["Message-ID"] = "<dummy>"
        msg["Date"] = "Fri, 02 Nov 2012 16:07:54"
        msg.set_payload("Fake Message")

        ml = FakeList("example-list")
        ml.display_name = u"name 1"
        ml.subject_prefix = u"[prefix 1]"

        return ml.fqdn_listname, self.store.add_to_list(ml, msg)
Пример #7
0
    def add_fetch_data(self):
        msg = Message()
        msg["From"] = "*****@*****.**"
        msg["Subject"] = "Fake Subject"
        msg["Message-ID"] = "<dummy>"
        msg["Date"] = "Fri, 02 Nov 2012 16:07:54"
        msg.set_payload("Fake Message")

        ml = FakeList("example-list")
        ml.display_name = u"name 1"
        ml.subject_prefix = u"[prefix 1]"

        return ml.fqdn_listname, self.store.add_to_list(ml, msg)
Пример #8
0
 def test_update_list(self):
     """List records must be updated when changed in Mailman"""
     msg = Message()
     msg["From"] = "*****@*****.**"
     msg["Message-ID"] = "<dummy>"
     msg.set_payload("Dummy message")
     ml = FakeList("example-list")
     ml.display_name = u"name 1"
     self.store.add_to_list(ml, msg)
     ml_db = self.store.db.find(List).one()
     self.assertEqual(ml_db.display_name, "name 1")
     ml.display_name = u"name 2"
     self.store.add_to_list(ml, msg)
     ml_db = self.store.db.find(List).one()
     self.assertEqual(ml_db.display_name, "name 2")
Пример #9
0
 def test_vote_cancel(self):
     ml = FakeList("*****@*****.**")
     msg = Message()
     msg["From"] = "*****@*****.**"
     msg["Message-ID"] = "<msg1>"
     msg.set_payload("Dummy message")
     self.store.add_to_list(ml, msg)
     msg.replace_header("Message-ID", "<msg2>")
     self.store.add_to_list(ml, msg)
     msg1 = self.store.get_message_by_id_from_list("*****@*****.**",
                                                   "msg1")
     msg1.vote(1, u"testuser")
     msg2 = self.store.get_message_by_id_from_list("*****@*****.**",
                                                   "msg2")
     msg2.vote(-1, u"testuser")
     self.assertEqual(msg1.likes, 1)
     self.assertEqual(msg2.dislikes, 1)
     for msg in (msg1, msg2):
         url = reverse('message_vote',
                       args=("*****@*****.**", msg.message_id_hash))
         resp = self.client.post(url, {"vote": "0"})
         self.assertEqual(resp.status_code, 200)
         self.assertEqual(msg.likes, 0)
         self.assertEqual(msg.dislikes, 0)
         result = json.loads(resp.content)
         self.assertEqual(result["like"], 0)
         self.assertEqual(result["dislike"], 0)
Пример #10
0
 def test_add_in_classical_thread(self):
     # msg1
     # |-msg2
     # | `-msg4
     # `-msg3
     ml = FakeList("example-list")
     msgs = []
     for num in range(1, 5):
         msg = Message()
         msg["From"] = "*****@*****.**" % num
         msg["Message-ID"] = "<msg%d>" % num
         msg.set_payload("message %d" % num)
         msgs.append(msg)
     msgs[1]["In-Reply-To"] = "<msg1>"
     msgs[2]["In-Reply-To"] = "<msg1>"
     msgs[3]["In-Reply-To"] = "<msg2>"
     for msg in msgs:
         self.store.add_to_list(ml, msg)
     msgs = []
     for num in range(1, 5):
         msg = self.store.get_message_by_id_from_list(
             "example-list", "msg%d" % num)
         msgs.append(msg)
     msg1, msg2, msg3, msg4 = msgs
     self.assertEqual(msg1.thread_order, 0)
     self.assertEqual(msg1.thread_depth, 0)
     self.assertEqual(msg2.thread_order, 1)
     self.assertEqual(msg2.thread_depth, 1)
     self.assertEqual(msg3.thread_order, 3)
     self.assertEqual(msg3.thread_depth, 1)
     self.assertEqual(msg4.thread_order, 2)
     self.assertEqual(msg4.thread_depth, 2)
Пример #11
0
 def setUp(self):
     self.user = User.objects.create_user('testuser', '*****@*****.**', 'testPass')
     self.user.is_staff = True
     self.user.save()
     self.client.login(username='******', password='******')
     ml = FakeList("*****@*****.**")
     ml.subject_prefix = u"[example] "
     # Create 2 threads
     self.messages = []
     for msgnum in range(2):
         msg = Message()
         msg["From"] = "*****@*****.**"
         msg["Message-ID"] = "<id%d>" % (msgnum+1)
         msg["Subject"] = "Dummy message"
         msg.set_payload("Dummy message")
         msg["Message-ID-Hash"] = self.store.add_to_list(ml, msg)
         self.messages.append(msg)
Пример #12
0
 def setUp(self):
     self.tmpdir = mkdtemp(prefix="hyperkitty-testing-")
     self.user = User.objects.create_user('testuser', '*****@*****.**', 'testPass')
     settings = SettingsModule()
     settings.KITTYSTORE_SEARCH_INDEX = self.tmpdir
     self.store = kittystore.get_store(settings, debug=False, auto_create=True)
     self.client.defaults = {"kittystore.store": self.store,
                             "HTTP_USER_AGENT": "testbot",
                             }
     ml = FakeList("*****@*****.**")
     ml.subject_prefix = u"[example] "
     ml.archive_policy = ArchivePolicy.private
     msg = Message()
     msg["From"] = "*****@*****.**"
     msg["Message-ID"] = "<msgid>"
     msg["Subject"] = "Dummy message"
     msg.set_payload("Dummy message")
     msg["Message-ID-Hash"] = self.msgid = self.store.add_to_list(ml, msg)
Пример #13
0
 def test_date_aware(self):
     msg = Message()
     msg["From"] = "*****@*****.**"
     msg["Message-ID"] = "<dummy>"
     msg["Date"] = "Fri, 02 Nov 2012 16:07:54 +0100"
     msg.set_payload("Dummy message")
     try:
         self.store.add_to_list(FakeList("example-list"), msg)
     except IntegrityError, e:
         self.fail(e)
Пример #14
0
 def test_no_date(self):
     msg = Message()
     msg["From"] = "*****@*****.**"
     msg["Message-ID"] = "<dummy>"
     msg.set_payload("Dummy message")
     now = datetime.datetime.utcnow()
     try:
         self.store.add_to_list(FakeList("example-list"), msg)
     except IntegrityError, e:
         self.fail(e)
Пример #15
0
 def test_subject(self):
     ml = FakeList("example-list")
     msg = Message()
     msg["From"] = "*****@*****.**"
     msg["Message-ID"] = "<dummymsg>"
     msg["Date"] = "Fri, 02 Nov 2012 16:07:54 +0000"
     msg["Subject"] = "Dummy subject"
     msg.set_payload("Dummy message")
     self.store.add_to_list(ml, msg)
     thread = self.store.db.find(Thread).one()
     self.assertEqual(thread.subject, "Dummy subject")
Пример #16
0
 def setUp(self):
     self.user = User.objects.create_user('testuser', '*****@*****.**', 'testPass')
     self.user.is_staff = True
     self.client.login(username='******', password='******')
     self.store = kittystore.get_store(SettingsModule(), debug=False)
     ml = FakeList("*****@*****.**")
     ml.subject_prefix = u"[example] "
     # Create 2 threads
     self.messages = []
     for msgnum in range(2):
         msg = Message()
         msg["From"] = "*****@*****.**"
         msg["Message-ID"] = "<id%d>" % (msgnum+1)
         msg["Subject"] = "Dummy message"
         msg.set_payload("Dummy message")
         msg["Message-ID-Hash"] = self.store.add_to_list(ml, msg)
         self.messages.append(msg)
     # Factory
     defaults = {"kittystore.store": self.store, "HTTP_USER_AGENT": "testbot"}
     self.factory = RequestFactory(**defaults)
Пример #17
0
 def setUp(self):
     self.tmpdir = mkdtemp(prefix="hyperkitty-testing-")
     self.user = User.objects.create_user('testuser', '*****@*****.**',
                                          'testPass')
     settings = SettingsModule()
     settings.KITTYSTORE_SEARCH_INDEX = self.tmpdir
     self.store = kittystore.get_store(settings,
                                       debug=False,
                                       auto_create=True)
     self.client.defaults = {
         "kittystore.store": self.store,
         "HTTP_USER_AGENT": "testbot",
     }
     ml = FakeList("*****@*****.**")
     ml.subject_prefix = u"[example] "
     ml.archive_policy = ArchivePolicy.private
     msg = Message()
     msg["From"] = "*****@*****.**"
     msg["Message-ID"] = "<msgid>"
     msg["Subject"] = "Dummy message"
     msg.set_payload("Dummy message")
     msg["Message-ID-Hash"] = self.msgid = self.store.add_to_list(ml, msg)
Пример #18
0
    def test_thread_neighbors(self):
        ml = FakeList("example-list")
        # Create 3 threads
        msg_t1_1 = Message()
        msg_t1_1["From"] = "*****@*****.**"
        msg_t1_1["Message-ID"] = "<id1_1>"
        msg_t1_1.set_payload("Dummy message")
        self.store.add_to_list(ml, msg_t1_1)
        msg_t2_1 = Message()
        msg_t2_1["From"] = "*****@*****.**"
        msg_t2_1["Message-ID"] = "<id2_1>"
        msg_t2_1.set_payload("Dummy message")
        self.store.add_to_list(ml, msg_t2_1)
        msg_t3_1 = Message()
        msg_t3_1["From"] = "*****@*****.**"
        msg_t3_1["Message-ID"] = "<id3_1>"
        msg_t3_1.set_payload("Dummy message")
        self.store.add_to_list(ml, msg_t3_1)

        # Check the neighbors
        def check_neighbors(thread, expected_prev, expected_next):
            thread_id = get_message_id_hash("<id%s_1>" % thread)
            prev_th, next_th = self.store.get_thread_neighbors(
                "example-list", thread_id)
            # convert to something I can compare
            prev_th = prev_th and prev_th.thread_id
            expected_prev = expected_prev and \
                    get_message_id_hash("<id%s_1>" % expected_prev)
            next_th = next_th and next_th.thread_id
            expected_next = expected_next and \
                    get_message_id_hash("<id%s_1>" % expected_next)
            # compare
            self.assertEqual(prev_th, expected_prev)
            self.assertEqual(next_th, expected_next)

        # Order should be: 1, 2, 3
        check_neighbors(1, None, 2)
        check_neighbors(2, 1, 3)
        check_neighbors(3, 2, None)
        # now add a new message in thread 1, which becomes the most recently
        # active
        msg_t1_2 = Message()
        msg_t1_2["From"] = "*****@*****.**"
        msg_t1_2["Message-ID"] = "<id1_2>"
        msg_t1_2["In-Reply-To"] = "<id1_1>"
        msg_t1_2.set_payload("Dummy message")
        self.store.add_to_list(ml, msg_t1_2)
        # Order should be: 2, 3, 1
        check_neighbors(2, None, 3)
        check_neighbors(3, 2, 1)
        check_neighbors(1, 3, None)
Пример #19
0
 def test_attachment_insert_order(self):
     """Attachments must not be inserted in the DB before the email"""
     # Re-activate foreign key support in sqlite
     self.store.db._connection._raw_connection.isolation_level = 'IMMEDIATE'
     self.store.db.execute("PRAGMA foreign_keys = ON")
     self.store.db._connection._raw_connection.execute(
         "PRAGMA foreign_keys = ON")
     #print "*"*10, list(self.store.db.execute("PRAGMA foreign_keys"))
     #self.store = get_storm_store("postgres://*****:*****@localhost/kittystore_test")
     with open(get_test_file("attachment-1.txt")) as email_file:
         msg = email.message_from_file(email_file, _class=Message)
     try:
         self.store.add_to_list(FakeList("example-list"), msg)
     except IntegrityError, e:
         self.fail(e)
Пример #20
0
 def setUp(self):
     store = kittystore.get_store(SettingsModule(),
                                  debug=False,
                                  auto_create=True)
     self.client.defaults = {
         "kittystore.store": store,
         "HTTP_USER_AGENT": "testbot",
     }
     # Create the list by adding a dummy message
     ml = FakeList("*****@*****.**")
     msg = Message()
     msg["From"] = "*****@*****.**"
     msg["Message-ID"] = "<msg>"
     msg.set_payload("Dummy message")
     store.add_to_list(ml, msg)
Пример #21
0
 def test_starting_message_1(self):
     # A basic thread: msg2 replies to msg1
     ml = FakeList("example-list")
     msg1 = Message()
     msg1["From"] = "*****@*****.**"
     msg1["Message-ID"] = "<msg1>"
     msg1.set_payload("message 1")
     self.store.add_to_list(ml, msg1)
     msg2 = Message()
     msg2["From"] = "*****@*****.**"
     msg2["Message-ID"] = "<msg2>"
     msg2.set_payload("message 2")
     msg2["In-Reply-To"] = msg1["Message-ID"]
     self.store.add_to_list(ml, msg2)
     thread = self.store.db.find(Thread).one()
     self.assertEqual(thread.starting_email.message_id, "msg1")
Пример #22
0
 def test_starting_message_2(self):
     # A partially-imported thread: msg1 replies to something we don't have
     ml = FakeList("example-list")
     msg1 = Message()
     msg1["From"] = "*****@*****.**"
     msg1["Message-ID"] = "<msg1>"
     msg1["In-Reply-To"] = "<msg0>"
     msg1.set_payload("message 1")
     self.store.add_to_list(ml, msg1)
     msg2 = Message()
     msg2["From"] = "*****@*****.**"
     msg2["Message-ID"] = "<msg2>"
     msg2["In-Reply-To"] = msg1["Message-ID"]
     msg2.set_payload("message 2")
     self.store.add_to_list(ml, msg2)
     thread = self.store.db.find(Thread).one()
     self.assertEqual(thread.starting_email.message_id, "msg1")
Пример #23
0
 def test_starting_message_3(self):
     # A thread where the reply has an anterior date to the first email
     # (the In-Reply-To header must win over the date sort)
     ml = FakeList("example-list")
     msg1 = Message()
     msg1["From"] = "*****@*****.**"
     msg1["Message-ID"] = "<msg1>"
     msg1["Date"] = "Fri, 02 Nov 2012 16:07:54 +0000"
     msg1.set_payload("message 1")
     self.store.add_to_list(ml, msg1)
     msg2 = Message()
     msg2["From"] = "*****@*****.**"
     msg2["Message-ID"] = "<msg2>"
     msg2["Date"] = "Fri, 01 Nov 2012 16:07:54 +0000"
     msg2.set_payload("message 2")
     msg2["In-Reply-To"] = msg1["Message-ID"]
     self.store.add_to_list(ml, msg2)
     thread = self.store.db.find(Thread).one()
     self.assertEqual(thread.starting_email.message_id, "msg1")
Пример #24
0
 def setUp(self):
     self.user = User.objects.create_user('testuser', '*****@*****.**',
                                          'testPass')
     self.client.login(username='******', password='******')
     # use a temp variable below because self.client.session is actually a
     # property which returns a new instance en each call :-/
     session = self.client.session
     session["user_id"] = u"testuser"
     session.save()
     self.store = kittystore.get_store(SettingsModule(),
                                       debug=False,
                                       auto_create=True)
     self.client.defaults = {
         "kittystore.store": self.store,
         "HTTP_USER_AGENT": "testbot",
     }
     # Create a dummy message to test on
     ml = FakeList("*****@*****.**")
     msg = Message()
     msg["From"] = "*****@*****.**"
     msg["Message-ID"] = "<msg>"
     msg.set_payload("Dummy message")
     self.store.add_to_list(ml, msg)
Пример #25
0
 def test_update_list(self):
     """List records must be updated when changed in Mailman"""
     msg = Message()
     msg["From"] = "*****@*****.**"
     msg["Message-ID"] = "<dummy>"
     msg.set_payload("Dummy message")
     ml = FakeList("example-list")
     ml.display_name = u"name 1"
     ml.subject_prefix = u"[prefix 1]"
     self.store.add_to_list(ml, msg)
     ml_db = self.store.db.find(List).one()
     self.assertEqual(ml_db.display_name, "name 1")
     self.assertEqual(ml_db.subject_prefix, "[prefix 1]")
     ml.display_name = u"name 2"
     ml.subject_prefix = u"[prefix 2]"
     self.store.add_to_list(ml, msg)
     ml_db = self.store.db.find(List).one()
     self.assertEqual(ml_db.display_name, "name 2")
     self.assertEqual(ml_db.subject_prefix, "[prefix 2]")
Пример #26
0
 def test_no_message_id(self):
     msg = Message()
     self.assertRaises(ValueError, self.store.add_to_list,
                       FakeList("example-list"), msg)