Exemple #1
0
def create_promotions():
    """
    Creates a Promotion
    This endpoint will create a Promotion based the data in the body that is posted
    """
    app.logger.info('Request to Create a Promotion...')
    data = {}
    # Check for form submission data
    if request.headers.get(
            'Content-Type') == 'application/x-www-form-urlencoded':
        app.logger.info('Getting data from form submit')
        data = {
            'productid': request.form['productid'],
            'category': request.form['category'],
            'available': True,
            'discount': request.form['discount']
        }
    else:
        check_content_type('application/json')
        app.logger.info('Getting data from API call')
        data = request.get_json()
    app.logger.info(data)
    promotion = Promotion()
    promotion.deserialize(data)
    promotion.save()
    app.logger.info('Promotion with new id [%s] saved!', promotion.id)
    message = promotion.serialize()
    location_url = url_for('get_promotions',
                           promotion_id=promotion.id,
                           _external=True)
    return make_response(jsonify(message), status.HTTP_201_CREATED,
                         {'Location': location_url})
    def test_query_2(self):
        '''test query by available on'''
        promo1 = Promotion(1)
        promo2 = Promotion(2)
        promo1.deserialize(
            {'start_date': '2017-01-01 00:00:00', 'end_date': '2019-01-01 00:00:00'})
        promo2.deserialize(
            {'start_date': '2018-01-01 00:00:00', 'end_date': '2020-01-01 00:00:00'})
        promo1.save()
        promo2.save()
        test = Promotion.find_by_conditions(
            {'available_on': '2016-01-01 00:00:00'})
        self.assertIsInstance(test, list)
        self.assertEqual(len(test), 0)

        test2 = Promotion.find_by_conditions(
            {'available_on': '2017-06-01 00:00:00'})
        self.assertIsInstance(test2, list)
        self.assertEqual(len(test2), 1)
        self.assertEqual(test2[0].id, 1)

        test3 = Promotion.find_by_conditions(
            {'available_on': '2018-06-01 00:00:00'})
        self.assertIsInstance(test3, list)
        self.assertEqual(len(test3), 2)

        test4 = Promotion.find_by_conditions(
            {'available_on': '2019-06-01 00:00:00'})
        self.assertIsInstance(test4, list)
        self.assertEqual(len(test4), 1)
        self.assertEqual(test4[0].id, 2)
Exemple #3
0
 def test_key_error_on_update(self, bad_mock):
     """ Test KeyError on update """
     bad_mock.side_effect = KeyError()
     promotion = Promotion("A1234", "BOGO", True, "20")
     promotion.save()
     promotion.productid = 'B4321'
     promotion.update()
Exemple #4
0
 def test_delete_a_promotion(self):
     """ Delete a Promotion """
     promotion = Promotion("A1234", "BOGO", False, "20")
     promotion.save()
     self.assertEqual(len(Promotion.all()), 1)
     # delete the promotion and make sure it isn't in the database
     promotion.delete()
     self.assertEqual(len(Promotion.all()), 0)
Exemple #5
0
 def test_find_promotion(self):
     """ Find a Promotion by id """
     Promotion("A1234", "BOGO", True, "20").save()
     saved_promotion = Promotion("B4321", "dollar", False, "5")
     saved_promotion.save()
     promotion = Promotion.find(saved_promotion.id)
     self.assertIsNot(promotion, None)
     self.assertEqual(promotion.id, saved_promotion.id)
     self.assertEqual(promotion.productid, "B4321")
 def test_save(self):
     promo = Promotion()
     self.assertEqual(len(Promotion.all()), 0)
     promo.save()
     promos = Promotion.all()
     self.assertEqual(len(promos), 1)
     data = {'id': promo.id, 'name': 'default', 'promo_type': '$', 'value': 0.0,
             'start_date': '9999-12-31 23:59:59', 'end_date': '9999-12-31 23:59:59', 'detail': 'n/a'}
     self.assertEqual(promos[0].serialize(), data)
