def test_if_booking_on_physical_good_type_but_has_url_return_0(self):
            # Given
            create_user(id=1)
            create_deposit(amount=500)
            create_offerer(id=10)
            create_product(id=1, product_type="ThingType.MUSIQUE")
            create_venue(id=15, offerer_id=10)
            create_offer(
                id=30,
                venue_id=15,
                product_type="ThingType.MUSIQUE",
                url="u.rl",
                product_id=1,
            )
            create_stock(id=20, offer_id=30)
            create_booking(user_id=1, amount=10, quantity=1, stock_id=20)

            # When
            query = _get_theoric_amount_spent_in_physical_goods_query()

            # Then
            with ENGINE.connect() as connection:
                theoric_amount_spent_in_physical = pandas.read_sql(
                    query, connection, index_col="user_id")
            pandas.testing.assert_frame_equal(
                theoric_amount_spent_in_physical,
                pandas.DataFrame(
                    [0.0],
                    columns=["Dépenses physiques"],
                    index=Int64Index([1], name="user_id"),
                ),
            )
        def test_if_booking_is_not_used_return_zero(self):
            # Given
            create_user(id=45)
            create_offerer(id=1)
            create_venue(offerer_id=1)
            create_product(id=1)
            create_offer(venue_id=1, product_id=1, id=1)
            create_stock(offer_id=1, id=1)
            create_deposit(user_id=45)
            create_booking(
                user_id=45,
                stock_id=1,
                quantity=1,
                amount=10,
                is_cancelled=False,
                is_used=False,
            )

            # When
            query = _get_actual_amount_spent_query()

            # Then
            with ENGINE.connect() as connection:
                amount_spent = pandas.read_sql(query,
                                               connection,
                                               index_col="user_id")
            pandas.testing.assert_frame_equal(
                amount_spent,
                pandas.DataFrame(
                    [0.0],
                    columns=["Montant réél dépensé"],
                    index=Int64Index([45], name="user_id"),
                ),
            )
        def test_if_booking_amount_10_and_quantity_2_return_20(self):
            # Given
            create_user(id=45)
            create_offerer(id=1)
            create_venue(offerer_id=1)
            create_product(id=1)
            create_offer(venue_id=1, product_id=1, id=1)
            create_stock(offer_id=1, id=1)
            create_deposit(user_id=45)
            create_booking(
                user_id=45,
                stock_id=1,
                quantity=2,
                amount=10,
                is_cancelled=False,
                is_used=True,
            )

            # When
            query = _get_theoric_amount_spent_query()

            # Then
            with ENGINE.connect() as connection:
                theoric_amount_spent = pandas.read_sql(query,
                                                       connection,
                                                       index_col="user_id")
            pandas.testing.assert_frame_equal(
                theoric_amount_spent,
                pandas.DataFrame(
                    [20.0],
                    columns=["Montant théorique dépensé"],
                    index=Int64Index([45], name="user_id"),
                ),
            )
        def test_if_booking_on_outings_return_amount(self):
            # Given
            create_user(id=1)
            create_deposit(amount=500)
            create_offerer(id=10)
            create_product(id=1,
                           product_type="ThingType.MUSEES_PATRIMOINE_ABO")
            create_venue(id=15, offerer_id=10)
            create_offer(
                id=30,
                venue_id=15,
                product_type="ThingType.MUSEES_PATRIMOINE_ABO",
                product_id=1,
            )
            create_stock(id=20, offer_id=30)
            create_booking(user_id=1, amount=10, quantity=2, stock_id=20)

            # When
            query = _get_theoric_amount_spent_in_outings_query()

            # Then
            with ENGINE.connect() as connection:
                theoric_amount_spent_in_outings = pandas.read_sql(
                    query, connection, index_col="user_id")
            pandas.testing.assert_frame_equal(
                theoric_amount_spent_in_outings,
                pandas.DataFrame(
                    [20.0],
                    columns=["Dépenses sorties"],
                    index=Int64Index([1], name="user_id"),
                ),
            )
        def test_should_return_how_many_time_first_booking(self):
            # Given
            create_user(id=1)
            create_deposit(amount=500)
            create_offerer(id=10)
            create_product(id=1,
                           product_type="ThingType.MUSEES_PATRIMOINE_ABO")
            create_venue(id=15, offerer_id=10)
            create_offer(
                id=30,
                venue_id=15,
                product_type="ThingType.MUSEES_PATRIMOINE_ABO",
                product_id=1,
            )
            create_stock(id=20, offer_id=30)
            create_booking(id=1,
                           user_id=1,
                           amount=10,
                           quantity=1,
                           stock_id=20,
                           is_used=True)
            create_booking(
                id=2,
                user_id=1,
                amount=10,
                quantity=1,
                stock_id=20,
                token="ABC321",
                is_used=True,
            )
            create_booking(
                id=3,
                user_id=1,
                amount=10,
                quantity=3,
                stock_id=20,
                token="FAM321",
                is_cancelled=True,
            )

            expected_first_booking_number = pandas.Series(
                index=pandas.Index(data=[30], name="offer_id"),
                data=[1],
                name="Nombre de premières réservations",
            )

            # When
            query = _get_count_first_booking_query()

            # Then
            with ENGINE.connect() as connection:
                count_first_booking = pandas.read_sql(query,
                                                      connection,
                                                      index_col="offer_id")
            pandas.testing.assert_series_equal(
                count_first_booking["Nombre de premières réservations"],
                expected_first_booking_number,
            )
        def test_should_return_exact_booking_amount(self, app):
            # Given
            create_user(id=1)
            create_deposit(user_id=1)
            create_offerer(id=1)
            create_venue(offerer_id=1, id=1)
            create_product(id=1, product_type="ThingType.ACTIVATION")
            create_offer(venue_id=1,
                         product_id=1,
                         id=1,
                         product_type="ThingType.ACTIVATION")
            create_stock(offer_id=1, id=1)
            create_product(id=2, product_type="ThingType.MUSIQUE")
            create_offer(venue_id=1,
                         product_id=2,
                         id=2,
                         product_type="ThingType.MUSIQUE")
            create_stock(offer_id=2, id=2)
            create_booking(id=1,
                           user_id=1,
                           quantity=1,
                           stock_id=2,
                           is_used=True)
            create_booking(
                id=2,
                user_id=1,
                quantity=1,
                amount=10,
                stock_id=2,
                token="ABC321",
                is_used=True,
            )
            create_booking(
                id=3,
                user_id=1,
                quantity=3,
                amount=5,
                stock_id=2,
                token="FAM321",
                is_cancelled=True,
            )
            expected_amount_per_booking = pandas.Series(
                data=[0.0, 10.0, 15.0],
                name="Montant de la réservation",
                index=Int64Index([1, 2, 3], name="booking_id"),
            )

            # When
            query = get_booking_amount()

            # Then
            with ENGINE.connect() as connection:
                booking_amount = pandas.read_sql(query,
                                                 connection,
                                                 index_col="booking_id")
            pandas.testing.assert_series_equal(
                booking_amount["Montant de la réservation"],
                expected_amount_per_booking)
        def test_should_return_real_revenue_per_venue(self, app):
            # Given
            create_user(id=1)
            create_deposit(id=1, user_id=1)
            create_offerer(id=1)
            create_venue(offerer_id=1, id=1)
            create_product(id=1, product_type="ThingType.ACTIVATION")
            create_offer(
                venue_id=1,
                product_id=1,
                id=1,
                product_type="ThingType.ACTIVATION",
                date_created="2020-05-13",
            )
            create_stock(offer_id=1, id=1)
            create_product(id=2, product_type="ThingType.MUSIQUE")
            create_offer(
                venue_id=1,
                product_id=2,
                id=2,
                product_type="ThingType.MUSIQUE",
                date_created="2020-05-10",
            )
            create_offer(
                venue_id=1,
                product_id=2,
                id=3,
                product_type="ThingType.MUSIQUE",
                date_created="2020-05-11",
            )
            create_stock(offer_id=2, id=2, price=10)
            create_stock(offer_id=3, id=3, price=20)
            create_booking(id=1,
                           user_id=1,
                           quantity=1,
                           stock_id=2,
                           amount=10,
                           is_used=True)
            create_booking(
                id=2,
                user_id=1,
                quantity=1,
                stock_id=2,
                amount=10,
                token="ABC321",
                is_used=True,
            )
            create_booking(
                id=3,
                user_id=1,
                quantity=1,
                stock_id=2,
                amount=10,
                token="FAM321",
                is_cancelled=True,
            )
            create_booking(
                id=4,
                user_id=1,
                quantity=1,
                stock_id=1,
                token="CON321",
                is_cancelled=False,
            )
            create_booking(
                id=5,
                user_id=1,
                quantity=2,
                stock_id=3,
                amount=20,
                token="LAB123",
                is_cancelled=False,
            )
            expected_real_revenue_per_venue = pandas.Series(
                data=[20.0],
                name="real_revenue",
                index=Int64Index([1], name="venue_id"))
            # When
            query = _get_real_revenue_per_venue()

            # Then
            with ENGINE.connect() as connection:
                real_revenue_per_venue = pandas.read_sql(query,
                                                         connection,
                                                         index_col="venue_id")
            pandas.testing.assert_series_equal(
                expected_real_revenue_per_venue,
                real_revenue_per_venue["real_revenue"])
