major rewrite
[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 url_to_open = 'http://wifi-assistant.garage.maemo.org'
9 default_browser_name = "default"
10 default_browser_options = {'url':url_to_open}
11 default_settings = NetworkSetting()
12 default_settings.setNameOfBrowserToLaunch(default_browser_name)
13 default_settings.setBrowserOptions(default_browser_options)
14 ssid = 'A Network Name'
15 settings_without_options = NetworkSetting()
16 settings_without_options.setNetworkName(ssid)
17 settings_without_options.setLaunchingOfBrowserEnabled(True)
18
19 class DaemonTest(unittest.TestCase):
20
21     def setUp(self):
22         self.launcher = Mock()
23         self.application_settings = Mock()
24         self.network_settings = Mock()
25         self.parent_window = None
26         
27         
28     def test_withANewNetwork_whenUserClicksYes_browserIsLaunched(self):
29         # GIVEN
30         self._createTesteeWithPopupClickingYes()
31         given(self.network_settings).get(ssid).willReturn(None)
32         given(self.network_settings).getDefaultSettings().willReturn(default_settings)
33         
34         # WHEN
35         self._replayMocks()
36         self.testee.connectionEstablished(ssid)
37         
38         # THEN
39         verify(self.network_settings).getDefaultSettings()
40         verify(self.launcher).launchBrowser(default_browser_name, default_browser_options)
41         
42         
43     def test_withANewNetwork_whenUserClicksNo_browserIsNotLaunched(self):
44         self._createTesteeWithPopupClickingNo()
45         given(self.network_settings).get(ssid).willReturn(None)
46
47         # WHEN
48         self._replayMocks()
49         self.testee.connectionEstablished(ssid)
50         
51         # THEN
52         verify(self.launcher, never()).launchBrowser(default_browser_name, default_browser_options)
53         
54     
55     def test_popupIsNotOpenedIfPopupIsDisabledInApplicationSettings(self):
56         given(self.application_settings).getUsePopup().willReturn(False)
57         self.testee = Daemon(self.launcher, self.application_settings, self.network_settings, self.parent_window)
58         
59         self._replayMocks()
60         self.testee.connectionEstablished(ssid)
61         
62         verify(self.launcher, never()).launchBrowser()
63         # TODO: refactor out gui part (popup) and test/mock that
64         
65     
66     def test_knownSsidWithLaunchSetToTrueUsesDefaultBrowserAndUrl(self):
67         given(self.network_settings).get(ssid).willReturn(settings_without_options)
68         given(self.network_settings).getDefaultSettings().willReturn(default_settings)
69         given(self.application_settings).getUsePopup().willReturn(True)
70         #self.testee = Daemon(self.launcher, self.application_settings, self.network_settings, self.parent_window)
71         self.testee = self._createTestee()
72         
73         self._replayMocks()
74         self.testee.connectionEstablished(ssid)
75         
76         verify(self.launcher, once()).launchBrowser(default_browser_name, default_browser_options)
77     
78     
79     def test_daemon_start_registersListenerWithApplicationSettings(self):
80         given(self.application_settings).getUsePopup().willReturn(True)
81         self.testee = self._createTestee()
82         given(self.application_settings).registerUsePopupListener(self.testee._usePopupEventCallback).willReturn(1234)
83         
84         self._replayMocks()
85         
86         verify(self.application_settings, never()).registerUsePopupListener()
87         self.testee.start()
88         verify(self.application_settings, once()).registerUsePopupListener(self.testee._usePopupEventCallback)
89         
90         verify(self.application_settings, never()).unregisterUsePopupListener()
91         self.testee.stop()
92         verify(self.application_settings, once()).unregisterUsePopupListener(self.testee._usePopupEventCallback)
93
94
95     def _createTestee(self):
96         def _empty(*args, **kwargs):
97             pass
98         daemon = Daemon(self.launcher, self.application_settings, self.network_settings, self.parent_window)
99         daemon._startLoop = _empty
100         return daemon
101     
102
103     def _createTesteeWithPopupClickingYes(self):
104         given(self.application_settings).getUsePopup().willReturn(True)
105         self.testee = self._createTestee()
106         
107         def yes(*args, **kwargs):
108             return True
109         self.testee.showDecisionDialog = yes
110         
111
112     def _createTesteeWithPopupClickingNo(self):
113         given(self.application_settings).getUsePopup().willReturn(True)
114         self.testee = self._createTestee()
115         
116         def no(*args, **kwargs):
117             return False
118         self.testee.showDecisionDialog = no
119         
120
121     def _replayMocks(self):
122         self.application_settings.replay()
123         self.launcher.replay()
124         self.network_settings.replay()
125         
126
127 if __name__ == '__main__':
128     unittest.main()