sobjects/test/unittest_cwxmlparser.py
changeset 10240 6ec03928257f
parent 9879 21278eb03bbf
child 10549 5fc21bf2684f
equal deleted inserted replaced
10239:495efb844048 10240:6ec03928257f
    15 #
    15 #
    16 # You should have received a copy of the GNU Lesser General Public License along
    16 # You should have received a copy of the GNU Lesser General Public License along
    17 # with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
    17 # with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
    18 
    18 
    19 from datetime import datetime
    19 from datetime import datetime
       
    20 from urlparse import urlsplit, parse_qsl
    20 
    21 
    21 from cubicweb.devtools.testlib import CubicWebTC
    22 from cubicweb.devtools.testlib import CubicWebTC
    22 from cubicweb.sobjects.cwxmlparser import CWEntityXMLParser
    23 from cubicweb.sobjects.cwxmlparser import CWEntityXMLParser
    23 
    24 
    24 orig_parse = CWEntityXMLParser.parse
    25 orig_parse = CWEntityXMLParser.parse
   130 class CWEntityXMLParserTC(CubicWebTC):
   131 class CWEntityXMLParserTC(CubicWebTC):
   131     """/!\ this test use a pre-setup database /!\, if you modify above xml,
   132     """/!\ this test use a pre-setup database /!\, if you modify above xml,
   132     REMOVE THE DATABASE TEMPLATE else it won't be considered
   133     REMOVE THE DATABASE TEMPLATE else it won't be considered
   133     """
   134     """
   134     test_db_id = 'xmlparser'
   135     test_db_id = 'xmlparser'
       
   136 
       
   137     def assertURLEquiv(self, first, second):
       
   138         # ignore ordering differences in query params
       
   139         parsed_first = urlsplit(first)
       
   140         parsed_second = urlsplit(second)
       
   141         self.assertEqual(parsed_first.scheme, parsed_second.scheme)
       
   142         self.assertEqual(parsed_first.netloc, parsed_second.netloc)
       
   143         self.assertEqual(parsed_first.path, parsed_second.path)
       
   144         self.assertEqual(parsed_first.fragment, parsed_second.fragment)
       
   145         self.assertCountEqual(parse_qsl(parsed_first.query), parse_qsl(parsed_second.query))
   135 
   146 
   136     @classmethod
   147     @classmethod
   137     def pre_setup_database(cls, cnx, config):
   148     def pre_setup_database(cls, cnx, config):
   138         myfeed = cnx.create_entity('CWSource', name=u'myfeed', type=u'datafeed',
   149         myfeed = cnx.create_entity('CWSource', name=u'myfeed', type=u'datafeed',
   139                                    parser=u'cw.entityxml', url=BASEXML)
   150                                    parser=u'cw.entityxml', url=BASEXML)
   159 
   170 
   160     def test_complete_url(self):
   171     def test_complete_url(self):
   161         dfsource = self.repo.sources_by_uri['myfeed']
   172         dfsource = self.repo.sources_by_uri['myfeed']
   162         with self.admin_access.repo_cnx() as cnx:
   173         with self.admin_access.repo_cnx() as cnx:
   163             parser = dfsource._get_parser(cnx)
   174             parser = dfsource._get_parser(cnx)
   164             self.assertEqual(parser.complete_url('http://www.cubicweb.org/CWUser'),
   175             self.assertURLEquiv(parser.complete_url('http://www.cubicweb.org/CWUser'),
   165                              'http://www.cubicweb.org/CWUser?relation=tags-object&relation=in_group-subject&relation=in_state-subject&relation=use_email-subject')
   176                                 'http://www.cubicweb.org/CWUser?relation=tags-object&relation=in_group-subject&relation=in_state-subject&relation=use_email-subject')
   166             self.assertEqual(parser.complete_url('http://www.cubicweb.org/cwuser'),
   177             self.assertURLEquiv(parser.complete_url('http://www.cubicweb.org/cwuser'),
   167                              'http://www.cubicweb.org/cwuser?relation=tags-object&relation=in_group-subject&relation=in_state-subject&relation=use_email-subject')
   178                                 'http://www.cubicweb.org/cwuser?relation=tags-object&relation=in_group-subject&relation=in_state-subject&relation=use_email-subject')
   168             self.assertEqual(parser.complete_url('http://www.cubicweb.org/cwuser?vid=rdf&relation=hop'),
   179             self.assertURLEquiv(parser.complete_url('http://www.cubicweb.org/cwuser?vid=rdf&relation=hop'),
   169                              'http://www.cubicweb.org/cwuser?relation=hop&relation=tags-object&relation=in_group-subject&relation=in_state-subject&relation=use_email-subject&vid=rdf')
   180                                 'http://www.cubicweb.org/cwuser?relation=hop&relation=tags-object&relation=in_group-subject&relation=in_state-subject&relation=use_email-subject&vid=rdf')
   170             self.assertEqual(parser.complete_url('http://www.cubicweb.org/?rql=cwuser&vid=rdf&relation=hop'),
   181             self.assertURLEquiv(parser.complete_url('http://www.cubicweb.org/?rql=cwuser&vid=rdf&relation=hop'),
   171                              'http://www.cubicweb.org/?rql=cwuser&relation=hop&vid=rdf')
   182                                 'http://www.cubicweb.org/?rql=cwuser&relation=hop&vid=rdf')
   172             self.assertEqual(parser.complete_url('http://www.cubicweb.org/?rql=cwuser&relation=hop'),
   183             self.assertURLEquiv(parser.complete_url('http://www.cubicweb.org/?rql=cwuser&relation=hop'),
   173                              'http://www.cubicweb.org/?rql=cwuser&relation=hop')
   184                                 'http://www.cubicweb.org/?rql=cwuser&relation=hop')
   174 
   185 
   175 
   186 
   176     def test_actions(self):
   187     def test_actions(self):
   177         dfsource = self.repo.sources_by_uri['myfeed']
   188         dfsource = self.repo.sources_by_uri['myfeed']
   178         self.assertEqual(dfsource.mapping,
   189         self.assertEqual(dfsource.mapping,