From 77ae475157d04387743b85a325fbea006850a733 Mon Sep 17 00:00:00 2001 From: Rowan Bohde Date: Fri, 15 Nov 2024 16:50:31 -0600 Subject: [PATCH 1/4] disable gravatar in test When running e2e tests on flaky networks, gravatar can cause a timeout and test failures. Turn off, and populate avatars on run to make tests more reliable. --- models/fixtures/system_setting.yml | 2 +- modules/repository/commits_test.go | 2 ++ .../repository/contributors_graph_test.go | 3 +++ tests/e2e/e2e_test.go | 23 ++++++++++++++++++- 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/models/fixtures/system_setting.yml b/models/fixtures/system_setting.yml index 30542bc82a92c..dcad176c899e7 100644 --- a/models/fixtures/system_setting.yml +++ b/models/fixtures/system_setting.yml @@ -1,7 +1,7 @@ - id: 1 setting_key: 'picture.disable_gravatar' - setting_value: 'false' + setting_value: 'true' version: 1 created: 1653533198 updated: 1653533198 diff --git a/modules/repository/commits_test.go b/modules/repository/commits_test.go index 248673a907d47..2b2add69683e6 100644 --- a/modules/repository/commits_test.go +++ b/modules/repository/commits_test.go @@ -12,6 +12,7 @@ import ( "code.gitea.io/gitea/models/db" repo_model "code.gitea.io/gitea/models/repo" + system_model "code.gitea.io/gitea/models/system" "code.gitea.io/gitea/models/unittest" "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/setting" @@ -104,6 +105,7 @@ func TestPushCommits_ToAPIPayloadCommits(t *testing.T) { func TestPushCommits_AvatarLink(t *testing.T) { assert.NoError(t, unittest.PrepareTestDatabase()) + system_model.SetSettings(db.DefaultContext, map[string]string{setting.Config().Picture.DisableGravatar.DynKey(): "defer"}) pushCommits := NewPushCommits() pushCommits.Commits = []*PushCommit{ diff --git a/services/repository/contributors_graph_test.go b/services/repository/contributors_graph_test.go index f22c115276ee3..3a00db5af7cc7 100644 --- a/services/repository/contributors_graph_test.go +++ b/services/repository/contributors_graph_test.go @@ -9,6 +9,7 @@ import ( "code.gitea.io/gitea/models/db" repo_model "code.gitea.io/gitea/models/repo" + system_model "code.gitea.io/gitea/models/system" "code.gitea.io/gitea/models/unittest" "code.gitea.io/gitea/modules/cache" "code.gitea.io/gitea/modules/setting" @@ -18,6 +19,8 @@ import ( func TestRepository_ContributorsGraph(t *testing.T) { assert.NoError(t, unittest.PrepareTestDatabase()) + system_model.SetSettings(db.DefaultContext, map[string]string{setting.Config().Picture.DisableGravatar.DynKey(): "defer"}) + repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2}) assert.NoError(t, repo.LoadOwner(db.DefaultContext)) mockCache, err := cache.NewStringCache(setting.Cache{}) diff --git a/tests/e2e/e2e_test.go b/tests/e2e/e2e_test.go index d6d27e66be188..fcba9207d6595 100644 --- a/tests/e2e/e2e_test.go +++ b/tests/e2e/e2e_test.go @@ -17,15 +17,20 @@ import ( "path/filepath" "testing" + "code.gitea.io/gitea/models/db" "code.gitea.io/gitea/models/unittest" + user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/graceful" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/modules/storage" "code.gitea.io/gitea/modules/testlogger" "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/modules/web" "code.gitea.io/gitea/routers" "code.gitea.io/gitea/tests" + + "github.com/stretchr/testify/assert" ) var testE2eWebRoutes *web.Router @@ -99,6 +104,22 @@ func TestE2e(t *testing.T) { t.Run(testname, func(t *testing.T) { // Default 2 minute timeout onGiteaRun(t, func(*testing.T, *url.URL) { + err := db.Iterate(context.Background(), nil, func(ctx context.Context, user *user_model.User) error { + if user.Avatar == "" { + return nil + } + avatar, err := os.Open(filepath.Join(filepath.Dir(setting.AppPath), "tests/integration/avatar.png")) + if err != nil { + return err + } + defer avatar.Close() + + _, err = storage.Avatars.Save(user.Avatar, avatar, -1) + return err + }) + + assert.NoError(t, err) + cmd := exec.Command(runArgs[0], runArgs...) cmd.Env = os.Environ() cmd.Env = append(cmd.Env, fmt.Sprintf("GITEA_URL=%s", setting.AppURL)) @@ -107,7 +128,7 @@ func TestE2e(t *testing.T) { cmd.Stdout = &stdout cmd.Stderr = &stderr - err := cmd.Run() + err = cmd.Run() if err != nil { // Currently colored output is conflicting. Using Printf until that is resolved. fmt.Printf("%v", stdout.String()) From b05e55c2abe3685e90e410e75ae72f4d50be7931 Mon Sep 17 00:00:00 2001 From: Rowan Bohde Date: Wed, 20 Nov 2024 13:23:08 -0600 Subject: [PATCH 2/4] incorporate review feedback --- models/fixtures/user.yml | 84 +++++++++---------- modules/repository/commits_test.go | 9 +- .../repository/contributors_graph_test.go | 4 +- tests/e2e/e2e_test.go | 21 ----- 4 files changed, 44 insertions(+), 74 deletions(-) diff --git a/models/fixtures/user.yml b/models/fixtures/user.yml index 1044e487f8146..7b307dfd8584d 100644 --- a/models/fixtures/user.yml +++ b/models/fixtures/user.yml @@ -23,7 +23,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar1 + avatar: "" avatar_email: user1@example.com use_custom_avatar: false num_followers: 0 @@ -60,7 +60,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar2 + avatar: "" avatar_email: user2@example.com use_custom_avatar: false num_followers: 2 @@ -97,7 +97,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar3 + avatar: "" avatar_email: org3@example.com use_custom_avatar: false num_followers: 0 @@ -134,7 +134,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar4 + avatar: "" avatar_email: user4@example.com use_custom_avatar: false num_followers: 0 @@ -171,7 +171,7 @@ allow_import_local: false allow_create_organization: false prohibit_login: false - avatar: avatar5 + avatar: "" avatar_email: user5@example.com use_custom_avatar: false num_followers: 0 @@ -208,7 +208,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar6 + avatar: "" avatar_email: org6@example.com use_custom_avatar: false num_followers: 0 @@ -245,7 +245,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar7 + avatar: "" avatar_email: org7@example.com use_custom_avatar: false num_followers: 0 @@ -282,7 +282,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar8 + avatar: "" avatar_email: user8@example.com use_custom_avatar: false num_followers: 1 @@ -319,7 +319,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar9 + avatar: "" avatar_email: user9@example.com use_custom_avatar: false num_followers: 0 @@ -356,7 +356,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar10 + avatar: "" avatar_email: user10@example.com use_custom_avatar: false num_followers: 0 @@ -393,7 +393,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar11 + avatar: "" avatar_email: user11@example.com use_custom_avatar: false num_followers: 0 @@ -430,7 +430,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar12 + avatar: "" avatar_email: user12@example.com use_custom_avatar: false num_followers: 0 @@ -467,7 +467,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar13 + avatar: "" avatar_email: user13@example.com use_custom_avatar: false num_followers: 0 @@ -504,7 +504,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar14 + avatar: "" avatar_email: user13@example.com use_custom_avatar: false num_followers: 0 @@ -541,7 +541,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar15 + avatar: "" avatar_email: user15@example.com use_custom_avatar: false num_followers: 0 @@ -578,7 +578,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar16 + avatar: "" avatar_email: user16@example.com use_custom_avatar: false num_followers: 0 @@ -615,7 +615,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar17 + avatar: "" avatar_email: org17@example.com use_custom_avatar: false num_followers: 0 @@ -652,7 +652,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar18 + avatar: "" avatar_email: user18@example.com use_custom_avatar: false num_followers: 0 @@ -689,7 +689,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar19 + avatar: "" avatar_email: org19@example.com use_custom_avatar: false num_followers: 0 @@ -726,7 +726,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar20 + avatar: "" avatar_email: user20@example.com use_custom_avatar: false num_followers: 0 @@ -763,7 +763,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar21 + avatar: "" avatar_email: user21@example.com use_custom_avatar: false num_followers: 0 @@ -800,7 +800,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar22 + avatar: "" avatar_email: limited_org@example.com use_custom_avatar: false num_followers: 0 @@ -837,7 +837,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar23 + avatar: "" avatar_email: privated_org@example.com use_custom_avatar: false num_followers: 0 @@ -874,7 +874,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar24 + avatar: "" avatar_email: user24@example.com use_custom_avatar: false num_followers: 0 @@ -911,7 +911,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar25 + avatar: "" avatar_email: org25@example.com use_custom_avatar: false num_followers: 0 @@ -948,7 +948,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar26 + avatar: "" avatar_email: org26@example.com use_custom_avatar: false num_followers: 0 @@ -985,7 +985,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar27 + avatar: "" avatar_email: user27@example.com use_custom_avatar: false num_followers: 0 @@ -1022,7 +1022,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar28 + avatar: "" avatar_email: user28@example.com use_custom_avatar: false num_followers: 0 @@ -1059,7 +1059,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar29 + avatar: "" avatar_email: user29@example.com use_custom_avatar: false num_followers: 0 @@ -1096,7 +1096,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar29 + avatar: "" avatar_email: user30@example.com use_custom_avatar: false num_followers: 0 @@ -1133,7 +1133,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar31 + avatar: "" avatar_email: user31@example.com use_custom_avatar: false num_followers: 0 @@ -1170,7 +1170,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar32 + avatar: "" avatar_email: user30@example.com use_custom_avatar: false num_followers: 0 @@ -1207,7 +1207,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar33 + avatar: "" avatar_email: user33@example.com use_custom_avatar: false num_followers: 1 @@ -1245,7 +1245,7 @@ allow_import_local: false allow_create_organization: false prohibit_login: false - avatar: avatar34 + avatar: "" avatar_email: user34@example.com use_custom_avatar: true num_followers: 0 @@ -1282,7 +1282,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar35 + avatar: "" avatar_email: private_org35@example.com use_custom_avatar: false num_followers: 0 @@ -1319,7 +1319,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar22 + avatar: "" avatar_email: abcde@gitea.com use_custom_avatar: false num_followers: 0 @@ -1356,7 +1356,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: true - avatar: avatar29 + avatar: "" avatar_email: user37@example.com use_custom_avatar: false num_followers: 0 @@ -1393,7 +1393,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar38 + avatar: "" avatar_email: user38@example.com use_custom_avatar: false num_followers: 0 @@ -1430,7 +1430,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar39 + avatar: "" avatar_email: user39@example.com use_custom_avatar: false num_followers: 0 @@ -1467,7 +1467,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar40 + avatar: "" avatar_email: user40@example.com use_custom_avatar: false num_followers: 0 @@ -1504,7 +1504,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar41 + avatar: "" avatar_email: org41@example.com use_custom_avatar: false num_followers: 0 @@ -1541,7 +1541,7 @@ allow_import_local: false allow_create_organization: true prohibit_login: false - avatar: avatar42 + avatar: "" avatar_email: org42@example.com use_custom_avatar: false num_followers: 0 diff --git a/modules/repository/commits_test.go b/modules/repository/commits_test.go index 2b2add69683e6..51a4229cf6240 100644 --- a/modules/repository/commits_test.go +++ b/modules/repository/commits_test.go @@ -4,15 +4,12 @@ package repository import ( - "crypto/md5" - "fmt" "strconv" "testing" "time" "code.gitea.io/gitea/models/db" repo_model "code.gitea.io/gitea/models/repo" - system_model "code.gitea.io/gitea/models/system" "code.gitea.io/gitea/models/unittest" "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/setting" @@ -105,7 +102,6 @@ func TestPushCommits_ToAPIPayloadCommits(t *testing.T) { func TestPushCommits_AvatarLink(t *testing.T) { assert.NoError(t, unittest.PrepareTestDatabase()) - system_model.SetSettings(db.DefaultContext, map[string]string{setting.Config().Picture.DisableGravatar.DynKey(): "defer"}) pushCommits := NewPushCommits() pushCommits.Commits = []*PushCommit{ @@ -127,15 +123,12 @@ func TestPushCommits_AvatarLink(t *testing.T) { }, } - setting.GravatarSource = "https://secure.gravatar.com/avatar" - setting.OfflineMode = true - assert.Equal(t, "/avatars/avatar2?size="+strconv.Itoa(28*setting.Avatar.RenderedSizeFactor), pushCommits.AvatarLink(db.DefaultContext, "user2@example.com")) assert.Equal(t, - fmt.Sprintf("https://secure.gravatar.com/avatar/%x?d=identicon&s=%d", md5.Sum([]byte("nonexistent@example.com")), 28*setting.Avatar.RenderedSizeFactor), + "/assets/img/avatar_default.png", pushCommits.AvatarLink(db.DefaultContext, "nonexistent@example.com")) } diff --git a/services/repository/contributors_graph_test.go b/services/repository/contributors_graph_test.go index 3a00db5af7cc7..6db93f6a64d38 100644 --- a/services/repository/contributors_graph_test.go +++ b/services/repository/contributors_graph_test.go @@ -9,7 +9,6 @@ import ( "code.gitea.io/gitea/models/db" repo_model "code.gitea.io/gitea/models/repo" - system_model "code.gitea.io/gitea/models/system" "code.gitea.io/gitea/models/unittest" "code.gitea.io/gitea/modules/cache" "code.gitea.io/gitea/modules/setting" @@ -19,7 +18,6 @@ import ( func TestRepository_ContributorsGraph(t *testing.T) { assert.NoError(t, unittest.PrepareTestDatabase()) - system_model.SetSettings(db.DefaultContext, map[string]string{setting.Config().Picture.DisableGravatar.DynKey(): "defer"}) repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2}) assert.NoError(t, repo.LoadOwner(db.DefaultContext)) @@ -49,7 +47,7 @@ func TestRepository_ContributorsGraph(t *testing.T) { assert.EqualValues(t, &ContributorData{ Name: "Ethan Koenig", - AvatarLink: "https://secure.gravatar.com/avatar/b42fb195faa8c61b8d88abfefe30e9e3?d=identicon", + AvatarLink: "/assets/img/avatar_default.png", TotalCommits: 1, Weeks: map[int64]*WeekData{ 1511654400000: { diff --git a/tests/e2e/e2e_test.go b/tests/e2e/e2e_test.go index fcba9207d6595..78e42777bb2cb 100644 --- a/tests/e2e/e2e_test.go +++ b/tests/e2e/e2e_test.go @@ -17,20 +17,15 @@ import ( "path/filepath" "testing" - "code.gitea.io/gitea/models/db" "code.gitea.io/gitea/models/unittest" - user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/graceful" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" - "code.gitea.io/gitea/modules/storage" "code.gitea.io/gitea/modules/testlogger" "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/modules/web" "code.gitea.io/gitea/routers" "code.gitea.io/gitea/tests" - - "github.com/stretchr/testify/assert" ) var testE2eWebRoutes *web.Router @@ -104,22 +99,6 @@ func TestE2e(t *testing.T) { t.Run(testname, func(t *testing.T) { // Default 2 minute timeout onGiteaRun(t, func(*testing.T, *url.URL) { - err := db.Iterate(context.Background(), nil, func(ctx context.Context, user *user_model.User) error { - if user.Avatar == "" { - return nil - } - avatar, err := os.Open(filepath.Join(filepath.Dir(setting.AppPath), "tests/integration/avatar.png")) - if err != nil { - return err - } - defer avatar.Close() - - _, err = storage.Avatars.Save(user.Avatar, avatar, -1) - return err - }) - - assert.NoError(t, err) - cmd := exec.Command(runArgs[0], runArgs...) cmd.Env = os.Environ() cmd.Env = append(cmd.Env, fmt.Sprintf("GITEA_URL=%s", setting.AppURL)) From 3f1a5b5db93d76542006f5808ecced38897484ff Mon Sep 17 00:00:00 2001 From: Rowan Bohde Date: Wed, 20 Nov 2024 14:02:18 -0600 Subject: [PATCH 3/4] fix missed failing test --- modules/repository/commits_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/repository/commits_test.go b/modules/repository/commits_test.go index 51a4229cf6240..3afc116e6827c 100644 --- a/modules/repository/commits_test.go +++ b/modules/repository/commits_test.go @@ -124,7 +124,7 @@ func TestPushCommits_AvatarLink(t *testing.T) { } assert.Equal(t, - "/avatars/avatar2?size="+strconv.Itoa(28*setting.Avatar.RenderedSizeFactor), + "/avatars/ab53a2911ddf9b4817ac01ddcd3d975f?size="+strconv.Itoa(28*setting.Avatar.RenderedSizeFactor), pushCommits.AvatarLink(db.DefaultContext, "user2@example.com")) assert.Equal(t, From bef5f300a4f62b86d89ad3c0a049c564209635cf Mon Sep 17 00:00:00 2001 From: Rowan Bohde Date: Wed, 20 Nov 2024 15:05:37 -0600 Subject: [PATCH 4/4] fix: don't generate avatars for most accounts --- models/fixtures/user.yml | 81 ++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 40 deletions(-) diff --git a/models/fixtures/user.yml b/models/fixtures/user.yml index 7b307dfd8584d..d7316e9b388c5 100644 --- a/models/fixtures/user.yml +++ b/models/fixtures/user.yml @@ -25,7 +25,7 @@ prohibit_login: false avatar: "" avatar_email: user1@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -62,6 +62,7 @@ prohibit_login: false avatar: "" avatar_email: user2@example.com + # cause a random avatar to be generated when referenced for test purposes use_custom_avatar: false num_followers: 2 num_following: 1 @@ -99,7 +100,7 @@ prohibit_login: false avatar: "" avatar_email: org3@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -136,7 +137,7 @@ prohibit_login: false avatar: "" avatar_email: user4@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 1 num_stars: 0 @@ -173,7 +174,7 @@ prohibit_login: false avatar: "" avatar_email: user5@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -210,7 +211,7 @@ prohibit_login: false avatar: "" avatar_email: org6@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -247,7 +248,7 @@ prohibit_login: false avatar: "" avatar_email: org7@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -284,7 +285,7 @@ prohibit_login: false avatar: "" avatar_email: user8@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 1 num_following: 1 num_stars: 0 @@ -321,7 +322,7 @@ prohibit_login: false avatar: "" avatar_email: user9@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -358,7 +359,7 @@ prohibit_login: false avatar: "" avatar_email: user10@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 2 @@ -395,7 +396,7 @@ prohibit_login: false avatar: "" avatar_email: user11@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -432,7 +433,7 @@ prohibit_login: false avatar: "" avatar_email: user12@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -469,7 +470,7 @@ prohibit_login: false avatar: "" avatar_email: user13@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -506,7 +507,7 @@ prohibit_login: false avatar: "" avatar_email: user13@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -543,7 +544,7 @@ prohibit_login: false avatar: "" avatar_email: user15@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -580,7 +581,7 @@ prohibit_login: false avatar: "" avatar_email: user16@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -617,7 +618,7 @@ prohibit_login: false avatar: "" avatar_email: org17@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -654,7 +655,7 @@ prohibit_login: false avatar: "" avatar_email: user18@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -691,7 +692,7 @@ prohibit_login: false avatar: "" avatar_email: org19@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -728,7 +729,7 @@ prohibit_login: false avatar: "" avatar_email: user20@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -765,7 +766,7 @@ prohibit_login: false avatar: "" avatar_email: user21@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -802,7 +803,7 @@ prohibit_login: false avatar: "" avatar_email: limited_org@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -839,7 +840,7 @@ prohibit_login: false avatar: "" avatar_email: privated_org@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -876,7 +877,7 @@ prohibit_login: false avatar: "" avatar_email: user24@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -913,7 +914,7 @@ prohibit_login: false avatar: "" avatar_email: org25@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -950,7 +951,7 @@ prohibit_login: false avatar: "" avatar_email: org26@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -987,7 +988,7 @@ prohibit_login: false avatar: "" avatar_email: user27@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -1024,7 +1025,7 @@ prohibit_login: false avatar: "" avatar_email: user28@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -1061,7 +1062,7 @@ prohibit_login: false avatar: "" avatar_email: user29@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -1098,7 +1099,7 @@ prohibit_login: false avatar: "" avatar_email: user30@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -1135,7 +1136,7 @@ prohibit_login: false avatar: "" avatar_email: user31@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 1 num_stars: 0 @@ -1172,7 +1173,7 @@ prohibit_login: false avatar: "" avatar_email: user30@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -1209,7 +1210,7 @@ prohibit_login: false avatar: "" avatar_email: user33@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 1 num_following: 0 num_stars: 0 @@ -1284,7 +1285,7 @@ prohibit_login: false avatar: "" avatar_email: private_org35@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -1321,7 +1322,7 @@ prohibit_login: false avatar: "" avatar_email: abcde@gitea.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -1358,7 +1359,7 @@ prohibit_login: true avatar: "" avatar_email: user37@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -1395,7 +1396,7 @@ prohibit_login: false avatar: "" avatar_email: user38@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -1432,7 +1433,7 @@ prohibit_login: false avatar: "" avatar_email: user39@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -1469,7 +1470,7 @@ prohibit_login: false avatar: "" avatar_email: user40@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -1506,7 +1507,7 @@ prohibit_login: false avatar: "" avatar_email: org41@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0 @@ -1543,7 +1544,7 @@ prohibit_login: false avatar: "" avatar_email: org42@example.com - use_custom_avatar: false + use_custom_avatar: true num_followers: 0 num_following: 0 num_stars: 0