Exemple #7
0
 def test_find_promotion(self):
     """ Find a Promotion by ID """
     Promotion(name="20%OFF", product_id=9527, discount_ratio=80).save()
     black_friday_promotion = Promotion(name="50%OFF", product_id=26668)
     black_friday_promotion.save()
     promotion = Promotion.find(black_friday_promotion.promotion_id)
     self.assertIsNot(promotion, None)
     self.assertEqual(promotion.promotion_id,
                      black_friday_promotion.promotion_id)
     self.assertEqual(promotion.name, "50%OFF")
Exemple #8
0
 def test_delete_a_promotion(self):
     """ Delete a Promotion """
     promotion = Promotion(name="20%OFF",
                           product_id=9527,
                           discount_ratio=80)
     promotion.save()
     self.assertEqual(len(Promotion.all()), 1)
     # delete the promotion and make sure it isn't in the database
     promotion.delete()
     self.assertEqual(len(Promotion.all()), 0)
 def test_find_by_id(self):
     promo = Promotion()
     promo.save()
     promo_id = promo.id
     fake_id = promo_id - 1
     test = Promotion.find_by_id(promo_id)
     self.assertIsNotNone(test)
     self.assertEqual(test.id, promo_id)
     failtest = Promotion.find_by_id(fake_id)
     self.assertIsNone(failtest)
Exemple #10
0
 def test_delete_a_promotion(self):
     """ Delete a promotion in the database """
     promotion = Promotion(promo_name="random",
                           goods_name="random_good",
                           category="random_category",
                           price=20,
                           discount=20,
                           available=True)
     promotion.save()
     self.assertEqual(len(Promotion.all()), 1)
     #delete the promotion
     promotion.delete()
     self.assertEqual(len(Promotion.all()), 0)
Exemple #11
0
 def test_update_a_promotion(self):
     """ Update a Promotion """
     promotion = Promotion("A1234", "BOGO", True, "20")
     promotion.save()
     self.assertNotEqual(promotion.id, None)
     # Change it an save it
     promotion.category = "Percentage"
     promotion.save()
     # Fetch it back and make sure the id hasn't changed
     # but the data did change
     promotions = Promotion.all()
     self.assertEqual(len(promotions), 1)
     self.assertEqual(promotions[0].category, "Percentage")
     self.assertEqual(promotions[0].productid, "A1234")
Exemple #12
0
 def test_add_a_promotion(self):
     """ Create a promotion and add it to the database """
     promotions = Promotion.all()
     self.assertEqual(promotions, [])
     promotion = Promotion(name="20%OFF",
                           product_id=9527,
                           discount_ratio=80)
     self.assertTrue(promotion is not None)
     self.assertEqual(promotion.promotion_id, None)
     promotion.save()
     # Asert that it was assigned an id and shows up in the database
     self.assertEqual(promotion.promotion_id, 1)
     self.assertEqual(promotion.counter, 0)
     promotions = Promotion.all()
     self.assertEqual(len(promotions), 1)
Exemple #13
0
def create_promotions():
    """
    Creates a Promotion
    This endpoint will create a Promotion based the data in the body that is posted
    """
    check_content_type('application/json')
    promotion = Promotion()
    promotion.deserialize(request.get_json())
    promotion.save()
    message = promotion.serialize()
    location_url = url_for('get_promotions',
                           promotion_id=promotion.promotion_id,
                           _external=True)
    return make_response(jsonify(message), status.HTTP_201_CREATED,
                         {'Location': location_url})
