diff --git a/run_tests.py b/run_tests.py index 849fa1d..683e6f9 100644 --- a/run_tests.py +++ b/run_tests.py @@ -50,7 +50,7 @@ if __name__ == '__main__': feeder_suite = unittest.makeSuite(Feeder_TestCase, "test") sender_suite = unittest.makeSuite(Sender_TestCase, "test") jcl_suite = unittest.TestSuite() -# jcl_suite.addTest(FeederComponent_TestCase('test_handle_get_version')) +# jcl_suite.addTest(FeederComponent_TestCase('test_handle_get_register_new')) # jcl_suite.addTest(FeederComponent_TestCase('test_handle_presence_available_to_account_live_password')) # jcl_suite = unittest.TestSuite((feeder_component_suite)) # jcl_suite = unittest.TestSuite((component_suite)) diff --git a/src/jcl/jabber/component.py b/src/jcl/jabber/component.py index 0390c19..c1df74e 100644 --- a/src/jcl/jabber/component.py +++ b/src/jcl/jabber/component.py @@ -277,7 +277,6 @@ class JCLComponent(Component): base_from_jid = unicode(info_query.get_from().bare()) disco_items = DiscoItems() if not node: -## TODO : list accounts self.db_connect() for account in self.account_class.select(Account.q.user_jid == \ base_from_jid): @@ -304,9 +303,8 @@ class JCLComponent(Component): """ self.__logger.debug("GET_REGISTER") ## TODO Lang -## lang_class = self.__lang.get_lang_class_from_node(info_query.get_node()) - lang_class = None -## base_from_jid = unicode(info_query.get_from().bare()) + lang_class = self.__lang.get_lang_class_from_node(info_query.get_node()) + base_from_jid = unicode(info_query.get_from().bare()) to_jid = info_query.get_to() info_query = info_query.make_result_response() query = info_query.new_query("jabber:iq:register") @@ -545,8 +543,28 @@ class JCLComponent(Component): def get_reg_form(self, lang_class): """Return register form based on language and account class """ - # TODO - return X() + # TODO : handle text-private for password + # TODO : handle list-single + reg_form = X() + reg_form.xmlns = "jabber:x:data" + reg_form.title = lang_class.register_title + reg_form.instructions = lang_class.register_instructions + reg_form.type = "form" + + for (field, field_type) in \ + self.account_class.get_register_fields(): + lang_label_attr = self.account_class.__name__.lower() \ + + "_" + field + if hasattr(lang_class, lang_label_attr): + label = getattr(lang_class, lang_label_attr) + else: + label = field + reg_form.add_field(field_type = field_type, \ + label = label, \ + var = field) + ## TODO : Add page when empty tuple given + ## TODO : get default value if any + return reg_form def get_reg_form_init(self, lang_class, account): """Return register form for an existing account (update) diff --git a/src/jcl/model/account.py b/src/jcl/model/account.py index 42d9620..a0d9c9a 100644 --- a/src/jcl/model/account.py +++ b/src/jcl/model/account.py @@ -89,3 +89,8 @@ class Account(SQLObject): status = property(get_status, set_status) + + def get_register_fields(cls): + return [('name', "text-single")] + + get_register_fields = classmethod(get_register_fields) diff --git a/tests/jcl/jabber/test_component.py b/tests/jcl/jabber/test_component.py index b27bf3a..b992d6c 100644 --- a/tests/jcl/jabber/test_component.py +++ b/tests/jcl/jabber/test_component.py @@ -317,10 +317,30 @@ class JCLComponent_TestCase(unittest.TestCase): to_jid = "jcl.test.com")) self.assertEquals(len(self.comp.stream.sent), 1) iq_sent = self.comp.stream.sent[0] -# print str(iq_sent.get_node()) self.assertEquals(iq_sent.get_to(), "user1@test.com") -# self.assertEquals(len(iq_sent.xpath_eval("*/*")), 1) - # TODO + titles = iq_sent.xpath_eval("jir:query/jxd:x/jxd:title", \ + {"jir" : "jabber:iq:register", \ + "jxd" : "jabber:x:data"}) + self.assertEquals(len(titles), 1) + self.assertEquals(titles[0].content, \ + Lang.en.register_title) + instructions = iq_sent.xpath_eval("jir:query/jxd:x/jxd:instructions", \ + {"jir" : "jabber:iq:register", \ + "jxd" : "jabber:x:data"}) + self.assertEquals(len(instructions), 1) + self.assertEquals(instructions[0].content, \ + Lang.en.register_instructions) + fields = iq_sent.xpath_eval("jir:query/jxd:x/jxd:field", \ + {"jir" : "jabber:iq:register", \ + "jxd" : "jabber:x:data"}) + self.assertEquals(len(fields), 1) + self.assertEquals(len([field + for field in fields \ + if field.prop("type") == "text-single" \ + and field.prop("var") == "name" \ + and field.prop("label") == \ + Lang.en.account_name]), \ + 1) def test_handle_get_register_exist(self):