Пример #1
0
    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()
Пример #2
0
    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)
Пример #3
0
    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()
Пример #4
0
    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)
Пример #5
0
    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)
Пример #6
0
    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")
Пример #7
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())
Пример #8
0
 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)
Пример #9
0
 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)
Пример #10
0
    def test_deposit(self):
        user = UserGetter.get_by_id('xUQeyplJshTzco4vyHHVoytT3FD2')

        user_balance = user.balance
        user.deposit(100)
        self.assertEqual(user.balance, user_balance + 100)
Пример #11
0
 def test_getting_blank_user(self):
     user = UserGetter.get_by_id("")
     self.assertIsNone(user)
Пример #12
0
 def test_getting_nonexistent_user(self):
     user = UserGetter.get_by_id('non_existent_uid')
     self.assertIsNone(user)