Adding gc_backend tests
authorepage <eopage@byu.net>
Fri, 29 May 2009 22:44:15 +0000 (22:44 +0000)
committerepage <eopage@byu.net>
Fri, 29 May 2009 22:44:15 +0000 (22:44 +0000)
git-svn-id: file:///svnroot/gc-dialer/trunk@346 c39d3808-3fe2-4d86-a59f-b7f623ee9f21

src/gc_backend.py
tests/gc_samples/generate_gc_samples.py [new file with mode: 0755]
tests/test_gc_backend.py [new file with mode: 0644]

index b4f5469..ec02e90 100644 (file)
@@ -240,7 +240,7 @@ class GCDialer(object):
                for c in self._browser.cookies:
                        if c.name == "pda_forwarding_number":
                                return c.value
-               return None
+               return ""
 
        def get_recent(self):
                """
diff --git a/tests/gc_samples/generate_gc_samples.py b/tests/gc_samples/generate_gc_samples.py
new file mode 100755 (executable)
index 0000000..463932a
--- /dev/null
@@ -0,0 +1,82 @@
+#!/usr/bin/env python
+
+import sys
+import urllib
+import urllib2
+import traceback
+import warnings
+
+import sys
+sys.path.append("../../src")
+
+import browser_emu
+import gc_backend
+
+       _forwardselectURL = "http://www.grandcentral.com/mobile/settings/forwarding_select"
+       _loginURL = "https://www.grandcentral.com/mobile/account/login"
+       _setforwardURL = "http://www.grandcentral.com/mobile/settings/set_forwarding?from=settings"
+       _clicktocallURL = "http://www.grandcentral.com/mobile/calls/click_to_call?a_t=%s&destno=%s"
+       _inboxallURL = "http://www.grandcentral.com/mobile/messages/inbox?types=all"
+       _contactsURL = "http://www.grandcentral.com/mobile/contacts"
+       _contactDetailURL = "http://www.grandcentral.com/mobile/contacts/detail"
+webpages = [
+       ("forward", gc_backend.GCDialer._forwardselectURL),
+       ("login", gc_backend.GCDialer._loginURL),
+       ("setforward", gc_backend.GCDialer._setforwardURL),
+       ("clicktocall", gc_backend.GCDialer._clicktocallURL),
+       ("recent", gc_backend.GCDialer._inboxallURL),
+       ("contacts", gc_backend.GCDialer._contactsURL),
+       ("contactdetails", gc_backend.GCDialer._contactDetailURL),
+]
+
+
+browser = browser_emu.MozillaEmulator(1)
+for name, url in webpages:
+       try:
+               page = browser.download(url)
+       except StandardError, e:
+               print e.message
+               continue
+       with open("not_loggedin_%s.txt" % name, "w") as f:
+               f.write(page)
+
+username = sys.argv[1]
+password = sys.argv[2]
+
+loginPostData = urllib.urlencode({
+       'Email' : username,
+       'Passwd' : password,
+       'service': "grandcentral",
+       "ltmpl": "mobile",
+       "btmpl": "mobile",
+       "PersistentCookie": "yes",
+})
+
+try:
+       loginSuccessOrFailurePage = browser.download(gc_backend.GCDialer._loginURL, loginPostData)
+except urllib2.URLError, e:
+       warnings.warn(traceback.format_exc())
+       raise RuntimeError("%s is not accesible" % gc_backend.GCDialer._loginURL)
+
+forwardPage = browser.download(gc_backend.GCDialer._forwardURL)
+
+tokenGroup = gc_backend.GCDialer._tokenRe.search(forwardPage)
+if tokenGroup is None:
+       print forwardPage
+       raise RuntimeError("Could not extract authentication token from GoogleVoice")
+token = tokenGroup.group(1)
+
+browser = browser_emu.MozillaEmulator(1)
+for name, url in webpages:
+       try:
+               #data = urllib.urlencode({
+               #       "_rnr_se": token,
+               #})
+               #page = browser.download(url, data)
+               page = browser.download(url)
+       except StandardError, e:
+               warnings.warn(traceback.format_exc())
+               continue
+       print "Writing to file"
+       with open("loggedin_%s.txt" % name, "w") as f:
+               f.write(page)
diff --git a/tests/test_gc_backend.py b/tests/test_gc_backend.py
new file mode 100644 (file)
index 0000000..e60e777
--- /dev/null
@@ -0,0 +1,53 @@
+from __future__ import with_statement
+
+import os
+import warnings
+import cookielib
+
+import test_utils
+
+import sys
+sys.path.append("../src")
+
+import gc_backend
+
+
+def generate_mock(cookiesSucceed, username, password):
+
+       class MockModule(object):
+
+               class MozillaEmulator(object):
+
+                       def __init__(self, trycount = 1):
+                               self.cookies = cookielib.LWPCookieJar()
+                               self.trycount = trycount
+
+                       def download(self, url,
+                                       postdata = None, extraheaders = None, forbid_redirect = False,
+                                       trycount = None, only_head = False,
+                               ):
+                               return ""
+
+       return MockModule
+
+
+def test_not_logged_in():
+       correctUsername, correctPassword = "", ""
+       MockBrowserModule = generate_mock(False, correctUsername, correctPassword)
+       gc_backend.browser_emu, RealBrowser = MockBrowserModule, gc_backend.browser_emu
+       try:
+               backend = gc_backend.GCDialer()
+               assert not backend.is_authed()
+               assert not backend.login("bad_name", "bad_password")
+               backend.logout()
+               with test_utils.expected(RuntimeError):
+                       backend.dial("5551234567")
+               with test_utils.expected(RuntimeError):
+                       backend.send_sms("5551234567", "Hello World")
+               assert backend.get_account_number() == "", "%s" % backend.get_account_number()
+               backend.set_sane_callback()
+               assert backend.get_callback_number() == ""
+               recent = list(backend.get_recent())
+               messages = list(backend.get_messages())
+       finally:
+               gc_backend.browser_emu = RealBrowser