public async Task HasPrevious_True() { // arrange var typeInspector = new DefaultTypeInspector(); IExtendedType sourceType = typeInspector.GetType(typeof(List <string>)); IPagingProvider pagingProvider = new QueryableCursorPagingProvider(); IPagingHandler pagingHandler = pagingProvider.CreateHandler(sourceType, default); var list = new List <string> { "a", "b", "c", "d", "e", "f", "g" }; var pagingDetails = new CursorPagingArguments(first: 1); var context = new MockContext(pagingDetails); var connection = (Connection)await pagingHandler.SliceAsync(context, list); pagingDetails = new CursorPagingArguments(after: connection.Info.EndCursor, first: 2); context = new MockContext(pagingDetails); // act connection = (Connection)await pagingHandler.SliceAsync(context, list); // assert Assert.True(connection.Info.HasPreviousPage); }
public async Task TakeLastSingle() { // arrange var typeInspector = new DefaultTypeInspector(); IExtendedType sourceType = typeInspector.GetType(typeof(List <string>)); IPagingProvider pagingProvider = new QueryableCursorPagingProvider(); IPagingHandler pagingHandler = pagingProvider.CreateHandler(sourceType, default); var list = new List <string> { "f", "g" }; var pagingDetails = new CursorPagingArguments(last: 1); var context = new MockContext(pagingDetails); // act var connection = (Connection)await pagingHandler.SliceAsync(context, list); // assert Assert.Collection(connection.Edges, t => { Assert.Equal("g", t.Node); Assert.Equal(1, GetPositionFromCursor(t.Cursor)); }); Assert.True( connection.Info.HasPreviousPage, "HasPreviousPage"); Assert.False( connection.Info.HasNextPage, "HasNextPage"); }
public async Task InvokeAsync(IMiddlewareContext context) { _pagingHandler.ValidateContext(context); await _next(context).ConfigureAwait(false); if (context.Result is not null) { context.Result = await _pagingHandler.SliceAsync(context, context.Result).ConfigureAwait(false); } }