def test_01_addOffer(self):
     offer = Offer(**self.offer_dict_1)
     second_offer = Offer(**self.offer_dict_2)
     third_offer = Offer(**self.offer_dict_3)
     self.assertTrue(DB.addOffer(offer))
     self.assertTrue(DB.addOffer(second_offer))
     self.assertTrue(DB.addOffer(third_offer))
def test_booking_completed_url_gets_normalized():
    # Given

    product = Product()
    product.url = 'javascript:alert("plop")'

    offer = Offer()
    offer.id = 1
    offer.product = product

    stock = Stock()

    user = User()
    user.email = '*****@*****.**'

    booking = Booking()
    booking.token = 'ABCDEF'
    booking.stock = stock
    booking.stock.offer = offer
    booking.user = user

    # When
    completedUrl = booking.completedUrl

    # Then
    assert completedUrl == 'http://javascript:alert("plop")'
Exemple #3
0
def test_offer_is_digital_if_it_has_an_url():
    # given
    offer = Offer()
    offer.url = 'http://url.com'

    # when / then
    assert offer.isDigital
Exemple #4
0
def retrieve_new_offers() -> None:
    """Extract and store offers from the Offers MS for each product.

    First creates OffersBatch record to which all created offers are tied.
    Ignores offers not matching the schema or empty responses
    :return:
    """
    oms = OffersMsClient()

    ob = OffersBatch()
    db.session.add(ob)

    for p in Product.query.all():
        for offer_data_raw in oms.extract_offers(p):
            try:
                offer_data = offers_schema_external.load(offer_data_raw)
                offer_data['id_external'] = offer_data.pop('id')
            except (ValidationError, KeyError) as e:
                current_app.logger.warning(
                    f'offer validation failed with {getattr(e, "messages", str(e))} {offer_data_raw=}'
                )
                continue

            o = Offer(product_id=p.id, offers_batch_id=ob.id, **offer_data)
            db.session.add(o)

    db.session.commit()
def test_create_payment_for_booking_with_common_information(app):
    # given
    user = create_user()
    stock = create_stock(price=10, available=5)
    booking = create_booking(user, stock=stock, quantity=1)
    booking.stock.offer = Offer()
    booking.stock.offer.venue = Venue()
    offerer = create_offerer()
    offerer_bank_information = create_bank_information(bic='QSDFGH8Z555',
                                                       iban='CF13QSDFGH456789',
                                                       offerer=offerer)
    booking.stock.offer.venue.managingOfferer = offerer
    booking_reimbursement = BookingReimbursement(
        booking, ReimbursementRules.PHYSICAL_OFFERS, Decimal(10))

    # when
    payment = create_payment_for_booking(booking_reimbursement)

    # then
    assert payment.booking == booking
    assert payment.amount == Decimal(10)
    assert payment.reimbursementRule == ReimbursementRules.PHYSICAL_OFFERS.value.description
    assert payment.reimbursementRate == ReimbursementRules.PHYSICAL_OFFERS.value.rate
    assert payment.comment is None
    assert payment.author == 'batch'
    assert payment.transactionLabel == 'pass Culture Pro - remboursement 2nde quinzaine 10-2018'
Exemple #6
0
    def test_returns_none_if_no_mediations_exist_on_offer(self):
        # given
        offer = Offer()
        offer.mediations = []

        # then
        assert offer.activeMediation is None
def create_offer_with_event_product(venue=None, product=None, event_name='Test event', duration_minutes=60,
                                    date_created=datetime.utcnow(),
                                    booking_email='*****@*****.**', thumb_count=0, dominant_color=None,
                                    event_type=EventType.SPECTACLE_VIVANT, is_national=False, is_active=True,
                                    idx=None, last_provider_id=None, id_at_providers=None, description=None) -> Offer:
    offer = Offer()
    if product is None:
        product = create_product_with_event_type(event_name=event_name, event_type=event_type,
                                                 duration_minutes=duration_minutes,
                                                 thumb_count=thumb_count, dominant_color=dominant_color,
                                                 is_national=is_national)
    offer.product = product
    offer.venue = venue
    offer.name = product.name
    offer.type = product.type
    offer.description = description
    offer.isNational = product.isNational
    offer.durationMinutes = product.durationMinutes
    offer.dateCreated = date_created
    offer.bookingEmail = booking_email
    offer.isActive = is_active
    offer.id = idx
    offer.lastProviderId = last_provider_id
    offer.idAtProviders = id_at_providers
    return offer
