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"])
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, )