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)
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()
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)
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)
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")
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)
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)
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")
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)
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})
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")
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)
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
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)
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})
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()
def data_load(payload): """ Loads a Promotion into the database """ promotion = Promotion(payload['productid'], payload['category'], payload['available'], payload['discount']) promotion.save()
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)