2022-12-09 00:13:10 +01:00
package test
2022-12-14 18:27:22 +01:00
import (
2025-04-13 16:12:15 +02:00
"fmt"
"strings"
"testing"
2022-12-14 18:27:22 +01:00
"blackforestbytes.com/simplecloudnotifier/api/apierr"
tt "blackforestbytes.com/simplecloudnotifier/test/util"
"github.com/gin-gonic/gin"
"gogs.mikescher.com/BlackForestBytes/goext/langext"
)
func TestCreateChannel ( t * testing . T ) {
_ , baseUrl , stop := tt . StartSimpleWebserver ( t )
defer stop ( )
2023-01-27 10:04:06 +01:00
r0 := tt . RequestPost [ gin . H ] ( t , baseUrl , "/api/v2/users" , gin . H {
2022-12-14 18:27:22 +01:00
"agent_model" : "DUMMY_PHONE" ,
"agent_version" : "4X" ,
"client_type" : "ANDROID" ,
"fcm_token" : "DUMMY_FCM" ,
} )
2023-01-14 00:48:51 +01:00
uid := r0 [ "user_id" ] . ( string )
2022-12-14 18:27:22 +01:00
admintok := r0 [ "admin_key" ] . ( string )
type chanlist struct {
Channels [ ] gin . H ` json:"channels" `
}
{
2023-01-27 10:04:06 +01:00
clist := tt . RequestAuthGet [ chanlist ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , uid ) )
2022-12-22 11:22:36 +01:00
tt . AssertMappedSet ( t , "channels" , [ ] string { } , clist . Channels , "display_name" )
tt . AssertMappedSet ( t , "channels" , [ ] string { } , clist . Channels , "internal_name" )
2022-12-14 18:27:22 +01:00
}
2023-01-27 10:04:06 +01:00
tt . RequestAuthPost [ gin . H ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , uid ) , gin . H {
2022-12-14 18:27:22 +01:00
"name" : "test" ,
} )
{
2023-01-27 10:04:06 +01:00
clist := tt . RequestAuthGet [ chanlist ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , uid ) )
2022-12-14 18:27:22 +01:00
tt . AssertEqual ( t , "chan.len" , 1 , len ( clist . Channels ) )
2022-12-22 11:22:36 +01:00
tt . AssertMappedSet ( t , "channels" , [ ] string { "test" } , clist . Channels , "display_name" )
tt . AssertMappedSet ( t , "channels" , [ ] string { "test" } , clist . Channels , "internal_name" )
2022-12-14 18:27:22 +01:00
}
2023-01-27 10:04:06 +01:00
tt . RequestAuthPost [ gin . H ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , uid ) , gin . H {
2022-12-14 18:27:22 +01:00
"name" : "asdf" ,
} )
{
2023-01-27 10:04:06 +01:00
clist := tt . RequestAuthGet [ chanlist ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , uid ) )
2022-12-22 11:22:36 +01:00
tt . AssertMappedSet ( t , "channels" , [ ] string { "asdf" , "test" } , clist . Channels , "display_name" )
tt . AssertMappedSet ( t , "channels" , [ ] string { "asdf" , "test" } , clist . Channels , "internal_name" )
2022-12-14 18:27:22 +01:00
}
2024-02-24 12:20:41 +01:00
tt . RequestAuthPost [ gin . H ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , uid ) , gin . H {
"name" : "withdesc" ,
"description" : "desc" ,
} )
{
clist := tt . RequestAuthGet [ chanlist ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , uid ) )
tt . AssertEqual ( t , "chan.len" , 3 , len ( clist . Channels ) )
tt . AssertEqual ( t , "description_name" , "desc" , clist . Channels [ 2 ] [ "description_name" ] )
}
2022-12-14 18:27:22 +01:00
}
func TestCreateChannelNameTooLong ( t * testing . T ) {
_ , baseUrl , stop := tt . StartSimpleWebserver ( t )
defer stop ( )
2023-01-27 10:04:06 +01:00
r0 := tt . RequestPost [ gin . H ] ( t , baseUrl , "/api/v2/users" , gin . H {
2022-12-14 18:27:22 +01:00
"agent_model" : "DUMMY_PHONE" ,
"agent_version" : "4X" ,
"client_type" : "ANDROID" ,
"fcm_token" : "DUMMY_FCM" ,
} )
2023-01-14 00:48:51 +01:00
uid := r0 [ "user_id" ] . ( string )
2022-12-14 18:27:22 +01:00
admintok := r0 [ "admin_key" ] . ( string )
2023-01-27 10:04:06 +01:00
tt . RequestAuthPostShouldFail ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , uid ) , gin . H {
2022-12-14 18:27:22 +01:00
"name" : langext . StrRepeat ( "X" , 121 ) ,
} , 400 , apierr . CHANNEL_TOO_LONG )
}
func TestChannelNameNormalization ( t * testing . T ) {
_ , baseUrl , stop := tt . StartSimpleWebserver ( t )
defer stop ( )
2023-01-27 10:04:06 +01:00
r0 := tt . RequestPost [ gin . H ] ( t , baseUrl , "/api/v2/users" , gin . H {
2022-12-14 18:27:22 +01:00
"agent_model" : "DUMMY_PHONE" ,
"agent_version" : "4X" ,
"client_type" : "ANDROID" ,
"fcm_token" : "DUMMY_FCM" ,
} )
2023-01-14 00:48:51 +01:00
uid := r0 [ "user_id" ] . ( string )
2022-12-14 18:27:22 +01:00
admintok := r0 [ "admin_key" ] . ( string )
type chanlist struct {
Channels [ ] gin . H ` json:"channels" `
}
{
2023-01-27 10:04:06 +01:00
clist := tt . RequestAuthGet [ chanlist ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , uid ) )
2022-12-22 11:22:36 +01:00
tt . AssertMappedSet ( t , "channels" , [ ] string { } , clist . Channels , "display_name" )
tt . AssertMappedSet ( t , "channels" , [ ] string { } , clist . Channels , "internal_name" )
2022-12-14 18:27:22 +01:00
}
2023-01-27 10:04:06 +01:00
tt . RequestAuthPost [ gin . H ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , uid ) , gin . H {
2023-05-28 13:14:05 +02:00
"name" : "TeST-99" ,
2022-12-14 18:27:22 +01:00
} )
{
2023-01-27 10:04:06 +01:00
clist := tt . RequestAuthGet [ chanlist ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , uid ) )
2023-05-28 13:14:05 +02:00
tt . AssertMappedSet ( t , "channels" , [ ] string { "TeST-99" } , clist . Channels , "display_name" )
tt . AssertMappedSet ( t , "channels" , [ ] string { "TeST-99" } , clist . Channels , "internal_name" )
2022-12-14 18:27:22 +01:00
}
2023-01-27 10:04:06 +01:00
tt . RequestAuthPostShouldFail ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , uid ) , gin . H {
2023-05-28 13:14:05 +02:00
"name" : "TeST-99" ,
2022-12-14 18:27:22 +01:00
} , 409 , apierr . CHANNEL_ALREADY_EXISTS )
{
2023-01-27 10:04:06 +01:00
clist := tt . RequestAuthGet [ chanlist ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , uid ) )
2023-05-28 13:14:05 +02:00
tt . AssertMappedSet ( t , "channels" , [ ] string { "TeST-99" } , clist . Channels , "display_name" )
tt . AssertMappedSet ( t , "channels" , [ ] string { "TeST-99" } , clist . Channels , "internal_name" )
2022-12-14 18:27:22 +01:00
}
2022-12-22 11:22:36 +01:00
2023-01-27 10:04:06 +01:00
tt . RequestAuthPost [ gin . H ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , uid ) , gin . H {
2022-12-22 11:22:36 +01:00
"name" : " WeiRD_[\uF5FF]\\stUFf\r\n\t " ,
} )
{
2023-01-27 10:04:06 +01:00
clist := tt . RequestAuthGet [ chanlist ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , uid ) )
2023-05-28 13:14:05 +02:00
tt . AssertMappedSet ( t , "channels" , [ ] string { "TeST-99" , "WeiRD_[\uF5FF]\\stUFf" } , clist . Channels , "display_name" )
tt . AssertMappedSet ( t , "channels" , [ ] string { "TeST-99" , "WeiRD_[\uF5FF]\\stUFf" } , clist . Channels , "internal_name" )
2022-12-22 11:22:36 +01:00
}
2022-12-14 18:27:22 +01:00
}
2022-12-22 17:29:59 +01:00
func TestListChannelsDefault ( t * testing . T ) {
2022-12-21 18:14:13 +01:00
ws , baseUrl , stop := tt . StartSimpleWebserver ( t )
defer stop ( )
data := tt . InitDefaultData ( t , ws )
type chanlist struct {
Channels [ ] gin . H ` json:"channels" `
}
testdata := map [ int ] [ ] string {
2023-05-28 13:14:05 +02:00
0 : { "main" , "Chatting Chamber" , "Unicôdé Häll \U0001f92a" , "Promotions" , "Reminders" } ,
2022-12-22 11:22:36 +01:00
1 : { "main" , "private" } ,
2023-05-28 13:14:05 +02:00
2 : { "main" , "Ü" , "Ö" , "Ä" } ,
3 : { "main" , "\U0001f5ff" , "Innovations" , "Reminders" } ,
2022-12-22 11:22:36 +01:00
4 : { "main" } ,
2023-05-28 13:14:05 +02:00
5 : { "main" , "Test1" , "Test2" , "Test3" , "Test4" , "Test5" } ,
6 : { "main" , "Security" , "Lipsum" } ,
2022-12-22 11:22:36 +01:00
7 : { "main" } ,
8 : { "main" } ,
9 : { "main" , "manual@chan" } ,
10 : { "main" } ,
2023-05-28 13:14:05 +02:00
11 : { "Promotions" } ,
2022-12-21 18:14:13 +01:00
12 : { } ,
13 : { } ,
2022-12-22 17:29:59 +01:00
14 : { "main" , "chan_self_subscribed" , "chan_self_unsub" } ,
15 : { "main" , "chan_other_nosub" , "chan_other_request" , "chan_other_accepted" } ,
2022-12-21 18:14:13 +01:00
}
for k , v := range testdata {
2023-01-27 10:04:06 +01:00
r0 := tt . RequestAuthGet [ chanlist ] ( t , data . User [ k ] . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , data . User [ k ] . UID ) )
2022-12-22 11:22:36 +01:00
tt . AssertMappedSet ( t , fmt . Sprintf ( "%d->chanlist" , k ) , v , r0 . Channels , "internal_name" )
2022-12-21 18:14:13 +01:00
}
2022-12-14 18:38:30 +01:00
}
2022-12-22 17:29:59 +01:00
func TestListChannelsOwned ( t * testing . T ) {
ws , baseUrl , stop := tt . StartSimpleWebserver ( t )
defer stop ( )
data := tt . InitDefaultData ( t , ws )
type chanlist struct {
Channels [ ] gin . H ` json:"channels" `
}
testdata := map [ int ] [ ] string {
2023-05-28 13:14:05 +02:00
0 : { "main" , "Chatting Chamber" , "Unicôdé Häll \U0001f92a" , "Promotions" , "Reminders" } ,
2022-12-22 17:29:59 +01:00
1 : { "main" , "private" } ,
2023-05-28 13:14:05 +02:00
2 : { "main" , "Ü" , "Ö" , "Ä" } ,
3 : { "main" , "\U0001f5ff" , "Innovations" , "Reminders" } ,
2022-12-22 17:29:59 +01:00
4 : { "main" } ,
2023-05-28 13:14:05 +02:00
5 : { "main" , "Test1" , "Test2" , "Test3" , "Test4" , "Test5" } ,
6 : { "main" , "Security" , "Lipsum" } ,
2022-12-22 17:29:59 +01:00
7 : { "main" } ,
8 : { "main" } ,
9 : { "main" , "manual@chan" } ,
10 : { "main" } ,
2023-05-28 13:14:05 +02:00
11 : { "Promotions" } ,
2022-12-22 17:29:59 +01:00
12 : { } ,
13 : { } ,
14 : { "main" , "chan_self_subscribed" , "chan_self_unsub" } ,
15 : { "main" , "chan_other_nosub" , "chan_other_request" , "chan_other_accepted" } ,
}
for k , v := range testdata {
2023-01-27 10:04:06 +01:00
r0 := tt . RequestAuthGet [ chanlist ] ( t , data . User [ k ] . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels?selector=%s" , data . User [ k ] . UID , "owned" ) )
2022-12-22 17:29:59 +01:00
tt . AssertMappedSet ( t , fmt . Sprintf ( "%d->chanlist" , k ) , v , r0 . Channels , "internal_name" )
}
}
2022-12-14 18:38:30 +01:00
func TestListChannelsSubscribedAny ( t * testing . T ) {
2022-12-22 12:43:40 +01:00
ws , baseUrl , stop := tt . StartSimpleWebserver ( t )
defer stop ( )
data := tt . InitDefaultData ( t , ws )
type chanlist struct {
Channels [ ] gin . H ` json:"channels" `
}
testdata := map [ int ] [ ] string {
2023-05-28 13:14:05 +02:00
0 : { "main" , "Chatting Chamber" , "Unicôdé Häll \U0001f92a" , "Promotions" , "Reminders" } ,
2022-12-22 12:43:40 +01:00
1 : { "main" , "private" } ,
2023-05-28 13:14:05 +02:00
2 : { "main" , "Ü" , "Ö" , "Ä" } ,
3 : { "main" , "\U0001f5ff" , "Innovations" , "Reminders" } ,
2022-12-22 12:43:40 +01:00
4 : { "main" } ,
2023-05-28 13:14:05 +02:00
5 : { "main" , "Test1" , "Test2" , "Test3" , "Test4" , "Test5" } ,
6 : { "main" , "Security" , "Lipsum" } ,
2022-12-22 12:43:40 +01:00
7 : { "main" } ,
8 : { "main" } ,
9 : { "main" , "manual@chan" } ,
10 : { "main" } ,
2023-05-28 13:14:05 +02:00
11 : { "Promotions" } ,
2022-12-22 12:43:40 +01:00
12 : { } ,
13 : { } ,
2022-12-22 17:29:59 +01:00
14 : { "main" , "chan_self_subscribed" , "chan_other_request" , "chan_other_accepted" } ,
15 : { "main" , "chan_other_nosub" , "chan_other_request" , "chan_other_accepted" } ,
2022-12-22 12:43:40 +01:00
}
for k , v := range testdata {
2023-01-27 10:04:06 +01:00
r0 := tt . RequestAuthGet [ chanlist ] ( t , data . User [ k ] . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels?selector=%s" , data . User [ k ] . UID , "subscribed_any" ) )
2022-12-22 12:43:40 +01:00
tt . AssertMappedSet ( t , fmt . Sprintf ( "%d->chanlist" , k ) , v , r0 . Channels , "internal_name" )
}
2022-12-14 18:38:30 +01:00
}
func TestListChannelsAllAny ( t * testing . T ) {
2022-12-22 12:43:40 +01:00
ws , baseUrl , stop := tt . StartSimpleWebserver ( t )
defer stop ( )
data := tt . InitDefaultData ( t , ws )
type chanlist struct {
Channels [ ] gin . H ` json:"channels" `
}
testdata := map [ int ] [ ] string {
2023-05-28 13:14:05 +02:00
0 : { "main" , "Chatting Chamber" , "Unicôdé Häll \U0001f92a" , "Promotions" , "Reminders" } ,
2022-12-22 12:43:40 +01:00
1 : { "main" , "private" } ,
2023-05-28 13:14:05 +02:00
2 : { "main" , "Ü" , "Ö" , "Ä" } ,
3 : { "main" , "\U0001f5ff" , "Innovations" , "Reminders" } ,
2022-12-22 12:43:40 +01:00
4 : { "main" } ,
2023-05-28 13:14:05 +02:00
5 : { "main" , "Test1" , "Test2" , "Test3" , "Test4" , "Test5" } ,
6 : { "main" , "Security" , "Lipsum" } ,
2022-12-22 12:43:40 +01:00
7 : { "main" } ,
8 : { "main" } ,
9 : { "main" , "manual@chan" } ,
10 : { "main" } ,
2023-05-28 13:14:05 +02:00
11 : { "Promotions" } ,
2022-12-22 12:43:40 +01:00
12 : { } ,
13 : { } ,
2022-12-22 17:29:59 +01:00
14 : { "main" , "chan_self_subscribed" , "chan_self_unsub" , "chan_other_request" , "chan_other_accepted" } ,
15 : { "main" , "chan_other_nosub" , "chan_other_request" , "chan_other_accepted" } ,
2022-12-22 12:43:40 +01:00
}
for k , v := range testdata {
2023-01-27 10:04:06 +01:00
r0 := tt . RequestAuthGet [ chanlist ] ( t , data . User [ k ] . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels?selector=%s" , data . User [ k ] . UID , "all_any" ) )
2022-12-22 12:43:40 +01:00
tt . AssertMappedSet ( t , fmt . Sprintf ( "%d->chanlist" , k ) , v , r0 . Channels , "internal_name" )
}
2022-12-14 18:38:30 +01:00
}
func TestListChannelsSubscribed ( t * testing . T ) {
2022-12-22 12:43:40 +01:00
ws , baseUrl , stop := tt . StartSimpleWebserver ( t )
defer stop ( )
data := tt . InitDefaultData ( t , ws )
type chanlist struct {
Channels [ ] gin . H ` json:"channels" `
}
testdata := map [ int ] [ ] string {
2023-05-28 13:14:05 +02:00
0 : { "main" , "Chatting Chamber" , "Unicôdé Häll \U0001f92a" , "Promotions" , "Reminders" } ,
2022-12-22 12:43:40 +01:00
1 : { "main" , "private" } ,
2023-05-28 13:14:05 +02:00
2 : { "main" , "Ü" , "Ö" , "Ä" } ,
3 : { "main" , "\U0001f5ff" , "Innovations" , "Reminders" } ,
2022-12-22 12:43:40 +01:00
4 : { "main" } ,
2023-05-28 13:14:05 +02:00
5 : { "main" , "Test1" , "Test2" , "Test3" , "Test4" , "Test5" } ,
6 : { "main" , "Security" , "Lipsum" } ,
2022-12-22 12:43:40 +01:00
7 : { "main" } ,
8 : { "main" } ,
9 : { "main" , "manual@chan" } ,
10 : { "main" } ,
2023-05-28 13:14:05 +02:00
11 : { "Promotions" } ,
2022-12-22 12:43:40 +01:00
12 : { } ,
13 : { } ,
2022-12-22 17:29:59 +01:00
14 : { "main" , "chan_self_subscribed" , "chan_other_accepted" } ,
15 : { "main" , "chan_other_nosub" , "chan_other_request" , "chan_other_accepted" } ,
2022-12-22 12:43:40 +01:00
}
for k , v := range testdata {
2023-01-27 10:04:06 +01:00
r0 := tt . RequestAuthGet [ chanlist ] ( t , data . User [ k ] . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels?selector=%s" , data . User [ k ] . UID , "subscribed" ) )
2022-12-22 12:43:40 +01:00
tt . AssertMappedSet ( t , fmt . Sprintf ( "%d->chanlist" , k ) , v , r0 . Channels , "internal_name" )
}
2022-12-14 18:38:30 +01:00
}
func TestListChannelsAll ( t * testing . T ) {
2022-12-22 12:43:40 +01:00
ws , baseUrl , stop := tt . StartSimpleWebserver ( t )
defer stop ( )
data := tt . InitDefaultData ( t , ws )
type chanlist struct {
Channels [ ] gin . H ` json:"channels" `
}
testdata := map [ int ] [ ] string {
2023-05-28 13:14:05 +02:00
0 : { "main" , "Chatting Chamber" , "Unicôdé Häll \U0001f92a" , "Promotions" , "Reminders" } ,
2022-12-22 12:43:40 +01:00
1 : { "main" , "private" } ,
2023-05-28 13:14:05 +02:00
2 : { "main" , "Ü" , "Ö" , "Ä" } ,
3 : { "main" , "\U0001f5ff" , "Innovations" , "Reminders" } ,
2022-12-22 12:43:40 +01:00
4 : { "main" } ,
2023-05-28 13:14:05 +02:00
5 : { "main" , "Test1" , "Test2" , "Test3" , "Test4" , "Test5" } ,
6 : { "main" , "Security" , "Lipsum" } ,
2022-12-22 12:43:40 +01:00
7 : { "main" } ,
8 : { "main" } ,
9 : { "main" , "manual@chan" } ,
10 : { "main" } ,
2023-05-28 13:14:05 +02:00
11 : { "Promotions" } ,
2022-12-22 12:43:40 +01:00
12 : { } ,
13 : { } ,
2022-12-22 17:29:59 +01:00
14 : { "main" , "chan_self_subscribed" , "chan_self_unsub" , "chan_other_accepted" } ,
15 : { "main" , "chan_other_nosub" , "chan_other_request" , "chan_other_accepted" } ,
2022-12-22 12:43:40 +01:00
}
for k , v := range testdata {
2023-01-27 10:04:06 +01:00
r0 := tt . RequestAuthGet [ chanlist ] ( t , data . User [ k ] . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels?selector=%s" , data . User [ k ] . UID , "all" ) )
2022-12-22 12:43:40 +01:00
tt . AssertMappedSet ( t , fmt . Sprintf ( "%d->chanlist" , k ) , v , r0 . Channels , "internal_name" )
}
2022-12-14 18:38:30 +01:00
}
2023-01-13 12:43:20 +01:00
func TestChannelUpdate ( t * testing . T ) {
_ , baseUrl , stop := tt . StartSimpleWebserver ( t )
defer stop ( )
2023-01-27 10:04:06 +01:00
r0 := tt . RequestPost [ gin . H ] ( t , baseUrl , "/api/v2/users" , gin . H {
2023-01-13 12:43:20 +01:00
"agent_model" : "DUMMY_PHONE" ,
"agent_version" : "4X" ,
"client_type" : "ANDROID" ,
"fcm_token" : "DUMMY_FCM" ,
} )
2023-01-14 00:48:51 +01:00
uid := r0 [ "user_id" ] . ( string )
2023-01-13 12:43:20 +01:00
admintok := r0 [ "admin_key" ] . ( string )
type chanlist struct {
Channels [ ] gin . H ` json:"channels" `
}
{
2023-01-27 10:04:06 +01:00
clist := tt . RequestAuthGet [ chanlist ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , uid ) )
2023-01-13 12:43:20 +01:00
tt . AssertMappedSet ( t , "channels" , [ ] string { } , clist . Channels , "display_name" )
tt . AssertMappedSet ( t , "channels" , [ ] string { } , clist . Channels , "internal_name" )
}
2023-01-27 10:04:06 +01:00
chan0 := tt . RequestAuthPost [ gin . H ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , uid ) , gin . H {
2023-01-13 12:43:20 +01:00
"name" : "server-alerts" ,
} )
chanid := fmt . Sprintf ( "%v" , chan0 [ "channel_id" ] )
{
2023-01-27 10:04:06 +01:00
clist := tt . RequestAuthGet [ chanlist ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , uid ) )
2023-01-13 12:43:20 +01:00
tt . AssertMappedSet ( t , "channels" , [ ] string { "server-alerts" } , clist . Channels , "display_name" )
tt . AssertMappedSet ( t , "channels" , [ ] string { "server-alerts" } , clist . Channels , "internal_name" )
tt . AssertEqual ( t , "channels.descr" , nil , clist . Channels [ 0 ] [ "description_name" ] )
}
{
2023-01-27 10:04:06 +01:00
chan1 := tt . RequestAuthGet [ gin . H ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s" , uid , chanid ) )
2023-01-13 12:43:20 +01:00
tt . AssertEqual ( t , "channels.display_name" , "server-alerts" , chan1 [ "display_name" ] )
tt . AssertEqual ( t , "channels.internal_name" , "server-alerts" , chan1 [ "internal_name" ] )
tt . AssertEqual ( t , "channels.description_name" , nil , chan1 [ "description_name" ] )
tt . AssertEqual ( t , "channels.subscribe_key" , chan0 [ "subscribe_key" ] , chan1 [ "subscribe_key" ] )
tt . AssertEqual ( t , "channels.send_key" , chan0 [ "send_key" ] , chan1 [ "send_key" ] )
}
// [1] update display_name
2023-01-27 10:04:06 +01:00
tt . RequestAuthPatch [ tt . Void ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s" , uid , chanid ) , gin . H {
2023-01-13 12:43:20 +01:00
"display_name" : "SERVER-ALERTS" ,
} )
{
2023-01-27 10:04:06 +01:00
chan1 := tt . RequestAuthGet [ gin . H ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s" , uid , chanid ) )
2023-01-13 12:43:20 +01:00
tt . AssertEqual ( t , "channels.display_name" , "SERVER-ALERTS" , chan1 [ "display_name" ] )
tt . AssertEqual ( t , "channels.internal_name" , "server-alerts" , chan1 [ "internal_name" ] )
tt . AssertEqual ( t , "channels.description_name" , nil , chan1 [ "description_name" ] )
tt . AssertEqual ( t , "channels.subscribe_key" , chan0 [ "subscribe_key" ] , chan1 [ "subscribe_key" ] )
tt . AssertEqual ( t , "channels.send_key" , chan0 [ "send_key" ] , chan1 [ "send_key" ] )
}
// [2] fail to update display_name
2023-01-27 10:04:06 +01:00
tt . RequestAuthPatchShouldFail ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s" , uid , chanid ) , gin . H {
2023-05-28 13:14:05 +02:00
"display_name" : "" ,
} , 400 , apierr . CHANNEL_NAME_EMPTY )
2023-01-13 12:43:20 +01:00
// [3] renew subscribe_key
2023-01-27 10:04:06 +01:00
tt . RequestAuthPatch [ tt . Void ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s" , uid , chanid ) , gin . H {
2023-01-13 12:43:20 +01:00
"subscribe_key" : true ,
} )
{
2023-01-27 10:04:06 +01:00
chan1 := tt . RequestAuthGet [ gin . H ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s" , uid , chanid ) )
2023-01-13 12:43:20 +01:00
tt . AssertNotEqual ( t , "channels.subscribe_key" , chan0 [ "subscribe_key" ] , chan1 [ "subscribe_key" ] )
tt . AssertEqual ( t , "channels.send_key" , chan0 [ "send_key" ] , chan1 [ "send_key" ] )
}
// [5] update description_name
2023-01-27 10:04:06 +01:00
tt . RequestAuthPatch [ tt . Void ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s" , uid , chanid ) , gin . H {
2023-01-13 12:43:20 +01:00
"description_name" : "hello World" ,
} )
{
2023-01-27 10:04:06 +01:00
chan1 := tt . RequestAuthGet [ gin . H ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s" , uid , chanid ) )
2023-01-13 12:43:20 +01:00
tt . AssertEqual ( t , "channels.description_name" , "hello World" , chan1 [ "description_name" ] )
}
// [6] update description_name
2023-01-27 10:04:06 +01:00
tt . RequestAuthPatch [ tt . Void ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s" , uid , chanid ) , gin . H {
2023-01-13 12:43:20 +01:00
"description_name" : " AXXhello World9 " ,
} )
{
2023-01-27 10:04:06 +01:00
chan1 := tt . RequestAuthGet [ gin . H ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s" , uid , chanid ) )
2023-01-13 12:43:20 +01:00
tt . AssertEqual ( t , "channels.description_name" , "AXXhello World9" , chan1 [ "description_name" ] )
}
// [7] clear description_name
2023-01-27 10:04:06 +01:00
tt . RequestAuthPatch [ tt . Void ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s" , uid , chanid ) , gin . H {
2023-01-13 12:43:20 +01:00
"description_name" : "" ,
} )
{
2023-01-27 10:04:06 +01:00
chan1 := tt . RequestAuthGet [ gin . H ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s" , uid , chanid ) )
2023-01-13 12:43:20 +01:00
tt . AssertEqual ( t , "channels.description_name" , nil , chan1 [ "description_name" ] )
}
// [8] fail to update description_name
2023-01-27 10:04:06 +01:00
tt . RequestAuthPatchShouldFail ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s" , uid , chanid ) , gin . H {
2023-01-13 12:43:20 +01:00
"description_name" : strings . Repeat ( "0123456789" , 48 ) ,
} , 400 , apierr . CHANNEL_DESCRIPTION_TOO_LONG )
}
2023-01-13 12:54:19 +01:00
func TestListChannelMessages ( t * testing . T ) {
2023-05-28 02:40:24 +02:00
ws , baseUrl , stop := tt . StartSimpleWebserver ( t )
defer stop ( )
data := tt . InitDefaultData ( t , ws )
type msg struct {
ChannelId string ` json:"channel_id" `
ChannelInternalName string ` json:"channel_internal_name" `
Content string ` json:"content" `
MessageId string ` json:"message_id" `
OwnerUserId string ` json:"owner_user_id" `
Priority int ` json:"priority" `
SenderIp string ` json:"sender_ip" `
SenderName string ` json:"sender_name" `
SenderUserId string ` json:"sender_user_id" `
Timestamp string ` json:"timestamp" `
Title string ` json:"title" `
Trimmed bool ` json:"trimmed" `
UsrMessageId string ` json:"usr_message_id" `
}
type mglist struct {
Messages [ ] msg ` json:"messages" `
NPT string ` json:"next_page_token" `
PageSize int ` json:"page_size" `
}
type chanobj struct {
ChannelId string ` json:"channel_id" `
DescriptionName string ` json:"description_name" `
DisplayName string ` json:"display_name" `
InternalName string ` json:"internal_name" `
MessagesSent int ` json:"messages_sent" `
OwnerUserId string ` json:"owner_user_id" `
SubscribeKey string ` json:"subscribe_key" `
Subscription struct {
ChannelId string ` json:"channel_id" `
ChannelInternalName string ` json:"channel_internal_name" `
ChannelOwnerUserId string ` json:"channel_owner_user_id" `
Confirmed bool ` json:"confirmed" `
SubscriberUserId string ` json:"subscriber_user_id" `
SubscriptionId string ` json:"subscription_id" `
TimestampCreated string ` json:"timestamp_created" `
} ` json:"subscription" `
TimestampCreated string ` json:"timestamp_created" `
TimestampLastsent string ` json:"timestamp_lastsent" `
}
type chanlist struct {
Channels [ ] chanobj ` json:"channels" `
}
clist := tt . RequestAuthGet [ chanlist ] ( t , data . User [ 16 ] . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , data . User [ 16 ] . UID ) )
2023-05-28 13:14:05 +02:00
chan1 := langext . ArrFirstOrNil ( clist . Channels , func ( v chanobj ) bool { return v . InternalName == "Chan1" } ) . ChannelId
chan2 := langext . ArrFirstOrNil ( clist . Channels , func ( v chanobj ) bool { return v . InternalName == "Chan2" } ) . ChannelId
chan3 := langext . ArrFirstOrNil ( clist . Channels , func ( v chanobj ) bool { return v . InternalName == "Chan3" } ) . ChannelId
2023-05-28 02:40:24 +02:00
{
msgList0 := tt . RequestAuthGet [ mglist ] ( t , data . User [ 16 ] . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s/messages" , data . User [ 16 ] . UID , chan1 ) )
tt . AssertEqual ( t , "msgList.len" , 8 , len ( msgList0 . Messages ) )
tt . AssertEqual ( t , "PageSize" , 16 , msgList0 . PageSize )
tt . AssertEqual ( t , "msgList[0]" , "Lorem Ipsum 11" , msgList0 . Messages [ 0 ] . Title )
}
{
msgList0 := tt . RequestAuthGet [ mglist ] ( t , data . User [ 16 ] . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s/messages" , data . User [ 16 ] . UID , chan2 ) )
tt . AssertEqual ( t , "msgList.len" , 10 , len ( msgList0 . Messages ) )
tt . AssertEqual ( t , "PageSize" , 16 , msgList0 . PageSize )
tt . AssertEqual ( t , "msgList[0]" , "Lorem Ipsum 23" , msgList0 . Messages [ 0 ] . Title )
}
{
msgList0 := tt . RequestAuthGet [ mglist ] ( t , data . User [ 16 ] . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s/messages" , data . User [ 16 ] . UID , chan3 ) )
tt . AssertEqual ( t , "msgList.len" , 5 , len ( msgList0 . Messages ) )
tt . AssertEqual ( t , "PageSize" , 16 , msgList0 . PageSize )
tt . AssertEqual ( t , "msgList[0]" , "Lorem Ipsum 20" , msgList0 . Messages [ 0 ] . Title )
}
2023-01-13 12:54:19 +01:00
}
2023-05-28 02:50:55 +02:00
func TestListSubscribedChannelMessages ( t * testing . T ) {
ws , baseUrl , stop := tt . StartSimpleWebserver ( t )
defer stop ( )
data := tt . InitDefaultData ( t , ws )
type msg struct {
ChannelId string ` json:"channel_id" `
ChannelInternalName string ` json:"channel_internal_name" `
Content string ` json:"content" `
MessageId string ` json:"message_id" `
OwnerUserId string ` json:"owner_user_id" `
Priority int ` json:"priority" `
SenderIp string ` json:"sender_ip" `
SenderName string ` json:"sender_name" `
SenderUserId string ` json:"sender_user_id" `
Timestamp string ` json:"timestamp" `
Title string ` json:"title" `
Trimmed bool ` json:"trimmed" `
UsrMessageId string ` json:"usr_message_id" `
}
type mglist struct {
Messages [ ] msg ` json:"messages" `
NPT string ` json:"next_page_token" `
PageSize int ` json:"page_size" `
}
type chanobj struct {
ChannelId string ` json:"channel_id" `
DescriptionName string ` json:"description_name" `
DisplayName string ` json:"display_name" `
InternalName string ` json:"internal_name" `
MessagesSent int ` json:"messages_sent" `
OwnerUserId string ` json:"owner_user_id" `
SubscribeKey string ` json:"subscribe_key" `
Subscription struct {
ChannelId string ` json:"channel_id" `
ChannelInternalName string ` json:"channel_internal_name" `
ChannelOwnerUserId string ` json:"channel_owner_user_id" `
Confirmed bool ` json:"confirmed" `
SubscriberUserId string ` json:"subscriber_user_id" `
SubscriptionId string ` json:"subscription_id" `
TimestampCreated string ` json:"timestamp_created" `
} ` json:"subscription" `
TimestampCreated string ` json:"timestamp_created" `
TimestampLastsent string ` json:"timestamp_lastsent" `
}
type chanlist struct {
Channels [ ] chanobj ` json:"channels" `
}
clist := tt . RequestAuthGet [ chanlist ] ( t , data . User [ 16 ] . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , data . User [ 16 ] . UID ) )
2023-05-28 13:14:05 +02:00
chan1 := langext . ArrFirstOrNil ( clist . Channels , func ( v chanobj ) bool { return v . InternalName == "Chan1" } )
chan2 := langext . ArrFirstOrNil ( clist . Channels , func ( v chanobj ) bool { return v . InternalName == "Chan2" } )
chan3 := langext . ArrFirstOrNil ( clist . Channels , func ( v chanobj ) bool { return v . InternalName == "Chan3" } )
2023-05-28 02:50:55 +02:00
{
sub1 := tt . RequestAuthPost [ gin . H ] ( t , data . User [ 1 ] . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions?chan_subscribe_key=%s" , data . User [ 1 ] . UID , chan1 . SubscribeKey ) , gin . H {
"channel_owner_user_id" : data . User [ 16 ] . UID ,
2023-05-28 13:14:05 +02:00
"channel_internal_name" : "Chan1" ,
2023-05-28 02:50:55 +02:00
} )
sub2 := tt . RequestAuthPost [ gin . H ] ( t , data . User [ 1 ] . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions?chan_subscribe_key=%s" , data . User [ 1 ] . UID , chan2 . SubscribeKey ) , gin . H {
"channel_owner_user_id" : data . User [ 16 ] . UID ,
2023-05-28 13:14:05 +02:00
"channel_internal_name" : "Chan2" ,
2023-05-28 02:50:55 +02:00
} )
sub3 := tt . RequestAuthPost [ gin . H ] ( t , data . User [ 1 ] . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions?chan_subscribe_key=%s" , data . User [ 1 ] . UID , chan3 . SubscribeKey ) , gin . H {
"channel_owner_user_id" : data . User [ 16 ] . UID ,
2023-05-28 13:14:05 +02:00
"channel_internal_name" : "Chan3" ,
2023-05-28 02:50:55 +02:00
} )
tt . RequestAuthPatch [ gin . H ] ( t , data . User [ 16 ] . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions/%s" , data . User [ 16 ] . UID , sub1 [ "subscription_id" ] ) , gin . H {
"confirmed" : true ,
} )
tt . RequestAuthPatch [ gin . H ] ( t , data . User [ 16 ] . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions/%s" , data . User [ 16 ] . UID , sub2 [ "subscription_id" ] ) , gin . H {
"confirmed" : true ,
} )
tt . RequestAuthPatch [ gin . H ] ( t , data . User [ 16 ] . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions/%s" , data . User [ 16 ] . UID , sub3 [ "subscription_id" ] ) , gin . H {
"confirmed" : true ,
} )
}
{
msgList0 := tt . RequestAuthGet [ mglist ] ( t , data . User [ 1 ] . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s/messages" , data . User [ 16 ] . UID , chan1 . ChannelId ) )
tt . AssertEqual ( t , "msgList.len" , 8 , len ( msgList0 . Messages ) )
tt . AssertEqual ( t , "PageSize" , 16 , msgList0 . PageSize )
tt . AssertEqual ( t , "msgList[0]" , "Lorem Ipsum 11" , msgList0 . Messages [ 0 ] . Title )
}
{
msgList0 := tt . RequestAuthGet [ mglist ] ( t , data . User [ 1 ] . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s/messages" , data . User [ 16 ] . UID , chan2 . ChannelId ) )
tt . AssertEqual ( t , "msgList.len" , 10 , len ( msgList0 . Messages ) )
tt . AssertEqual ( t , "PageSize" , 16 , msgList0 . PageSize )
tt . AssertEqual ( t , "msgList[0]" , "Lorem Ipsum 23" , msgList0 . Messages [ 0 ] . Title )
}
{
msgList0 := tt . RequestAuthGet [ mglist ] ( t , data . User [ 1 ] . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s/messages" , data . User [ 16 ] . UID , chan3 . ChannelId ) )
tt . AssertEqual ( t , "msgList.len" , 5 , len ( msgList0 . Messages ) )
tt . AssertEqual ( t , "PageSize" , 16 , msgList0 . PageSize )
tt . AssertEqual ( t , "msgList[0]" , "Lorem Ipsum 20" , msgList0 . Messages [ 0 ] . Title )
}
}
2023-01-13 12:54:19 +01:00
func TestListChannelSubscriptions ( t * testing . T ) {
2023-05-28 03:16:29 +02:00
ws , baseUrl , stop := tt . StartSimpleWebserver ( t )
defer stop ( )
data1 := tt . InitSingleData ( t , ws )
data2 := tt . InitSingleData ( t , ws )
type chanobj struct {
ChannelId string ` json:"channel_id" `
DescriptionName string ` json:"description_name" `
DisplayName string ` json:"display_name" `
InternalName string ` json:"internal_name" `
MessagesSent int ` json:"messages_sent" `
OwnerUserId string ` json:"owner_user_id" `
SubscribeKey string ` json:"subscribe_key" `
Subscription struct {
ChannelId string ` json:"channel_id" `
ChannelInternalName string ` json:"channel_internal_name" `
ChannelOwnerUserId string ` json:"channel_owner_user_id" `
Confirmed bool ` json:"confirmed" `
SubscriberUserId string ` json:"subscriber_user_id" `
SubscriptionId string ` json:"subscription_id" `
TimestampCreated string ` json:"timestamp_created" `
} ` json:"subscription" `
TimestampCreated string ` json:"timestamp_created" `
TimestampLastsent string ` json:"timestamp_lastsent" `
}
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" `
SubscriberUserId string ` json:"subscriber_user_id" `
SubscriptionId string ` json:"subscription_id" `
TimestampCreated string ` json:"timestamp_created" `
}
type sublist struct {
Subscriptions [ ] subobj ` json:"subscriptions" `
}
countBoth := func ( oa1 , oc1 , ou1 , ia1 , ic1 , iu1 , oa2 , oc2 , ou2 , ia2 , ic2 , iu2 int ) {
2023-07-30 15:58:37 +02:00
sublist1oa := tt . RequestAuthGet [ sublist ] ( t , data1 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions?direction=%s&confirmation=%s" , data1 . UID , "outgoing" , "all" ) )
2023-05-28 03:16:29 +02:00
tt . AssertEqual ( t , "1:outgoing_all" , oa1 , len ( sublist1oa . Subscriptions ) )
2023-07-30 15:58:37 +02:00
sublist1oc := tt . RequestAuthGet [ sublist ] ( t , data1 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions?direction=%s&confirmation=%s" , data1 . UID , "outgoing" , "confirmed" ) )
2023-05-28 03:16:29 +02:00
tt . AssertEqual ( t , "1:outgoing_confirmed" , oc1 , len ( sublist1oc . Subscriptions ) )
2023-07-30 15:58:37 +02:00
sublist1ou := tt . RequestAuthGet [ sublist ] ( t , data1 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions?direction=%s&confirmation=%s" , data1 . UID , "outgoing" , "unconfirmed" ) )
2023-05-28 03:16:29 +02:00
tt . AssertEqual ( t , "1:outgoing_unconfirmed" , ou1 , len ( sublist1ou . Subscriptions ) )
2023-07-30 15:58:37 +02:00
sublist1ia := tt . RequestAuthGet [ sublist ] ( t , data1 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions?direction=%s&confirmation=%s" , data1 . UID , "incoming" , "all" ) )
2023-05-28 03:16:29 +02:00
tt . AssertEqual ( t , "1:incoming_all" , ia1 , len ( sublist1ia . Subscriptions ) )
2023-07-30 15:58:37 +02:00
sublist1ic := tt . RequestAuthGet [ sublist ] ( t , data1 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions?direction=%s&confirmation=%s" , data1 . UID , "incoming" , "confirmed" ) )
2023-05-28 03:16:29 +02:00
tt . AssertEqual ( t , "1:incoming_confirmed" , ic1 , len ( sublist1ic . Subscriptions ) )
2023-07-30 15:58:37 +02:00
sublist1iu := tt . RequestAuthGet [ sublist ] ( t , data1 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions?direction=%s&confirmation=%s" , data1 . UID , "incoming" , "unconfirmed" ) )
2023-05-28 03:16:29 +02:00
tt . AssertEqual ( t , "1:incoming_unconfirmed" , iu1 , len ( sublist1iu . Subscriptions ) )
2023-07-30 15:58:37 +02:00
sublist2oa := tt . RequestAuthGet [ sublist ] ( t , data2 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions?direction=%s&confirmation=%s" , data2 . UID , "outgoing" , "all" ) )
2023-05-28 03:16:29 +02:00
tt . AssertEqual ( t , "2:outgoing_all" , oa2 , len ( sublist2oa . Subscriptions ) )
2023-07-30 15:58:37 +02:00
sublist2oc := tt . RequestAuthGet [ sublist ] ( t , data2 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions?direction=%s&confirmation=%s" , data2 . UID , "outgoing" , "confirmed" ) )
2023-05-28 03:16:29 +02:00
tt . AssertEqual ( t , "2:outgoing_confirmed" , oc2 , len ( sublist2oc . Subscriptions ) )
2023-07-30 15:58:37 +02:00
sublist2ou := tt . RequestAuthGet [ sublist ] ( t , data2 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions?direction=%s&confirmation=%s" , data2 . UID , "outgoing" , "unconfirmed" ) )
2023-05-28 03:16:29 +02:00
tt . AssertEqual ( t , "2:outgoing_unconfirmed" , ou2 , len ( sublist2ou . Subscriptions ) )
2023-07-30 15:58:37 +02:00
sublist2ia := tt . RequestAuthGet [ sublist ] ( t , data2 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions?direction=%s&confirmation=%s" , data2 . UID , "incoming" , "all" ) )
2023-05-28 03:16:29 +02:00
tt . AssertEqual ( t , "2:incoming_all" , ia2 , len ( sublist2ia . Subscriptions ) )
2023-07-30 15:58:37 +02:00
sublist2ic := tt . RequestAuthGet [ sublist ] ( t , data2 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions?direction=%s&confirmation=%s" , data2 . UID , "incoming" , "confirmed" ) )
2023-05-28 03:16:29 +02:00
tt . AssertEqual ( t , "2:incoming_confirmed" , ic2 , len ( sublist2ic . Subscriptions ) )
2023-07-30 15:58:37 +02:00
sublist2iu := tt . RequestAuthGet [ sublist ] ( t , data2 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions?direction=%s&confirmation=%s" , data2 . UID , "incoming" , "unconfirmed" ) )
2023-05-28 03:16:29 +02:00
tt . AssertEqual ( t , "2:incoming_unconfirmed" , iu2 , len ( sublist2iu . Subscriptions ) )
}
countBoth (
0 , 0 , 0 ,
0 , 0 , 0 ,
0 , 0 , 0 ,
0 , 0 , 0 )
2023-05-29 01:51:51 +02:00
chan1 := tt . RequestAuthPost [ chanobj ] ( t , data2 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , data2 . UID ) , gin . H {
2023-05-28 13:14:05 +02:00
"name" : "Chan1" ,
2023-05-28 03:16:29 +02:00
} )
2023-05-29 01:51:51 +02:00
chan2 := tt . RequestAuthPost [ chanobj ] ( t , data2 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , data2 . UID ) , gin . H {
2023-05-28 13:14:05 +02:00
"name" : "Chan2" ,
2023-05-28 03:16:29 +02:00
} )
2023-05-29 01:51:51 +02:00
chan3 := tt . RequestAuthPost [ chanobj ] ( t , data2 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , data2 . UID ) , gin . H {
2023-05-28 13:14:05 +02:00
"name" : "Chan3" ,
2023-05-28 03:16:29 +02:00
} )
countBoth (
0 , 0 , 0 ,
0 , 0 , 0 ,
3 , 3 , 0 ,
3 , 3 , 0 )
2023-05-29 01:51:51 +02:00
sub1 := tt . RequestAuthPost [ gin . H ] ( t , data1 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions?chan_subscribe_key=%s" , data1 . UID , chan1 . SubscribeKey ) , gin . H {
"channel_owner_user_id" : data2 . UID ,
2023-05-28 13:14:05 +02:00
"channel_internal_name" : "Chan1" ,
2023-05-28 03:16:29 +02:00
} )
2023-05-29 01:51:51 +02:00
sub2 := tt . RequestAuthPost [ gin . H ] ( t , data1 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions?chan_subscribe_key=%s" , data1 . UID , chan2 . SubscribeKey ) , gin . H {
2023-05-28 03:16:29 +02:00
"channel_id" : chan2 . ChannelId ,
} )
2023-05-29 01:51:51 +02:00
sub3 := tt . RequestAuthPost [ gin . H ] ( t , data1 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions?chan_subscribe_key=%s" , data1 . UID , chan3 . SubscribeKey ) , gin . H {
"channel_owner_user_id" : data2 . UID ,
2023-05-28 13:14:05 +02:00
"channel_internal_name" : "Chan3" ,
2023-05-28 03:16:29 +02:00
} )
countBoth (
3 , 0 , 3 ,
0 , 0 , 0 ,
3 , 3 , 0 ,
6 , 3 , 3 )
2023-05-29 01:51:51 +02:00
tt . RequestAuthPatch [ gin . H ] ( t , data2 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions/%s" , data2 . UID , sub1 [ "subscription_id" ] ) , gin . H {
2023-05-28 03:16:29 +02:00
"confirmed" : true ,
} )
countBoth (
3 , 1 , 2 ,
0 , 0 , 0 ,
3 , 3 , 0 ,
6 , 4 , 2 )
2023-05-29 01:51:51 +02:00
tt . RequestAuthPatch [ gin . H ] ( t , data2 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions/%s" , data2 . UID , sub2 [ "subscription_id" ] ) , gin . H {
2023-05-28 03:16:29 +02:00
"confirmed" : true ,
} )
countBoth (
3 , 2 , 1 ,
0 , 0 , 0 ,
3 , 3 , 0 ,
6 , 5 , 1 )
2023-05-29 01:51:51 +02:00
tt . RequestAuthPatch [ gin . H ] ( t , data2 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions/%s" , data2 . UID , sub3 [ "subscription_id" ] ) , gin . H {
2023-05-28 03:16:29 +02:00
"confirmed" : true ,
} )
countBoth (
3 , 3 , 0 ,
0 , 0 , 0 ,
3 , 3 , 0 ,
6 , 6 , 0 )
2023-05-29 01:51:51 +02:00
tt . RequestAuthDelete [ gin . H ] ( t , data2 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions/%s" , data2 . UID , sub1 [ "subscription_id" ] ) , gin . H { } )
2023-05-28 03:16:29 +02:00
countBoth (
2 , 2 , 0 ,
0 , 0 , 0 ,
3 , 3 , 0 ,
5 , 5 , 0 )
2023-05-29 01:51:51 +02:00
tt . RequestAuthDelete [ gin . H ] ( t , data2 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions/%s" , data2 . UID , sub2 [ "subscription_id" ] ) , gin . H { } )
2023-05-28 03:16:29 +02:00
countBoth (
1 , 1 , 0 ,
0 , 0 , 0 ,
3 , 3 , 0 ,
4 , 4 , 0 )
2023-05-29 01:51:51 +02:00
tt . RequestAuthDelete [ gin . H ] ( t , data2 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions/%s" , data2 . UID , sub3 [ "subscription_id" ] ) , gin . H { } )
2023-05-28 03:16:29 +02:00
countBoth (
0 , 0 , 0 ,
0 , 0 , 0 ,
3 , 3 , 0 ,
3 , 3 , 0 )
2023-07-30 15:58:37 +02:00
sublistRem := tt . RequestAuthGet [ sublist ] ( t , data2 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions?direction=%s&confirmation=%s" , data2 . UID , "incoming" , "confirmed" ) )
2023-05-28 03:16:29 +02:00
for _ , v := range sublistRem . Subscriptions {
2023-05-29 01:51:51 +02:00
tt . RequestAuthDelete [ gin . H ] ( t , data2 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions/%s" , data2 . UID , v . SubscriptionId ) , gin . H { } )
2023-05-28 03:16:29 +02:00
}
countBoth (
0 , 0 , 0 ,
0 , 0 , 0 ,
0 , 0 , 0 ,
0 , 0 , 0 )
2023-05-28 03:38:33 +02:00
}
func TestListChannelMessagesOfUnsubscribed ( t * testing . T ) {
ws , baseUrl , stop := tt . StartSimpleWebserver ( t )
defer stop ( )
data1 := tt . InitSingleData ( t , ws )
data2 := tt . InitSingleData ( t , ws )
type msg struct {
ChannelId string ` json:"channel_id" `
ChannelInternalName string ` json:"channel_internal_name" `
Content string ` json:"content" `
MessageId string ` json:"message_id" `
OwnerUserId string ` json:"owner_user_id" `
Priority int ` json:"priority" `
SenderIp string ` json:"sender_ip" `
SenderName string ` json:"sender_name" `
SenderUserId string ` json:"sender_user_id" `
Timestamp string ` json:"timestamp" `
Title string ` json:"title" `
Trimmed bool ` json:"trimmed" `
UsrMessageId string ` json:"usr_message_id" `
}
type mglist struct {
Messages [ ] msg ` json:"messages" `
NPT string ` json:"next_page_token" `
PageSize int ` json:"page_size" `
}
type chanobj struct {
ChannelId string ` json:"channel_id" `
DescriptionName string ` json:"description_name" `
DisplayName string ` json:"display_name" `
InternalName string ` json:"internal_name" `
MessagesSent int ` json:"messages_sent" `
OwnerUserId string ` json:"owner_user_id" `
SubscribeKey string ` json:"subscribe_key" `
Subscription struct {
ChannelId string ` json:"channel_id" `
ChannelInternalName string ` json:"channel_internal_name" `
ChannelOwnerUserId string ` json:"channel_owner_user_id" `
Confirmed bool ` json:"confirmed" `
SubscriberUserId string ` json:"subscriber_user_id" `
SubscriptionId string ` json:"subscription_id" `
TimestampCreated string ` json:"timestamp_created" `
} ` json:"subscription" `
TimestampCreated string ` json:"timestamp_created" `
TimestampLastsent string ` json:"timestamp_lastsent" `
}
type chanlist struct {
Channels [ ] chanobj ` json:"channels" `
}
2023-05-29 01:51:51 +02:00
chan1 := tt . RequestAuthPost [ chanobj ] ( t , data2 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , data2 . UID ) , gin . H {
2023-05-28 13:14:05 +02:00
"name" : "Chan1" ,
2023-05-28 03:38:33 +02:00
} )
2023-05-29 01:51:51 +02:00
tt . RequestAuthGetShouldFail ( t , data1 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s/messages" , data1 . UID , chan1 . ChannelId ) , 401 , apierr . USER_AUTH_FAILED )
2023-05-28 03:38:33 +02:00
}
func TestListChannelMessagesOfUnconfirmed1 ( t * testing . T ) {
ws , baseUrl , stop := tt . StartSimpleWebserver ( t )
defer stop ( )
data1 := tt . InitSingleData ( t , ws )
data2 := tt . InitSingleData ( t , ws )
type msg struct {
ChannelId string ` json:"channel_id" `
ChannelInternalName string ` json:"channel_internal_name" `
Content string ` json:"content" `
MessageId string ` json:"message_id" `
OwnerUserId string ` json:"owner_user_id" `
Priority int ` json:"priority" `
SenderIp string ` json:"sender_ip" `
SenderName string ` json:"sender_name" `
SenderUserId string ` json:"sender_user_id" `
Timestamp string ` json:"timestamp" `
Title string ` json:"title" `
Trimmed bool ` json:"trimmed" `
UsrMessageId string ` json:"usr_message_id" `
}
type mglist struct {
Messages [ ] msg ` json:"messages" `
NPT string ` json:"next_page_token" `
PageSize int ` json:"page_size" `
}
type chanobj struct {
ChannelId string ` json:"channel_id" `
DescriptionName string ` json:"description_name" `
DisplayName string ` json:"display_name" `
InternalName string ` json:"internal_name" `
MessagesSent int ` json:"messages_sent" `
OwnerUserId string ` json:"owner_user_id" `
SubscribeKey string ` json:"subscribe_key" `
Subscription struct {
ChannelId string ` json:"channel_id" `
ChannelInternalName string ` json:"channel_internal_name" `
ChannelOwnerUserId string ` json:"channel_owner_user_id" `
Confirmed bool ` json:"confirmed" `
SubscriberUserId string ` json:"subscriber_user_id" `
SubscriptionId string ` json:"subscription_id" `
TimestampCreated string ` json:"timestamp_created" `
} ` json:"subscription" `
TimestampCreated string ` json:"timestamp_created" `
TimestampLastsent string ` json:"timestamp_lastsent" `
}
type chanlist struct {
Channels [ ] chanobj ` json:"channels" `
}
2023-05-29 01:51:51 +02:00
chan1 := tt . RequestAuthPost [ chanobj ] ( t , data2 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , data2 . UID ) , gin . H {
2023-05-28 13:14:05 +02:00
"name" : "Chan1" ,
2023-05-28 03:38:33 +02:00
} )
2023-05-29 01:51:51 +02:00
tt . RequestAuthPost [ gin . H ] ( t , data1 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions?chan_subscribe_key=%s" , data1 . UID , chan1 . SubscribeKey ) , gin . H {
"channel_owner_user_id" : data2 . UID ,
2023-05-28 13:14:05 +02:00
"channel_internal_name" : "Chan1" ,
2023-05-28 03:38:33 +02:00
} )
2023-05-29 01:51:51 +02:00
tt . RequestAuthGetShouldFail ( t , data1 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s/messages" , data1 . UID , chan1 . ChannelId ) , 401 , apierr . USER_AUTH_FAILED )
2023-05-28 03:38:33 +02:00
}
func TestListChannelMessagesOfUnconfirmed2 ( t * testing . T ) {
ws , baseUrl , stop := tt . StartSimpleWebserver ( t )
defer stop ( )
data1 := tt . InitSingleData ( t , ws )
data2 := tt . InitSingleData ( t , ws )
type msg struct {
ChannelId string ` json:"channel_id" `
ChannelInternalName string ` json:"channel_internal_name" `
Content string ` json:"content" `
MessageId string ` json:"message_id" `
OwnerUserId string ` json:"owner_user_id" `
Priority int ` json:"priority" `
SenderIp string ` json:"sender_ip" `
SenderName string ` json:"sender_name" `
SenderUserId string ` json:"sender_user_id" `
Timestamp string ` json:"timestamp" `
Title string ` json:"title" `
Trimmed bool ` json:"trimmed" `
UsrMessageId string ` json:"usr_message_id" `
}
type mglist struct {
Messages [ ] msg ` json:"messages" `
NPT string ` json:"next_page_token" `
PageSize int ` json:"page_size" `
}
type chanobj struct {
ChannelId string ` json:"channel_id" `
DescriptionName string ` json:"description_name" `
DisplayName string ` json:"display_name" `
InternalName string ` json:"internal_name" `
MessagesSent int ` json:"messages_sent" `
OwnerUserId string ` json:"owner_user_id" `
SubscribeKey string ` json:"subscribe_key" `
Subscription struct {
ChannelId string ` json:"channel_id" `
ChannelInternalName string ` json:"channel_internal_name" `
ChannelOwnerUserId string ` json:"channel_owner_user_id" `
Confirmed bool ` json:"confirmed" `
SubscriberUserId string ` json:"subscriber_user_id" `
SubscriptionId string ` json:"subscription_id" `
TimestampCreated string ` json:"timestamp_created" `
} ` json:"subscription" `
TimestampCreated string ` json:"timestamp_created" `
TimestampLastsent string ` json:"timestamp_lastsent" `
}
2023-05-28 03:16:29 +02:00
2023-05-28 03:38:33 +02:00
type chanlist struct {
Channels [ ] chanobj ` json:"channels" `
}
2023-05-29 01:51:51 +02:00
chan1 := tt . RequestAuthPost [ chanobj ] ( t , data2 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , data2 . UID ) , gin . H {
2023-05-28 13:14:05 +02:00
"name" : "Chan1" ,
2023-05-28 03:38:33 +02:00
} )
2023-05-29 01:51:51 +02:00
tt . RequestAuthPost [ gin . H ] ( t , data1 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions?chan_subscribe_key=%s" , data1 . UID , chan1 . SubscribeKey ) , gin . H {
2023-05-28 03:38:33 +02:00
"channel_id" : chan1 . ChannelId ,
} )
2023-05-29 01:51:51 +02:00
tt . RequestAuthGetShouldFail ( t , data1 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s/messages" , data1 . UID , chan1 . ChannelId ) , 401 , apierr . USER_AUTH_FAILED )
2023-01-13 12:54:19 +01:00
}
2023-05-28 03:16:29 +02:00
2023-05-28 03:38:33 +02:00
func TestListChannelMessagesOfRevokedConfirmation ( t * testing . T ) {
ws , baseUrl , stop := tt . StartSimpleWebserver ( t )
defer stop ( )
data1 := tt . InitSingleData ( t , ws )
data2 := tt . InitSingleData ( t , ws )
type msg struct {
ChannelId string ` json:"channel_id" `
ChannelInternalName string ` json:"channel_internal_name" `
Content string ` json:"content" `
MessageId string ` json:"message_id" `
OwnerUserId string ` json:"owner_user_id" `
Priority int ` json:"priority" `
SenderIp string ` json:"sender_ip" `
SenderName string ` json:"sender_name" `
SenderUserId string ` json:"sender_user_id" `
Timestamp string ` json:"timestamp" `
Title string ` json:"title" `
Trimmed bool ` json:"trimmed" `
UsrMessageId string ` json:"usr_message_id" `
}
type mglist struct {
Messages [ ] msg ` json:"messages" `
NPT string ` json:"next_page_token" `
PageSize int ` json:"page_size" `
}
type chanobj struct {
ChannelId string ` json:"channel_id" `
DescriptionName string ` json:"description_name" `
DisplayName string ` json:"display_name" `
InternalName string ` json:"internal_name" `
MessagesSent int ` json:"messages_sent" `
OwnerUserId string ` json:"owner_user_id" `
SubscribeKey string ` json:"subscribe_key" `
Subscription struct {
ChannelId string ` json:"channel_id" `
ChannelInternalName string ` json:"channel_internal_name" `
ChannelOwnerUserId string ` json:"channel_owner_user_id" `
Confirmed bool ` json:"confirmed" `
SubscriberUserId string ` json:"subscriber_user_id" `
SubscriptionId string ` json:"subscription_id" `
TimestampCreated string ` json:"timestamp_created" `
} ` json:"subscription" `
TimestampCreated string ` json:"timestamp_created" `
TimestampLastsent string ` json:"timestamp_lastsent" `
}
type chanlist struct {
Channels [ ] chanobj ` json:"channels" `
}
2023-05-29 01:51:51 +02:00
chan1 := tt . RequestAuthPost [ chanobj ] ( t , data2 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , data2 . UID ) , gin . H {
2023-05-28 13:14:05 +02:00
"name" : "Chan1" ,
2023-05-28 03:38:33 +02:00
} )
2023-05-29 01:51:51 +02:00
sub1 := tt . RequestAuthPost [ gin . H ] ( t , data1 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions?chan_subscribe_key=%s" , data1 . UID , chan1 . SubscribeKey ) , gin . H {
2023-05-28 03:38:33 +02:00
"channel_id" : chan1 . ChannelId ,
} )
2023-05-29 01:51:51 +02:00
tt . RequestAuthPatch [ gin . H ] ( t , data2 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions/%s" , data2 . UID , sub1 [ "subscription_id" ] ) , gin . H {
2023-05-28 03:38:33 +02:00
"confirmed" : true ,
} )
2023-05-29 01:51:51 +02:00
tt . RequestAuthGet [ tt . Void ] ( t , data1 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s/messages" , data1 . UID , chan1 . ChannelId ) )
2023-05-28 03:38:33 +02:00
2023-05-29 01:51:51 +02:00
tt . RequestAuthDelete [ gin . H ] ( t , data2 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions/%s" , data2 . UID , sub1 [ "subscription_id" ] ) , gin . H { } )
2023-05-28 03:38:33 +02:00
2023-05-29 01:51:51 +02:00
tt . RequestAuthGetShouldFail ( t , data1 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s/messages" , data1 . UID , chan1 . ChannelId ) , 401 , apierr . USER_AUTH_FAILED )
2023-05-28 03:38:33 +02:00
}
2023-06-10 03:41:54 +02:00
2023-06-17 20:08:39 +02:00
func TestChannelMessageCounter ( t * testing . T ) {
2023-06-10 03:41:54 +02:00
_ , baseUrl , stop := tt . StartSimpleWebserver ( t )
defer stop ( )
r0 := tt . RequestPost [ gin . H ] ( t , baseUrl , "/api/v2/users" , gin . H {
"agent_model" : "DUMMY_PHONE" ,
"agent_version" : "4X" ,
"client_type" : "ANDROID" ,
"fcm_token" : "DUMMY_FCM" ,
} )
uid := r0 [ "user_id" ] . ( string )
admintok := r0 [ "admin_key" ] . ( string )
type chanobj struct {
ChannelId string ` json:"channel_id" `
DescriptionName string ` json:"description_name" `
DisplayName string ` json:"display_name" `
InternalName string ` json:"internal_name" `
MessagesSent int ` json:"messages_sent" `
OwnerUserId string ` json:"owner_user_id" `
SubscribeKey string ` json:"subscribe_key" `
Subscription struct {
ChannelId string ` json:"channel_id" `
ChannelInternalName string ` json:"channel_internal_name" `
ChannelOwnerUserId string ` json:"channel_owner_user_id" `
Confirmed bool ` json:"confirmed" `
SubscriberUserId string ` json:"subscriber_user_id" `
SubscriptionId string ` json:"subscription_id" `
TimestampCreated string ` json:"timestamp_created" `
} ` json:"subscription" `
TimestampCreated string ` json:"timestamp_created" `
TimestampLastsent string ` json:"timestamp_lastsent" `
}
type chanlist struct {
Channels [ ] chanobj ` json:"channels" `
}
tt . RequestPost [ gin . H ] ( t , baseUrl , "/" , gin . H {
"key" : admintok ,
"user_id" : uid ,
"title" : tt . ShortLipsum ( 1001 , 1 ) ,
} )
chan0 := tt . RequestAuthGet [ chanlist ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , uid ) ) . Channels [ 0 ]
chan1 := tt . RequestAuthPost [ chanobj ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , uid ) , gin . H {
"name" : "Chan1" ,
} )
chan2 := tt . RequestAuthPost [ chanobj ] ( t , admintok , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels" , uid ) , gin . H {
"name" : "Chan2" ,
} )
2023-06-17 20:08:39 +02:00
assertCounter := func ( c0 float64 , c1 float64 , c2 float64 ) {
2023-06-10 03:41:54 +02:00
r1 := tt . RequestAuthGet [ gin . H ] ( t , admintok , baseUrl , "/api/v2/users/" + uid + "/channels/" + chan0 . ChannelId )
tt . AssertStrRepEqual ( t , "c0.messages_sent" , c0 , r1 [ "messages_sent" ] )
r2 := tt . RequestAuthGet [ gin . H ] ( t , admintok , baseUrl , "/api/v2/users/" + uid + "/channels/" + chan1 . ChannelId )
tt . AssertStrRepEqual ( t , "c1.messages_sent" , c1 , r2 [ "messages_sent" ] )
r3 := tt . RequestAuthGet [ gin . H ] ( t , admintok , baseUrl , "/api/v2/users/" + uid + "/channels/" + chan2 . ChannelId )
tt . AssertStrRepEqual ( t , "c2.messages_sent" , c2 , r3 [ "messages_sent" ] )
}
assertCounter ( 1 , 0 , 0 )
tt . RequestPost [ gin . H ] ( t , baseUrl , "/" , gin . H {
"key" : admintok ,
"user_id" : uid ,
"title" : tt . ShortLipsum ( 1002 , 1 ) ,
} )
assertCounter ( 2 , 0 , 0 )
tt . RequestPost [ gin . H ] ( t , baseUrl , "/" , gin . H {
"key" : admintok ,
"user_id" : uid ,
"channel" : "Chan1" ,
"title" : tt . ShortLipsum ( 1003 , 1 ) ,
} )
tt . RequestPost [ gin . H ] ( t , baseUrl , "/" , gin . H {
"key" : admintok ,
"user_id" : uid ,
"channel" : "Chan2" ,
"title" : tt . ShortLipsum ( 1004 , 1 ) ,
} )
tt . RequestPost [ gin . H ] ( t , baseUrl , "/" , gin . H {
"key" : admintok ,
"user_id" : uid ,
"channel" : "Chan2" ,
"title" : tt . ShortLipsum ( 1005 , 1 ) ,
} )
2023-06-17 20:08:39 +02:00
assertCounter ( 2 , 1 , 2 )
assertCounter ( 2 , 1 , 2 )
tt . RequestPost [ gin . H ] ( t , baseUrl , "/" , gin . H {
"key" : admintok ,
"user_id" : uid ,
"title" : tt . ShortLipsum ( 2001 , 1 ) ,
} )
tt . RequestPost [ gin . H ] ( t , baseUrl , "/" , gin . H {
"key" : admintok ,
"user_id" : uid ,
"title" : tt . ShortLipsum ( 2002 , 1 ) ,
} )
tt . RequestPost [ gin . H ] ( t , baseUrl , "/" , gin . H {
"key" : admintok ,
"user_id" : uid ,
"title" : tt . ShortLipsum ( 2003 , 1 ) ,
} )
2023-06-10 03:41:54 +02:00
tt . RequestPost [ gin . H ] ( t , baseUrl , "/" , gin . H {
"key" : admintok ,
"user_id" : uid ,
"channel" : "Chan2" ,
"title" : tt . ShortLipsum ( 1004 , 1 ) ,
} )
assertCounter ( 5 , 1 , 3 )
tt . RequestPost [ gin . H ] ( t , baseUrl , "/" , gin . H {
"key" : admintok ,
"user_id" : uid ,
2023-06-17 20:08:39 +02:00
"title" : tt . ShortLipsum ( 4001 , 1 ) ,
2023-06-10 03:41:54 +02:00
} )
assertCounter ( 6 , 1 , 3 )
}
2025-04-13 16:12:15 +02:00
func TestDeleteChannel ( t * testing . T ) {
ws , baseUrl , stop := tt . StartSimpleWebserver ( t )
defer stop ( )
// Initialize default data set
data := tt . InitDefaultData ( t , ws )
// User 16 owns channels, User 1 will subscribe
user16 := data . User [ 16 ]
user1 := data . User [ 1 ]
// Find channel "Chan2" belonging to user 16
var chan2 tt . ChanData
for _ , ch := range user16 . Channels {
if ch . InternalName == "Chan2" {
chan2 = ch
break
}
}
tt . AssertNotEqual ( t , "Channel Chan2 ID" , "" , chan2 . ChannelID ) // Ensure channel was found
// --- Subscribe User 1 to User 16's Chan2 ---
chanInfo := tt . RequestAuthGet [ gin . H ] ( t , user16 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s" , user16 . UID , chan2 . ChannelID ) )
subKey := chanInfo [ "subscribe_key" ] . ( string )
subReq := tt . RequestAuthPost [ gin . H ] ( t , user1 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions?chan_subscribe_key=%s" , user1 . UID , subKey ) , gin . H {
"channel_id" : chan2 . ChannelID , // Provide channel ID for subscription
} )
subscriptionID := subReq [ "subscription_id" ] . ( string )
// Confirm subscription by owner (user 16)
tt . RequestAuthPatch [ gin . H ] ( t , user16 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions/%s" , user16 . UID , subscriptionID ) , gin . H {
"confirmed" : true ,
} )
// --- Pre-checks ---
// 1. Check channel exists
tt . RequestAuthGet [ gin . H ] ( t , user16 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s" , user16 . UID , chan2 . ChannelID ) )
// 2. Check channel messages exist (assuming mglist type from previous tests)
type msg struct {
MessageId string ` json:"message_id" `
}
type mglist struct {
Messages [ ] msg ` json:"messages" `
}
msgs := tt . RequestAuthGet [ mglist ] ( t , user16 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s/messages" , user16 . UID , chan2 . ChannelID ) )
tt . AssertTrue ( t , "pre-check messages exist" , len ( msgs . Messages ) > 0 )
// 3. Check subscription exists for User 1 (outgoing)
type subobj struct {
SubscriptionId string ` json:"subscription_id" `
}
type sublist struct {
Subscriptions [ ] subobj ` json:"subscriptions" `
}
subs1 := tt . RequestAuthGet [ sublist ] ( t , user1 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions?direction=outgoing" , user1 . UID ) )
foundSub1 := langext . ArrAny ( subs1 . Subscriptions , func ( v subobj ) bool { return v . SubscriptionId == subscriptionID } )
tt . AssertTrue ( t , "pre-check user1 subs outgoing" , foundSub1 )
// 4. Check subscription exists for User 16 (incoming)
subs16 := tt . RequestAuthGet [ sublist ] ( t , user16 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions?direction=incoming" , user16 . UID ) )
foundSub16 := langext . ArrAny ( subs16 . Subscriptions , func ( v subobj ) bool { return v . SubscriptionId == subscriptionID } )
tt . AssertTrue ( t , "pre-check user16 subs incoming" , foundSub16 )
// --- Delete Channel ---
tt . RequestAuthDelete [ tt . Void ] ( t , user16 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s" , user16 . UID , chan2 . ChannelID ) , nil )
// --- Post-checks ---
// 1. Check channel fetch fails
tt . RequestAuthGetShouldFail ( t , user16 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s" , user16 . UID , chan2 . ChannelID ) , 404 , apierr . CHANNEL_NOT_FOUND )
// 2. Check channel messages fetch fails
tt . RequestAuthGetShouldFail ( t , user16 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s/messages" , user16 . UID , chan2 . ChannelID ) , 404 , apierr . CHANNEL_NOT_FOUND )
// Check subscriber cannot fetch messages either
tt . RequestAuthGetShouldFail ( t , user1 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/channels/%s/messages" , user16 . UID , chan2 . ChannelID ) , 404 , apierr . CHANNEL_NOT_FOUND ) // Auth fails because subscription is gone
// 3. Check subscription is gone for User 1
subs1After := tt . RequestAuthGet [ sublist ] ( t , user1 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions?direction=outgoing" , user1 . UID ) )
foundSub1After := langext . ArrAny ( subs1After . Subscriptions , func ( v subobj ) bool { return v . SubscriptionId == subscriptionID } )
tt . AssertEqual ( t , "post-check user1 subs outgoing" , false , foundSub1After )
// 4. Check subscription is gone for User 16
subs16After := tt . RequestAuthGet [ sublist ] ( t , user16 . AdminKey , baseUrl , fmt . Sprintf ( "/api/v2/users/%s/subscriptions?direction=incoming" , user16 . UID ) )
foundSub16After := langext . ArrAny ( subs16After . Subscriptions , func ( v subobj ) bool { return v . SubscriptionId == subscriptionID } )
tt . AssertEqual ( t , "post-check user16 subs incoming" , false , foundSub16After )
}