Пример #1
0
    def test_successful_transfer(self):
        with self.app.app_context():
            with self.client.session_transaction() as sess:
                sess["user_id"] = self.sender_id

            sender = get_user_by_id(self.sender_id)
            receiver = get_user_by_id(self.receiver_id)

            amount = 10
            total_transfer = 0

            for _ in range(10):
                response = self.client.post(
                    "/api/ticket/transfer",
                    data=json.dumps({
                        "to": receiver.id,
                        "amount": amount
                    }),
                )
                total_transfer += amount

                sender_balance = get_user_balance(sender.id)
                receiver_balance = get_user_balance(receiver.id)

                self.assertEqual(response.status_code, 200)
                self.assertEqual(sender_balance, 1000 - total_transfer)
                self.assertEqual(receiver_balance, total_transfer)
Пример #2
0
    def test_success_coinflip(self):
        with self.app.test_request_context():
            with self.client.session_transaction() as sess:
                sess["user_id"] = self.user_id

            amount = 100
            user = get_user_by_id(self.user_id)

            with mock.patch("server.routes.coinflip.randint",
                            lambda _a, _b: 0):
                response = self.client.post(
                    COINFLIP_ENDPOINT,
                    data=json.dumps({
                        "side": "Heads",
                        "bet": amount,
                    }),
                )

                self.assertTrue(response.json["won"])  # Win 100 points
                self.assertEqual(get_user_balance(user.id), 1100)

                response = self.client.post(
                    COINFLIP_ENDPOINT,
                    data=json.dumps({
                        "side": "Tails",
                        "bet": amount,
                    }),
                )

                self.assertFalse(response.json["won"])  # Lose 100 points
                self.assertEqual(get_user_balance(user.id), 1000)

            with mock.patch("server.routes.coinflip.randint",
                            lambda _a, _b: 1):
                response = self.client.post(
                    COINFLIP_ENDPOINT,
                    data=json.dumps({
                        "side": "Tails",
                        "bet": amount,
                    }),
                )

                self.assertTrue(response.json["won"])  # Win 100 points
                self.assertEqual(get_user_balance(user.id), 1100)

                response = self.client.post(
                    COINFLIP_ENDPOINT,
                    data=json.dumps({
                        "side": "Heads",
                        "bet": amount,
                    }),
                )

                self.assertFalse(response.json["won"])  # Lose 100 points
                self.assertEqual(get_user_balance(user.id), 1000)
Пример #3
0
    def test_sending_to_self(self):
        with self.app.app_context():
            with self.client.session_transaction() as sess:
                sess["user_id"] = self.sender_id

            sender = get_user_by_id(self.sender_id)
            receiver = get_user_by_id(self.receiver_id)

            amount = 10

            response = self.client.post(
                "/api/ticket/transfer",
                data=json.dumps({
                    "to": sender.id,
                    "amount": amount
                }),
            )

            sender_balance = get_user_balance(sender.id)
            receiver_balance = get_user_balance(receiver.id)

            self.assertEqual(response.status_code, 400)
            self.assertEqual(sender_balance, 1000)
            self.assertEqual(receiver_balance, 0)
Пример #4
0
    def test_fail_coinflip(self):
        with self.app.test_request_context():
            with self.client.session_transaction() as sess:
                sess["user_id"] = self.user_id

            user = get_user_by_id(self.user_id)

            transaction = Transaction(user=user,
                                      ticket_amount=-1000,
                                      activity="Make balance 0")
            db.session.add(transaction)
            db.session.commit()

            response = self.client.post(COINFLIP_ENDPOINT)

            self.assertIn("error", response.json)
Пример #5
0
    def test_success_skiball(self):
        with self.app.test_request_context():
            with self.client.session_transaction() as sess:
                sess["user_id"] = self.user_id

            user = get_user_by_id(self.user_id)
            balance = 1000
            amounts = [10, 20, 30, 40, 50, 100]

            for amount in amounts:
                with mock.patch("random.choice", lambda _b: amount):
                    response = self.client.post(COINFLIP_ENDPOINT)
                    balance -= 30
                    balance += amount

                    self.assertEqual(response.json["amount"], amount)
                    self.assertEqual(get_user_balance(user.id), balance)
Пример #6
0
    def test_fail_dice(self):
        with self.app.test_request_context():
            with self.client.session_transaction() as sess:
                sess["user_id"] = self.user_id

            amount = 10000
            user = get_user_by_id(self.user_id)

            with mock.patch("server.routes.dice.get_side", lambda: 2):
                response = self.client.post(
                    DICE_ENDPOINT,
                    data=json.dumps({
                        "bet": 6,
                        "quantity": amount,
                    }),
                )

                self.assertIn("error", response.json)
                self.assertEqual(1000, get_user_balance(user.id))
Пример #7
0
def get_profile_view(user_id):
    if user_id is None:
        user = get_current_user()
    else:
        user = get_user_by_id(user_id)

    if user:
        if user.is_public or user_id is None:
            total_tickets = get_user_balance(user.id)
            return {
                "name": user.name,
                "username": user.username,
                "registration_datetime": user.registration_datetime,
                "total_tickets": total_tickets,
                "is_public": user.is_public,
            }

        return {"error": "User profile is private"}, 401

    return {"error": "User not found"}, 404
