diff --git a/models/user/user.go b/models/user/user.go index 7074cdba6d..c70fe258e4 100644 --- a/models/user/user.go +++ b/models/user/user.go @@ -799,7 +799,8 @@ func createUser(ctx context.Context, u *User, meta *Meta, createdByAdmin bool, o } if err := db.Insert(ctx, &NotificationSettings{ - UserID: u.ID, + UserID: u.ID, + Actions: NotificationGiteaActionsFailureOnly, }); err != nil { return err } diff --git a/models/user/user_notification_test.go b/models/user/user_notification_test.go index 2dbd0a01b3..b81119287e 100644 --- a/models/user/user_notification_test.go +++ b/models/user/user_notification_test.go @@ -17,6 +17,8 @@ func TestUserNotificationSettings(t *testing.T) { settings, err := GetUserNotificationSettings(db.DefaultContext, 1) assert.NoError(t, err) + assert.NotNil(t, settings.User) + assert.Equal(t, settings.User.ID, settings.UserID) assert.Equal(t, NotificationGiteaActionsFailureOnly, settings.Actions) assert.NoError(t, UpdateUserNotificationSettings(db.DefaultContext, &NotificationSettings{ @@ -25,6 +27,8 @@ func TestUserNotificationSettings(t *testing.T) { })) settings, err = GetUserNotificationSettings(db.DefaultContext, 1) assert.NoError(t, err) + assert.NotNil(t, settings.User) + assert.Equal(t, settings.User.ID, settings.UserID) assert.Equal(t, NotificationGiteaActionsAll, settings.Actions) assert.NoError(t, UpdateUserNotificationSettings(db.DefaultContext, &NotificationSettings{ @@ -33,5 +37,7 @@ func TestUserNotificationSettings(t *testing.T) { })) settings, err = GetUserNotificationSettings(db.DefaultContext, 1) assert.NoError(t, err) + assert.NotNil(t, settings.User) + assert.Equal(t, settings.User.ID, settings.UserID) assert.Equal(t, NotificationGiteaActionsDisabled, settings.Actions) } diff --git a/routers/web/user/setting/notifications.go b/routers/web/user/setting/notifications.go index 27fbebf721..3f42b2d414 100644 --- a/routers/web/user/setting/notifications.go +++ b/routers/web/user/setting/notifications.go @@ -7,6 +7,7 @@ import ( "errors" "net/http" + "code.gitea.io/gitea/models/unit" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/optional" @@ -70,7 +71,7 @@ func NotificationsEmailPost(ctx *context.Context) { // NotificationsActionsEmailPost set user's email notification preference on Gitea Actions func NotificationsActionsEmailPost(ctx *context.Context) { - if !ctx.GetContextValue("EnableActions").(bool) { + if !setting.Actions.Enabled || unit.TypeActions.UnitGlobalDisabled() { ctx.NotFound(nil) return } @@ -86,7 +87,7 @@ func NotificationsActionsEmailPost(ctx *context.Context) { opts := &user.UpdateNotificationSettingsOptions{ Actions: optional.Some(preference), } - if err := user.UpdateNotificationSettings(ctx, new(user_model.NotificationSettings), opts); err != nil { + if err := user.UpdateNotificationSettings(ctx, ctx.Doer.ID, opts); err != nil { log.Error("Cannot set actions email notifications preference: %v", err) ctx.ServerError("UpdateNotificationSettings", err) return diff --git a/services/mailer/mail_workflow_run.go b/services/mailer/mail_workflow_run.go index 0350498fa9..c91292841a 100644 --- a/services/mailer/mail_workflow_run.go +++ b/services/mailer/mail_workflow_run.go @@ -160,11 +160,10 @@ func SendActionsWorkflowRunStatusEmail(ctx context.Context, sender *user_model.U } sendActionsWorkflowRunStatusEmail(ctx, repo, run, sender, recipients) return - } else if notifyPref.Actions != user_model.EmailNotificationsDisabled { + } else if notifyPref.Actions != user_model.NotificationGiteaActionsDisabled { recipients = append(recipients, sender) } } - // TODO: Any other recipient? sendActionsWorkflowRunStatusEmail(ctx, repo, run, sender, recipients) } diff --git a/services/user/update.go b/services/user/update.go index 2aef5c1daa..4fcebbc44c 100644 --- a/services/user/update.go +++ b/services/user/update.go @@ -249,7 +249,10 @@ type UpdateNotificationSettingsOptions struct { Actions optional.Option[string] } -func UpdateNotificationSettings(ctx context.Context, settings *user_model.NotificationSettings, opts *UpdateNotificationSettingsOptions) error { +func UpdateNotificationSettings(ctx context.Context, userID int64, opts *UpdateNotificationSettingsOptions) error { + settings := &user_model.NotificationSettings{ + UserID: userID, + } if opts.Actions.Has() { settings.Actions = opts.Actions.Value() } diff --git a/services/user/update_test.go b/services/user/update_test.go index e8a7ad8c04..e7fca20920 100644 --- a/services/user/update_test.go +++ b/services/user/update_test.go @@ -130,17 +130,22 @@ func TestUpdateNotificationSettings(t *testing.T) { exists, err := db.GetEngine(db.DefaultContext).Get(settings) assert.NoError(t, err) assert.True(t, exists) - settingsCopy := *settings - assert.NoError(t, UpdateNotificationSettings(db.DefaultContext, settings, &UpdateNotificationSettingsOptions{ + assert.NoError(t, UpdateNotificationSettings(db.DefaultContext, settings.UserID, &UpdateNotificationSettingsOptions{ Actions: optional.Some(user_model.NotificationGiteaActionsAll), })) + settings, err = user_model.GetUserNotificationSettings(db.DefaultContext, settings.UserID) + assert.NoError(t, err) + assert.NotNil(t, settings) assert.Equal(t, user_model.NotificationGiteaActionsAll, settings.Actions) - assert.NotEqual(t, settingsCopy.Actions, settings.Actions) + assert.NotEqual(t, user_model.NotificationGiteaActionsFailureOnly, settings.Actions) - assert.NoError(t, UpdateNotificationSettings(db.DefaultContext, settings, &UpdateNotificationSettingsOptions{ + assert.NoError(t, UpdateNotificationSettings(db.DefaultContext, settings.UserID, &UpdateNotificationSettingsOptions{ Actions: optional.Some(user_model.NotificationGiteaActionsDisabled), })) + settings, err = user_model.GetUserNotificationSettings(db.DefaultContext, settings.UserID) + assert.NoError(t, err) + assert.NotNil(t, settings) assert.Equal(t, user_model.NotificationGiteaActionsDisabled, settings.Actions) - assert.NotEqual(t, settingsCopy.Actions, settings.Actions) + assert.NotEqual(t, user_model.NotificationGiteaActionsFailureOnly, settings.Actions) } diff --git a/templates/user/settings/notifications.tmpl b/templates/user/settings/notifications.tmpl index db00fe59a4..117149380b 100644 --- a/templates/user/settings/notifications.tmpl +++ b/templates/user/settings/notifications.tmpl @@ -46,8 +46,8 @@ {{svg "octicon-triangle-down" 14 "dropdown icon"}}