~aaronp/software-center/enhance-usefulness

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#!/usr/bin/python

import mock
import sys
import unittest
sys.path.insert(0,"../")
from softwarecenter.utils import *
from softwarecenter.db.application import Application
from softwarecenter.db.reviews import Review

sys.path.insert(0, "../utils")

class TestReviews(unittest.TestCase):
    """ tests the reviews """

    def test_reviews_sorting_by_version(self):
        # new version
        a1 = Review(Application("", "foo_pkg1"))
        a1.id = 1
        a1.version = "1.0"
        # old version
        a2 = Review(Application("f", "foo_pkg2"))
        a2.id = 2
        a2.version = "0.1"
        # now ensure that the new version is sorted in front
        self.assertEqual(sorted([a2, a1], reverse=True), [a1, a2])

    def test_reviews_sorting_by_usefulness(self):
        # new version
        a1 = Review(Application("", "foo_pkg1"))
        a1.id = 1
        a1.usefulness_favorable = 20
        a1.version = "1.0"
        # old version
        a2 = Review(Application("f", "foo_pkg2"))
        a2.id = 2
        a2.usefulness_favorable = 10
        a2.version = "1.0"
        # now ensure that the new version is sorted in front
        self.assertEqual(sorted([a2, a1], reverse=True), [a1, a2])

    def test_reviews_sorting_by_date(self):
        # new version
        a1 = Review(Application("", "foo_pkg1"))
        a1.date_created = "2012-01-01 10:00:00"
        a1.id = 1
        a1.usefulness_favorable = 10
        a1.version = "1.0"
        # old version
        a2 = Review(Application("f", "foo_pkg2"))
        a2.id = 2
        a2.date_created = "2011-01-01 10:00:00"
        a2.usefulness_favorable = 10
        a2.version = "1.0"
        # now ensure that the new version is sorted in front
        self.assertEqual(sorted([a2, a1], reverse=True), [a1, a2])

    def test_gwibber_message(self):
        from submit_review import SubmitReviewsApp
        mock_app = mock.Mock()
        mock_app.pkgname = "foo_pkg"
        mock_app.name = "foo_app"
        sa = SubmitReviewsApp(mock_app, None, None, None, None, "../data")
        # short entry
        sa.review_summary_entry.set_text("summary")
        sa.star_rating.set_rating(1)
        self.assertEqual(sa._gwibber_message(), u"reviewed foo_app in Ubuntu: \u2605\u2606\u2606\u2606\u2606 summary ")
        # long entry
        sa.review_summary_entry.set_text("long long review_summary long looong looooong looooooong loooooooong loooooooong loooooooong loooooooong loooooooong loooooooong loooooooong")
        sa.star_rating.set_rating(3)
        gwibber_msg = sa._gwibber_message(max_len=141)
        self.assertEqual(len(gwibber_msg), 141)
        self.assertEqual(gwibber_msg,  u"reviewed foo_app in Ubuntu: \u2605\u2605\u2605\u2606\u2606 long long review_summary long looong looooong looooooong loooooooong loooooooong loooooooong loooooooong \u2026 ")

    def test_gwibber_ui_label(self):
        # none
        os.environ["SOFTWARE_CENTER_GWIBBER_MOCK_USERS"] = "0"
        from submit_review import SubmitReviewsApp
        mock_app = mock.Mock()
        sa = SubmitReviewsApp(mock_app, None, None, None, None, "../data")
        self.assertFalse(sa.gwibber_hbox.flags() & gtk.VISIBLE)
        # one
        os.environ["SOFTWARE_CENTER_GWIBBER_MOCK_USERS"] = "1"
        from submit_review import SubmitReviewsApp
        mock_app = mock.Mock()
        sa = SubmitReviewsApp(mock_app, None, None, None, None, "../data")
        self.assertTrue(sa.gwibber_checkbutton.flags() & gtk.VISIBLE)
        self.assertEqual(sa.gwibber_checkbutton.get_label(), "Also post this review to Twitter (@randomuser)")
        # two
        os.environ["SOFTWARE_CENTER_GWIBBER_MOCK_USERS"] = "2"
        from submit_review import SubmitReviewsApp
        mock_app = mock.Mock()
        sa = SubmitReviewsApp(mock_app, None, None, None, None, "../data")
        self.assertTrue(sa.gwibber_checkbutton.flags() & gtk.VISIBLE)
        self.assertEqual(sa.gwibber_checkbutton.get_label(), "Also post this review to: ")

    def test_review_ui_send_to_multiple_accounts(self):
        # two accounts
        os.environ["SOFTWARE_CENTER_GWIBBER_MOCK_USERS"] = "2"
        from submit_review import SubmitReviewsApp
        mock_app = mock.Mock()
        mock_app.appname = "the app name"
        mock_app.pkgname = "apkg"
        sa = SubmitReviewsApp(mock_app, None, None, None, None, "../data")
        sa.quit = mock.Mock()
        sa.api = mock.Mock()
        # setup UI to point to "all gwibber accounts"
        sa.gwibber_checkbutton.set_active(True)
        sa.gwibber_combo.set_active(len(sa.gwibber_accounts)-1)
        self.assertEqual(sa.gwibber_combo.get_active(), 2)
        # this trigers the sending
        sa.gwibber_helper.send_message = mock.Mock()
        # FIXME: factor this out into a method
        sa.on_transmit_success(None, None)
        # check if send_message was called two times
        self.assertEqual(sa.gwibber_helper.send_message.call_count, 2)
        # check if the app would have terminated as expected
        self.assertTrue(sa.quit.called)
        self.assertEqual(sa.quit.call_args, ((), {}))

    def test_convert_rgba(self):
        from submit_review import SubmitReviewsApp
        mock_app = mock.Mock()
        sa = SubmitReviewsApp(mock_app, None, None, None, None, "../data")
        self.assertEqual(sa._convert_rgb_to_html(200, 0, 0),
                         "C80000")
        self.assertEqual(sa._convert_rgb_to_html(0, 0, 0),
                         "000000")
        self.assertEqual(sa._convert_rgb_to_html(10, 10, 10),
                         "0A0A0A")

    # helper
    def _p(self):
        """ process gtk events """
        while gtk.events_pending():
            gtk.main_iteration()

if __name__ == "__main__":
    import logging
    logging.basicConfig(level=logging.DEBUG)
    unittest.main()