diff options
Diffstat (limited to 'internal/db/users_test.go')
-rw-r--r-- | internal/db/users_test.go | 72 |
1 files changed, 71 insertions, 1 deletions
diff --git a/internal/db/users_test.go b/internal/db/users_test.go index 67be21dd..1a33151a 100644 --- a/internal/db/users_test.go +++ b/internal/db/users_test.go @@ -24,7 +24,7 @@ func TestUsers(t *testing.T) { } t.Parallel() - tables := []interface{}{new(User), new(EmailAddress), new(Repository)} + tables := []interface{}{new(User), new(EmailAddress), new(Repository), new(Follow)} db := &users{ DB: dbtest.NewDB(t, "users", tables...), } @@ -39,6 +39,8 @@ func TestUsers(t *testing.T) { {"GetByID", usersGetByID}, {"GetByUsername", usersGetByUsername}, {"HasForkedRepository", usersHasForkedRepository}, + {"ListFollowers", usersListFollowers}, + {"ListFollowings", usersListFollowings}, } { t.Run(tc.name, func(t *testing.T) { t.Cleanup(func() { @@ -296,3 +298,71 @@ func usersHasForkedRepository(t *testing.T, db *users) { has = db.HasForkedRepository(ctx, 1, 1) assert.True(t, has) } + +func usersListFollowers(t *testing.T, db *users) { + ctx := context.Background() + + john, err := db.Create(ctx, "john", "john@example.com", CreateUserOptions{}) + require.NoError(t, err) + + got, err := db.ListFollowers(ctx, john.ID, 1, 1) + require.NoError(t, err) + assert.Empty(t, got) + + alice, err := db.Create(ctx, "alice", "alice@example.com", CreateUserOptions{}) + require.NoError(t, err) + bob, err := db.Create(ctx, "bob", "bob@example.com", CreateUserOptions{}) + require.NoError(t, err) + + followsStore := NewFollowsStore(db.DB) + err = followsStore.Follow(ctx, alice.ID, john.ID) + require.NoError(t, err) + err = followsStore.Follow(ctx, bob.ID, john.ID) + require.NoError(t, err) + + // First page only has bob + got, err = db.ListFollowers(ctx, john.ID, 1, 1) + require.NoError(t, err) + require.Len(t, got, 1) + assert.Equal(t, bob.ID, got[0].ID) + + // Second page only has alice + got, err = db.ListFollowers(ctx, john.ID, 2, 1) + require.NoError(t, err) + require.Len(t, got, 1) + assert.Equal(t, alice.ID, got[0].ID) +} + +func usersListFollowings(t *testing.T, db *users) { + ctx := context.Background() + + john, err := db.Create(ctx, "john", "john@example.com", CreateUserOptions{}) + require.NoError(t, err) + + got, err := db.ListFollowers(ctx, john.ID, 1, 1) + require.NoError(t, err) + assert.Empty(t, got) + + alice, err := db.Create(ctx, "alice", "alice@example.com", CreateUserOptions{}) + require.NoError(t, err) + bob, err := db.Create(ctx, "bob", "bob@example.com", CreateUserOptions{}) + require.NoError(t, err) + + followsStore := NewFollowsStore(db.DB) + err = followsStore.Follow(ctx, john.ID, alice.ID) + require.NoError(t, err) + err = followsStore.Follow(ctx, john.ID, bob.ID) + require.NoError(t, err) + + // First page only has bob + got, err = db.ListFollowings(ctx, john.ID, 1, 1) + require.NoError(t, err) + require.Len(t, got, 1) + assert.Equal(t, bob.ID, got[0].ID) + + // Second page only has alice + got, err = db.ListFollowings(ctx, john.ID, 2, 1) + require.NoError(t, err) + require.Len(t, got, 1) + assert.Equal(t, alice.ID, got[0].ID) +} |