def test_task_get_tasks(client): """Test getting tasks""" Task.create_task(str(uuid4())) Task.create_task(str(uuid4())) tasks = Task.get_tasks() expect(tasks.total).to_equal(2)
def test_task_get_tasks_pagination(client): """Test getting tasks pagination""" Task.create_task(str(uuid4())) Task.create_task(str(uuid4())) Task.create_task(str(uuid4())) tasks = Task.get_tasks(page=1, per_page=1) expect(tasks.total).to_equal(3) expect(tasks.pages).to_equal(3) expect(tasks.items).to_length(1) expect(tasks.has_next).to_be_true() expect(tasks.has_prev).to_be_false()
def get_tasks(): logger = g.logger.bind(operation="get_tasks") try: page = int(request.args.get('page', 1)) except ValueError: logger.error(f"Tasks pagination page param should be an integer.") abort(404) per_page = current_app.config["PAGINATION_PER_PAGE"] logger.debug(f"Getting tasks page={page} per_page={per_page}...") paginator = Task.get_tasks(page=page, per_page=per_page) logger.debug("Tasks retrieved successfully...") tasks_url = url_for("task.get_tasks", _external=True) next_url = None if paginator.has_next: next_url = f'{tasks_url}?page={paginator.next_num}' prev_url = None if paginator.has_prev: prev_url = f'{tasks_url}?page={paginator.prev_num}' data = { "items": [], "total": paginator.total, "page": paginator.page, "pages": paginator.pages, "perPage": paginator.per_page, "hasNext": paginator.has_next, "hasPrev": paginator.has_prev, "nextUrl": next_url, "prevUrl": prev_url, } for task in paginator.items: data['items'].append(task.to_dict()) return jsonify(data)