def test_create_payment_for_booking_when_no_iban_on_venue_should_take_payment_info_from_offerer(
        app):
    # given
    user = create_user()
    stock = create_stock(price=10, available=5)
    offerer = create_offerer(name='Test Offerer')
    venue = create_venue(offerer, name='Test Venue')

    offerer_bank_information = create_bank_information(bic='QsdFGH8Z555',
                                                       iban='cf13QSDFGH456789',
                                                       offerer=offerer)
    venue_bank_information = create_bank_information(bic=None,
                                                     iban=None,
                                                     venue=venue)

    booking = create_booking(user, stock=stock, quantity=1)
    booking.stock.offer = Offer()
    booking.stock.offer.venue = venue
    booking.stock.offer.venue.managingOfferer = offerer
    booking_reimbursement = BookingReimbursement(
        booking, ReimbursementRules.PHYSICAL_OFFERS, Decimal(10))

    # when
    payment = create_payment_for_booking(booking_reimbursement)

    # then
    assert payment.iban == 'CF13QSDFGH456789'
    assert payment.bic == 'QSDFGH8Z555'
def test_create_payment_for_booking_when_iban_is_on_venue_should_take_payment_info_from_venue(
        app):
    # given
    user = create_user()
    stock = create_stock(price=10, available=5)
    offerer = create_offerer(name='Test Offerer')
    venue = create_venue(
        offerer,
        name='Test Venue',
    )
    booking = create_booking(user, stock=stock, quantity=1)

    offerer_bank_information = create_bank_information(bic='Lajr93',
                                                       iban='B135TGGEG532TG',
                                                       offerer=offerer)
    venue_bank_information = create_bank_information(bic='LokiJU76',
                                                     iban='KD98765RFGHZ788',
                                                     venue=venue)

    booking.stock.offer = Offer()
    booking.stock.offer.venue = venue
    booking.stock.offer.venue.managingOfferer = offerer
    booking_reimbursement = BookingReimbursement(
        booking, ReimbursementRules.PHYSICAL_OFFERS, Decimal(10))

    # when
    payment = create_payment_for_booking(booking_reimbursement)

    # then
    assert payment.iban == 'KD98765RFGHZ788'
    assert payment.bic == 'LOKIJU76'
Exemple #10
0
    def create_offer(payload):
        body = request.get_json()
        if not body:
            abort(400, 'Request body is missing.')
        if body.get('title') is None:
            abort(400, '"title" is required in the request body.')

        # Create a new record
        o = Offer(
            title=body.get('title'),
            contents=body.get('contents', ''),
            event_time=body.get('event_time'),  # Null if not found
            finalized=body.get('finalized', False),
            topics=[get_topic(name=t) for t in body.get('topics', [])],
            panelists=[
                get_panelist(name=p) for p in body.get('panelists', [])
            ]
        )
        try:
            o.insert()
            offer_id = o.id
        except Exception:
            abort(422, 'Database error: Insertion failed.')

        return jsonify({
            'success': True,
            'message': 'Offer record has been created successfully.',
            'id': offer_id
        }), 201
Exemple #11
0
    def test_returns_false_if_offer_is_coming_from_provider(self, app):
        # given
        offer = Offer()
        offer.lastProviderId = 21

        # then
        assert offer.isEditable == False
Exemple #12
0
def create_dummy_objects():
    s = LandingSite()
    s.page1_template = 'acai1.html'
    s.page1_name = 'acai version 1'
    s.page1_desc = "Ben's site"
    s.category = 'diet'
    s.total_offers = 2
    s.active = True
    s.redirect_on_exit = True
    s.save()

    o = Offer()
    o.network_name = 'eadv'
    o.offer_name = 'Lean Spa US'
    o.offer_url = 'http://www.leanspa.com?s='
    o.display_name = 'Lean Spa'
    o.offer_id = 10107
    o.active = True
    o.payout = 50.00
    o.save()

    o2 = Offer()
    o2.network_name = 'eadv'
    o2.offer_name = 'ColoThin'
    o2.offer_url = 'http://www.colothin.com?s='
    o2.display_name = 'ColoThin'
    o2.offer_id = 2345
    o2.active = True
    o2.price_old = '3.99'
    o2.price_new = '1.99'
    o2.coupon = 'COLOSAVE'
    o2.payout = 50.00
    o2.save()

    os = OfferSet()
    os.offer1_id = 1
    os.offer2_id = 2
    os.total_offers = 2
    os.category = 'diet'
    os.active = True
    os.save()

    sof = SiteOfferSet()
    sof.site = s
    sof.offer_set = os
    sof.save()