Example #8
0
        def test_should_return_current_year_revenue(self):

            # Given
            create_user(id=1)
            create_deposit(amount=500)
            create_offerer(id=10)
            create_product(id=1,
                           product_type="ThingType.MUSEES_PATRIMOINE_ABO")
            create_venue(id=15, offerer_id=10)
            create_offer(
                id=30,
                venue_id=15,
                product_type="ThingType.MUSEES_PATRIMOINE_ABO",
                product_id=1,
            )
            create_stock(id=20, offer_id=30)
            create_booking(
                id=1,
                user_id=1,
                amount=10,
                quantity=1,
                stock_id=20,
                is_used=True,
            )
            create_booking(id=2,
                           user_id=1,
                           amount=10,
                           quantity=1,
                           stock_id=20,
                           token="ABC321",
                           is_used=True,
                           date_created=f'{datetime.now().year}-01-05')
            create_booking(
                id=3,
                user_id=1,
                amount=10,
                quantity=3,
                stock_id=20,
                token="FAM321",
                is_cancelled=True,
            )

            expected_current_year_revenue = pandas.Series(
                index=pandas.Index(data=[10], name="offerer_id"),
                data=[10.0],
                name="Chiffre d'affaire réel année civile en cours",
            )

            # When
            query = _get_current_year_revenue()

            # Then
            with ENGINE.connect() as connection:
                current_year_revenue = pandas.read_sql(query,
                                                       connection,
                                                       index_col="offerer_id")
            pandas.testing.assert_series_equal(
                current_year_revenue[
                    "Chiffre d'affaire réel année civile en cours"],
                expected_current_year_revenue,
            )
        def test_should_return_booking_cancelled_booking_and_used_booking_number_columns(
            self, ):
            # Given
            create_user(id=1)
            create_deposit(amount=500)
            create_offerer(id=10)
            create_product(id=1,
                           product_type="ThingType.MUSEES_PATRIMOINE_ABO")
            create_venue(id=15, offerer_id=10)
            create_offer(
                id=30,
                venue_id=15,
                product_type="ThingType.MUSEES_PATRIMOINE_ABO",
                product_id=1,
            )
            create_stock(id=20, offer_id=30)
            create_booking(id=1,
                           user_id=1,
                           amount=10,
                           quantity=1,
                           stock_id=20,
                           is_used=True)
            create_booking(
                id=2,
                user_id=1,
                amount=10,
                quantity=1,
                stock_id=20,
                token="ABC321",
                is_used=True,
            )
            create_booking(
                id=3,
                user_id=1,
                amount=10,
                quantity=3,
                stock_id=20,
                token="FAM321",
                is_cancelled=True,
            )

            expected_booking_number = pandas.Series(
                index=pandas.Index(data=[30], name="offer_id"),
                data=[5],
                name="Nombre de réservations",
            )

            expected_cancelled_booking_number = pandas.Series(
                index=pandas.Index(data=[30], name="offer_id"),
                data=[3],
                name="Nombre de réservations annulées",
            )

            expected_used_booking_number = pandas.Series(
                index=pandas.Index(data=[30], name="offer_id"),
                data=[2],
                name="Nombre de réservations validées",
            )

            # When
            query = _get_offer_booking_information_query()

            # Then
            with ENGINE.connect() as connection:
                offer_booking_information = pandas.read_sql(
                    query, connection, index_col="offer_id")
            pandas.testing.assert_series_equal(
                offer_booking_information["Nombre de réservations"],
                expected_booking_number,
            )
            pandas.testing.assert_series_equal(
                offer_booking_information["Nombre de réservations annulées"],
                expected_cancelled_booking_number,
            )
            pandas.testing.assert_series_equal(
                offer_booking_information["Nombre de réservations validées"],
                expected_used_booking_number,
            )
            def test_should_return_booking_payment_status(self, app):
                # Given
                create_user(id=1)
                create_deposit(user_id=1)
                create_offerer(id=1)
                create_venue(offerer_id=1, id=1)
                create_product(id=1, product_type="ThingType.ACTIVATION")
                create_offer(venue_id=1,
                             product_id=1,
                             id=1,
                             product_type="ThingType.ACTIVATION")
                create_stock(offer_id=1, id=1)
                create_product(id=2, product_type="ThingType.MUSIQUE")
                create_offer(venue_id=1,
                             product_id=2,
                             id=2,
                             product_type="ThingType.MUSIQUE")
                create_stock(offer_id=2, id=2)
                create_booking(id=1,
                               user_id=1,
                               quantity=1,
                               stock_id=2,
                               is_used=True)
                create_booking(
                    id=2,
                    user_id=1,
                    quantity=1,
                    amount=10,
                    stock_id=2,
                    token="ABC321",
                    is_used=True,
                )
                create_booking(
                    id=3,
                    user_id=1,
                    quantity=3,
                    amount=5,
                    stock_id=2,
                    token="FAM321",
                    is_cancelled=True,
                )
                create_payment(id=1, booking_id=2, amount=10)
                create_payment_status(id=1, payment_id=1, status="SENT")
                create_payment(id=2, booking_id=3, amount=15)
                create_payment_status(id=2, payment_id=2, status="PENDING")
                expected_booking_payment_status = pandas.Series(
                    data=["Remboursé"],
                    name="Remboursé",
                    index=Int64Index([2], name="booking_id"),
                )

                # When
                query = get_booking_payment_status()

                # Then
                with ENGINE.connect() as connection:
                    booking_payment = pandas.read_sql(query,
                                                      connection,
                                                      index_col="booking_id")
                pandas.testing.assert_series_equal(
                    booking_payment["Remboursé"],
                    expected_booking_payment_status)
            def test_should_return_booking_ranking(app):
                # Given
                create_user(id=1)
                create_user(id=2, email="*****@*****.**")
                create_deposit(id=1, user_id=1)
                create_deposit(id=2, user_id=2)
                create_offerer(id=1)
                create_venue(offerer_id=1, id=1)
                create_product(id=1, product_type="ThingType.ACTIVATION")
                create_offer(venue_id=1,
                             product_id=1,
                             id=1,
                             product_type="ThingType.ACTIVATION")
                create_stock(offer_id=1, id=1)
                create_product(id=2, product_type="ThingType.MUSIQUE")
                create_offer(venue_id=1,
                             product_id=2,
                             id=2,
                             product_type="ThingType.MUSIQUE")
                create_stock(offer_id=2, id=2)
                create_product(id=3, product_type="ThingType.AUDIOVISUEL")
                create_offer(venue_id=1,
                             product_id=3,
                             id=3,
                             product_type="ThingType.AUDIOVISUEL")
                create_stock(offer_id=3, id=3)
                create_booking(id=1,
                               user_id=1,
                               quantity=1,
                               stock_id=2,
                               is_used=True)
                create_booking(
                    id=2,
                    user_id=1,
                    quantity=1,
                    amount=10,
                    stock_id=3,
                    token="ABC321",
                    is_used=True,
                    date_created="2020-05-11",
                )
                create_booking(
                    id=3,
                    user_id=1,
                    quantity=3,
                    amount=5,
                    stock_id=2,
                    token="FAM321",
                    is_cancelled=True,
                    date_created="2020-06-21",
                )
                create_booking(
                    id=4,
                    user_id=2,
                    quantity=1,
                    amount=5,
                    stock_id=3,
                    token="OLD321",
                    is_used=True,
                    date_created="2020-06-21",
                )
                create_booking(
                    id=5,
                    user_id=2,
                    quantity=1,
                    amount=5,
                    stock_id=2,
                    token="YOO321",
                    is_used=True,
                    date_created="2020-10-25",
                )
                create_payment(id=1, booking_id=2, amount=10)
                create_payment_status(id=1, payment_id=1, status="SENT")
                create_payment(id=2, booking_id=3, amount=15)
                create_payment_status(id=2, payment_id=2, status="PENDING")
                expected_booking_ranking = pandas.Series(
                    data=[1, 1, 2, 1, 1],
                    name="Classement de la réservation dans la même catégorie",
                    index=Int64Index([1, 2, 3, 4, 5], name="booking_id"),
                )

                # When
                query = get_booking_ranking_in_category()

                # Then
                with ENGINE.connect() as connection:
                    booking_ranking = pandas.read_sql(query,
                                                      connection,
                                                      index_col="booking_id")
                pandas.testing.assert_series_equal(
                    booking_ranking[
                        "Classement de la réservation dans la même catégorie"],
                    expected_booking_ranking,
                )