Exemple #14
0
 def test_add_a_promotion(self):
     """ Create a promotion and add it to the database """
     promotions = Promotion.all()
     self.assertEqual(promotions, [])
     promotion = Promotion("A1234", "BOGO", True, "20")
     self.assertNotEqual(promotion, None)
     self.assertEqual(promotion.id, None)
     promotion.save()
     # Asert that it was assigned an id and shows up in the database
     self.assertNotEqual(promotion.id, None)
     promotions = Promotion.all()
     self.assertEqual(len(promotions), 1)
     self.assertEqual(promotions[0].productid, "A1234")
     self.assertEqual(promotions[0].category, "BOGO")
     self.assertEqual(promotions[0].available, True)
     self.assertEqual(promotions[0].discount, "20")
Exemple #15
0
 def test_add_a_promotion(self):
     """ Create a promotion and add it to the database """
     promotions = Promotion.all()
     self.assertEqual(promotions, [])
     promotion = Promotion(promo_name="random",
                           goods_name="random_good",
                           category="random_category",
                           price=20,
                           discount=20,
                           available=True)
     self.assertTrue(promotion != None)
     self.assertEqual(promotion.id, None)
     promotion.save()
     # Asert that it was assigned an id and shows up in the database
     self.assertEqual(promotion.id, 1)
     promotions = Promotion.all()
     self.assertEqual(len(promotions), 1)
    def test_query(self):
        '''test query by promo type'''
        promo1 = Promotion(1)
        promo2 = Promotion(2)
        promo1.deserialize({'promo_type': '%'})
        promo2.deserialize({'promo_type': '$'})
        promo1.save()
        promo2.save()
        test = Promotion.find_by_conditions({'promo_type': '$'})
        self.assertIsInstance(test, list)
        self.assertEqual(len(test), 1)
        self.assertEqual(test[0].id, 2)

        test2 = Promotion.find_by_conditions({'promo_type': '%'})
        self.assertIsInstance(test, list)
        self.assertEqual(len(test), 1)
        self.assertEqual(test2[0].id, 1)
Exemple #17
0
 def test_update_a_promotion(self):
     """ Update a promotion in the database """
     promotion = Promotion(promo_name="random",
                           goods_name="random_good",
                           category="random_category",
                           price=20,
                           discount=20,
                           available=True)
     promotion.save()
     self.assertEqual(promotion.id, 1)
     #change it and save it
     promotion.category = "random_afterchange"
     promotion.save()
     self.assertEqual(promotion.id, 1)
     #Fetch it back to make sure the id not changed, but only the data
     promotions = Promotion.all()
     self.assertEqual(len(promotions), 1)
     self.assertEqual(promotions[0].category, "random_afterchange")
 def post(self):
     """
     Creates a Promotion
     This endpoint will create a Promotion based the data in the body that is posted
     """
     check_content_type('application/json')
     try:
         promotion = Promotion()
         promotion.deserialize(api.payload)
         promotion.save()
         flask_app.logger.info('CREATE promotion Success')
         location_url = api.url_for(PromotionResource,
                                    promo_id=promotion.id,
                                    _external=True)
         return promotion.serialize(), 201, {'Location': location_url}
     except Exception as e:
         print("EXCEPTION:", str(e))
         return jsonify(error=str(e)), 400
Exemple #19
0
 def test_partial_update_an_promotion(self):
     """ Partial update a Promotion """
     promotion = Promotion(name="20%OFF",
                           product_id=9527,
                           discount_ratio=80)
     promotion.save()
     self.assertEqual(promotion.promotion_id, 1)
     # Change it an save it
     promotion.name = "BUY1GET1FREE"
     promotion.discount_ratio = 50
     promotion.save()
     self.assertEqual(promotion.promotion_id, 1)
     # Fetch it back and make sure the id hasn't changed
     # but the data did change
     promotions = Promotion.all()
     self.assertEqual(len(promotions), 1)
     self.assertEqual(promotions[0].name, "BUY1GET1FREE")
     self.assertEqual(promotions[0].product_id, 9527)
     self.assertEqual(promotions[0].discount_ratio, 50)