Exemple #13
0
def test_date_range_is_empty_if_event_has_no_stocks():
    # given
    offer = Offer()
    offer.product = create_product_with_event_type()
    offer.stocks = []

    # then
    assert offer.dateRange == DateTimes()
Exemple #14
0
def test_date_range_is_empty_if_offer_is_on_a_thing():
    # given
    offer = Offer()
    offer.product = create_product_with_thing_type()
    offer.stocks = []

    # then
    assert offer.dateRange == DateTimes()
    def test_does_not_raise_error_when_offer_type_is_editable(self):
        # given
        offer = Offer()

        # when
        try:
            check_offer_is_editable(offer)
        except:
            assert False
Exemple #16
0
def createOffer():
    if request.method == "POST":
        data = request.get_json(force=True)
        createdTime = (
            datetime.datetime.now() +
            datetime.timedelta(hours=8)).strftime("%Y-%m-%d %H:%M:%S")
        updateTime = (
            datetime.datetime.now() +
            datetime.timedelta(hours=8)).strftime("%Y-%m-%d %H:%M:%S")
        email_time = "2016-12-19 " + data["email_time"] + ":00"
        emailTime = float(
            time.mktime(time.strptime(email_time, '%Y-%m-%d %H:%M:%S')))

        offer = Offer(
            int(data["user_id"]), int(data["customer_id"]), data["status"],
            data["contract_type"], data["contract_num"],
            float(data["contract_scale"]), data["os"], data["package_name"],
            data["app_name"], data["app_type"].encode('utf-8'),
            data["preview_link"], data["track_link"], data["material"],
            data["startTime"], data["endTime"], str(data["platform"]),
            str(data["country"]), float(data["price"]),
            float(data["daily_budget"]), data["daily_type"],
            float(data["total_budget"]), data["total_type"],
            data["distribution"], data["authorized"], data["named_rule"],
            data["KPI"].encode('utf-8'), data["settlement"].encode('utf-8'),
            data["period"].encode('utf-8'), data["remark"].encode('utf-8'),
            emailTime, str(data["email_users"]), int(data["email_tempalte"]),
            createdTime, updateTime)
        try:
            db.session.add(offer)
            db.session.commit()
            db.create_all()

            for i in data['country_detail']:
                history = History(offer.id,
                                  int(data["user_id"]),
                                  "default",
                                  createdTime,
                                  status=data["status"],
                                  country=i["country"],
                                  country_price=i["price"],
                                  price=data["price"],
                                  daily_budget=float(data["daily_budget"]),
                                  daily_type=data["daily_type"],
                                  total_budget=float(data["total_budget"]),
                                  total_type=data["total_type"],
                                  KPI=data["KPI"],
                                  contract_type=data["contract_type"],
                                  contract_scale=float(data["contract_scale"]))
                db.session.add(history)
                db.session.commit()
                db.create_all()
            return json.dumps({"code": 200, "message": "success"})
        except Exception as e:
            print e
            return json.dumps({"code": 500, "message": "fail"})
Exemple #17
0
    def test_returns_false_if_all_stocks_have_no_booking_limit_datetime(self):
        # given
        offer = Offer()
        stock1 = create_stock(booking_limit_datetime=None)
        stock2 = create_stock(booking_limit_datetime=None)
        stock3 = create_stock(booking_limit_datetime=None)
        offer.stocks = [stock1, stock2, stock3]

        # then
        assert offer.isFinished is False
Exemple #18
0
    def test_returns_none_if_all_mediations_are_deactivated(self):
        # given
        offer = Offer()
        offer.mediations = [
            create_mediation(offer, is_active=False),
            create_mediation(offer, is_active=False)
        ]

        # then
        assert offer.activeMediation is None
Exemple #19
0
    def test_returns_true_if_all_stocks_have_past_booking_limit_datetime(self):
        # given
        now = datetime.utcnow()
        offer = Offer()
        stock1 = create_stock(booking_limit_datetime=now - timedelta(weeks=3))
        stock2 = create_stock(booking_limit_datetime=now - timedelta(weeks=2))
        stock3 = create_stock(booking_limit_datetime=now - timedelta(weeks=1))
        offer.stocks = [stock1, stock2, stock3]

        # then
        assert offer.isFinished is True