Пример #8
0
    def test_fail_coinflip(self):
        with self.app.test_request_context():
            with self.client.session_transaction() as sess:
                sess["user_id"] = self.user_id

            amount = 10000
            user = get_user_by_id(self.user_id)

            with mock.patch("server.routes.coinflip.get_side",
                            lambda: "Heads"):
                response = self.client.post(
                    COINFLIP_ENDPOINT,
                    data=json.dumps({
                        "side": "Tails",
                        "bet": amount,
                    }),
                )

                self.assertIn("error", response.json)
                self.assertEqual(1000, get_user_balance(user.id))
Пример #9
0
    def test_success_dice(self):
        with self.app.test_request_context():
            with self.client.session_transaction() as sess:
                sess["user_id"] = self.user_id

            amount = 100
            user = get_user_by_id(self.user_id)

            with mock.patch("server.routes.dice.randint", lambda _a, _b: 1):
                response = self.client.post(
                    DICE_ENDPOINT,
                    data=json.dumps({
                        "bet": 1,
                        "quantity": amount,
                    }),
                )

                self.assertTrue(response.json["won"])  # Win 400 points
                self.assertEqual(get_user_balance(user.id), 1400)

                response = self.client.post(
                    DICE_ENDPOINT,
                    data=json.dumps({
                        "bet": 2,
                        "quantity": amount,
                    }),
                )

                self.assertFalse(response.json["won"])  # Lose 100 points
                self.assertEqual(get_user_balance(user.id), 1300)
            with mock.patch("server.routes.dice.randint", lambda _a, _b: 2):
                response = self.client.post(
                    DICE_ENDPOINT,
                    data=json.dumps({
                        "bet": 2,
                        "quantity": amount,
                    }),
                )

                self.assertTrue(response.json["won"])  # Win 100 points
                self.assertEqual(get_user_balance(user.id), 1700)

                response = self.client.post(
                    DICE_ENDPOINT,
                    data=json.dumps({
                        "bet": 3,
                        "quantity": amount,
                    }),
                )

                self.assertFalse(response.json["won"])  # Lose 100 points
                self.assertEqual(get_user_balance(user.id), 1600)
            with mock.patch("server.routes.dice.randint", lambda _a, _b: 3):
                response = self.client.post(
                    DICE_ENDPOINT,
                    data=json.dumps({
                        "bet": 3,
                        "quantity": amount,
                    }),
                )

                self.assertTrue(response.json["won"])  # Win 100 points
                self.assertEqual(get_user_balance(user.id), 2000)

                response = self.client.post(
                    DICE_ENDPOINT,
                    data=json.dumps({
                        "bet": 4,
                        "quantity": amount,
                    }),
                )

                self.assertFalse(response.json["won"])  # Lose 100 points
                self.assertEqual(get_user_balance(user.id), 1900)
            with mock.patch("server.routes.dice.randint", lambda _a, _b: 4):
                response = self.client.post(
                    DICE_ENDPOINT,
                    data=json.dumps({
                        "bet": 4,
                        "quantity": amount,
                    }),
                )

                self.assertTrue(response.json["won"])  # Win 100 points
                self.assertEqual(get_user_balance(user.id), 2300)

                response = self.client.post(
                    DICE_ENDPOINT,
                    data=json.dumps({
                        "bet": 5,
                        "quantity": amount,
                    }),
                )

                self.assertFalse(response.json["won"])  # Lose 100 points
                self.assertEqual(get_user_balance(user.id), 2200)
            with mock.patch("server.routes.dice.randint", lambda _a, _b: 5):
                response = self.client.post(
                    DICE_ENDPOINT,
                    data=json.dumps({
                        "bet": 5,
                        "quantity": amount,
                    }),
                )

                self.assertTrue(response.json["won"])  # Win 100 points
                self.assertEqual(get_user_balance(user.id), 2600)

                response = self.client.post(
                    DICE_ENDPOINT,
                    data=json.dumps({
                        "bet": 6,
                        "quantity": amount,
                    }),
                )

                self.assertFalse(response.json["won"])  # Lose 100 points
                self.assertEqual(get_user_balance(user.id), 2500)
            with mock.patch("server.routes.dice.randint", lambda _a, _b: 6):
                response = self.client.post(
                    DICE_ENDPOINT,
                    data=json.dumps({
                        "bet": 6,
                        "quantity": amount,
                    }),
                )

                self.assertTrue(response.json["won"])  # Win 100 points
                self.assertEqual(get_user_balance(user.id), 2900)

                response = self.client.post(
                    DICE_ENDPOINT,
                    data=json.dumps({
                        "bet": 1,
                        "quantity": amount,
                    }),
                )

                self.assertFalse(response.json["won"])  # Lose 100 points
                self.assertEqual(get_user_balance(user.id), 2800)