Exemple #20
0
 def test_delete_all_promotions(self):
     """ Delete all promotions in the database """
     promotion1 = Promotion(promo_name="random1",
                            goods_name="random_good1",
                            category="random_category1",
                            price=20,
                            discount=20,
                            available=True)
     promotion1.save()
     promotion2 = Promotion(promo_name="random2",
                            goods_name="random_good2",
                            category="random_category2",
                            price=20,
                            discount=20,
                            available=True)
     promotion2.save()
     self.assertEqual(len(Promotion.all()), 2)
     Promotion.remove_all()
     self.assertEqual(len(Promotion.all()), 0)
    def test_query_3(self):
        '''test query by multiple conditions'''
        promo1 = Promotion(1)
        promo2 = Promotion(2)
        promo1.deserialize(
            {'promo_type': '%', 'start_date': '2017-01-01 00:00:00', 'end_date': '2019-01-01 00:00:00'})
        promo2.deserialize(
            {'promo_type': '$', 'start_date': '2018-01-01 00:00:00', 'end_date': '2020-01-01 00:00:00'})
        promo1.save()
        promo2.save()

        test = Promotion.find_by_conditions(
            {'promo_type': '$', 'available_on': '2017-06-01 00:00:00'})
        self.assertIsInstance(test, list)
        self.assertEqual(len(test), 0)

        test2 = Promotion.find_by_conditions(
            {'promo_type': '%', 'available_on': '2018-06-01 00:00:00'})
        self.assertIsInstance(test2, list)
        self.assertEqual(len(test2), 1)
        self.assertEqual(test2[0].id, 1)
def create_promotions():
    """
    Creates a Promotion

    This endpoint will create a Promotion based the data in the body that is posted
    ---
    tags:
    - promotions
    consumes:
    - application/json
    produces:
    - application/json
    parameters:
    - in: body
      name: Promotion
      description: Promotion entry to add
      required: false
      schema:
        $ref: '#/definitions/PromotionObject'
    responses:
      201:
        description: item created
        schema:
          $ref: '#/definitions/ResponsePromotionObject'
      400:
        description: invalid input, object invalid
    """
    check_content_type('application/json')
    promotion = Promotion()
    promotion.deserialize(request.get_json())
    promotion.save()
    message = promotion.serialize()
    location_url = url_for('get_promotions',
                           promotion_id=promotion.promotion_id,
                           _external=True)
    return make_response(jsonify(message), status.HTTP_201_CREATED,
                         {'Location': location_url})
Exemple #23
0
 def test_find_promotion(self):
     """ Find a Promotion by ID """
     Promotion(promo_name="random",
               goods_name="random_good",
               category="random_category",
               price=20,
               discount=20,
               available=True).save()
     random2 = Promotion(promo_name="random2",
                         goods_name="random2_good",
                         category="random2_category",
                         price=2,
                         discount=2,
                         available=False)
     random2.save()
     promotion = Promotion.find(random2.id)
     self.assertIsNot(promotion, None)
     self.assertEqual(promotion.id, random2.id)
     self.assertEqual(promotion.promo_name, "random2")
     self.assertEqual(promotion.goods_name, "random2_good")
     self.assertEqual(promotion.category, "random2_category")
     self.assertEqual(promotion.price, 2)
     self.assertEqual(promotion.discount, 2)
     self.assertEqual(promotion.available, False)
def data_load(promo_id, data):
    promo = Promotion(promo_id)
    promo.deserialize(data)
    promo.save()
Exemple #25
0
def data_load(payload):
    """ Loads a Promotion into the database """
    promotion = Promotion(payload['productid'], payload['category'],
                          payload['available'], payload['discount'])
    promotion.save()
Exemple #26
0
 def save_promotion(self, data):
     """ save a promotion into the db """
     promotion = Promotion()
     promotion.deserialize(data)
     promotion.save()
 def test_delete(self):
     promo = Promotion()
     promo.save()
     self.assertEqual(len(Promotion.all()), 1)
     promo.delete()
     self.assertEqual(len(Promotion.all()), 0)