Exemple #20
0
def add_offer():
    date = request.json['date']
    username = request.json['username']
    book_id = request.json['book_id']

    new_offer = Offer(date, username, book_id)

    db.session.add(new_offer)
    db.session.commit()

    return jsonify(new_offer)
Exemple #21
0
def add_offer():
    form = OfferForm()
    if form.validate_on_submit():
        offer = Offer.query.filter_by(name=form.name.data).first()
        if not offer:
            db_session.add(
                Offer(form.name.data, form.cost.data, form.description.data,
                      form.capacity.data))
            db_session.commit()
        return redirect('/all_abonements')
    return render_template('add_offer.html', form=form)
    def test_booking_on_thing_is_cancellable(self):
        # Given
        booking = Booking()
        booking.stock = Stock()
        booking.stock.offer = Offer()
        booking.stock.offer.product = create_product_with_thing_type()

        # When
        is_cancellable = booking.isUserCancellable

        # Then
        assert is_cancellable == True
def fill_offer_with_new_data(product_dict: str, user: User) -> Offer:
    product = Product()
    url = product_dict.get('url')
    if url:
        is_url_safe(url)
        product_dict['isNational'] = True
    product.populate_from_dict(product_dict)
    check_user_can_create_activation_event(user, product)
    offer = Offer()
    offer.populate_from_dict(product_dict)
    offer.product = product
    return offer
Exemple #24
0
def test_date_range_matches_the_occurrence_if_only_one_occurrence():
    # given
    offer = Offer()
    offer.product = create_product_with_event_type()
    offer.stocks = [
        create_stock(offer=offer,
                     beginning_datetime=two_days_ago,
                     end_datetime=five_days_from_now)
    ]

    # then
    assert offer.dateRange == DateTimes(two_days_ago, five_days_from_now)
Exemple #25
0
    def test_returns_false_if_stocks_have_none_available_quantity(self):
        # given
        offer = Offer()
        user = create_user()
        stock1 = create_stock(available=None)
        stock2 = create_stock(available=None)
        create_booking(user, stock=stock1, quantity=1)
        create_booking(user, stock=stock2, quantity=1)
        offer.stocks = [stock1, stock2]

        # then
        assert offer.isFullyBooked is False
Exemple #26
0
    def test_returns_false_if_any_stock_has_future_booking_limit_datetime(
            self):
        # given
        now = datetime.utcnow()
        offer = Offer()
        stock1 = create_stock(booking_limit_datetime=now - timedelta(weeks=3))
        stock2 = create_stock(booking_limit_datetime=None)
        stock3 = create_stock(booking_limit_datetime=now + timedelta(weeks=1))
        offer.stocks = [stock1, stock2, stock3]

        # then
        assert offer.isFinished is False
    def test_raises_error_when_offer_is_not_editable(self):
        # given
        offer = Offer()
        offer.lastProviderId = "42"

        # when
        with pytest.raises(ApiErrors) as error:
            check_offer_is_editable(offer)

        # then
        assert error.value.errors['global'] == [
            "Les offres importées ne sont pas modifiables"
        ]
    def test_does_not_raise_api_error_when_offerer_cancellation_not_used_and_thing(self):
        # Given
        booking = Booking()
        booking.isUsed = False
        booking.stock = Stock()
        booking.stock.offer = Offer()
        booking.stock.offer.product = create_product_with_thing_type()

        # When
        check_output = check_booking_is_cancellable(booking, is_user_cancellation=False)

        # Then
        assert check_output is None
Exemple #29
0
    def test_stocks_with_past_booking_limit_datetimes_are_ignored(self):
        # given
        offer = Offer()
        user = create_user()
        stock1 = create_stock(available=2,
                              booking_limit_datetime=datetime.utcnow() -
                              timedelta(weeks=3))
        stock2 = create_stock(available=1)
        stock3 = create_stock(available=1)
        create_booking(user, stock=stock2, quantity=1)
        create_booking(user, stock=stock3, quantity=1)
        offer.stocks = [stock1, stock2, stock3]

        # then
        assert offer.isFullyBooked is True
    def test_on_datetime_list_returns_string_with_date_in_ISO_8601_list(self):
        # Given
        offer = Offer()
        offer.stocks = [
            create_stock(offer=offer,
                         beginning_datetime=now,
                         end_datetime=now + timedelta(hours=3))
        ]

        # When
        serialized_list = serialize(offer.dateRange)

        # Then
        for datetime in serialized_list:
            self._assert_is_in_ISO_8601_format(datetime)