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, |