major rewrite
[wifi-assistant] / package / test / unit / daemon / daemon_test.py
diff --git a/package/test/unit/daemon/daemon_test.py b/package/test/unit/daemon/daemon_test.py
new file mode 100644 (file)
index 0000000..2f45204
--- /dev/null
@@ -0,0 +1,128 @@
+from gnome import gconf
+from wifi_assistant.daemon.daemon import Daemon
+from wifi_assistant.settings.network_setting import NetworkSetting
+
+import unittest
+from unit.pie import *
+
+url_to_open = 'http://wifi-assistant.garage.maemo.org'
+default_browser_name = "default"
+default_browser_options = {'url':url_to_open}
+default_settings = NetworkSetting()
+default_settings.setNameOfBrowserToLaunch(default_browser_name)
+default_settings.setBrowserOptions(default_browser_options)
+ssid = 'A Network Name'
+settings_without_options = NetworkSetting()
+settings_without_options.setNetworkName(ssid)
+settings_without_options.setLaunchingOfBrowserEnabled(True)
+
+class DaemonTest(unittest.TestCase):
+
+    def setUp(self):
+        self.launcher = Mock()
+        self.application_settings = Mock()
+        self.network_settings = Mock()
+        self.parent_window = None
+        
+        
+    def test_withANewNetwork_whenUserClicksYes_browserIsLaunched(self):
+        # GIVEN
+        self._createTesteeWithPopupClickingYes()
+        given(self.network_settings).get(ssid).willReturn(None)
+        given(self.network_settings).getDefaultSettings().willReturn(default_settings)
+        
+        # WHEN
+        self._replayMocks()
+        self.testee.connectionEstablished(ssid)
+        
+        # THEN
+        verify(self.network_settings).getDefaultSettings()
+        verify(self.launcher).launchBrowser(default_browser_name, default_browser_options)
+        
+        
+    def test_withANewNetwork_whenUserClicksNo_browserIsNotLaunched(self):
+        self._createTesteeWithPopupClickingNo()
+        given(self.network_settings).get(ssid).willReturn(None)
+
+        # WHEN
+        self._replayMocks()
+        self.testee.connectionEstablished(ssid)
+        
+        # THEN
+        verify(self.launcher, never()).launchBrowser(default_browser_name, default_browser_options)
+        
+    
+    def test_popupIsNotOpenedIfPopupIsDisabledInApplicationSettings(self):
+        given(self.application_settings).getUsePopup().willReturn(False)
+        self.testee = Daemon(self.launcher, self.application_settings, self.network_settings, self.parent_window)
+        
+        self._replayMocks()
+        self.testee.connectionEstablished(ssid)
+        
+        verify(self.launcher, never()).launchBrowser()
+        # TODO: refactor out gui part (popup) and test/mock that
+        
+    
+    def test_knownSsidWithLaunchSetToTrueUsesDefaultBrowserAndUrl(self):
+        given(self.network_settings).get(ssid).willReturn(settings_without_options)
+        given(self.network_settings).getDefaultSettings().willReturn(default_settings)
+        given(self.application_settings).getUsePopup().willReturn(True)
+        #self.testee = Daemon(self.launcher, self.application_settings, self.network_settings, self.parent_window)
+        self.testee = self._createTestee()
+        
+        self._replayMocks()
+        self.testee.connectionEstablished(ssid)
+        
+        verify(self.launcher, once()).launchBrowser(default_browser_name, default_browser_options)
+    
+    
+    def test_daemon_start_registersListenerWithApplicationSettings(self):
+        given(self.application_settings).getUsePopup().willReturn(True)
+        self.testee = self._createTestee()
+        given(self.application_settings).registerUsePopupListener(self.testee._usePopupEventCallback).willReturn(1234)
+        
+        self._replayMocks()
+        
+        verify(self.application_settings, never()).registerUsePopupListener()
+        self.testee.start()
+        verify(self.application_settings, once()).registerUsePopupListener(self.testee._usePopupEventCallback)
+        
+        verify(self.application_settings, never()).unregisterUsePopupListener()
+        self.testee.stop()
+        verify(self.application_settings, once()).unregisterUsePopupListener(self.testee._usePopupEventCallback)
+
+
+    def _createTestee(self):
+        def _empty(*args, **kwargs):
+            pass
+        daemon = Daemon(self.launcher, self.application_settings, self.network_settings, self.parent_window)
+        daemon._startLoop = _empty
+        return daemon
+    
+
+    def _createTesteeWithPopupClickingYes(self):
+        given(self.application_settings).getUsePopup().willReturn(True)
+        self.testee = self._createTestee()
+        
+        def yes(*args, **kwargs):
+            return True
+        self.testee.showDecisionDialog = yes
+        
+
+    def _createTesteeWithPopupClickingNo(self):
+        given(self.application_settings).getUsePopup().willReturn(True)
+        self.testee = self._createTestee()
+        
+        def no(*args, **kwargs):
+            return False
+        self.testee.showDecisionDialog = no
+        
+
+    def _replayMocks(self):
+        self.application_settings.replay()
+        self.launcher.replay()
+        self.network_settings.replay()
+        
+
+if __name__ == '__main__':
+    unittest.main()