Add various deleted flags to entities | Add active to subscriptions | Add DeleteUser && DeleteChannel endpoints [skip-tests]
All checks were successful
Build Docker and Deploy / Run Unit-Tests (push) Has been skipped
Build Docker and Deploy / Build Docker Container (push) Successful in 43s
Build Docker and Deploy / Deploy to Server (push) Successful in 16s

This commit is contained in:
2025-04-13 16:12:15 +02:00
parent aac34ef738
commit 8c0f0e3e8f
47 changed files with 2453 additions and 243 deletions

View File

@@ -1,15 +1,16 @@
package test
import (
"blackforestbytes.com/simplecloudnotifier/api/apierr"
"blackforestbytes.com/simplecloudnotifier/models"
tt "blackforestbytes.com/simplecloudnotifier/test/util"
"fmt"
"github.com/gin-gonic/gin"
"gogs.mikescher.com/BlackForestBytes/goext/langext"
"net/url"
"testing"
"time"
"blackforestbytes.com/simplecloudnotifier/api/apierr"
"blackforestbytes.com/simplecloudnotifier/models"
tt "blackforestbytes.com/simplecloudnotifier/test/util"
"github.com/gin-gonic/gin"
"gogs.mikescher.com/BlackForestBytes/goext/langext"
)
func TestSearchMessageFTSSimple(t *testing.T) {
@@ -901,3 +902,293 @@ func TestListMessagesStringSearch(t *testing.T) {
tt.AssertEqual(t, "msgList.filter["+testdata.Name+"].len", testdata.Count, msgList.TotalCount)
}
}
func TestDeactivatedSubscriptionListMessages(t *testing.T) {
ws, baseUrl, stop := tt.StartSimpleWebserver(t)
defer stop()
data := tt.InitDefaultData(t, ws)
type subobj struct {
ChannelId string `json:"channel_id"`
ChannelInternalName string `json:"channel_internal_name"`
ChannelOwnerUserId string `json:"channel_owner_user_id"`
Confirmed bool `json:"confirmed"`
Active bool `json:"active"`
SubscriberUserId string `json:"subscriber_user_id"`
SubscriptionId string `json:"subscription_id"`
TimestampCreated string `json:"timestamp_created"`
}
type msg struct {
Title string `json:"title"`
}
type mglist struct {
Messages []msg `json:"messages"`
}
user14 := data.User[14] // Subscriber
user15 := data.User[15] // Owner
chanName := "chan_other_accepted"
subscriptionID, channelID := tt.FindSubscriptionByChanName(t, baseUrl, user14, user15.UID, chanName)
gsub0 := tt.RequestAuthGet[subobj](t, user15.AdminKey, baseUrl, fmt.Sprintf("/api/v2/users/%s/subscriptions/%s", user15.UID, subscriptionID))
tt.AssertTrue(t, "gsub1.active", gsub0.Active)
tt.AssertTrue(t, "gsub1.confirmed", gsub0.Confirmed)
tt.RequestAuthPatch[gin.H](t, user14.AdminKey, baseUrl, fmt.Sprintf("/api/v2/users/%s/subscriptions/%s", user14.UID, subscriptionID), gin.H{"active": false})
gsub1 := tt.RequestAuthGet[subobj](t, user15.AdminKey, baseUrl, fmt.Sprintf("/api/v2/users/%s/subscriptions/%s", user15.UID, subscriptionID))
tt.AssertFalse(t, "gsub1.active", gsub1.Active)
tt.AssertTrue(t, "gsub1.confirmed", gsub1.Confirmed)
gsub2 := tt.RequestAuthGet[subobj](t, user14.AdminKey, baseUrl, fmt.Sprintf("/api/v2/users/%s/subscriptions/%s", user14.UID, subscriptionID))
tt.AssertFalse(t, "gsub2.active", gsub2.Active)
tt.AssertTrue(t, "gsub2.confirmed", gsub2.Confirmed)
newMessageTitle := langext.RandBase62(48)
tt.RequestPost[gin.H](t, baseUrl, "/", gin.H{
"key": user15.AdminKey,
"user_id": user15.UID,
"channel": chanName,
"title": newMessageTitle,
})
// subscription.active == false && subscription.confirmed == true
{
msgListSub := tt.RequestAuthGet[mglist](t, user14.AdminKey, baseUrl, "/api/v2/messages")
foundActivatedMessageSub := false
for _, m := range msgListSub.Messages {
if m.Title == newMessageTitle {
foundActivatedMessageSub = true
break
}
}
tt.AssertFalse(t, "foundActivatedMessageSub", foundActivatedMessageSub)
msgListDirect := tt.RequestAuthGet[mglist](t, user14.AdminKey, baseUrl, fmt.Sprintf("/api/v2/users/%s/channels/%s/messages", user15.UID, channelID))
foundActivatedMessageDirect := false
for _, m := range msgListDirect.Messages {
if m.Title == newMessageTitle {
foundActivatedMessageDirect = true
break
}
}
tt.AssertTrue(t, "foundActivatedMessageDirect", foundActivatedMessageDirect)
}
tt.RequestAuthPatch[gin.H](t, user14.AdminKey, baseUrl, fmt.Sprintf("/api/v2/users/%s/subscriptions/%s", user14.UID, subscriptionID), gin.H{"active": true})
// subscription.active == true && subscription.confirmed == true
{
msgListSub := tt.RequestAuthGet[mglist](t, user14.AdminKey, baseUrl, "/api/v2/messages")
foundActivatedMessageSub := false
for _, m := range msgListSub.Messages {
if m.Title == newMessageTitle {
foundActivatedMessageSub = true
break
}
}
tt.AssertTrue(t, "foundActivatedMessageSub", foundActivatedMessageSub)
msgListDirect := tt.RequestAuthGet[mglist](t, user14.AdminKey, baseUrl, fmt.Sprintf("/api/v2/users/%s/channels/%s/messages", user15.UID, channelID))
foundActivatedMessageDirect := false
for _, m := range msgListDirect.Messages {
if m.Title == newMessageTitle {
foundActivatedMessageDirect = true
break
}
}
tt.AssertTrue(t, "foundActivatedMessageDirect", foundActivatedMessageDirect)
}
tt.RequestAuthPatch[gin.H](t, user15.AdminKey, baseUrl, fmt.Sprintf("/api/v2/users/%s/subscriptions/%s", user15.UID, subscriptionID), gin.H{"confirmed": false})
// subscription.active == true && subscription.confirmed == false
{
msgListSub := tt.RequestAuthGet[mglist](t, user14.AdminKey, baseUrl, "/api/v2/messages")
foundActivatedMessageSub := false
for _, m := range msgListSub.Messages {
if m.Title == newMessageTitle {
foundActivatedMessageSub = true
break
}
}
tt.AssertFalse(t, "foundActivatedMessageSub", foundActivatedMessageSub)
tt.RequestAuthGetShouldFail(t, user14.AdminKey, baseUrl, fmt.Sprintf("/api/v2/users/%s/channels/%s/messages", user15.UID, channelID), 401, apierr.USER_AUTH_FAILED)
}
tt.RequestAuthPatch[gin.H](t, user14.AdminKey, baseUrl, fmt.Sprintf("/api/v2/users/%s/subscriptions/%s", user14.UID, subscriptionID), gin.H{"active": false})
// subscription.active == false && subscription.confirmed == false
{
msgListSub := tt.RequestAuthGet[mglist](t, user14.AdminKey, baseUrl, "/api/v2/messages")
foundActivatedMessageSub := false
for _, m := range msgListSub.Messages {
if m.Title == newMessageTitle {
foundActivatedMessageSub = true
break
}
}
tt.AssertFalse(t, "foundActivatedMessageSub", foundActivatedMessageSub)
tt.RequestAuthGetShouldFail(t, user14.AdminKey, baseUrl, fmt.Sprintf("/api/v2/users/%s/channels/%s/messages", user15.UID, channelID), 401, apierr.USER_AUTH_FAILED)
}
tt.RequestAuthPatch[gin.H](t, user15.AdminKey, baseUrl, fmt.Sprintf("/api/v2/users/%s/subscriptions/%s", user15.UID, subscriptionID), gin.H{"confirmed": true})
tt.RequestAuthPatch[gin.H](t, user14.AdminKey, baseUrl, fmt.Sprintf("/api/v2/users/%s/subscriptions/%s", user14.UID, subscriptionID), gin.H{"active": true})
// subscription.active == true && subscription.confirmed == true
{
msgListSub := tt.RequestAuthGet[mglist](t, user14.AdminKey, baseUrl, "/api/v2/messages")
foundActivatedMessageSub := false
for _, m := range msgListSub.Messages {
if m.Title == newMessageTitle {
foundActivatedMessageSub = true
break
}
}
tt.AssertTrue(t, "foundActivatedMessageSub", foundActivatedMessageSub)
msgListDirect := tt.RequestAuthGet[mglist](t, user14.AdminKey, baseUrl, fmt.Sprintf("/api/v2/users/%s/channels/%s/messages", user15.UID, channelID))
foundActivatedMessageDirect := false
for _, m := range msgListDirect.Messages {
if m.Title == newMessageTitle {
foundActivatedMessageDirect = true
break
}
}
tt.AssertTrue(t, "foundActivatedMessageDirect", foundActivatedMessageDirect)
}
tt.RequestAuthDelete[gin.H](t, user14.AdminKey, baseUrl, fmt.Sprintf("/api/v2/users/%s/subscriptions/%s", user14.UID, subscriptionID), gin.H{})
// subscription -> deleted
{
msgListSub := tt.RequestAuthGet[mglist](t, user14.AdminKey, baseUrl, "/api/v2/messages")
foundActivatedMessageSub := false
for _, m := range msgListSub.Messages {
if m.Title == newMessageTitle {
foundActivatedMessageSub = true
break
}
}
tt.AssertFalse(t, "foundActivatedMessageSub", foundActivatedMessageSub)
tt.RequestAuthGetShouldFail(t, user14.AdminKey, baseUrl, fmt.Sprintf("/api/v2/users/%s/channels/%s/messages", user15.UID, channelID), 401, apierr.USER_AUTH_FAILED)
}
}
func TestActiveSubscriptionListMessages(t *testing.T) {
ws, baseUrl, stop := tt.StartSimpleWebserver(t)
defer stop()
data := tt.InitDefaultData(t, ws)
type subobj struct {
ChannelId string `json:"channel_id"`
ChannelInternalName string `json:"channel_internal_name"`
ChannelOwnerUserId string `json:"channel_owner_user_id"`
Confirmed bool `json:"confirmed"`
Active bool `json:"active"`
SubscriberUserId string `json:"subscriber_user_id"`
SubscriptionId string `json:"subscription_id"`
TimestampCreated string `json:"timestamp_created"`
}
type msg struct {
Title string `json:"title"`
}
type mglist struct {
Messages []msg `json:"messages"`
}
user14 := data.User[14] // Subscriber
user15 := data.User[15] // Owner
chanName := "chan_other_accepted"
subscriptionID, _ := tt.FindSubscriptionByChanName(t, baseUrl, user14, user15.UID, chanName)
gsub1 := tt.RequestAuthGet[subobj](t, user15.AdminKey, baseUrl, fmt.Sprintf("/api/v2/users/%s/subscriptions/%s", user15.UID, subscriptionID))
tt.AssertTrue(t, "gsub1.active", gsub1.Active)
newMessageTitle := langext.RandBase62(48)
tt.RequestPost[gin.H](t, baseUrl, "/", gin.H{
"key": user15.AdminKey,
"user_id": user15.UID,
"channel": chanName,
"title": newMessageTitle,
})
{
msgListSub := tt.RequestAuthGet[mglist](t, user14.AdminKey, baseUrl, "/api/v2/messages")
foundActivatedMessageSub := false
for _, m := range msgListSub.Messages {
if m.Title == newMessageTitle {
foundActivatedMessageSub = true
break
}
}
tt.AssertTrue(t, "foundActivatedMessageSub", foundActivatedMessageSub)
}
}
func TestUnconfirmedSubscriptionListMessages(t *testing.T) {
ws, baseUrl, stop := tt.StartSimpleWebserver(t)
defer stop()
data := tt.InitDefaultData(t, ws)
type subobj struct {
ChannelId string `json:"channel_id"`
ChannelInternalName string `json:"channel_internal_name"`
ChannelOwnerUserId string `json:"channel_owner_user_id"`
Confirmed bool `json:"confirmed"`
Active bool `json:"active"`
SubscriberUserId string `json:"subscriber_user_id"`
SubscriptionId string `json:"subscription_id"`
TimestampCreated string `json:"timestamp_created"`
}
type msg struct {
Title string `json:"title"`
}
type mglist struct {
Messages []msg `json:"messages"`
}
user14 := data.User[14] // Subscriber
user15 := data.User[15] // Owner
chanName := "chan_other_request"
subscriptionID, _ := tt.FindSubscriptionByChanName(t, baseUrl, user14, user15.UID, chanName)
gsub1 := tt.RequestAuthGet[subobj](t, user15.AdminKey, baseUrl, fmt.Sprintf("/api/v2/users/%s/subscriptions/%s", user15.UID, subscriptionID))
tt.AssertTrue(t, "gsub1.active", gsub1.Active)
tt.AssertFalse(t, "gsub1.confirmed", gsub1.Confirmed)
newMessageTitle := langext.RandBase62(48)
tt.RequestPost[gin.H](t, baseUrl, "/", gin.H{
"key": user15.AdminKey,
"user_id": user15.UID,
"channel": chanName,
"title": newMessageTitle,
})
msgList := tt.RequestAuthGet[mglist](t, user14.AdminKey, baseUrl, "/api/v2/messages")
foundActivatedMessage := false
for _, m := range msgList.Messages {
if m.Title == newMessageTitle {
foundActivatedMessage = true
break
}
}
tt.AssertFalse(t, "foundActivatedMessage", foundActivatedMessage)
}