added test for per SSID URL in GConf
[wifi-assistant] / package / test / unit / daemon / daemon_test.py
1 from gnome import gconf
2 from wifi_assistant.daemon.daemon import Daemon
3 from wifi_assistant.settings.network_setting import NetworkSetting
4
5 import unittest
6 from unit.pie import *
7
8 default_url_to_open = 'http://wifi-assistant.garage.maemo.org'
9 default_browser_name = "default"
10 default_browser_options = {'url':default_url_to_open}
11 default_settings = NetworkSetting()
12 default_settings.setNameOfBrowserToLaunch(default_browser_name)
13 default_settings.setBrowserOptions(default_browser_options)
14
15 ssid = 'A Network Name'
16 settings_without_options = NetworkSetting()
17 settings_without_options.setNetworkName(ssid)
18 settings_without_options.setLaunchingOfBrowserEnabled(True)
19
20 second_ssid = 'Another Network SSID'
21 second_url = 'http://some.specific.site/'
22 second_browser_name = 'special browser'
23 second_settings = NetworkSetting()
24 second_settings.setNetworkName(second_ssid)
25 second_settings.setNameOfBrowserToLaunch(second_browser_name)
26 second_settings.setLaunchingOfBrowserEnabled(True)
27 second_browser_options = {'url': second_url}
28 second_settings.setBrowserOptions(second_browser_options)
29
30 class DaemonTest(unittest.TestCase):
31
32     def setUp(self):
33         self.launcher = Mock()
34         self.application_settings = Mock()
35         self.network_settings = Mock()
36         self.parent_window = None
37         
38         
39     def test_withANewNetwork_whenUserClicksYes_browserIsLaunched(self):
40         # GIVEN
41         self._createTesteeWithPopupClickingYes()
42         given(self.network_settings).get(ssid).willReturn(None)
43         given(self.network_settings).getDefaultSettings().willReturn(default_settings)
44         
45         # WHEN
46         self._replayMocks()
47         self.testee.connectionEstablished(ssid)
48         
49         # THEN
50         verify(self.network_settings).getDefaultSettings()
51         verify(self.launcher).launchBrowser(default_browser_name, default_browser_options)
52         
53         
54     def test_withANewNetwork_whenUserClicksNo_browserIsNotLaunched(self):
55         # GIVEN
56         self._createTesteeWithPopupClickingNo()
57         given(self.network_settings).get(ssid).willReturn(None)
58
59         # WHEN
60         self._replayMocks()
61         self.testee.connectionEstablished(ssid)
62         
63         # THEN
64         verify(self.launcher, never()).launchBrowser(default_browser_name, default_browser_options)
65         
66     
67     def test_popupIsNotOpenedIfPopupIsDisabledInApplicationSettings(self):
68         # GIVEN
69         given(self.application_settings).getUsePopup().willReturn(False)
70         self.testee = Daemon(self.launcher, self.application_settings, self.network_settings, self.parent_window)
71         
72         self._replayMocks()
73         self.testee.connectionEstablished(ssid)
74         
75         verify(self.launcher, never()).launchBrowser()
76         # TODO: refactor out gui part (popup) and test/mock that
77         
78     
79     def test_knownSsidWithLaunchSetToTrueUsesDefaultBrowserAndUrl(self):
80         given(self.network_settings).get(ssid).willReturn(settings_without_options)
81         given(self.network_settings).getDefaultSettings().willReturn(default_settings)
82         given(self.application_settings).getUsePopup().willReturn(True)
83         self.testee = self._createTestee()
84         
85         self._replayMocks()
86         self.testee.connectionEstablished(ssid)
87         
88         verify(self.launcher, once()).launchBrowser(default_browser_name, default_browser_options)
89     
90     
91     def test_browserIsLaunchedWithSsidSpecificUrl_insteadOfDefaultUrl(self):
92         given(self.network_settings).get(second_ssid).willReturn(second_settings)
93         given(self.application_settings).getUsePopup().willReturn(True)
94         self.testee = self._createTestee()
95         
96         self._replayMocks()
97         self.testee.connectionEstablished(second_ssid)
98         
99         verify(self.launcher, once()).launchBrowser(second_browser_name, second_browser_options)
100     
101     
102     def test_daemon_start_registersListenerWithApplicationSettings(self):
103         given(self.application_settings).getUsePopup().willReturn(True)
104         self.testee = self._createTestee()
105         given(self.application_settings).registerUsePopupListener(self.testee._usePopupEventCallback).willReturn(1234)
106         
107         self._replayMocks()
108         
109         verify(self.application_settings, never()).registerUsePopupListener()
110         self.testee.start()
111         verify(self.application_settings, once()).registerUsePopupListener(self.testee._usePopupEventCallback)
112         
113         verify(self.application_settings, never()).unregisterUsePopupListener()
114         self.testee.stop()
115         verify(self.application_settings, once()).unregisterUsePopupListener(self.testee._usePopupEventCallback)
116
117
118     def _createTestee(self):
119         def _empty(*args, **kwargs):
120             pass
121         daemon = Daemon(self.launcher, self.application_settings, self.network_settings, self.parent_window)
122         daemon._startLoop = _empty
123         return daemon
124     
125
126     def _createTesteeWithPopupClickingYes(self):
127         given(self.application_settings).getUsePopup().willReturn(True)
128         self.testee = self._createTestee()
129         
130         def yes(*args, **kwargs):
131             return True
132         self.testee.showDecisionDialog = yes
133         
134
135     def _createTesteeWithPopupClickingNo(self):
136         given(self.application_settings).getUsePopup().willReturn(True)
137         self.testee = self._createTestee()
138         
139         def no(*args, **kwargs):
140             return False
141         self.testee.showDecisionDialog = no
142         
143
144     def _replayMocks(self):
145         self.application_settings.replay()
146         self.launcher.replay()
147         self.network_settings.replay()
148         
149
150 if __name__ == '__main__':
151     unittest.main()