Example #1
0
    def test_remove_item(self, yesno):
        yesno.return_value = gtk.RESPONSE_OK

        list_slave = _ModelListSlave(store=self.store)
        item_to_remove = self.store.find(_TestModel, unicode_var=u'XXX').one()

        self.assertNotSensitive(list_slave.listcontainer, ['remove_button'])
        list_slave.listcontainer.list.select(item_to_remove)
        self.assertSensitive(list_slave.listcontainer, ['remove_button'])

        original_dm = list_slave.delete_model
        with mock.patch.object(list_slave, 'delete_model') as dm:
            dm.side_effect = original_dm
            self.click(list_slave.listcontainer.remove_button)
            args, kwargs = dm.call_args
            model, store = args

            self.assertTrue(isinstance(model, _TestModel))
            self.assertEqual(self.store.fetch(model), item_to_remove)
            self.assertTrue(isinstance(store, StoqlibStore))
            self.assertNotEqual(store, self.store)

        models = self.models - set([item_to_remove])
        self.assertEqual(set(list_slave.listcontainer.list), models)
        self.assertEqual(set(list_slave.populate()), models)
        self.assertEqual(StoqlibStore.of(list_slave.populate()[0]), self.store)
Example #2
0
    def test_populate(self):
        list_slave = _ModelListSlave(store=self.store)
        # Make sure the list was populated right
        self.assertEqual(set(list_slave.listcontainer.list), self.models)

        # Make sure populate method is returning all models
        self.assertEqual(set(list_slave.populate()), self.models)
        self.assertEqual(StoqlibStore.of(list_slave.populate()[0]), self.store)
Example #3
0
    def test_rollback_nested_savepoints_with_new_objects(self):
        outside = WillBeCommitted(store=self.store, test_var=u'outside')
        self.store.savepoint('first_savepoint')
        inside = WillBeCommitted(store=self.store,
                                 test_var=u'inside_savepoint')
        self.store.savepoint('second_savepoint')
        inside_inside = WillBeCommitted(store=self.store,
                                        test_var=u'inside_inside_savepoint')

        # All objects are on the same store, but two of them are inside savepoints.
        self.assertEquals(StoqlibStore.of(outside), self.store)
        self.assertEquals(StoqlibStore.of(inside), self.store)
        self.assertEquals(StoqlibStore.of(inside_inside), self.store)

        # Now rollback to the second savepoint
        self.store.rollback_to_savepoint('second_savepoint')
        # The event inside_inside object should not be in the store
        self.assertIsNone(StoqlibStore.of(inside_inside))

        # ... but the other two should still be.
        self.assertEquals(StoqlibStore.of(inside), self.store)
        self.assertEquals(StoqlibStore.of(outside), self.store)

        self.store.rollback_to_savepoint('first_savepoint')
        # The outer inside object should not be in the store
        self.assertIsNone(StoqlibStore.of(inside))
Example #4
0
    def test_rollback_double_savepoint_with_new_objects(self):
        outside = WillBeCommitted(store=self.store, test_var=u'outside')
        self.store.savepoint('first_savepoint')
        inside = WillBeCommitted(store=self.store, test_var=u'inside_savepoint')
        self.store.savepoint('second_savepoint')
        inside_inside = WillBeCommitted(store=self.store, test_var=u'inside_inside_savepoint')

        # All objects are on the same store, but tho of them are in savepoints
        self.assertEqual(StoqlibStore.of(outside), self.store)
        self.assertEqual(StoqlibStore.of(inside), self.store)
        self.assertEqual(StoqlibStore.of(inside_inside), self.store)

        # Now rollback to the first savepoint
        self.store.rollback_to_savepoint('first_savepoint')
        # ... the two inner objects should not be in the store.
        self.assertIsNone(StoqlibStore.of(inside))
        self.assertIsNone(StoqlibStore.of(inside_inside))

        # ... but the ouside one should still be in the store.
        self.assertEqual(StoqlibStore.of(outside), self.store)

        # It should not be possible to rollback to the second_savepoint, since that was
        # already done when we rolled back to the first
        with self.assertRaises(ValueError):
            self.store.rollback_to_savepoint('second_savepoint')
Example #5
0
 def _get_store_internal(self, dbname):
     from stoqlib.database.runtime import StoqlibStore
     uri = self._create_uri(dbname)
     try:
         self._log_connect(uri)
         store = StoqlibStore(create_database(uri))
     except OperationalError as e:
         log.info('OperationalError: %s' % e)
         raise DatabaseError(e.args[0])
     except Exception as e:
         value = sys.exc_info()[1]
         raise DatabaseError(
             _("Could not connect to %s database. The error message is "
               "'%s'. Please fix the connection settings you have set "
               "and try again.") % (DEFAULT_RDBMS, value))
     return store
Example #6
0
 def _get_store_internal(self, dbname):
     from stoqlib.database.runtime import StoqlibStore
     uri = self._create_uri(dbname)
     try:
         if uri.host == "":
             pair = test_local_database()
             if pair is None:
                 raise DatabaseError(
                     _("Could not find a database server on this computer"))
             uri.host = pair[0]
             uri.port = int(pair[1])
         self._log_connect(uri)
         store = StoqlibStore(create_database(uri))
     except OperationalError as e:
         log.info('OperationalError: %s' % e)
         raise DatabaseError(e.args[0])
     except Exception as e:
         value = sys.exc_info()[1]
         raise DatabaseError(
             _("Could not connect to %s database. The error message is "
               "'%s'. Please fix the connection settings you have set "
               "and try again.") % (DEFAULT_RDBMS, value))
     return store
Example #7
0
    def test_rollback_nested_savepoints_with_new_objects(self):
        outside = WillBeCommitted(store=self.store, test_var=u'outside')
        self.store.savepoint('first_savepoint')
        inside = WillBeCommitted(store=self.store, test_var=u'inside_savepoint')
        self.store.savepoint('second_savepoint')
        inside_inside = WillBeCommitted(store=self.store, test_var=u'inside_inside_savepoint')

        # All objects are on the same store, but two of them are inside savepoints.
        self.assertEqual(StoqlibStore.of(outside), self.store)
        self.assertEqual(StoqlibStore.of(inside), self.store)
        self.assertEqual(StoqlibStore.of(inside_inside), self.store)

        # Now rollback to the second savepoint
        self.store.rollback_to_savepoint('second_savepoint')
        # The event inside_inside object should not be in the store
        self.assertIsNone(StoqlibStore.of(inside_inside))

        # ... but the other two should still be.
        self.assertEqual(StoqlibStore.of(inside), self.store)
        self.assertEqual(StoqlibStore.of(outside), self.store)

        self.store.rollback_to_savepoint('first_savepoint')
        # The outer inside object should not be in the store
        self.assertIsNone(StoqlibStore.of(inside))