def get(self): """ Retrieves all the wishlists """ app.logger.info('Request to list wishlists') wishlists = [] wishlist_user = request.args.get('wishlist_user') wishlist_name = request.args.get('wishlist_name') app.logger.info('Request to list wishlists of user %s with name: %s', wishlist_user, wishlist_name) if wishlist_user: a = Wishlist.find_by_user(wishlist_user) ay = [w.serialize() for w in a] if wishlist_name: b = Wishlist.find_by_name(wishlist_name) bee = [w.serialize() for w in b] wishlists = [x for x in ay if x in bee] else: wishlists = ay else: wishlists = [w.serialize() for w in Wishlist.all()] app.logger.info('[%s] Wishlists returned', len(wishlists)) return wishlists, status.HTTP_200_OK
def test_save_without_attribute(self): wishlist_empty = Wishlist() self.assertRaises(DataValidationError, wishlist_empty.save) wishlist_no_name = Wishlist(wishlist_name=None) self.assertRaises(DataValidationError, wishlist_no_name.save) wishlist_no_user = Wishlist(wishlist_user=None) self.assertRaises(DataValidationError, wishlist_no_user.save)
def save_wishlist(user_id): token = request.headers.get('auth-token') user = db.session.query(User).filter_by(id=user_id).first() auth = db.session.query(AuthToken).filter_by(token=token).first() # print auth if auth.user_id != user.id: return jsonify({'error': 'token not found'}) data = MultiDict(mapping=request.json) inputs = WishlistForm(data, csrf_enabled=False) if not inputs.validate(): return jsonify({'error': 'missing required fields'}) name = data['name'] description = data['description'] wishlist = Wishlist(name, description) user.wishlists.append(wishlist) db.session.add(wishlist) db.session.commit() return jsonify(wishlist.__repr__())
def test_find_by_name(self): """ Find a Wishlist by Name """ Wishlist("mike's wishlist", "mike").save() Wishlist("joan's wishlist", "joan").save() wishlists = Wishlist.find_by_name("mike's wishlist") self.assertEqual(len(wishlists), 1) self.assertEqual(wishlists[0].user, "mike") self.assertEqual(wishlists[0].name, "mike's wishlist")
def test_create_a_wishlist_without_name(self): """Create a wishlist with no name, assert Error""" wishlist_empty = Wishlist() self.assertRaises(DataValidationError, wishlist_empty.create) wishlist_no_name = Wishlist(wishlist_name=None) self.assertRaises(DataValidationError, wishlist_no_name.create) wishlist_no_user = Wishlist(wishlist_user=None) self.assertRaises(DataValidationError, wishlist_no_user.create)
def test_find_by_customer_id(self): """ Find a Wishlist by Customer_id """ Wishlist("fido", "1").save() Wishlist("Bags", "2").save() wishlists = Wishlist.find_by_customer_id("1") self.assertNotEqual(len(wishlists), 0) self.assertEqual(wishlists[0].customer_id, "1") self.assertEqual(wishlists[0].name, "fido")
def test_deserialize_a_wishlist(self): """ Deserialize a Wishlist """ data = {"name": "Bags", "customer_id": "1"} wishlist = Wishlist() wishlist.deserialize(data) self.assertNotEqual(wishlist, None) self.assertEqual(wishlist.id, None) self.assertEqual(wishlist.name, "Bags") self.assertEqual(wishlist.customer_id, "1")
def test_serialize_a_wishlist(self): """ Serialize a Wishlist """ wishlist = Wishlist("fido", "1") data = wishlist.serialize() self.assertNotEqual(data, None) self.assertNotIn('_id', data) self.assertIn('name', data) self.assertEqual(data['name'], "fido") self.assertIn('customer_id', data) self.assertEqual(data['customer_id'], "1")
def test_serialize_a_wishlist(self): """ Test serialization of a Wishlist """ wishlist = Wishlist("mike's wishlist", "mike", [Wishlist_entry(0, "car")]) data = wishlist.serialize() self.assertNotEqual(data, None) self.assertIn('id', data) self.assertEqual(data['id'], None) self.assertIn('name', data) self.assertEqual(data['name'], "mike's wishlist") self.assertIn('user', data) self.assertEqual(data['user'], "mike")
def test_delete_a_wishlist(self): """ Delete a Wishlist """ wishlist = Wishlist("fido", "1") wishlist.save() self.assertEqual(len(Wishlist.all()), 1) # delete the wishlist and make sure it isn't in the database wishlist.delete() self.assertEqual(len(Wishlist.all()), 0)
def test_create_a_wishlist(self): """ Create a wishlist and assert that it exists """ wishlist = Wishlist("mike's wishlist", "mike") self.assertTrue(wishlist != None) self.assertEqual(wishlist.id, None) self.assertEqual(wishlist.name, "mike's wishlist") self.assertEqual(wishlist.user, "mike")
def delete(self, wishlist_user): """ Removes all wishlists of a user""" app.logger.info('Request to delete all wishlists of a user') wishlists = Wishlist.find_by_user(wishlist_user) for wishlist in wishlists: wishlist.delete_wishlist() return '', status.HTTP_204_NO_CONTENT
def test_create_a_wishlist(self): """ Create a wishlist and assert that it exists """ wishlist = Wishlist("fido", "1") self.assertNotEqual(wishlist, None) self.assertEqual(wishlist.id, None) self.assertEqual(wishlist.name, "fido") self.assertEqual(wishlist.customer_id, "1")
def test_delete_error(self): """ Test failure of the delete try-catch""" wishlist = Wishlist("mike's wishlist", "mike") wishlist.save() self.assertEqual(len(Wishlist.all()), 1) og_id = wishlist.id # modify id to trigger try-catch wishlist.id = "asdf123" # delete the wishlist and make sure it failed and is still int the database wishlist.delete_wishlist() self.assertEqual(len(Wishlist.all()), 1) # Fetch it back and make sure the id and data hasn't changed wishlists = Wishlist.all() self.assertEqual(len(wishlists), 1) self.assertEqual(wishlists[0].name, "mike's wishlist") self.assertEqual(wishlists[0].id, og_id)
def create_wishlists(): """ Creates a Wishlist This endpoint will create a Wishlist based the data in the body that is posted """ app.logger.info('Request to Create a Wishlist...') 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 = { 'name': request.form['name'], 'customer_id': request.form['customer_id'] } else: check_content_type('application/json') app.logger.info('Getting json data from API call') data = request.get_json() app.logger.info(data) wishlist = Wishlist() wishlist.deserialize(data) wishlist.save() app.logger.info('Wishlist with new id [%s] saved!', wishlist.id) message = wishlist.serialize() location_url = url_for('get_wishlists', wishlist_id=wishlist.id, _external=True) return make_response(jsonify(message), status.HTTP_201_CREATED, {'Location': location_url})
def test_key_error_on_update(self, bad_mock): """ Test KeyError on update """ bad_mock.side_effect = KeyError() wishlist = Wishlist("fido", "1") wishlist.save() wishlist.name = 'Fifi' wishlist.update()
def test_key_error_on_update(self, bad_mock): """ Test KeyError on update """ bad_mock.side_effect = KeyError() wishlist = Wishlist("joan's wishlist", "joan") wishlist.save() wishlist.name = "joan's wishlist" wishlist.update()
def setUp(self): """ Runs before each test """ self.app = service.app.test_client() # TestWishlistServer.throttle_api() Wishlist.init_db() sleep(0.25) # TestWishlistServer.throttle_api() Wishlist("Wishlist demo 1", "demo user1", [ service.Wishlist_entry(0, "test11"), service.Wishlist_entry(1, "test12") ]).save() sleep(0.25) # TestWishlistServer.throttle_api() Wishlist("Wishlist demo 2", "demo user2", [ service.Wishlist_entry(0, "test21"), service.Wishlist_entry(1, "test22") ]).save() sleep(0.25)
def list_wishlists(): """ Returns all of the Wishlists """ app.logger.info('Request to list Wishlists...') wishlists = [] customer_id = request.args.get('customer_id') name = request.args.get('name') if customer_id: app.logger.info('Find by customer_id') wishlists = Wishlist.find_by_customer_id(customer_id) elif name: app.logger.info('Find by name') wishlists = Wishlist.find_by_name(name) else: app.logger.info('Find all') wishlists = Wishlist.all() app.logger.info('[%s] Wishlists returned', len(wishlists)) results = [wishlist.serialize() for wishlist in wishlists] return make_response(jsonify(results), status.HTTP_200_OK)
def test_delete_wishlist(self): """ Delete a wishlist by ID """ wishlist = Wishlist.find_by_name('Wishlist demo 1')[0] wishlist_count = self.get_wishlist_count() resp = self.app.delete('/wishlists/{}'.format(wishlist.id), content_type='application/json') self.assertEqual(resp.status_code, status.HTTP_204_NO_CONTENT) self.assertEqual(len(resp.data), 0) new_count = self.get_wishlist_count() self.assertEqual(new_count, wishlist_count - 1)
def test_update_error(self): """ TEST failure of the update try-catch """ wishlist = Wishlist("mike's wishlist", "mike") wishlist.save() self.assertNotEqual(wishlist.id, None) og_id = wishlist.id #change its ID before updating it to trigger try-catch block wishlist.id = "asdf123" wishlist.name = "mike's hard wishlist" wishlist.save() # Fetch it back and make sure the id and data hasn't changed wishlists = Wishlist.all() self.assertEqual(len(wishlists), 1) self.assertEqual(wishlists[0].name, "mike's wishlist") self.assertEqual(wishlists[0].id, og_id)
def get_wishlists(wishlist_id): """ Retrieve a single Wishlist This endpoint will return a Wishlist based on it's id """ app.logger.info("Request to Retrieve a wishlist with id [%s]", wishlist_id) wishlist = Wishlist.find(wishlist_id) if not wishlist: raise NotFound("Wishlist with id '{}' was not found.".format(wishlist_id)) return make_response(jsonify(wishlist.serialize()), status.HTTP_200_OK)
def test_update_a_wishlist(self): """ Update a Wishlist """ wishlist = Wishlist("mike's wishlist", "mike") wishlist.save() self.assertNotEqual(wishlist.id, None) # Change it an save it wishlist.name = "mike's hard wishlist" wishlist.save() # Fetch it back and make sure the id hasn't changed # but the data did change wishlists = Wishlist.all() self.assertEqual(len(wishlists), 1) self.assertEqual(wishlists[0].name, "mike's hard wishlist")
def delete_wishlists(wishlist_id): """ Delete a Wishlist This endpoint will delete a Wishlist based the id specified in the path """ app.logger.info('Request to Delete a wishlist with id [%s]', wishlist_id) wishlist = Wishlist.find(wishlist_id) if wishlist: wishlist.delete() return make_response('', status.HTTP_204_NO_CONTENT)
def delete(self, wishlist_id): """ Delete a Wishlist This endpoint will delete a Wishlist based on it's id """ app.logger.info('Request to Delete a wishlist with id [%s]', wishlist_id) wishlist = Wishlist.find(wishlist_id) if wishlist: wishlist.delete_wishlist() return '', status.HTTP_204_NO_CONTENT
def test_update_a_wishlist(self): """ Update a Wishlist """ wishlist = Wishlist("fido", "1") wishlist.save() self.assertNotEqual(wishlist.id, None) # Change it an save it wishlist.customer_id = "k9" wishlist.save() # Fetch it back and make sure the id hasn't changed # but the data did change wishlists = Wishlist.all() self.assertEqual(len(wishlists), 1) self.assertEqual(wishlists[0].customer_id, "k9") self.assertEqual(wishlists[0].name, "fido")
def add_wishlist_to_db(wishlist_list): log.info("Adding wishlist to database...") value = round( sum(map(lambda e: e["price"] * e["quantity"], wishlist_list)), 2) wishlist = Wishlist(value=value, content_hash=0) db.session.add(wishlist) new_count = 0 for entry in wishlist_list: product = Product.query.filter_by(item_id=entry["item_id"]).first() source = Source.query.filter_by(name=entry["source"]).first() if source is None: source = Source(name=entry["source_name"], url=entry["source"]) db.session.add(source) db.session.commit() if product is None: product = Product( name=entry["name"], price=entry["price"], quantity=entry["quantity"], stars=entry["stars"], link=entry["link"], link_image=entry["img_link"], item_id=entry["item_id"], source=source, ) log.info( f"Adding product {product.name[:20]}[..], price = {product.price:.02f}" ) db.session.add(product) new_count += 1 else: update_product(product, entry, source) wishlist.products.append(product) db.session.commit() wishlist.content_hash = wishlist.calculate_content_hash() db.session.commit() log.info("Added wishlist to database, got %d new products!" % new_count)
def get(self, wishlist_id): """ Retrieve a single wishlist This endpoint will return a wishlist based on it's id """ app.logger.info("Request to retrieve a wishlist with id [%s]", wishlist_id) wishlist = Wishlist.find(wishlist_id) if not wishlist: api.abort( status.HTTP_404_NOT_FOUND, "Wishlist with id '{}' was not found".format(wishlist_id)) return wishlist.serialize(), status.HTTP_200_OK
def addtowishlist(): """Add item to wishlist""" if request.method == 'POST': itemUrl = request.json['itemUrl'] imgUrl = request.json['imgUrl'] title = request.json['title'] description = request.json['description'] item = Wishlist(itemUrl=itemUrl, imgUrl=imgUrl, title=title, description=description, userid=g.user.get_id()) db.session.add(item) db.session.commit() return jsonify({'StatusCode':'200','Message': 'Item successfully added'}) return render_template('addItem.html')
def test_find_wishlist(self): """ Find a Wishlist by id """ Wishlist("fido", "2").save() saved_wishlist = Wishlist("Bags", "1") saved_wishlist.save() wishlist = Wishlist.find(saved_wishlist.id) self.assertIsNot(wishlist, None) self.assertEqual(wishlist.id, saved_wishlist.id) self.assertEqual(wishlist.name, "Bags")