def cancel_delivery_by_assistant(self): """Cancel delivery as the current user, the assistant""" assistant = UserMeGetter.user with Firestore.batch('packages') as batch: batch.update(self.request.uid, { 'status': Status.AVAILABLE, 'assistant': {} }) with Firestore.batch('users') as batch: batch.update( UserMeGetter._user_id, {'balance': assistant.balance + self.request.money_lock}) owner_uid = self.request.assistant.uid owner = UserGetter.get_by_id(owner_uid) with Firestore.batch('users') as batch: batch.update(owner_uid, {'balance': owner.balance + self.request.reward}) with Firestore.batch('users/' + UserMeGetter._user_id + "/deliveries") as batch: batch.delete(self.request.uid) toast("Delivery cancelled.") self._back_button_handler()
def test_deposit_negative(self): user = UserGetter.get_by_id('xUQeyplJshTzco4vyHHVoytT3FD2') user_balance = user.balance user.deposit(-100) # Money should not be deposited self.assertEqual(user.balance, user_balance)
def cancel_delivery_by_owner(self): """Cancel delivery as the current user, the owner""" if self.request.status == Status.ACCEPTED: assistant_uid = self.request.assistant.uid assistant = UserGetter.get_by_id(assistant_uid) with Firestore.batch('users') as batch: batch.update( assistant_uid, {'balance': assistant.balance + self.request.money_lock}) with Firestore.batch('packages') as batch: batch.update(self.request.uid, { 'status': Status.AVAILABLE, 'assistant': {} }) with Firestore.batch('users/' + assistant_uid + "/deliveries") as batch: batch.delete(self.request.uid) elif self.request.status == Status.AVAILABLE: with Firestore.batch('packages') as batch: batch.update(self.request.uid, { 'status': Status.CANCELLED_BY_OWNER, }) with Firestore.batch('users') as batch: batch.update( UserMeGetter._user_id, {'balance': UserMeGetter.user.balance + self.request.reward}) toast("Delivery cancelled.") self._back_button_handler()
def test_locking_money(self): user = UserGetter.get_by_id('xUQeyplJshTzco4vyHHVoytT3FD2') request = DeliveryRequest( "id", "item", "description\ntext", origin=Location(name="Odenvägen 1, SE-194 63 Odenslunda, Sweden", latitude=59.51224, longitude=17.93536).to_dict(), destination=Location(name="Rolsmo 1, SE-360 24 Linneryd, Sweden", latitude=56.64989, longitude=15.16624).to_dict(), reward=100, weight=2, fragile=True, status=Status.AVAILABLE, money_lock=0, owner=user.to_minified().to_dict(), assistant=MinifiedUser("", "", "", "").to_dict(), image_path="") # ensure enough capital user.deposit(100) user_balance = user.balance self.assertEqual(user.balance, user_balance) user.lock_delivery_amount(request) self.assertEqual(user.balance, user_balance - 100)
def set_me(new_user_id: Text): """ Sets up a new subscription for the given user id :param new_user_id: The signed in user """ if UserMeGetter._user_id is not "": Firestore.unsubscribe( u'users/{user_id}/'.format(user_id=new_user_id)) Firestore.unsubscribe( u'users/{user_id}/packages'.format(user_id=new_user_id)) Firestore.unsubscribe( u'users/{user_id}/deliveries'.format(user_id=new_user_id)) UserMeGetter._user_id = new_user_id if new_user_id != "": UserMeGetter.user = UserGetter.get_by_id(new_user_id) Firestore.subscribe_document("users", new_user_id, UserMeGetter._on_snapshot_user) Firestore.subscribe( u'users/{user_id}/packages'.format(user_id=new_user_id), UserMeGetter._on_snapshot_user_packages) Firestore.subscribe( u'users/{user_id}/deliveries'.format(user_id=new_user_id), UserMeGetter._on_snapshot_user_deliveries)
def test_get_existing_user(self): user = UserGetter.get_by_id('xUQeyplJshTzco4vyHHVoytT3FD2') self.assertIsNotNone(user) self.assertEqual( user.name, "Travis CI Account - DON'T DELETE OR YOULL BREAK THE " "ENTIRE CI WORKFLOW/UNITTESTS REEEEEEEEEEEEEEEEEEEEEEEEE") self.assertEqual(user.mail, "*****@*****.**") self.assertEqual(user.phonenumber, "0")
def test_query(self): user = UserGetter.get_by_id('xUQeyplJshTzco4vyHHVoytT3FD2') delivery_requests = DeliveryRequestGetter.query( u'owner.uid', u'==', u'xUQeyplJshTzco4vyHHVoytT3FD2') self.assertGreaterEqual(len(delivery_requests), 1, msg="Expected at least 1 match.") # Clean up DRs for dr in delivery_requests: if not dr.uid == 'DLpVc0QmbOHzfDo24Hpp': with Firestore.batch('packages') as batch: batch.delete(dr.uid) delivery_requests = DeliveryRequestGetter.query( u'owner.uid', u'==', u'xUQeyplJshTzco4vyHHVoytT3FD2') self.assertEqual(len(delivery_requests), 1, msg="Expected 1 match.") expected = DeliveryRequest( uid='DLpVc0QmbOHzfDo24Hpp', item='Xbox controller', description='I AM USED FOR TESTS. DO NOT REMOVE', origin=Location("Odenvägen 1, SE-194 63 Odenslunda, Sweden", latitude=59.51224, longitude=17.93536).to_dict(), destination=Location("Rolsmo 1, SE-360 24 Linneryd, Sweden", latitude=56.64989, longitude=15.16624).to_dict(), reward=123, weight=0, fragile=False, status=Status.AVAILABLE, money_lock=23, owner=user.to_minified().to_dict(), assistant=dict(), image_path='') self.assertDictEqual.__self__.maxDiff = None self.assertDictEqual(delivery_requests[0].to_dict(), expected.to_dict())
def test_withdraw_negative(self): user = UserGetter.get_by_id('xUQeyplJshTzco4vyHHVoytT3FD2') user_balance = user.balance user.withdraw(-100) # Money should not be withdrawn self.assertEqual(user.balance, user_balance)
def test_withdraw(self): user = UserGetter.get_by_id('xUQeyplJshTzco4vyHHVoytT3FD2') user.deposit(100) # Ensure that we have enough money to withdraw user_balance = user.balance user.withdraw(50) self.assertEqual(user.balance, user_balance - 50)
def test_deposit(self): user = UserGetter.get_by_id('xUQeyplJshTzco4vyHHVoytT3FD2') user_balance = user.balance user.deposit(100) self.assertEqual(user.balance, user_balance + 100)
def test_getting_blank_user(self): user = UserGetter.get_by_id("") self.assertIsNone(user)
def test_getting_nonexistent_user(self): user = UserGetter.get_by_id('non_existent_uid') self.assertIsNone(user)