25 |
26 |
26 class DataFeedTC(CubicWebTC): |
27 class DataFeedTC(CubicWebTC): |
27 def setup_database(self): |
28 def setup_database(self): |
28 with self.admin_access.repo_cnx() as cnx: |
29 with self.admin_access.repo_cnx() as cnx: |
29 with self.base_parser(cnx): |
30 with self.base_parser(cnx): |
30 cnx.create_entity('CWSource', name=u'myfeed', type=u'datafeed', |
31 cnx.create_entity('CWSource', name=u'ô myfeed', type=u'datafeed', |
31 parser=u'testparser', url=u'ignored', |
32 parser=u'testparser', url=u'ignored', |
32 config=u'synchronization-interval=1min') |
33 config=u'synchronization-interval=1min') |
33 cnx.commit() |
34 cnx.commit() |
34 |
35 |
35 @contextmanager |
36 @contextmanager |
45 self.notify_updated(entity) |
46 self.notify_updated(entity) |
46 def before_entity_copy(self, entity, sourceparams): |
47 def before_entity_copy(self, entity, sourceparams): |
47 entity.cw_edited.update(sourceparams['item']) |
48 entity.cw_edited.update(sourceparams['item']) |
48 |
49 |
49 with self.temporary_appobjects(AParser): |
50 with self.temporary_appobjects(AParser): |
50 if 'myfeed' in self.repo.sources_by_uri: |
51 if u'ô myfeed' in self.repo.sources_by_uri: |
51 yield self.repo.sources_by_uri['myfeed']._get_parser(session) |
52 yield self.repo.sources_by_uri[u'ô myfeed']._get_parser(session) |
52 else: |
53 else: |
53 yield |
54 yield |
54 |
55 |
55 def test(self): |
56 def test(self): |
56 self.assertIn('myfeed', self.repo.sources_by_uri) |
57 self.assertIn(u'ô myfeed', self.repo.sources_by_uri) |
57 dfsource = self.repo.sources_by_uri['myfeed'] |
58 dfsource = self.repo.sources_by_uri[u'ô myfeed'] |
58 self.assertNotIn('use_cwuri_as_url', dfsource.__dict__) |
59 self.assertNotIn('use_cwuri_as_url', dfsource.__dict__) |
59 self.assertEqual({'type': u'datafeed', 'uri': u'myfeed', 'use-cwuri-as-url': True}, |
60 self.assertEqual({'type': u'datafeed', 'uri': u'ô myfeed', 'use-cwuri-as-url': True}, |
60 dfsource.public_config) |
61 dfsource.public_config) |
61 self.assertEqual(dfsource.use_cwuri_as_url, True) |
62 self.assertEqual(dfsource.use_cwuri_as_url, True) |
62 self.assertEqual(dfsource.latest_retrieval, None) |
63 self.assertEqual(dfsource.latest_retrieval, None) |
63 self.assertEqual(dfsource.synchro_interval, timedelta(seconds=60)) |
64 self.assertEqual(dfsource.synchro_interval, timedelta(seconds=60)) |
64 self.assertFalse(dfsource.fresh()) |
65 self.assertFalse(dfsource.fresh()) |
|
66 # ensure source's logger name has been unormalized |
|
67 self.assertEqual(dfsource.info.__self__.name, 'cubicweb.sources.o myfeed') |
65 |
68 |
66 with self.repo.internal_cnx() as cnx: |
69 with self.repo.internal_cnx() as cnx: |
67 with self.base_parser(cnx): |
70 with self.base_parser(cnx): |
68 stats = dfsource.pull_data(cnx, force=True) |
71 stats = dfsource.pull_data(cnx, force=True) |
69 cnx.commit() |
72 cnx.commit() |
75 self.assertEqual(stats['updated'], set()) |
78 self.assertEqual(stats['updated'], set()) |
76 # test imported entities |
79 # test imported entities |
77 self.assertEqual(entity.title, 'cubicweb.org') |
80 self.assertEqual(entity.title, 'cubicweb.org') |
78 self.assertEqual(entity.content, 'the cw web site') |
81 self.assertEqual(entity.content, 'the cw web site') |
79 self.assertEqual(entity.cwuri, 'http://www.cubicweb.org/') |
82 self.assertEqual(entity.cwuri, 'http://www.cubicweb.org/') |
80 self.assertEqual(entity.cw_source[0].name, 'myfeed') |
83 self.assertEqual(entity.cw_source[0].name, u'ô myfeed') |
81 self.assertEqual(entity.cw_metainformation(), |
84 self.assertEqual(entity.cw_metainformation(), |
82 {'type': 'Card', |
85 {'type': 'Card', |
83 'source': {'uri': 'myfeed', 'type': 'datafeed', 'use-cwuri-as-url': True}, |
86 'source': {'uri': u'ô myfeed', 'type': 'datafeed', 'use-cwuri-as-url': True}, |
84 'extid': b'http://www.cubicweb.org/'} |
87 'extid': b'http://www.cubicweb.org/'} |
85 ) |
88 ) |
86 self.assertEqual(entity.absolute_url(), 'http://www.cubicweb.org/') |
89 self.assertEqual(entity.absolute_url(), 'http://www.cubicweb.org/') |
87 # test repo cache keys |
90 # test repo cache keys |
88 self.assertEqual(self.repo._type_source_cache[entity.eid], |
91 self.assertEqual(self.repo._type_source_cache[entity.eid], |
89 ('Card', b'http://www.cubicweb.org/', 'myfeed')) |
92 ('Card', b'http://www.cubicweb.org/', u'ô myfeed')) |
90 self.assertEqual(self.repo._extid_cache[b'http://www.cubicweb.org/'], |
93 self.assertEqual(self.repo._extid_cache[b'http://www.cubicweb.org/'], |
91 entity.eid) |
94 entity.eid) |
92 # test repull |
95 # test repull |
93 stats = dfsource.pull_data(cnx, force=True) |
96 stats = dfsource.pull_data(cnx, force=True) |
94 self.assertEqual(stats['created'], set()) |
97 self.assertEqual(stats['created'], set()) |
98 self.repo._extid_cache.clear() |
101 self.repo._extid_cache.clear() |
99 stats = dfsource.pull_data(cnx, force=True) |
102 stats = dfsource.pull_data(cnx, force=True) |
100 self.assertEqual(stats['created'], set()) |
103 self.assertEqual(stats['created'], set()) |
101 self.assertEqual(stats['updated'], set((entity.eid,))) |
104 self.assertEqual(stats['updated'], set((entity.eid,))) |
102 self.assertEqual(self.repo._type_source_cache[entity.eid], |
105 self.assertEqual(self.repo._type_source_cache[entity.eid], |
103 ('Card', b'http://www.cubicweb.org/', 'myfeed')) |
106 ('Card', b'http://www.cubicweb.org/', u'ô myfeed')) |
104 self.assertEqual(self.repo._extid_cache[b'http://www.cubicweb.org/'], |
107 self.assertEqual(self.repo._extid_cache[b'http://www.cubicweb.org/'], |
105 entity.eid) |
108 entity.eid) |
106 |
109 |
107 self.assertEqual(dfsource.source_cwuris(cnx), |
110 self.assertEqual(dfsource.source_cwuris(cnx), |
108 {b'http://www.cubicweb.org/': (entity.eid, 'Card')} |
111 {b'http://www.cubicweb.org/': (entity.eid, 'Card')}) |
109 ) |
|
110 self.assertTrue(dfsource.latest_retrieval) |
112 self.assertTrue(dfsource.latest_retrieval) |
111 self.assertTrue(dfsource.fresh()) |
113 self.assertTrue(dfsource.fresh()) |
112 |
114 |
113 # test_rename_source |
115 # test_rename_source |
114 with self.admin_access.repo_cnx() as cnx: |
116 with self.admin_access.repo_cnx() as cnx: |
115 cnx.execute('SET S name "myrenamedfeed" WHERE S is CWSource, S name "myfeed"') |
117 cnx.entity_from_eid(dfsource.eid).cw_set(name=u"myrenamedfeed") |
116 cnx.commit() |
118 cnx.commit() |
117 entity = cnx.execute('Card X').get_entity(0, 0) |
119 entity = cnx.execute('Card X').get_entity(0, 0) |
118 self.assertEqual(entity.cwuri, 'http://www.cubicweb.org/') |
120 self.assertEqual(entity.cwuri, 'http://www.cubicweb.org/') |
119 self.assertEqual(entity.cw_source[0].name, 'myrenamedfeed') |
121 self.assertEqual(entity.cw_source[0].name, 'myrenamedfeed') |
120 self.assertEqual(entity.cw_metainformation(), |
122 self.assertEqual(entity.cw_metainformation(), |