def test_valid_token(api): TOKEN = "eyJhbGciOiJSUzI1NiIsImtpZCI6ImYwOTJiNjEyZTliNjQ0N2RlYjEwNjg1YmI4ZmZhOGFlNjJmNmFhOTEiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI0MjEyMzQxMjcyNzItM2JiMzRqN2FrY3V1a2xzYWZ2YzZjdXY3NTdqZDA4NzAuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI0MjEyMzQxMjcyNzItM2JiMzRqN2FrY3V1a2xzYWZ2YzZjdXY3NTdqZDA4NzAuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMTgxMzIzOTM0NjQ0OTYwMjg3ODQiLCJoZCI6ImNhc2UuZWR1IiwiZW1haWwiOiJlbXMyMzZAY2FzZS5lZHUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibm9uY2UiOiJmdzFwdmFiYmxvbndicG04b2E0dTIiLCJuYW1lIjoiRWxsaXMgU2F1cGUiLCJwaWN0dXJlIjoiaHR0cHM6Ly9saDUuZ29vZ2xldXNlcmNvbnRlbnQuY29tLy1JNnpZcWVfWnNnVS9BQUFBQUFBQUFBSS9BQUFBQUFBQUFBQS9BTVp1dWNtWFpYc0x6WHA3Z3NfelhlRFBkWUVuOVA5T0RRL3M5Ni1jL3Bob3RvLmpwZyIsImdpdmVuX25hbWUiOiJFbGxpcyIsImZhbWlseV9uYW1lIjoiU2F1cGUiLCJsb2NhbGUiOiJlbiIsImlhdCI6MTYwNDU5OTcyNywiZXhwIjoxNjA0NjAzMzI3LCJqdGkiOiI1NWYzZjFiMTcwNmRmM2FmNTNlNWZmMmViNjE3NzU3MGJkNGNhYzhkIn0.eeWIzjjrRCgifTXBeZ8lblysBJ_7xJv-Z9xUUv1nPfWHLeUithtEXKD4YdCgUYhOODt0sHDjfKBMj_vfXh9mEFNahtW2GEpLVLZN3R0hY3w88YOI2ljsbT-eN_oegRlZBKDoVQdN76pivHV25gfxVY_cZyt04zxXs4_MZKA4Mq0pCgRaLS-ZCEtWn4Vgu8bpFg80g30aseIEi2OQtBlAymHRC07_YLCQ6iP6IQfDgiK7oxVgk3GEvvDx7l3FrAf0btM5B3kDmuQPdiUL6oLspIsPJOowtuntgS7KXWIKSMOqnFMqOhQncTE4TkAfpl8acmIwQ5rw1zUPbNpbIxHiCA" try: id = idForToken(MockRequest({"token": TOKEN}, {})) assert len(id) > 0 except HTTPException: assert False try: id = idForToken(MockRequest(None, {"Authorization": "Bearer " + TOKEN})) assert len(id) > 0 except HTTPException: assert False
def update_item(): user = idForToken(request) item = TrackingItem.fromDict(request.json, TrackingItem.isValidUpdate) if item is None: abort(422) return makeSuccessResponse(TrackingItemDAL.updateItem, item, user)
def dashboard_similar(): user = idForToken(request) if "itemId" not in request.args: abort(422) itemId = request.args["itemId"] if not str.isdigit(itemId) or int(itemId) <= 0: abort(422) itemId = int(itemId) items = runQuery(TrackingItemDAL.similarItems, user, itemId) respData = {"items": []} for item in items: respData["items"].append(item.toDict()) try: itemUrl = runQuery(TrackingItemDAL.urlForItemId, itemId) if itemUrl is not None: #TODO do you need to add an https prefix or anything? depends on what front end puts in scrapedItems = related_item_scraper(itemUrl) for item in scrapedItems: item.referrerItemId = itemId respData["items"].append(item.toDict()) except Exception as e: print(e) return jsonify(respData)
def register_item(): user = idForToken(request) item = TrackingItem.fromDict(request.json, TrackingItem.isValidInsert) if item is None: abort(422) return makeSuccessResponse(TrackingItemDAL.createItem, item, user)
def register_similar(): user = idForToken(request) item = SimilarItem.fromDict(request.json) if item is None: abort(422) return makeSuccessResponse(TrackingItemDAL.registerSimilar, item)
def user_get_prime(): user = idForToken(request) isPrime = runQuery(TrackingItemDAL.isUserPrime, user) if isPrime is None: abort(422) return jsonify({"isPrime": isPrime})
def dashboard_items(): user = idForToken(request) items = runQuery(TrackingItemDAL.userItems, user) respData = {"items": []} for item in items: respData["items"].append(item.toDict()) return jsonify(respData)
def delete_item(): user = idForToken(request) if request.json is None or "id" not in request.json: abort(422) id = request.json["id"] if not isinstance(id, int) or id <= 0: abort(422) return makeSuccessResponse(TrackingItemDAL.deleteItem, id, user)
def user_set_prime(): user = idForToken(request) if request.json is None or "isPrime" not in request.json: abort(422) isPrime = request.json["isPrime"] if not isinstance(isPrime, bool): abort(422) return makeSuccessResponse(TrackingItemDAL.updateUserPrime, user, isPrime)
def hide_similar(): user = idForToken(request) if request.json is None or "id" not in request.json: abort(422) id = request.json["id"] if not isinstance(id, int) or id <= 0: abort(422) return makeSuccessResponse(TrackingItemDAL.hideSimilar, id, user)
def update_sort_order(): user = idForToken(request) if request.json is None or "itemIds" not in request.json: abort(422) itemIds = request.json["itemIds"] for id in itemIds: if not isinstance(id, int) or id <= 0: abort(422) return makeSuccessResponse(TrackingItemDAL.updateSortOrder, user, itemIds)
def notification_items(): user = idForToken(request) items = runQuery(TrackingItemDAL.notificationItems, user) if items is None: abort(422) itemList = [] for item in items: itemDict = { "id": item.id, "priceThreshold": str(item.priceThreshold), "timeThreshold": item.timeThreshold.isoformat(), "url": item.url, "imgUrl": item.imgUrl, "title":item.title } itemList.append(itemDict) return jsonify({"items": itemList})
def test_invalid_token(api): try: idForToken(MockRequest({"token": "hello"}, {})) assert False except HTTPException as e: assert e.get_response().status_code == 403
def test_no_token(api): try: idForToken(MockRequest({"id": 1}, {})) except HTTPException as e: assert e.get_response().status_code == 403
def test_no_json(api): try: idForToken(MockRequest(None, {})) except HTTPException as e: assert e.get_response().status_code == 422