Skip to content

Commit cd61958

Browse files
glassbead0vnugent
authored andcommitted
feat: add totalItems to userMediaSource
1 parent b1f9acc commit cd61958

4 files changed

Lines changed: 14 additions & 5 deletions

File tree

src/db/MediaObjectTypes.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ export interface UserMedia {
117117
edges: MediaEdge[]
118118
pageInfo: {
119119
hasNextPage: boolean
120+
totalItems: number
120121
endCursor: string | null
121122
}
122123
}

src/graphql/schema/Media.gql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ type MediaEdge {
8686
type PageInfo {
8787
"True if there are more data after the last cursor."
8888
hasNextPage: Boolean!
89+
"Total number of items."
90+
totalItems: Int!
8991
"Not yet supported."
9092
endCursor: String
9193
}

src/model/MediaDataSource.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,8 @@ export default class MediaDataSource extends MongoDataSource<MediaObject> {
167167
}
168168
])
169169

170+
const itemCount = await this.mediaObjectModel.countDocuments({ userUuid })
171+
170172
let hasNextPage = false
171173
if (rs.length > first) {
172174
// ok there's a next page. remove the extra item.
@@ -185,6 +187,7 @@ export default class MediaDataSource extends MongoDataSource<MediaObject> {
185187
)),
186188
pageInfo: {
187189
hasNextPage,
190+
totalItems: itemCount,
188191
endCursor: null
189192
}
190193

src/model/__tests__/MediaDataSource.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,8 @@ describe('MediaDataSource', () => {
221221
* With 3 items per page we should expect 3 pages.
222222
*/
223223
const newMediaListInput: MediaObjectGQLInput[] = []
224-
for (let i = 0; i < 7; i = i + 1) {
224+
const mediaCount = 7
225+
for (let i = 0; i < mediaCount; i = i + 1) {
225226
newMediaListInput.push({ ...MEDIA_TEMPLATE, mediaUrl: `/photo${i}.jpg` })
226227
}
227228

@@ -241,7 +242,7 @@ describe('MediaDataSource', () => {
241242

242243
const page1 = await media.getOneUserMediaPagination(input)
243244

244-
verifyPageData(page1, MEDIA_TEMPLATE.userUuid, expectedMedia.slice(0, 3), ITEMS_PER_PAGE, true)
245+
verifyPageData(page1, MEDIA_TEMPLATE.userUuid, expectedMedia.slice(0, 3), mediaCount, ITEMS_PER_PAGE, true)
245246

246247
const page1Edges = page1.mediaConnection.edges
247248
const input2: UserMediaQueryInput = {
@@ -251,7 +252,7 @@ describe('MediaDataSource', () => {
251252
}
252253
const page2 = await media.getOneUserMediaPagination(input2)
253254

254-
verifyPageData(page2, MEDIA_TEMPLATE.userUuid, expectedMedia.slice(3, 6), ITEMS_PER_PAGE, true)
255+
verifyPageData(page2, MEDIA_TEMPLATE.userUuid, expectedMedia.slice(3, 6), mediaCount, ITEMS_PER_PAGE, true)
255256

256257
const page2Edges = page2.mediaConnection.edges
257258
const input3: UserMediaQueryInput = {
@@ -261,7 +262,7 @@ describe('MediaDataSource', () => {
261262
}
262263
const page3 = await media.getOneUserMediaPagination(input3)
263264

264-
verifyPageData(page3, MEDIA_TEMPLATE.userUuid, expectedMedia.slice(6, 7), 1, false)
265+
verifyPageData(page3, MEDIA_TEMPLATE.userUuid, expectedMedia.slice(6, 7), mediaCount, 1, false)
265266
})
266267
})
267268

@@ -270,18 +271,20 @@ describe('MediaDataSource', () => {
270271
* @param actualPage
271272
* @param expectedUserUuid
272273
* @param expectedMedia
274+
* @param totalItems
273275
* @param itemsPerPage
274276
* @param hasNextPage
275277
*/
276278
const verifyPageData = (
277279
actualPage: UserMedia,
278280
expectedUserUuid: string,
279281
expectedMedia: MediaObject[],
282+
totalItems: number,
280283
itemsPerPage: number,
281284
hasNextPage: boolean): void => {
282285
expect(actualPage.userUuid).toEqual(expectedUserUuid)
283286
expect(actualPage.mediaConnection.pageInfo.hasNextPage).toStrictEqual(hasNextPage)
284-
287+
expect(actualPage.mediaConnection.pageInfo.totalItems).toStrictEqual(totalItems)
285288
const pageEdges = actualPage.mediaConnection.edges
286289
expect(pageEdges).toHaveLength(itemsPerPage)
287290

0 commit comments

Comments
 (0)