server/test/unittest_datafeed.py
changeset 9798 1c105cf42904
parent 9469 032825bbacab
child 9822 4a118bfd6ab4
child 9860 e24bf60428d3
equal deleted inserted replaced
9797:4e640ab62f51 9798:1c105cf42904
     1 # copyright 2011-2013 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
     1 # copyright 2011-2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
     2 # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
     2 # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
     3 #
     3 #
     4 # This file is part of CubicWeb.
     4 # This file is part of CubicWeb.
     5 #
     5 #
     6 # CubicWeb is free software: you can redistribute it and/or modify it under the
     6 # CubicWeb is free software: you can redistribute it and/or modify it under the
    22 from cubicweb.server.sources import datafeed
    22 from cubicweb.server.sources import datafeed
    23 
    23 
    24 
    24 
    25 class DataFeedTC(CubicWebTC):
    25 class DataFeedTC(CubicWebTC):
    26     def setup_database(self):
    26     def setup_database(self):
    27         self.request().create_entity('CWSource', name=u'myfeed', type=u'datafeed',
    27         with self.admin_access.repo_cnx() as cnx:
    28                                     parser=u'testparser', url=u'ignored',
    28             cnx.create_entity('CWSource', name=u'myfeed', type=u'datafeed',
    29                                     config=u'synchronization-interval=1min')
    29                               parser=u'testparser', url=u'ignored',
       
    30                               config=u'synchronization-interval=1min')
       
    31             cnx.commit()
    30 
    32 
    31     def test(self):
    33     def test(self):
    32         self.assertIn('myfeed', self.repo.sources_by_uri)
    34         self.assertIn('myfeed', self.repo.sources_by_uri)
    33         dfsource = self.repo.sources_by_uri['myfeed']
    35         dfsource = self.repo.sources_by_uri['myfeed']
    34         self.assertEqual(dfsource.latest_retrieval, None)
    36         self.assertEqual(dfsource.latest_retrieval, None)
    46                     self.notify_updated(entity)
    48                     self.notify_updated(entity)
    47             def before_entity_copy(self, entity, sourceparams):
    49             def before_entity_copy(self, entity, sourceparams):
    48                 entity.cw_edited.update(sourceparams['item'])
    50                 entity.cw_edited.update(sourceparams['item'])
    49 
    51 
    50         with self.temporary_appobjects(AParser):
    52         with self.temporary_appobjects(AParser):
    51             session = self.repo.internal_session()
    53             with self.repo.internal_cnx() as cnx:
    52             stats = dfsource.pull_data(session, force=True)
    54                 stats = dfsource.pull_data(cnx, force=True)
    53             self.commit()
    55                 cnx.commit()
    54             # test import stats
    56                 # test import stats
    55             self.assertEqual(sorted(stats), ['checked', 'created', 'updated'])
    57                 self.assertEqual(sorted(stats), ['checked', 'created', 'updated'])
    56             self.assertEqual(len(stats['created']), 1)
    58                 self.assertEqual(len(stats['created']), 1)
    57             entity = self.execute('Card X').get_entity(0, 0)
    59                 entity = cnx.execute('Card X').get_entity(0, 0)
    58             self.assertIn(entity.eid, stats['created'])
    60                 self.assertIn(entity.eid, stats['created'])
    59             self.assertEqual(stats['updated'], set())
    61                 self.assertEqual(stats['updated'], set())
    60             # test imported entities
    62                 # test imported entities
    61             self.assertEqual(entity.title, 'cubicweb.org')
    63                 self.assertEqual(entity.title, 'cubicweb.org')
    62             self.assertEqual(entity.content, 'the cw web site')
    64                 self.assertEqual(entity.content, 'the cw web site')
    63             self.assertEqual(entity.cwuri, 'http://www.cubicweb.org/')
    65                 self.assertEqual(entity.cwuri, 'http://www.cubicweb.org/')
    64             self.assertEqual(entity.cw_source[0].name, 'myfeed')
    66                 self.assertEqual(entity.cw_source[0].name, 'myfeed')
    65             self.assertEqual(entity.cw_metainformation(),
    67                 self.assertEqual(entity.cw_metainformation(),
    66                              {'type': 'Card',
    68                                  {'type': 'Card',
    67                               'source': {'uri': 'myfeed', 'type': 'datafeed', 'use-cwuri-as-url': True},
    69                                   'source': {'uri': 'myfeed', 'type': 'datafeed', 'use-cwuri-as-url': True},
    68                               'extid': 'http://www.cubicweb.org/'}
    70                                   'extid': 'http://www.cubicweb.org/'}
    69                              )
    71                                  )
    70             self.assertEqual(entity.absolute_url(), 'http://www.cubicweb.org/')
    72                 self.assertEqual(entity.absolute_url(), 'http://www.cubicweb.org/')
    71             # test repo cache keys
    73                 # test repo cache keys
    72             self.assertEqual(self.repo._type_source_cache[entity.eid],
    74                 self.assertEqual(self.repo._type_source_cache[entity.eid],
    73                              ('Card', 'http://www.cubicweb.org/', 'myfeed'))
    75                                  ('Card', 'http://www.cubicweb.org/', 'myfeed'))
    74             self.assertEqual(self.repo._extid_cache['http://www.cubicweb.org/'],
    76                 self.assertEqual(self.repo._extid_cache['http://www.cubicweb.org/'],
    75                              entity.eid)
    77                                  entity.eid)
    76             # test repull
    78                 # test repull
    77             session.set_cnxset()
    79                 stats = dfsource.pull_data(cnx, force=True)
    78             stats = dfsource.pull_data(session, force=True)
    80                 self.assertEqual(stats['created'], set())
    79             self.assertEqual(stats['created'], set())
    81                 self.assertEqual(stats['updated'], set((entity.eid,)))
    80             self.assertEqual(stats['updated'], set((entity.eid,)))
    82                 # test repull with caches reseted
    81             # test repull with caches reseted
    83                 self.repo._type_source_cache.clear()
    82             self.repo._type_source_cache.clear()
    84                 self.repo._extid_cache.clear()
    83             self.repo._extid_cache.clear()
    85                 stats = dfsource.pull_data(cnx, force=True)
    84             session.set_cnxset()
    86                 self.assertEqual(stats['created'], set())
    85             stats = dfsource.pull_data(session, force=True)
    87                 self.assertEqual(stats['updated'], set((entity.eid,)))
    86             self.assertEqual(stats['created'], set())
    88                 self.assertEqual(self.repo._type_source_cache[entity.eid],
    87             self.assertEqual(stats['updated'], set((entity.eid,)))
    89                                  ('Card', 'http://www.cubicweb.org/', 'myfeed'))
    88             self.assertEqual(self.repo._type_source_cache[entity.eid],
    90                 self.assertEqual(self.repo._extid_cache['http://www.cubicweb.org/'],
    89                              ('Card', 'http://www.cubicweb.org/', 'myfeed'))
    91                                  entity.eid)
    90             self.assertEqual(self.repo._extid_cache['http://www.cubicweb.org/'],
       
    91                              entity.eid)
       
    92 
    92 
    93         self.assertEqual(dfsource.source_cwuris(self.session),
    93         self.assertEqual(dfsource.source_cwuris(self.session),
    94                          {'http://www.cubicweb.org/': (entity.eid, 'Card')}
    94                          {'http://www.cubicweb.org/': (entity.eid, 'Card')}
    95                          )
    95                          )
    96         self.assertTrue(dfsource.latest_retrieval)
    96         self.assertTrue(dfsource.latest_retrieval)
    97         self.assertTrue(dfsource.fresh())
    97         self.assertTrue(dfsource.fresh())
    98 
    98 
    99         # test_rename_source
    99         # test_rename_source
   100         req = self.request()
   100         with self.admin_access.repo_cnx() as cnx:
   101         req.execute('SET S name "myrenamedfeed" WHERE S is CWSource, S name "myfeed"')
   101             cnx.execute('SET S name "myrenamedfeed" WHERE S is CWSource, S name "myfeed"')
   102         self.commit()
   102             cnx.commit()
   103         entity = self.execute('Card X').get_entity(0, 0)
   103             entity = cnx.execute('Card X').get_entity(0, 0)
   104         self.assertEqual(entity.cwuri, 'http://www.cubicweb.org/')
   104             self.assertEqual(entity.cwuri, 'http://www.cubicweb.org/')
   105         self.assertEqual(entity.cw_source[0].name, 'myrenamedfeed')
   105             self.assertEqual(entity.cw_source[0].name, 'myrenamedfeed')
   106         self.assertEqual(entity.cw_metainformation(),
   106             self.assertEqual(entity.cw_metainformation(),
   107                          {'type': 'Card',
   107                              {'type': 'Card',
   108                           'source': {'uri': 'myrenamedfeed', 'type': 'datafeed', 'use-cwuri-as-url': True},
   108                               'source': {'uri': 'myrenamedfeed', 'type': 'datafeed', 'use-cwuri-as-url': True},
   109                           'extid': 'http://www.cubicweb.org/'}
   109                               'extid': 'http://www.cubicweb.org/'}
   110                          )
   110                              )
   111         self.assertEqual(self.repo._type_source_cache[entity.eid],
   111             self.assertEqual(self.repo._type_source_cache[entity.eid],
   112                          ('Card', 'http://www.cubicweb.org/', 'myrenamedfeed'))
   112                              ('Card', 'http://www.cubicweb.org/', 'myrenamedfeed'))
   113         self.assertEqual(self.repo._extid_cache['http://www.cubicweb.org/'],
   113             self.assertEqual(self.repo._extid_cache['http://www.cubicweb.org/'],
   114                          entity.eid)
   114                              entity.eid)
   115 
   115 
   116         # test_delete_source
   116             # test_delete_source
   117         req = self.request()
   117             cnx.execute('DELETE CWSource S WHERE S name "myrenamedfeed"')
   118         req.execute('DELETE CWSource S WHERE S name "myrenamedfeed"')
   118             cnx.commit()
   119         self.commit()
   119             self.assertFalse(cnx.execute('Card X WHERE X title "cubicweb.org"'))
   120         self.assertFalse(self.execute('Card X WHERE X title "cubicweb.org"'))
   120             self.assertFalse(cnx.execute('Any X WHERE X has_text "cubicweb.org"'))
   121         self.assertFalse(self.execute('Any X WHERE X has_text "cubicweb.org"'))
       
   122 
   121 
   123 if __name__ == '__main__':
   122 if __name__ == '__main__':
   124     from logilab.common.testlib import unittest_main
   123     from logilab.common.testlib import unittest_main
   125     unittest_main()
   124     unittest_main()