Ejemplo n.º 1
0
    def test_cancellation(self):
        Transaction.objects.create(from_user=None,
                                   to_user=self.user,
                                   amount=10000000,
                                   verified=True)
        today = date.today()
        for date_pair in (
            (today - timedelta(days=1), today),
            (today + timedelta(days=5), today + timedelta(days=7)),
            (today + timedelta(days=10), today + timedelta(days=12)),
            (today + timedelta(days=15), today + timedelta(days=17)),
        ):
            self.selenium_client.get(
                '/reservation/{}/?from_date={}&to_date={}'.format(
                    self.habitat.id, *date_pair))
            button = self.selenium_client.web_driver.find_elements_by_tag_name(
                'input')[-1]
            button.location_once_scrolled_into_view
            button.click()
            sleep(1)
            button = self.selenium_client.web_driver.find_element_by_link_text(
                'بله')
            button.location_once_scrolled_into_view
            button.click()
            sleep(1)
        self.assertEqual(Transaction.get_balance_from_user(self.user),
                         10000000 - self.cost_per_day * 6)

        # do a little stupid thing to travel in the time
        for reservation in Reservation.objects.all():
            reservation.from_date -= timedelta(days=5)
            reservation.to_date -= timedelta(days=5)
            reservation.save()

        self.selenium_client.get('/reservation/list')

        cancel_buttons = self.get_cancel_buttons()
        self.assertEqual(len(cancel_buttons), 2)

        cancel_buttons[0].click()
        sleep(1)

        cancel_buttons = self.get_cancel_buttons()
        self.assertEqual(len(cancel_buttons), 1)

        cancel_buttons[0].click()
        sleep(1)

        cancel_buttons = self.get_cancel_buttons()
        self.assertEqual(len(cancel_buttons), 0)

        punishment = self.cost_per_day * 2 * settings.CANCELLATION_FEE * 5
        self.assertEqual(Transaction.get_balance_from_user(self.user),
                         10000000 - self.cost_per_day * 2 - punishment)

        self.assertEqual(
            Transaction.get_balance_from_user(self.habitat_owner_user),
            self.cost_per_day * 2 * (1 - settings.RESERVATION_FEE) +
            punishment)
Ejemplo n.º 2
0
    def test_login_redirect(self):

        self.selenium_client.logout()

        Transaction.objects.create(from_user=None,
                                   to_user=self.user,
                                   amount=10000000,
                                   verified=True)
        self.selenium_client.get(
            '/reservation/{}/?persons=1&from_date={}&to_date={}'.format(
                self.habitat.id,
                date.today() + timedelta(days=50),
                date.today() + timedelta(days=52),
            ))
        button = self.selenium_client.web_driver.find_elements_by_tag_name(
            'input')[-1]
        button.location_once_scrolled_into_view
        button.click()
        sleep(1)

        self.selenium_client.login_without_navigation('ali', 'hello')
        button = self.selenium_client.web_driver.find_elements_by_tag_name(
            'input')[-1]
        button.location_once_scrolled_into_view
        button.click()
        sleep(1)

        button = self.selenium_client.web_driver.find_element_by_link_text(
            'بله')
        button.location_once_scrolled_into_view
        button.click()
        sleep(1)
        self.assertEqual(Transaction.get_balance_from_user(self.user),
                         10000000 - self.cost_per_day * 2)
Ejemplo n.º 3
0
    def test_withdrawal_request(self):
        # request withdrawal
        self.client.force_login(self.user)
        post_url = self.navigate_to_withdrawal_page()
        amount = self.prior_balance // 2
        response = self.client.post(post_url,
                                    data={'amount': amount},
                                    follow=True)
        self.assertTrue(
            'درخواست شما ثبت شد.' in response.content.decode('utf8'))
        transaction = Transaction.objects.last()
        self.client.logout()

        # approve withdrawal
        self.client.force_login(self.staff_user)
        post_url, response = self.navigate_to_withdrawal_approval_page()
        self.assertTrue(
            transaction.from_user.username in response.content.decode('utf8'))
        self.assertTrue(
            str(transaction.amount) in response.content.decode('utf8'))
        response = self.client.post(post_url,
                                    data={'verified': '1'},
                                    follow=True)
        self.assertFalse(
            str(transaction.amount) in response.content.decode('utf8'))
        transaction.refresh_from_db()
        self.assertTrue(transaction.verified)
        self.assertEqual(Transaction.get_balance_from_user(self.user),
                         self.prior_balance - amount)
Ejemplo n.º 4
0
    def clean(self):
        cleaned_data = super().clean()
        room_type = cleaned_data.get('room')
        from_date = cleaned_data.get('from_date')
        to_date = cleaned_data.get('to_date')

        if from_date and to_date:
            if to_date <= from_date:
                raise ValidationError('بازه زمانی رزرو صحیح نیست.')
            if room_type:
                if not room_type.has_empty_room(from_date, to_date):
                    raise ValidationError('اتاق در این زمان خالی نیست.')
                days = (to_date - from_date) / timedelta(days=1)
                required_money = room_type.cost_per_night * days
                self.cost = required_money
                balance = Transaction.get_balance_from_user(self.member.user)
                if balance < required_money:
                    self.amount_required = required_money - balance
                    raise ValidationError(
                        'باید حداقل {} در حساب خود داشته باشید. لطفا حساب خود را شارژ کنید.'
                        .format(required_money))
Ejemplo n.º 5
0
 def balance(self):
     return Transaction.get_balance_from_user(self.user)
Ejemplo n.º 6
0
 def clean_amount(self):
     amount = self.cleaned_data['amount']
     if amount > Transaction.get_balance_from_user(self.request.user):
         raise ValidationError('مبلغ بیش از موجودی حساب شماست.')
     return amount