[feature] Implement Web Push notification policy (#3721)

* Web Push: add policy column to subscriptions

* Web Push: add policy to API

* Web Push: test notification policy

* go-fmt unrelated file (how did this get thru?)
This commit is contained in:
Vyr Cossont 2025-02-03 02:25:53 -08:00 committed by GitHub
commit 27844b7da2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
16 changed files with 340 additions and 35 deletions

View file

@ -44,6 +44,7 @@ func (suite *PushTestSuite) postSubscription(
p256dh *string,
alertsMention *bool,
alertsStatus *bool,
policy *string,
requestJson *string,
expectedHTTPStatus int,
) (*apimodel.WebPushSubscription, error) {
@ -80,6 +81,9 @@ func (suite *PushTestSuite) postSubscription(
if alertsStatus != nil {
ctx.Request.Form["data[alerts][status]"] = []string{strconv.FormatBool(*alertsStatus)}
}
if policy != nil {
ctx.Request.Form["data[policy]"] = []string{*policy}
}
}
// trigger the handler
@ -119,6 +123,7 @@ func (suite *PushTestSuite) TestPostSubscription() {
p256dh := "BMYVItYVOX+AHBdtA62Q0i6c+F7MV2Gia3aoDr8mvHkuPBNIOuTLDfmFcnBqoZcQk6BtLcIONbxhHpy2R+mYIUY="
alertsMention := true
alertsStatus := false
policy := "followed"
subscription, err := suite.postSubscription(
accountFixtureName,
tokenFixtureName,
@ -127,6 +132,7 @@ func (suite *PushTestSuite) TestPostSubscription() {
&p256dh,
&alertsMention,
&alertsStatus,
&policy,
nil,
200,
)
@ -138,6 +144,7 @@ func (suite *PushTestSuite) TestPostSubscription() {
suite.False(subscription.Alerts.Status)
// Omitted event types should default to off.
suite.False(subscription.Alerts.Favourite)
suite.Equal(apimodel.WebPushNotificationPolicyFollowed, subscription.Policy)
}
}
@ -159,6 +166,7 @@ func (suite *PushTestSuite) TestPostSubscriptionMinimal() {
nil,
nil,
nil,
nil,
200,
)
if suite.NoError(err) {
@ -169,6 +177,8 @@ func (suite *PushTestSuite) TestPostSubscriptionMinimal() {
suite.False(subscription.Alerts.Mention)
suite.False(subscription.Alerts.Status)
suite.False(subscription.Alerts.Favourite)
// Policy should default to all.
suite.Equal(apimodel.WebPushNotificationPolicyAll, subscription.Policy)
}
}
@ -192,6 +202,7 @@ func (suite *PushTestSuite) TestPostInvalidSubscription() {
&alertsMention,
&alertsStatus,
nil,
nil,
422,
)
suite.NoError(err)
@ -215,7 +226,8 @@ func (suite *PushTestSuite) TestPostSubscriptionJSON() {
"alerts": {
"mention": true,
"status": false
}
},
"policy": "followed"
}
}`
subscription, err := suite.postSubscription(
@ -226,6 +238,7 @@ func (suite *PushTestSuite) TestPostSubscriptionJSON() {
nil,
nil,
nil,
nil,
&requestJson,
200,
)
@ -237,6 +250,7 @@ func (suite *PushTestSuite) TestPostSubscriptionJSON() {
suite.False(subscription.Alerts.Status)
// Omitted event types should default to off.
suite.False(subscription.Alerts.Favourite)
suite.Equal(apimodel.WebPushNotificationPolicyFollowed, subscription.Policy)
}
}
@ -263,6 +277,7 @@ func (suite *PushTestSuite) TestPostSubscriptionJSONMinimal() {
nil,
nil,
nil,
nil,
&requestJson,
200,
)
@ -274,6 +289,8 @@ func (suite *PushTestSuite) TestPostSubscriptionJSONMinimal() {
suite.False(subscription.Alerts.Mention)
suite.False(subscription.Alerts.Status)
suite.False(subscription.Alerts.Favourite)
// Policy should default to all.
suite.Equal(apimodel.WebPushNotificationPolicyAll, subscription.Policy)
}
}
@ -306,6 +323,7 @@ func (suite *PushTestSuite) TestPostInvalidSubscriptionJSON() {
nil,
nil,
nil,
nil,
&requestJson,
422,
)
@ -323,6 +341,7 @@ func (suite *PushTestSuite) TestPostExistingSubscription() {
p256dh := "BMYVItYVOX+AHBdtA62Q0i6c+F7MV2Gia3aoDr8mvHkuPBNIOuTLDfmFcnBqoZcQk6BtLcIONbxhHpy2R+mYIUY="
alertsMention := true
alertsStatus := false
policy := "followed"
subscription, err := suite.postSubscription(
accountFixtureName,
tokenFixtureName,
@ -331,6 +350,7 @@ func (suite *PushTestSuite) TestPostExistingSubscription() {
&p256dh,
&alertsMention,
&alertsStatus,
&policy,
nil,
200,
)