summaryrefslogtreecommitdiff
path: root/tests/twisted/account-manager/gvariant-accounts.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/twisted/account-manager/gvariant-accounts.py')
-rw-r--r--tests/twisted/account-manager/gvariant-accounts.py130
1 files changed, 130 insertions, 0 deletions
diff --git a/tests/twisted/account-manager/gvariant-accounts.py b/tests/twisted/account-manager/gvariant-accounts.py
new file mode 100644
index 00000000..3f271be6
--- /dev/null
+++ b/tests/twisted/account-manager/gvariant-accounts.py
@@ -0,0 +1,130 @@
+# Copyright (C) 2012 Collabora Ltd.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+# 02110-1301 USA
+
+import dbus
+import dbus.service
+import os
+import sys
+
+from servicetest import EventPattern, call_async, assertEquals
+from mctest import exec_test, AccountManager, Account, MC
+import constants as cs
+
+account_prefix = cs.tp_path_prefix + '/Account/'
+account1_id = 'fakecm/fakeprotocol/jc_2edenton_40unatco_2eint'
+filename = None
+
+def preseed():
+ global filename
+
+ accounts_dir = os.environ['MC_ACCOUNT_DIR']
+
+ escaped = account1_id.replace('/', '_')
+ filename = accounts_dir + '/' + escaped
+ account = open(filename, 'w')
+ account.write("""{
+'id': <'%s'>,
+'manager': <'fakecm'>,
+'protocol': <'fakeprotocol'>,
+'DisplayName': <'Work account'>,
+'NormalizedName': <'jc.denton@unatco.int'>,
+'param-account': <'jc.denton@unatco.int'>,
+'param-password': <'ionstorm'>,
+'Enabled': <'true'>,
+'ConnectAutomatically': <'true'>,
+'AutomaticPresenceType': <'2'>,
+'AutomaticPresenceMessage': <'My vision is augmented'>,
+'Nickname': <'JC'>,
+'AvatarMime': <'image/jpeg'>,
+'avatar_token': <'Deus Ex'>
+}""" % account1_id)
+ account.close()
+
+def test(q, bus, unused):
+ global filename
+
+ expected_params = {
+ 'account': 'jc.denton@unatco.int',
+ 'password': 'ionstorm',
+ }
+
+ mc = MC(q, bus)
+
+ am = AccountManager(bus)
+
+ # make sure we have the right accounts
+ props = am.GetAll(cs.AM, dbus_interface=dbus.PROPERTIES_IFACE)
+ accounts = props['ValidAccounts']
+
+ assertEquals(1, len(accounts))
+ path = accounts[0]
+ assertEquals(account_prefix + account1_id, path)
+
+ account = Account(bus, path)
+
+ # make sure the account has got the right properties
+ props = account.GetAll(cs.ACCOUNT, dbus_interface=dbus.PROPERTIES_IFACE)
+
+ assertEquals('Work account', props['DisplayName'])
+ assertEquals('jc.denton@unatco.int', props['NormalizedName'])
+ assertEquals(expected_params, props['Parameters'])
+ assertEquals(True, props['Enabled'])
+ assertEquals(True, props['ConnectAutomatically'])
+ assertEquals((cs.PRESENCE_TYPE_AVAILABLE, '', 'My vision is augmented'),
+ props['AutomaticPresence'])
+ assertEquals('JC', props['Nickname'])
+
+ props = account.GetAll(cs.ACCOUNT_IFACE_AVATAR, dbus_interface=dbus.PROPERTIES_IFACE)
+ avatar = props['Avatar']
+ assertEquals('image/jpeg', avatar[1])
+
+ # now delete the account and make sure the file is removed
+ assert os.path.exists(filename)
+
+ account.Remove()
+
+ q.expect_many(EventPattern('dbus-signal', signal='Removed'),
+ EventPattern('dbus-signal', signal='AccountRemoved'))
+
+ assert not os.path.exists(filename)
+
+ accounts = am.Get(cs.AM, 'ValidAccounts', dbus_interface=dbus.PROPERTIES_IFACE)
+ assertEquals(0, len(accounts))
+
+ # create an account and assert the file is present
+ parameters = {
+ 'account': 'dontdivert@bar.com',
+ 'password': 'le password'
+ }
+
+ accounts_dir = os.environ['MC_ACCOUNT_DIR']
+ name = 'fakecm/fakeprotocol/dontdivert_40bar_2ecom0'
+ second_filename = os.path.join(accounts_dir, name.replace('/', '_'))
+ assert not os.path.exists(second_filename)
+
+ path = am.CreateAccount('fakecm', 'fakeprotocol', 'Display name', parameters, {})
+
+ e = q.expect('dbus-signal', signal='AccountValidityChanged')
+ object_path, valid = e.args
+ assertEquals(path, object_path)
+ assert valid
+
+ assert os.path.exists(second_filename)
+
+if __name__ == '__main__':
+ preseed()
+ exec_test(test, {}, preload_mc=False)