@@ -1313,7 +1313,87 @@ func TestNestedConnection(t *testing.T) {
13131313 bulkU [i ] = ec .User .Create ().SetName (fmt .Sprintf ("user-%d" , i )).AddGroups (groups [:len (groups )- i ]... )
13141314 }
13151315 users := ec .User .CreateBulk (bulkU ... ).SaveX (ctx )
1316- users [0 ].Update ().AddFriends (users [1 :]... ).SaveX (ctx )
1316+ users [0 ].Update ().AddFriends (users [1 :]... ).SaveX (ctx ) // user 0 is friends with all
1317+ users [1 ].Update ().AddFriends (users [2 :]... ).SaveX (ctx ) // user 1 is friends with all
1318+
1319+ t .Run ("After Cursor" , func (t * testing.T ) {
1320+ var (
1321+ query = `query ($id: ID!, $after: Cursor) {
1322+ user: node(id: $id) {
1323+ ... on User {
1324+ id
1325+ name
1326+ friends(after: $after) {
1327+ totalCount
1328+ edges {
1329+ cursor
1330+ node {
1331+ id
1332+ name
1333+ friends {
1334+ totalCount
1335+ edges {
1336+ node {
1337+ id
1338+ name
1339+ }
1340+ }
1341+ }
1342+ }
1343+ }
1344+ }
1345+ }
1346+ }
1347+ }`
1348+ rsp struct {
1349+ User struct {
1350+ ID string
1351+ Name string
1352+ Friends struct {
1353+ TotalCount int
1354+ Edges []struct {
1355+ Cursor string
1356+ Node struct {
1357+ ID string
1358+ Name string
1359+ Friends struct {
1360+ TotalCount int
1361+ Edges []struct {
1362+ Node struct {
1363+ ID string
1364+ Name string
1365+ }
1366+ }
1367+ }
1368+ }
1369+ }
1370+ }
1371+ }
1372+ }
1373+ after any
1374+ )
1375+ err = gqlc .Post (query , & rsp , client .Var ("id" , users [0 ].ID ), client .Var ("after" , after ))
1376+ require .NoError (t , err )
1377+ require .Equal (t , 9 , rsp .User .Friends .TotalCount )
1378+ require .Len (t , rsp .User .Friends .Edges , 9 , "All users are friends with user 0" )
1379+ // First friend of user 0 is user 1.
1380+ require .Equal (t , strconv .Itoa (users [1 ].ID ), rsp .User .Friends .Edges [0 ].Node .ID )
1381+ require .Len (t , rsp .User .Friends .Edges [0 ].Node .Friends .Edges , 9 , "All users are friends with user 1" )
1382+ // All other users have 2 friends (user 0 and user 1).
1383+ for _ , u := range rsp .User .Friends .Edges [1 :] {
1384+ require .Len (t , u .Node .Friends .Edges , 2 )
1385+ }
1386+
1387+ // Paginate over the friends of user 0.
1388+ n := len (rsp .User .Friends .Edges )
1389+ for i := 0 ; i < n ; i ++ {
1390+ err = gqlc .Post (query , & rsp , client .Var ("id" , users [0 ].ID ), client .Var ("after" , after ))
1391+ require .NoError (t , err )
1392+ require .Equal (t , 9 , rsp .User .Friends .TotalCount )
1393+ require .Lenf (t , rsp .User .Friends .Edges , n - i , "There are %d friends after %v" , n - i , after )
1394+ after = rsp .User .Friends .Edges [0 ].Cursor
1395+ }
1396+ })
13171397
13181398 t .Run ("TotalCount" , func (t * testing.T ) {
13191399 var (
0 commit comments