def on_update(self): store = self.store emitted_store_list = getattr(self, '_emitted_store_list', set()) # Since other classes can propagate this event (like Sellable), # emit the event only once for each store. if not store in emitted_store_list: ProductEditEvent.emit(self) emitted_store_list.add(store) self._emitted_store_list = emitted_store_list
def testCreateEvent(self): store_list = [] p_data = _ProductEventData() ProductCreateEvent.connect(p_data.on_create) ProductEditEvent.connect(p_data.on_edit) ProductRemoveEvent.connect(p_data.on_delete) try: # Test product being created store = new_store() store_list.append(store) sellable = Sellable( store=store, description=u'Test 1234', price=Decimal(2), ) product = Product( store=store, sellable=sellable, ) store.commit() self.assertTrue(p_data.was_created) self.assertFalse(p_data.was_edited) self.assertFalse(p_data.was_deleted) self.assertEqual(p_data.product, product) p_data.reset() # Test product being edited and emmiting the event just once store = new_store() store_list.append(store) sellable = store.fetch(sellable) product = store.fetch(product) sellable.notes = u'Notes' sellable.description = u'Test 666' product.weight = Decimal(10) store.commit() self.assertTrue(p_data.was_edited) self.assertFalse(p_data.was_created) self.assertFalse(p_data.was_deleted) self.assertEqual(p_data.product, product) self.assertEqual(p_data.emmit_count, 1) p_data.reset() # Test product being edited, editing Sellable store = new_store() store_list.append(store) sellable = store.fetch(sellable) product = store.fetch(product) sellable.notes = u'Notes for test' store.commit() self.assertTrue(p_data.was_edited) self.assertFalse(p_data.was_created) self.assertFalse(p_data.was_deleted) self.assertEqual(p_data.product, product) self.assertEqual(p_data.emmit_count, 1) p_data.reset() # Test product being edited, editing Product itself store = new_store() store_list.append(store) sellable = store.fetch(sellable) product = store.fetch(product) product.weight = Decimal(1) store.commit() self.assertTrue(p_data.was_edited) self.assertFalse(p_data.was_created) self.assertFalse(p_data.was_deleted) self.assertEqual(p_data.product, product) self.assertEqual(p_data.emmit_count, 1) p_data.reset() # Test product being edited, editing Product itself store = new_store() store_list.append(store) sellable = store.fetch(sellable) product = store.fetch(product) product.weight = Decimal(1) store.commit() #self.assertTrue(p_data.was_edited) self.assertFalse(p_data.was_created) self.assertFalse(p_data.was_deleted) #self.assertEqual(p_data.product, product) #self.assertEqual(p_data.emmit_count, 1) p_data.reset() finally: # Test product being removed store = new_store() store_list.append(store) sellable = store.fetch(sellable) product = store.fetch(product) sellable.remove() store.commit() self.assertTrue(p_data.was_deleted) self.assertFalse(p_data.was_created) self.assertFalse(p_data.was_edited) self.assertEqual(p_data.product, product) self.assertEqual(p_data.emmit_count, 1) p_data.reset() for store in store_list: store.close()
def testCreateEvent(self): store_list = [] p_data = _ProductEventData() ProductCreateEvent.connect(p_data.on_create) ProductEditEvent.connect(p_data.on_edit) ProductRemoveEvent.connect(p_data.on_delete) try: # Test product being created store = new_store() store_list.append(store) sellable = Sellable( store=store, description=u'Test 1234', price=Decimal(2), ) product = Product( store=store, sellable=sellable, ) store.commit() self.assertTrue(p_data.was_created) self.assertFalse(p_data.was_edited) self.assertFalse(p_data.was_deleted) self.assertEqual(p_data.product, product) p_data.reset() # Test product being edited and emmiting the event just once store = new_store() store_list.append(store) sellable = store.fetch(sellable) product = store.fetch(product) sellable.notes = u'Notes' sellable.description = u'Test 666' product.weight = Decimal(10) store.commit() self.assertTrue(p_data.was_edited) self.assertFalse(p_data.was_created) self.assertFalse(p_data.was_deleted) self.assertEqual(p_data.product, product) self.assertEqual(p_data.emmit_count, 1) p_data.reset() # Test product being edited, editing Sellable store = new_store() store_list.append(store) sellable = store.fetch(sellable) product = store.fetch(product) sellable.notes = u'Notes for test' store.commit() self.assertTrue(p_data.was_edited) self.assertFalse(p_data.was_created) self.assertFalse(p_data.was_deleted) self.assertEqual(p_data.product, product) self.assertEqual(p_data.emmit_count, 1) p_data.reset() # Test product being edited, editing Product itself store = new_store() store_list.append(store) sellable = store.fetch(sellable) product = store.fetch(product) product.weight = Decimal(1) store.commit() self.assertTrue(p_data.was_edited) self.assertFalse(p_data.was_created) self.assertFalse(p_data.was_deleted) self.assertEqual(p_data.product, product) self.assertEqual(p_data.emmit_count, 1) p_data.reset() # Test product being edited, editing Product itself store = new_store() store_list.append(store) sellable = store.fetch(sellable) product = store.fetch(product) product.weight = Decimal(1) store.commit() # self.assertTrue(p_data.was_edited) self.assertFalse(p_data.was_created) self.assertFalse(p_data.was_deleted) # self.assertEqual(p_data.product, product) # self.assertEqual(p_data.emmit_count, 1) p_data.reset() finally: # Test product being removed store = new_store() store_list.append(store) sellable = store.fetch(sellable) product = store.fetch(product) sellable.remove() store.commit() self.assertTrue(p_data.was_deleted) self.assertFalse(p_data.was_created) self.assertFalse(p_data.was_edited) self.assertEqual(p_data.product, product) self.assertEqual(p_data.emmit_count, 1) p_data.reset() for store in store_list: store.close()