def test_delete_stock_cancel_bookings_and_send_emails( self, mocked_send_to_beneficiaries, mocked_send_to_offerer): stock = factories.EventStockFactory() booking1 = bookings_factories.BookingFactory(stock=stock) booking2 = bookings_factories.BookingFactory(stock=stock, isCancelled=True) booking3 = bookings_factories.BookingFactory(stock=stock, isUsed=True) api.delete_stock(stock) stock = models.Stock.query.one() assert stock.isSoftDeleted booking1 = models.Booking.query.get(booking1.id) assert booking1.isCancelled booking2 = models.Booking.query.get(booking2.id) assert booking2.isCancelled # unchanged booking3 = models.Booking.query.get(booking3.id) assert not booking3.isCancelled # unchanged notified_bookings_beneficiaries = mocked_send_to_beneficiaries.call_args_list[ 0][0][0] notified_bookings_offerers = mocked_send_to_offerer.call_args_list[0][ 0][0] assert notified_bookings_beneficiaries == notified_bookings_offerers assert notified_bookings_beneficiaries == [booking1]
def test_can_delete_if_event_ended_recently(self): recently = datetime.datetime.now() - datetime.timedelta(days=1) stock = factories.EventStockFactory(beginningDatetime=recently) api.delete_stock(stock) stock = models.Stock.query.one() assert stock.isSoftDeleted
def test_cannot_delete_if_too_late(self): too_long_ago = datetime.datetime.now() - datetime.timedelta(days=3) stock = factories.EventStockFactory(beginningDatetime=too_long_ago) with pytest.raises(exceptions.TooLateToDeleteStock): api.delete_stock(stock) stock = models.Stock.query.one() assert not stock.isSoftDeleted
def test_delete_stock_basics(self, mocked_add_offer_id): stock = factories.EventStockFactory() api.delete_stock(stock) stock = models.Stock.query.one() assert stock.isSoftDeleted mocked_add_offer_id.assert_called_once_with(client=app.redis_client, offer_id=stock.offerId)
def test_can_delete_if_stock_from_allocine(self): provider = offerers_factories.ProviderFactory(localClass="AllocineStocks") offer = factories.OfferFactory(lastProvider=provider, idAtProviders="1") stock = factories.StockFactory(offer=offer) api.delete_stock(stock) stock = models.Stock.query.one() assert stock.isSoftDeleted
def test_cannot_delete_if_stock_from_titelive(self): provider = offerers_factories.ProviderFactory(localClass="TiteLiveStocks") offer = factories.OfferFactory(lastProvider=provider, idAtProviders="1") stock = factories.StockFactory(offer=offer) with pytest.raises(api_errors.ApiErrors) as error: api.delete_stock(stock) msg = "Les offres importées ne sont pas modifiables" assert error.value.errors["global"][0] == msg stock = models.Stock.query.one() assert not stock.isSoftDeleted
def delete_stock(stock_id: str) -> StockResponseIdModel: # fmt: off stock = (Stock.queryNotSoftDeleted().filter_by( id=dehumanize(stock_id)).join(Offer, VenueSQLEntity).first_or_404()) # fmt: on offerer_id = stock.offer.venue.managingOffererId ensure_current_user_has_rights(RightsType.editor, offerer_id) offers_api.delete_stock(stock) return StockResponseIdModel.from_orm(stock)
def delete_stock(stock_id: str) -> StockIdResponseModel: # fmt: off stock = ( Stock.queryNotSoftDeleted() .filter_by(id=dehumanize(stock_id)) .join(Offer, Venue) .first_or_404() ) # fmt: on offerer_id = stock.offer.venue.managingOffererId check_user_has_access_to_offerer(current_user, offerer_id) offers_api.delete_stock(stock) return StockIdResponseModel.from_orm(stock)