2023-03-12 15:00:57 +00:00
// GoToSocial
// Copyright (C) GoToSocial Authors admin@gotosocial.org
// SPDX-License-Identifier: AGPL-3.0-or-later
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
2022-05-23 15:40:03 +00:00
package typeutils_test
import (
"context"
"encoding/json"
"testing"
"github.com/stretchr/testify/suite"
2023-02-02 13:08:13 +00:00
"github.com/superseriousbusiness/gotosocial/internal/config"
"github.com/superseriousbusiness/gotosocial/internal/db"
2024-05-06 11:49:08 +00:00
statusfilter "github.com/superseriousbusiness/gotosocial/internal/filter/status"
2022-05-24 16:20:13 +00:00
"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
2023-03-31 13:01:29 +00:00
"github.com/superseriousbusiness/gotosocial/testrig"
2022-05-23 15:40:03 +00:00
)
type InternalToFrontendTestSuite struct {
TypeUtilsTestSuite
}
func ( suite * InternalToFrontendTestSuite ) TestAccountToFrontend ( ) {
testAccount := suite . testAccounts [ "local_account_1" ] // take zork for this test
apiAccount , err := suite . typeconverter . AccountToAPIAccountPublic ( context . Background ( ) , testAccount )
suite . NoError ( err )
suite . NotNil ( apiAccount )
2023-01-13 16:02:45 +00:00
b , err := json . MarshalIndent ( apiAccount , "" , " " )
2022-05-23 15:40:03 +00:00
suite . NoError ( err )
2023-01-13 16:02:45 +00:00
suite . Equal ( ` {
"id" : "01F8MH1H7YV1Z7D2C8K2730QBF" ,
"username" : "the_mighty_zork" ,
"acct" : "the_mighty_zork" ,
"display_name" : "original zork (he/they)" ,
"locked" : false ,
2023-02-16 13:20:23 +00:00
"discoverable" : true ,
2023-01-13 16:02:45 +00:00
"bot" : false ,
"created_at" : "2022-05-20T11:09:18.000Z" ,
"note" : "\u003cp\u003ehey yo this is my profile!\u003c/p\u003e" ,
"url" : "http://localhost:8080/@the_mighty_zork" ,
"avatar" : "http://localhost:8080/fileserver/01F8MH1H7YV1Z7D2C8K2730QBF/avatar/original/01F8MH58A357CV5K7R7TJMSH6S.jpg" ,
"avatar_static" : "http://localhost:8080/fileserver/01F8MH1H7YV1Z7D2C8K2730QBF/avatar/small/01F8MH58A357CV5K7R7TJMSH6S.jpg" ,
"header" : "http://localhost:8080/fileserver/01F8MH1H7YV1Z7D2C8K2730QBF/header/original/01PFPMWK2FF0D9WMHEJHR07C3Q.jpg" ,
"header_static" : "http://localhost:8080/fileserver/01F8MH1H7YV1Z7D2C8K2730QBF/header/small/01PFPMWK2FF0D9WMHEJHR07C3Q.jpg" ,
"followers_count" : 2 ,
"following_count" : 2 ,
2023-12-10 11:36:00 +00:00
"statuses_count" : 7 ,
"last_status_at" : "2023-12-10T09:24:00.000Z" ,
2023-01-13 16:02:45 +00:00
"emojis" : [ ] ,
"fields" : [ ] ,
"enable_rss" : true ,
2023-02-20 16:00:44 +00:00
"role" : {
"name" : "user"
}
2023-01-13 16:02:45 +00:00
} ` , string ( b ) )
2022-05-23 15:40:03 +00:00
}
2024-01-16 16:22:44 +00:00
func ( suite * InternalToFrontendTestSuite ) TestAccountToFrontendAliasedAndMoved ( ) {
// Take zork for this test.
var testAccount = new ( gtsmodel . Account )
* testAccount = * suite . testAccounts [ "local_account_1" ]
// Update zork to indicate that he's moved to turtle.
// This is a bit weird but it's just for this test.
movedTo := suite . testAccounts [ "local_account_2" ]
testAccount . MovedToURI = movedTo . URI
testAccount . AlsoKnownAsURIs = [ ] string { movedTo . URI }
if err := suite . state . DB . UpdateAccount ( context . Background ( ) , testAccount , "moved_to_uri" ) ; err != nil {
suite . FailNow ( err . Error ( ) )
}
apiAccount , err := suite . typeconverter . AccountToAPIAccountSensitive ( context . Background ( ) , testAccount )
suite . NoError ( err )
suite . NotNil ( apiAccount )
// moved and also_known_as_uris
// should both be set now.
b , err := json . MarshalIndent ( apiAccount , "" , " " )
suite . NoError ( err )
suite . Equal ( ` {
"id" : "01F8MH1H7YV1Z7D2C8K2730QBF" ,
"username" : "the_mighty_zork" ,
"acct" : "the_mighty_zork" ,
"display_name" : "original zork (he/they)" ,
"locked" : false ,
"discoverable" : true ,
"bot" : false ,
"created_at" : "2022-05-20T11:09:18.000Z" ,
"note" : "\u003cp\u003ehey yo this is my profile!\u003c/p\u003e" ,
"url" : "http://localhost:8080/@the_mighty_zork" ,
"avatar" : "http://localhost:8080/fileserver/01F8MH1H7YV1Z7D2C8K2730QBF/avatar/original/01F8MH58A357CV5K7R7TJMSH6S.jpg" ,
"avatar_static" : "http://localhost:8080/fileserver/01F8MH1H7YV1Z7D2C8K2730QBF/avatar/small/01F8MH58A357CV5K7R7TJMSH6S.jpg" ,
"header" : "http://localhost:8080/fileserver/01F8MH1H7YV1Z7D2C8K2730QBF/header/original/01PFPMWK2FF0D9WMHEJHR07C3Q.jpg" ,
"header_static" : "http://localhost:8080/fileserver/01F8MH1H7YV1Z7D2C8K2730QBF/header/small/01PFPMWK2FF0D9WMHEJHR07C3Q.jpg" ,
"followers_count" : 2 ,
"following_count" : 2 ,
"statuses_count" : 7 ,
"last_status_at" : "2023-12-10T09:24:00.000Z" ,
"emojis" : [ ] ,
"fields" : [ ] ,
"source" : {
"privacy" : "public" ,
"sensitive" : false ,
"language" : "en" ,
"status_content_type" : "text/plain" ,
"note" : "hey yo this is my profile!" ,
"fields" : [ ] ,
"follow_requests_count" : 0 ,
"also_known_as_uris" : [
"http://localhost:8080/users/1happyturtle"
]
} ,
"enable_rss" : true ,
"role" : {
"name" : "user"
} ,
"moved" : {
"id" : "01F8MH5NBDF2MV7CTC4Q5128HF" ,
"username" : "1happyturtle" ,
"acct" : "1happyturtle" ,
"display_name" : "happy little turtle :3" ,
"locked" : true ,
"discoverable" : false ,
"bot" : false ,
"created_at" : "2022-06-04T13:12:00.000Z" ,
"note" : "\u003cp\u003ei post about things that concern me\u003c/p\u003e" ,
"url" : "http://localhost:8080/@1happyturtle" ,
"avatar" : "" ,
"avatar_static" : "" ,
"header" : "http://localhost:8080/assets/default_header.png" ,
"header_static" : "http://localhost:8080/assets/default_header.png" ,
"followers_count" : 1 ,
"following_count" : 1 ,
"statuses_count" : 8 ,
"last_status_at" : "2021-07-28T08:40:37.000Z" ,
"emojis" : [ ] ,
"fields" : [
{
"name" : "should you follow me?" ,
"value" : "maybe!" ,
"verified_at" : null
} ,
{
"name" : "age" ,
"value" : "120" ,
"verified_at" : null
}
] ,
2024-04-02 09:42:24 +00:00
"hide_collections" : true ,
2024-01-16 16:22:44 +00:00
"role" : {
"name" : "user"
}
}
} ` , string ( b ) )
}
2022-09-26 09:56:01 +00:00
func ( suite * InternalToFrontendTestSuite ) TestAccountToFrontendWithEmojiStruct ( ) {
2023-05-07 17:53:21 +00:00
testAccount := & gtsmodel . Account { }
* testAccount = * suite . testAccounts [ "local_account_1" ] // take zork for this test
2022-09-26 09:56:01 +00:00
testEmoji := suite . testEmojis [ "rainbow" ]
2022-10-03 08:46:11 +00:00
2022-09-26 09:56:01 +00:00
testAccount . Emojis = [ ] * gtsmodel . Emoji { testEmoji }
2023-05-07 17:53:21 +00:00
testAccount . EmojiIDs = [ ] string { testEmoji . ID }
2022-10-03 08:46:11 +00:00
2022-09-26 09:56:01 +00:00
apiAccount , err := suite . typeconverter . AccountToAPIAccountPublic ( context . Background ( ) , testAccount )
suite . NoError ( err )
suite . NotNil ( apiAccount )
2023-01-13 16:02:45 +00:00
b , err := json . MarshalIndent ( apiAccount , "" , " " )
2022-09-26 09:56:01 +00:00
suite . NoError ( err )
2023-01-13 16:02:45 +00:00
suite . Equal ( ` {
"id" : "01F8MH1H7YV1Z7D2C8K2730QBF" ,
"username" : "the_mighty_zork" ,
"acct" : "the_mighty_zork" ,
"display_name" : "original zork (he/they)" ,
"locked" : false ,
2023-02-16 13:20:23 +00:00
"discoverable" : true ,
2023-01-13 16:02:45 +00:00
"bot" : false ,
"created_at" : "2022-05-20T11:09:18.000Z" ,
"note" : "\u003cp\u003ehey yo this is my profile!\u003c/p\u003e" ,
"url" : "http://localhost:8080/@the_mighty_zork" ,
"avatar" : "http://localhost:8080/fileserver/01F8MH1H7YV1Z7D2C8K2730QBF/avatar/original/01F8MH58A357CV5K7R7TJMSH6S.jpg" ,
"avatar_static" : "http://localhost:8080/fileserver/01F8MH1H7YV1Z7D2C8K2730QBF/avatar/small/01F8MH58A357CV5K7R7TJMSH6S.jpg" ,
"header" : "http://localhost:8080/fileserver/01F8MH1H7YV1Z7D2C8K2730QBF/header/original/01PFPMWK2FF0D9WMHEJHR07C3Q.jpg" ,
"header_static" : "http://localhost:8080/fileserver/01F8MH1H7YV1Z7D2C8K2730QBF/header/small/01PFPMWK2FF0D9WMHEJHR07C3Q.jpg" ,
"followers_count" : 2 ,
"following_count" : 2 ,
2023-12-10 11:36:00 +00:00
"statuses_count" : 7 ,
"last_status_at" : "2023-12-10T09:24:00.000Z" ,
2023-01-13 16:02:45 +00:00
"emojis" : [
{
"shortcode" : "rainbow" ,
"url" : "http://localhost:8080/fileserver/01AY6P665V14JJR0AFVRT7311Y/emoji/original/01F8MH9H8E4VG3KDYJR9EGPXCQ.png" ,
"static_url" : "http://localhost:8080/fileserver/01AY6P665V14JJR0AFVRT7311Y/emoji/static/01F8MH9H8E4VG3KDYJR9EGPXCQ.png" ,
"visible_in_picker" : true ,
"category" : "reactions"
}
] ,
"fields" : [ ] ,
"enable_rss" : true ,
2023-02-20 16:00:44 +00:00
"role" : {
"name" : "user"
}
2023-01-13 16:02:45 +00:00
} ` , string ( b ) )
2022-09-26 09:56:01 +00:00
}
func ( suite * InternalToFrontendTestSuite ) TestAccountToFrontendWithEmojiIDs ( ) {
testAccount := suite . testAccounts [ "local_account_1" ] // take zork for this test
testEmoji := suite . testEmojis [ "rainbow" ]
2022-10-03 08:46:11 +00:00
2022-09-26 09:56:01 +00:00
testAccount . EmojiIDs = [ ] string { testEmoji . ID }
2022-10-03 08:46:11 +00:00
2022-09-26 09:56:01 +00:00
apiAccount , err := suite . typeconverter . AccountToAPIAccountPublic ( context . Background ( ) , testAccount )
suite . NoError ( err )
suite . NotNil ( apiAccount )
2023-01-13 16:02:45 +00:00
b , err := json . MarshalIndent ( apiAccount , "" , " " )
2022-09-26 09:56:01 +00:00
suite . NoError ( err )
2023-01-13 16:02:45 +00:00
suite . Equal ( ` {
"id" : "01F8MH1H7YV1Z7D2C8K2730QBF" ,
"username" : "the_mighty_zork" ,
"acct" : "the_mighty_zork" ,
"display_name" : "original zork (he/they)" ,
"locked" : false ,
2023-02-16 13:20:23 +00:00
"discoverable" : true ,
2023-01-13 16:02:45 +00:00
"bot" : false ,
"created_at" : "2022-05-20T11:09:18.000Z" ,
"note" : "\u003cp\u003ehey yo this is my profile!\u003c/p\u003e" ,
"url" : "http://localhost:8080/@the_mighty_zork" ,
"avatar" : "http://localhost:8080/fileserver/01F8MH1H7YV1Z7D2C8K2730QBF/avatar/original/01F8MH58A357CV5K7R7TJMSH6S.jpg" ,
"avatar_static" : "http://localhost:8080/fileserver/01F8MH1H7YV1Z7D2C8K2730QBF/avatar/small/01F8MH58A357CV5K7R7TJMSH6S.jpg" ,
"header" : "http://localhost:8080/fileserver/01F8MH1H7YV1Z7D2C8K2730QBF/header/original/01PFPMWK2FF0D9WMHEJHR07C3Q.jpg" ,
"header_static" : "http://localhost:8080/fileserver/01F8MH1H7YV1Z7D2C8K2730QBF/header/small/01PFPMWK2FF0D9WMHEJHR07C3Q.jpg" ,
"followers_count" : 2 ,
"following_count" : 2 ,
2023-12-10 11:36:00 +00:00
"statuses_count" : 7 ,
"last_status_at" : "2023-12-10T09:24:00.000Z" ,
2023-01-13 16:02:45 +00:00
"emojis" : [
{
"shortcode" : "rainbow" ,
"url" : "http://localhost:8080/fileserver/01AY6P665V14JJR0AFVRT7311Y/emoji/original/01F8MH9H8E4VG3KDYJR9EGPXCQ.png" ,
"static_url" : "http://localhost:8080/fileserver/01AY6P665V14JJR0AFVRT7311Y/emoji/static/01F8MH9H8E4VG3KDYJR9EGPXCQ.png" ,
"visible_in_picker" : true ,
"category" : "reactions"
}
] ,
"fields" : [ ] ,
"enable_rss" : true ,
2023-02-20 16:00:44 +00:00
"role" : {
"name" : "user"
}
2023-01-13 16:02:45 +00:00
} ` , string ( b ) )
2022-09-26 09:56:01 +00:00
}
2022-08-06 10:09:21 +00:00
func ( suite * InternalToFrontendTestSuite ) TestAccountToFrontendSensitive ( ) {
testAccount := suite . testAccounts [ "local_account_1" ] // take zork for this test
apiAccount , err := suite . typeconverter . AccountToAPIAccountSensitive ( context . Background ( ) , testAccount )
suite . NoError ( err )
suite . NotNil ( apiAccount )
2023-01-13 16:02:45 +00:00
b , err := json . MarshalIndent ( apiAccount , "" , " " )
2022-08-06 10:09:21 +00:00
suite . NoError ( err )
2023-01-13 16:02:45 +00:00
suite . Equal ( ` {
"id" : "01F8MH1H7YV1Z7D2C8K2730QBF" ,
"username" : "the_mighty_zork" ,
"acct" : "the_mighty_zork" ,
"display_name" : "original zork (he/they)" ,
"locked" : false ,
2023-02-16 13:20:23 +00:00
"discoverable" : true ,
2023-01-13 16:02:45 +00:00
"bot" : false ,
"created_at" : "2022-05-20T11:09:18.000Z" ,
"note" : "\u003cp\u003ehey yo this is my profile!\u003c/p\u003e" ,
"url" : "http://localhost:8080/@the_mighty_zork" ,
"avatar" : "http://localhost:8080/fileserver/01F8MH1H7YV1Z7D2C8K2730QBF/avatar/original/01F8MH58A357CV5K7R7TJMSH6S.jpg" ,
"avatar_static" : "http://localhost:8080/fileserver/01F8MH1H7YV1Z7D2C8K2730QBF/avatar/small/01F8MH58A357CV5K7R7TJMSH6S.jpg" ,
"header" : "http://localhost:8080/fileserver/01F8MH1H7YV1Z7D2C8K2730QBF/header/original/01PFPMWK2FF0D9WMHEJHR07C3Q.jpg" ,
"header_static" : "http://localhost:8080/fileserver/01F8MH1H7YV1Z7D2C8K2730QBF/header/small/01PFPMWK2FF0D9WMHEJHR07C3Q.jpg" ,
"followers_count" : 2 ,
"following_count" : 2 ,
2023-12-10 11:36:00 +00:00
"statuses_count" : 7 ,
"last_status_at" : "2023-12-10T09:24:00.000Z" ,
2023-01-13 16:02:45 +00:00
"emojis" : [ ] ,
"fields" : [ ] ,
"source" : {
"privacy" : "public" ,
"sensitive" : false ,
"language" : "en" ,
2023-03-02 11:06:40 +00:00
"status_content_type" : "text/plain" ,
2023-01-13 16:02:45 +00:00
"note" : "hey yo this is my profile!" ,
"fields" : [ ] ,
"follow_requests_count" : 0
} ,
"enable_rss" : true ,
2023-02-20 16:00:44 +00:00
"role" : {
"name" : "user"
}
2023-01-13 16:02:45 +00:00
} ` , string ( b ) )
2022-08-06 10:09:21 +00:00
}
2023-05-07 17:53:21 +00:00
func ( suite * InternalToFrontendTestSuite ) TestAccountToFrontendPublicPunycode ( ) {
testAccount := suite . testAccounts [ "remote_account_4" ]
apiAccount , err := suite . typeconverter . AccountToAPIAccountPublic ( context . Background ( ) , testAccount )
suite . NoError ( err )
suite . NotNil ( apiAccount )
b , err := json . MarshalIndent ( apiAccount , "" , " " )
suite . NoError ( err )
// Even though account domain is stored in
// punycode, it should be served in its
// unicode representation in the 'acct' field.
suite . Equal ( ` {
"id" : "07GZRBAEMBNKGZ8Z9VSKSXKR98" ,
"username" : "üser" ,
"acct" : "üser@ëxample.org" ,
"display_name" : "" ,
"locked" : false ,
"discoverable" : false ,
"bot" : false ,
"created_at" : "2020-08-10T12:13:28.000Z" ,
"note" : "" ,
"url" : "https://xn--xample-ova.org/users/@%C3%BCser" ,
"avatar" : "" ,
"avatar_static" : "" ,
"header" : "http://localhost:8080/assets/default_header.png" ,
"header_static" : "http://localhost:8080/assets/default_header.png" ,
"followers_count" : 0 ,
"following_count" : 0 ,
"statuses_count" : 0 ,
"last_status_at" : null ,
"emojis" : [ ] ,
"fields" : [ ]
} ` , string ( b ) )
}
2023-05-09 15:05:35 +00:00
func ( suite * InternalToFrontendTestSuite ) TestLocalInstanceAccountToFrontendPublic ( ) {
ctx := context . Background ( )
testAccount , err := suite . db . GetInstanceAccount ( ctx , "" )
if err != nil {
suite . FailNow ( err . Error ( ) )
}
apiAccount , err := suite . typeconverter . AccountToAPIAccountPublic ( ctx , testAccount )
suite . NoError ( err )
suite . NotNil ( apiAccount )
b , err := json . MarshalIndent ( apiAccount , "" , " " )
suite . NoError ( err )
suite . Equal ( ` {
"id" : "01AY6P665V14JJR0AFVRT7311Y" ,
"username" : "localhost:8080" ,
"acct" : "localhost:8080" ,
"display_name" : "" ,
"locked" : false ,
"discoverable" : true ,
"bot" : false ,
"created_at" : "2020-05-17T13:10:59.000Z" ,
"note" : "" ,
"url" : "http://localhost:8080/@localhost:8080" ,
"avatar" : "" ,
"avatar_static" : "" ,
"header" : "http://localhost:8080/assets/default_header.png" ,
"header_static" : "http://localhost:8080/assets/default_header.png" ,
"followers_count" : 0 ,
"following_count" : 0 ,
"statuses_count" : 0 ,
"last_status_at" : null ,
"emojis" : [ ] ,
"fields" : [ ]
} ` , string ( b ) )
}
func ( suite * InternalToFrontendTestSuite ) TestLocalInstanceAccountToFrontendBlocked ( ) {
ctx := context . Background ( )
testAccount , err := suite . db . GetInstanceAccount ( ctx , "" )
if err != nil {
suite . FailNow ( err . Error ( ) )
}
apiAccount , err := suite . typeconverter . AccountToAPIAccountBlocked ( ctx , testAccount )
suite . NoError ( err )
suite . NotNil ( apiAccount )
b , err := json . MarshalIndent ( apiAccount , "" , " " )
suite . NoError ( err )
suite . Equal ( ` {
"id" : "01AY6P665V14JJR0AFVRT7311Y" ,
"username" : "localhost:8080" ,
"acct" : "localhost:8080" ,
"display_name" : "" ,
"locked" : false ,
"discoverable" : false ,
"bot" : false ,
"created_at" : "2020-05-17T13:10:59.000Z" ,
"note" : "" ,
"url" : "http://localhost:8080/@localhost:8080" ,
"avatar" : "" ,
"avatar_static" : "" ,
2023-10-30 18:01:00 +00:00
"header" : "http://localhost:8080/assets/default_header.png" ,
"header_static" : "http://localhost:8080/assets/default_header.png" ,
2023-05-09 15:05:35 +00:00
"followers_count" : 0 ,
"following_count" : 0 ,
"statuses_count" : 0 ,
"last_status_at" : null ,
"emojis" : null ,
"fields" : null
} ` , string ( b ) )
}
2022-05-23 15:40:03 +00:00
func ( suite * InternalToFrontendTestSuite ) TestStatusToFrontend ( ) {
testStatus := suite . testStatuses [ "admin_account_status_1" ]
requestingAccount := suite . testAccounts [ "local_account_1" ]
2024-05-06 11:49:08 +00:00
apiStatus , err := suite . typeconverter . StatusToAPIStatus ( context . Background ( ) , testStatus , requestingAccount , statusfilter . FilterContextNone , nil )
2022-05-23 15:40:03 +00:00
suite . NoError ( err )
2023-01-13 16:02:45 +00:00
b , err := json . MarshalIndent ( apiStatus , "" , " " )
2022-05-23 15:40:03 +00:00
suite . NoError ( err )
2023-01-13 16:02:45 +00:00
suite . Equal ( ` {
"id" : "01F8MH75CBF9JFX4ZAD54N0W0R" ,
"created_at" : "2021-10-20T11:36:45.000Z" ,
"in_reply_to_id" : null ,
"in_reply_to_account_id" : null ,
"sensitive" : false ,
"spoiler_text" : "" ,
"visibility" : "public" ,
"language" : "en" ,
"uri" : "http://localhost:8080/users/admin/statuses/01F8MH75CBF9JFX4ZAD54N0W0R" ,
"url" : "http://localhost:8080/@admin/statuses/01F8MH75CBF9JFX4ZAD54N0W0R" ,
2023-11-10 18:29:26 +00:00
"replies_count" : 1 ,
2023-01-13 16:02:45 +00:00
"reblogs_count" : 0 ,
"favourites_count" : 1 ,
"favourited" : true ,
"reblogged" : false ,
"muted" : false ,
"bookmarked" : true ,
"pinned" : false ,
"content" : "hello world! #welcome ! first post on the instance :rainbow: !" ,
"reblog" : null ,
"application" : {
"name" : "superseriousbusiness" ,
"website" : "https://superserious.business"
} ,
"account" : {
"id" : "01F8MH17FWEB39HZJ76B6VXSKF" ,
"username" : "admin" ,
"acct" : "admin" ,
"display_name" : "" ,
"locked" : false ,
2023-02-16 13:20:23 +00:00
"discoverable" : true ,
2023-01-13 16:02:45 +00:00
"bot" : false ,
"created_at" : "2022-05-17T13:10:59.000Z" ,
"note" : "" ,
"url" : "http://localhost:8080/@admin" ,
"avatar" : "" ,
"avatar_static" : "" ,
"header" : "http://localhost:8080/assets/default_header.png" ,
"header_static" : "http://localhost:8080/assets/default_header.png" ,
"followers_count" : 1 ,
"following_count" : 1 ,
"statuses_count" : 4 ,
"last_status_at" : "2021-10-20T10:41:37.000Z" ,
"emojis" : [ ] ,
"fields" : [ ] ,
"enable_rss" : true ,
2023-02-20 16:00:44 +00:00
"role" : {
"name" : "admin"
}
2023-01-13 16:02:45 +00:00
} ,
"media_attachments" : [
{
"id" : "01F8MH6NEM8D7527KZAECTCR76" ,
"type" : "image" ,
"url" : "http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/attachment/original/01F8MH6NEM8D7527KZAECTCR76.jpg" ,
"text_url" : "http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/attachment/original/01F8MH6NEM8D7527KZAECTCR76.jpg" ,
"preview_url" : "http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/attachment/small/01F8MH6NEM8D7527KZAECTCR76.jpg" ,
"remote_url" : null ,
"preview_remote_url" : null ,
"meta" : {
"original" : {
"width" : 1200 ,
"height" : 630 ,
"size" : "1200x630" ,
"aspect" : 1.9047619
} ,
"small" : {
"width" : 256 ,
"height" : 134 ,
"size" : "256x134" ,
"aspect" : 1.9104477
} ,
"focus" : {
"x" : 0 ,
"y" : 0
}
} ,
"description" : "Black and white image of some 50's style text saying: Welcome On Board" ,
"blurhash" : "LNJRdVM{00Rj%Mayt7j[4nWBofRj"
}
] ,
"mentions" : [ ] ,
"tags" : [
{
"name" : "welcome" ,
"url" : "http://localhost:8080/tags/welcome"
}
] ,
"emojis" : [
{
"shortcode" : "rainbow" ,
"url" : "http://localhost:8080/fileserver/01AY6P665V14JJR0AFVRT7311Y/emoji/original/01F8MH9H8E4VG3KDYJR9EGPXCQ.png" ,
"static_url" : "http://localhost:8080/fileserver/01AY6P665V14JJR0AFVRT7311Y/emoji/static/01F8MH9H8E4VG3KDYJR9EGPXCQ.png" ,
"visible_in_picker" : true ,
"category" : "reactions"
}
] ,
"card" : null ,
"poll" : null ,
"text" : "hello world! #welcome ! first post on the instance :rainbow: !"
} ` , string ( b ) )
2022-12-15 08:41:49 +00:00
}
2024-05-06 11:49:08 +00:00
// Test that a status which is filtered with a warn filter by the requesting user has `filtered` set correctly.
func ( suite * InternalToFrontendTestSuite ) TestWarnFilteredStatusToFrontend ( ) {
testStatus := suite . testStatuses [ "admin_account_status_1" ]
testStatus . Content += " fnord"
testStatus . Text += " fnord"
requestingAccount := suite . testAccounts [ "local_account_1" ]
expectedMatchingFilter := suite . testFilters [ "local_account_1_filter_1" ]
expectedMatchingFilterKeyword := suite . testFilterKeywords [ "local_account_1_filter_1_keyword_1" ]
2024-05-21 13:20:19 +00:00
suite . NoError ( expectedMatchingFilterKeyword . Compile ( ) )
2024-05-06 11:49:08 +00:00
expectedMatchingFilterKeyword . Filter = expectedMatchingFilter
expectedMatchingFilter . Keywords = [ ] * gtsmodel . FilterKeyword { expectedMatchingFilterKeyword }
requestingAccountFilters := [ ] * gtsmodel . Filter { expectedMatchingFilter }
apiStatus , err := suite . typeconverter . StatusToAPIStatus (
context . Background ( ) ,
testStatus ,
requestingAccount ,
statusfilter . FilterContextHome ,
requestingAccountFilters ,
)
suite . NoError ( err )
b , err := json . MarshalIndent ( apiStatus , "" , " " )
suite . NoError ( err )
suite . Equal ( ` {
"id" : "01F8MH75CBF9JFX4ZAD54N0W0R" ,
"created_at" : "2021-10-20T11:36:45.000Z" ,
"in_reply_to_id" : null ,
"in_reply_to_account_id" : null ,
"sensitive" : false ,
"spoiler_text" : "" ,
"visibility" : "public" ,
"language" : "en" ,
"uri" : "http://localhost:8080/users/admin/statuses/01F8MH75CBF9JFX4ZAD54N0W0R" ,
"url" : "http://localhost:8080/@admin/statuses/01F8MH75CBF9JFX4ZAD54N0W0R" ,
"replies_count" : 1 ,
"reblogs_count" : 0 ,
"favourites_count" : 1 ,
"favourited" : true ,
"reblogged" : false ,
"muted" : false ,
"bookmarked" : true ,
"pinned" : false ,
"content" : "hello world! #welcome ! first post on the instance :rainbow: ! fnord" ,
"reblog" : null ,
"application" : {
"name" : "superseriousbusiness" ,
"website" : "https://superserious.business"
} ,
"account" : {
"id" : "01F8MH17FWEB39HZJ76B6VXSKF" ,
"username" : "admin" ,
"acct" : "admin" ,
"display_name" : "" ,
"locked" : false ,
"discoverable" : true ,
"bot" : false ,
"created_at" : "2022-05-17T13:10:59.000Z" ,
"note" : "" ,
"url" : "http://localhost:8080/@admin" ,
"avatar" : "" ,
"avatar_static" : "" ,
"header" : "http://localhost:8080/assets/default_header.png" ,
"header_static" : "http://localhost:8080/assets/default_header.png" ,
"followers_count" : 1 ,
"following_count" : 1 ,
"statuses_count" : 4 ,
"last_status_at" : "2021-10-20T10:41:37.000Z" ,
"emojis" : [ ] ,
"fields" : [ ] ,
"enable_rss" : true ,
"role" : {
"name" : "admin"
}
} ,
"media_attachments" : [
{
"id" : "01F8MH6NEM8D7527KZAECTCR76" ,
"type" : "image" ,
"url" : "http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/attachment/original/01F8MH6NEM8D7527KZAECTCR76.jpg" ,
"text_url" : "http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/attachment/original/01F8MH6NEM8D7527KZAECTCR76.jpg" ,
"preview_url" : "http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/attachment/small/01F8MH6NEM8D7527KZAECTCR76.jpg" ,
"remote_url" : null ,
"preview_remote_url" : null ,
"meta" : {
"original" : {
"width" : 1200 ,
"height" : 630 ,
"size" : "1200x630" ,
"aspect" : 1.9047619
} ,
"small" : {
"width" : 256 ,
"height" : 134 ,
"size" : "256x134" ,
"aspect" : 1.9104477
} ,
"focus" : {
"x" : 0 ,
"y" : 0
}
} ,
"description" : "Black and white image of some 50's style text saying: Welcome On Board" ,
"blurhash" : "LNJRdVM{00Rj%Mayt7j[4nWBofRj"
}
] ,
"mentions" : [ ] ,
"tags" : [
{
"name" : "welcome" ,
"url" : "http://localhost:8080/tags/welcome"
}
] ,
"emojis" : [
{
"shortcode" : "rainbow" ,
"url" : "http://localhost:8080/fileserver/01AY6P665V14JJR0AFVRT7311Y/emoji/original/01F8MH9H8E4VG3KDYJR9EGPXCQ.png" ,
"static_url" : "http://localhost:8080/fileserver/01AY6P665V14JJR0AFVRT7311Y/emoji/static/01F8MH9H8E4VG3KDYJR9EGPXCQ.png" ,
"visible_in_picker" : true ,
"category" : "reactions"
}
] ,
"card" : null ,
"poll" : null ,
"text" : "hello world! #welcome ! first post on the instance :rainbow: ! fnord" ,
"filtered" : [
{
"filter" : {
"id" : "01HN26VM6KZTW1ANNRVSBMA461" ,
"title" : "fnord" ,
"context" : [
"home" ,
"public"
] ,
"expires_at" : null ,
"filter_action" : "warn" ,
"keywords" : [
{
"id" : "01HN272TAVWAXX72ZX4M8JZ0PS" ,
"keyword" : "fnord" ,
"whole_word" : true
}
] ,
"statuses" : [ ]
} ,
"keyword_matches" : [
"fnord"
] ,
"status_matches" : [ ]
}
]
} ` , string ( b ) )
}
// Test that a status which is filtered with a hide filter by the requesting user results in the ErrHideStatus error.
func ( suite * InternalToFrontendTestSuite ) TestHideFilteredStatusToFrontend ( ) {
testStatus := suite . testStatuses [ "admin_account_status_1" ]
testStatus . Content += " fnord"
testStatus . Text += " fnord"
requestingAccount := suite . testAccounts [ "local_account_1" ]
expectedMatchingFilter := suite . testFilters [ "local_account_1_filter_1" ]
expectedMatchingFilter . Action = gtsmodel . FilterActionHide
expectedMatchingFilterKeyword := suite . testFilterKeywords [ "local_account_1_filter_1_keyword_1" ]
2024-05-21 13:20:19 +00:00
suite . NoError ( expectedMatchingFilterKeyword . Compile ( ) )
2024-05-06 11:49:08 +00:00
expectedMatchingFilterKeyword . Filter = expectedMatchingFilter
expectedMatchingFilter . Keywords = [ ] * gtsmodel . FilterKeyword { expectedMatchingFilterKeyword }
requestingAccountFilters := [ ] * gtsmodel . Filter { expectedMatchingFilter }
_ , err := suite . typeconverter . StatusToAPIStatus (
context . Background ( ) ,
testStatus ,
requestingAccount ,
statusfilter . FilterContextHome ,
requestingAccountFilters ,
)
suite . ErrorIs ( err , statusfilter . ErrHideStatus )
}
2023-11-10 18:29:26 +00:00
func ( suite * InternalToFrontendTestSuite ) TestStatusToFrontendUnknownAttachments ( ) {
testStatus := suite . testStatuses [ "remote_account_2_status_1" ]
requestingAccount := suite . testAccounts [ "admin_account" ]
2024-05-06 11:49:08 +00:00
apiStatus , err := suite . typeconverter . StatusToAPIStatus ( context . Background ( ) , testStatus , requestingAccount , statusfilter . FilterContextNone , nil )
2023-11-10 18:29:26 +00:00
suite . NoError ( err )
b , err := json . MarshalIndent ( apiStatus , "" , " " )
suite . NoError ( err )
suite . Equal ( ` {
"id" : "01HE7XJ1CG84TBKH5V9XKBVGF5" ,
"created_at" : "2023-11-02T10:44:25.000Z" ,
"in_reply_to_id" : "01F8MH75CBF9JFX4ZAD54N0W0R" ,
"in_reply_to_account_id" : "01F8MH17FWEB39HZJ76B6VXSKF" ,
2023-12-09 15:54:38 +00:00
"sensitive" : true ,
"spoiler_text" : "some unknown media included" ,
2023-11-10 18:29:26 +00:00
"visibility" : "public" ,
"language" : "en" ,
"uri" : "http://example.org/users/Some_User/statuses/01HE7XJ1CG84TBKH5V9XKBVGF5" ,
"url" : "http://example.org/@Some_User/statuses/01HE7XJ1CG84TBKH5V9XKBVGF5" ,
"replies_count" : 0 ,
"reblogs_count" : 0 ,
"favourites_count" : 0 ,
"favourited" : false ,
"reblogged" : false ,
"muted" : false ,
"bookmarked" : false ,
"pinned" : false ,
2024-01-09 09:41:32 +00:00
"content" : "\u003cp\u003ehi \u003cspan class=\"h-card\"\u003e\u003ca href=\"http://localhost:8080/@admin\" class=\"u-url mention\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003e@\u003cspan\u003eadmin\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e here's some media for ya\u003c/p\u003e\u003chr\u003e\u003cp\u003e\u003ci lang=\"en\"\u003eℹ ️ Note from localhost:8080: 2 attachments in this status could not be downloaded. Treat the following external links with care:\u003c/i\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"http://example.org/fileserver/01HE7Y659ZWZ02JM4AWYJZ176Q/attachment/original/01HE7ZGJYTSYMXF927GF9353KR.svg\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003e01HE7ZGJYTSYMXF927GF9353KR.svg\u003c/a\u003e [SVG line art of a sloth, public domain]\u003c/li\u003e\u003cli\u003e\u003ca href=\"http://example.org/fileserver/01HE7Y659ZWZ02JM4AWYJZ176Q/attachment/original/01HE892Y8ZS68TQCNPX7J888P3.mp3\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003e01HE892Y8ZS68TQCNPX7J888P3.mp3\u003c/a\u003e [Jolly salsa song, public domain.]\u003c/li\u003e\u003c/ul\u003e" ,
2023-11-10 18:29:26 +00:00
"reblog" : null ,
"account" : {
"id" : "01FHMQX3GAABWSM0S2VZEC2SWC" ,
"username" : "Some_User" ,
"acct" : "Some_User@example.org" ,
"display_name" : "some user" ,
"locked" : true ,
"discoverable" : true ,
"bot" : false ,
"created_at" : "2020-08-10T12:13:28.000Z" ,
"note" : "i'm a real son of a gun" ,
"url" : "http://example.org/@Some_User" ,
"avatar" : "" ,
"avatar_static" : "" ,
"header" : "http://localhost:8080/assets/default_header.png" ,
"header_static" : "http://localhost:8080/assets/default_header.png" ,
"followers_count" : 0 ,
"following_count" : 0 ,
"statuses_count" : 1 ,
"last_status_at" : "2023-11-02T10:44:25.000Z" ,
"emojis" : [ ] ,
"fields" : [ ]
} ,
"media_attachments" : [
{
"id" : "01HE7Y3C432WRSNS10EZM86SA5" ,
"type" : "image" ,
"url" : "http://localhost:8080/fileserver/01FHMQX3GAABWSM0S2VZEC2SWC/attachment/original/01HE7Y3C432WRSNS10EZM86SA5.jpg" ,
"text_url" : "http://localhost:8080/fileserver/01FHMQX3GAABWSM0S2VZEC2SWC/attachment/original/01HE7Y3C432WRSNS10EZM86SA5.jpg" ,
"preview_url" : "http://localhost:8080/fileserver/01FHMQX3GAABWSM0S2VZEC2SWC/attachment/small/01HE7Y3C432WRSNS10EZM86SA5.jpg" ,
"remote_url" : "http://example.org/fileserver/01HE7Y659ZWZ02JM4AWYJZ176Q/attachment/original/01HE7Y6G0EMCKST3Q0914WW0MS.jpg" ,
"preview_remote_url" : null ,
"meta" : {
"original" : {
"width" : 3000 ,
"height" : 2000 ,
"size" : "3000x2000" ,
"aspect" : 1.5
} ,
"small" : {
"width" : 512 ,
"height" : 341 ,
"size" : "512x341" ,
"aspect" : 1.5014663
} ,
"focus" : {
"x" : 0 ,
"y" : 0
}
} ,
"description" : "Photograph of a sloth, Public Domain." ,
"blurhash" : "LNEC{|w}0K9GsEtPM|j[NFbHoeof"
}
2023-12-09 15:54:38 +00:00
] ,
"mentions" : [
{
"id" : "01F8MH17FWEB39HZJ76B6VXSKF" ,
"username" : "admin" ,
"url" : "http://localhost:8080/@admin" ,
"acct" : "admin"
}
] ,
"tags" : [ ] ,
"emojis" : [ ] ,
"card" : null ,
"poll" : null
} ` , string ( b ) )
}
func ( suite * InternalToFrontendTestSuite ) TestStatusToWebStatus ( ) {
testStatus := suite . testStatuses [ "remote_account_2_status_1" ]
requestingAccount := suite . testAccounts [ "admin_account" ]
apiStatus , err := suite . typeconverter . StatusToWebStatus ( context . Background ( ) , testStatus , requestingAccount )
suite . NoError ( err )
// MediaAttachments should inherit
// the status's sensitive flag.
for _ , a := range apiStatus . MediaAttachments {
if ! a . Sensitive {
suite . FailNow ( "expected sensitive attachment" )
}
}
// We don't really serialize web statuses to JSON
// ever, but it *is* a nice way of checking it.
b , err := json . MarshalIndent ( apiStatus , "" , " " )
suite . NoError ( err )
suite . Equal ( ` {
"id" : "01HE7XJ1CG84TBKH5V9XKBVGF5" ,
"created_at" : "2023-11-02T10:44:25.000Z" ,
"in_reply_to_id" : "01F8MH75CBF9JFX4ZAD54N0W0R" ,
"in_reply_to_account_id" : "01F8MH17FWEB39HZJ76B6VXSKF" ,
"sensitive" : true ,
"spoiler_text" : "some unknown media included" ,
"visibility" : "public" ,
"language" : "en" ,
"uri" : "http://example.org/users/Some_User/statuses/01HE7XJ1CG84TBKH5V9XKBVGF5" ,
"url" : "http://example.org/@Some_User/statuses/01HE7XJ1CG84TBKH5V9XKBVGF5" ,
"replies_count" : 0 ,
"reblogs_count" : 0 ,
"favourites_count" : 0 ,
"favourited" : false ,
"reblogged" : false ,
"muted" : false ,
"bookmarked" : false ,
"pinned" : false ,
"content" : "\u003cp\u003ehi \u003cspan class=\"h-card\"\u003e\u003ca href=\"http://localhost:8080/@admin\" class=\"u-url mention\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003e@\u003cspan\u003eadmin\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e here's some media for ya\u003c/p\u003e" ,
"reblog" : null ,
"account" : {
"id" : "01FHMQX3GAABWSM0S2VZEC2SWC" ,
"username" : "Some_User" ,
"acct" : "Some_User@example.org" ,
"display_name" : "some user" ,
"locked" : true ,
"discoverable" : true ,
"bot" : false ,
"created_at" : "2020-08-10T12:13:28.000Z" ,
"note" : "i'm a real son of a gun" ,
"url" : "http://example.org/@Some_User" ,
"avatar" : "" ,
"avatar_static" : "" ,
"header" : "http://localhost:8080/assets/default_header.png" ,
"header_static" : "http://localhost:8080/assets/default_header.png" ,
"followers_count" : 0 ,
"following_count" : 0 ,
"statuses_count" : 1 ,
"last_status_at" : "2023-11-02T10:44:25.000Z" ,
"emojis" : [ ] ,
"fields" : [ ]
} ,
"media_attachments" : [
{
"id" : "01HE7Y3C432WRSNS10EZM86SA5" ,
"type" : "image" ,
"url" : "http://localhost:8080/fileserver/01FHMQX3GAABWSM0S2VZEC2SWC/attachment/original/01HE7Y3C432WRSNS10EZM86SA5.jpg" ,
"text_url" : "http://localhost:8080/fileserver/01FHMQX3GAABWSM0S2VZEC2SWC/attachment/original/01HE7Y3C432WRSNS10EZM86SA5.jpg" ,
"preview_url" : "http://localhost:8080/fileserver/01FHMQX3GAABWSM0S2VZEC2SWC/attachment/small/01HE7Y3C432WRSNS10EZM86SA5.jpg" ,
"remote_url" : "http://example.org/fileserver/01HE7Y659ZWZ02JM4AWYJZ176Q/attachment/original/01HE7Y6G0EMCKST3Q0914WW0MS.jpg" ,
"preview_remote_url" : null ,
"meta" : {
"original" : {
"width" : 3000 ,
"height" : 2000 ,
"size" : "3000x2000" ,
"aspect" : 1.5
} ,
"small" : {
"width" : 512 ,
"height" : 341 ,
"size" : "512x341" ,
"aspect" : 1.5014663
} ,
"focus" : {
"x" : 0 ,
"y" : 0
}
} ,
"description" : "Photograph of a sloth, Public Domain." ,
"blurhash" : "LNEC{|w}0K9GsEtPM|j[NFbHoeof"
} ,
{
"id" : "01HE7ZFX9GKA5ZZVD4FACABSS9" ,
"type" : "unknown" ,
"url" : "http://localhost:8080/fileserver/01FHMQX3GAABWSM0S2VZEC2SWC/attachment/original/01HE7ZFX9GKA5ZZVD4FACABSS9.svg" ,
"text_url" : "http://localhost:8080/fileserver/01FHMQX3GAABWSM0S2VZEC2SWC/attachment/original/01HE7ZFX9GKA5ZZVD4FACABSS9.svg" ,
"preview_url" : "http://localhost:8080/fileserver/01FHMQX3GAABWSM0S2VZEC2SWC/attachment/small/01HE7ZFX9GKA5ZZVD4FACABSS9.jpg" ,
"remote_url" : "http://example.org/fileserver/01HE7Y659ZWZ02JM4AWYJZ176Q/attachment/original/01HE7ZGJYTSYMXF927GF9353KR.svg" ,
"preview_remote_url" : null ,
"meta" : null ,
"description" : "SVG line art of a sloth, public domain" ,
"blurhash" : "L26*j+~qE1RP?wxut7ofRlM{R*of"
} ,
{
"id" : "01HE88YG74PVAB81PX2XA9F3FG" ,
"type" : "unknown" ,
"url" : "http://localhost:8080/fileserver/01FHMQX3GAABWSM0S2VZEC2SWC/attachment/original/01HE88YG74PVAB81PX2XA9F3FG.mp3" ,
"text_url" : "http://localhost:8080/fileserver/01FHMQX3GAABWSM0S2VZEC2SWC/attachment/original/01HE88YG74PVAB81PX2XA9F3FG.mp3" ,
"preview_url" : "http://localhost:8080/fileserver/01FHMQX3GAABWSM0S2VZEC2SWC/attachment/small/01HE88YG74PVAB81PX2XA9F3FG.jpg" ,
"remote_url" : "http://example.org/fileserver/01HE7Y659ZWZ02JM4AWYJZ176Q/attachment/original/01HE892Y8ZS68TQCNPX7J888P3.mp3" ,
"preview_remote_url" : null ,
"meta" : null ,
"description" : "Jolly salsa song, public domain." ,
"blurhash" : null
}
2023-11-10 18:29:26 +00:00
] ,
"mentions" : [
{
"id" : "01F8MH17FWEB39HZJ76B6VXSKF" ,
"username" : "admin" ,
"url" : "http://localhost:8080/@admin" ,
"acct" : "admin"
}
] ,
"tags" : [ ] ,
"emojis" : [ ] ,
"card" : null ,
"poll" : null
} ` , string ( b ) )
}
2022-12-15 08:41:49 +00:00
func ( suite * InternalToFrontendTestSuite ) TestStatusToFrontendUnknownLanguage ( ) {
testStatus := & gtsmodel . Status { }
* testStatus = * suite . testStatuses [ "admin_account_status_1" ]
testStatus . Language = ""
requestingAccount := suite . testAccounts [ "local_account_1" ]
2024-05-06 11:49:08 +00:00
apiStatus , err := suite . typeconverter . StatusToAPIStatus ( context . Background ( ) , testStatus , requestingAccount , statusfilter . FilterContextNone , nil )
2022-12-15 08:41:49 +00:00
suite . NoError ( err )
2023-01-13 16:02:45 +00:00
b , err := json . MarshalIndent ( apiStatus , "" , " " )
2022-12-15 08:41:49 +00:00
suite . NoError ( err )
2023-01-13 16:02:45 +00:00
suite . Equal ( ` {
"id" : "01F8MH75CBF9JFX4ZAD54N0W0R" ,
"created_at" : "2021-10-20T11:36:45.000Z" ,
"in_reply_to_id" : null ,
"in_reply_to_account_id" : null ,
"sensitive" : false ,
"spoiler_text" : "" ,
"visibility" : "public" ,
"language" : null ,
"uri" : "http://localhost:8080/users/admin/statuses/01F8MH75CBF9JFX4ZAD54N0W0R" ,
"url" : "http://localhost:8080/@admin/statuses/01F8MH75CBF9JFX4ZAD54N0W0R" ,
2023-11-10 18:29:26 +00:00
"replies_count" : 1 ,
2023-01-13 16:02:45 +00:00
"reblogs_count" : 0 ,
"favourites_count" : 1 ,
"favourited" : true ,
"reblogged" : false ,
"muted" : false ,
"bookmarked" : true ,
"pinned" : false ,
"content" : "hello world! #welcome ! first post on the instance :rainbow: !" ,
"reblog" : null ,
"application" : {
"name" : "superseriousbusiness" ,
"website" : "https://superserious.business"
} ,
"account" : {
"id" : "01F8MH17FWEB39HZJ76B6VXSKF" ,
"username" : "admin" ,
"acct" : "admin" ,
"display_name" : "" ,
"locked" : false ,
2023-02-16 13:20:23 +00:00
"discoverable" : true ,
2023-01-13 16:02:45 +00:00
"bot" : false ,
"created_at" : "2022-05-17T13:10:59.000Z" ,
"note" : "" ,
"url" : "http://localhost:8080/@admin" ,
"avatar" : "" ,
"avatar_static" : "" ,
"header" : "http://localhost:8080/assets/default_header.png" ,
"header_static" : "http://localhost:8080/assets/default_header.png" ,
"followers_count" : 1 ,
"following_count" : 1 ,
"statuses_count" : 4 ,
"last_status_at" : "2021-10-20T10:41:37.000Z" ,
"emojis" : [ ] ,
"fields" : [ ] ,
"enable_rss" : true ,
2023-02-20 16:00:44 +00:00
"role" : {
"name" : "admin"
}
2023-01-13 16:02:45 +00:00
} ,
"media_attachments" : [
{
"id" : "01F8MH6NEM8D7527KZAECTCR76" ,
"type" : "image" ,
"url" : "http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/attachment/original/01F8MH6NEM8D7527KZAECTCR76.jpg" ,
"text_url" : "http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/attachment/original/01F8MH6NEM8D7527KZAECTCR76.jpg" ,
"preview_url" : "http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/attachment/small/01F8MH6NEM8D7527KZAECTCR76.jpg" ,
"remote_url" : null ,
"preview_remote_url" : null ,
"meta" : {
"original" : {
"width" : 1200 ,
"height" : 630 ,
"size" : "1200x630" ,
"aspect" : 1.9047619
} ,
"small" : {
"width" : 256 ,
"height" : 134 ,
"size" : "256x134" ,
"aspect" : 1.9104477
} ,
"focus" : {
"x" : 0 ,
"y" : 0
}
} ,
"description" : "Black and white image of some 50's style text saying: Welcome On Board" ,
"blurhash" : "LNJRdVM{00Rj%Mayt7j[4nWBofRj"
}
] ,
"mentions" : [ ] ,
"tags" : [
{
"name" : "welcome" ,
"url" : "http://localhost:8080/tags/welcome"
}
] ,
"emojis" : [
{
"shortcode" : "rainbow" ,
"url" : "http://localhost:8080/fileserver/01AY6P665V14JJR0AFVRT7311Y/emoji/original/01F8MH9H8E4VG3KDYJR9EGPXCQ.png" ,
"static_url" : "http://localhost:8080/fileserver/01AY6P665V14JJR0AFVRT7311Y/emoji/static/01F8MH9H8E4VG3KDYJR9EGPXCQ.png" ,
"visible_in_picker" : true ,
"category" : "reactions"
}
] ,
"card" : null ,
"poll" : null ,
"text" : "hello world! #welcome ! first post on the instance :rainbow: !"
} ` , string ( b ) )
2022-05-23 15:40:03 +00:00
}
2022-12-22 10:48:28 +00:00
func ( suite * InternalToFrontendTestSuite ) TestVideoAttachmentToFrontend ( ) {
testAttachment := suite . testAttachments [ "local_account_1_status_4_attachment_2" ]
apiAttachment , err := suite . typeconverter . AttachmentToAPIAttachment ( context . Background ( ) , testAttachment )
suite . NoError ( err )
2023-01-13 16:02:45 +00:00
b , err := json . MarshalIndent ( apiAttachment , "" , " " )
2022-12-22 10:48:28 +00:00
suite . NoError ( err )
2023-01-13 16:02:45 +00:00
suite . Equal ( ` {
"id" : "01CDR64G398ADCHXK08WWTHEZ5" ,
"type" : "video" ,
"url" : "http://localhost:8080/fileserver/01F8MH1H7YV1Z7D2C8K2730QBF/attachment/original/01CDR64G398ADCHXK08WWTHEZ5.mp4" ,
"text_url" : "http://localhost:8080/fileserver/01F8MH1H7YV1Z7D2C8K2730QBF/attachment/original/01CDR64G398ADCHXK08WWTHEZ5.mp4" ,
"preview_url" : "http://localhost:8080/fileserver/01F8MH1H7YV1Z7D2C8K2730QBF/attachment/small/01CDR64G398ADCHXK08WWTHEZ5.jpg" ,
"remote_url" : null ,
"preview_remote_url" : null ,
"meta" : {
"original" : {
"width" : 720 ,
"height" : 404 ,
"frame_rate" : "30/1" ,
"duration" : 15.033334 ,
2023-01-16 15:19:17 +00:00
"bitrate" : 1206522
2023-01-13 16:02:45 +00:00
} ,
"small" : {
"width" : 720 ,
"height" : 404 ,
"size" : "720x404" ,
"aspect" : 1.7821782
}
} ,
2023-11-10 18:29:26 +00:00
"description" : "A cow adorably licking another cow!" ,
"blurhash" : null
2023-01-13 16:02:45 +00:00
} ` , string ( b ) )
2022-12-22 10:48:28 +00:00
}
2023-02-02 13:08:13 +00:00
func ( suite * InternalToFrontendTestSuite ) TestInstanceV1ToFrontend ( ) {
ctx := context . Background ( )
i := & gtsmodel . Instance { }
if err := suite . db . GetWhere ( ctx , [ ] db . Where { { Key : "domain" , Value : config . GetHost ( ) } } , i ) ; err != nil {
suite . FailNow ( err . Error ( ) )
2022-05-24 16:20:13 +00:00
}
2023-02-02 13:08:13 +00:00
instance , err := suite . typeconverter . InstanceToAPIV1Instance ( ctx , i )
if err != nil {
suite . FailNow ( err . Error ( ) )
}
2022-05-24 16:20:13 +00:00
2023-02-02 13:08:13 +00:00
b , err := json . MarshalIndent ( instance , "" , " " )
2022-05-24 16:20:13 +00:00
suite . NoError ( err )
2023-08-19 12:33:15 +00:00
// FIXME: "rules" is empty from the database, because it's not fetched through db.GetInstance
2023-01-13 16:02:45 +00:00
suite . Equal ( ` {
2023-02-02 13:08:13 +00:00
"uri" : "http://localhost:8080" ,
"account_domain" : "localhost:8080" ,
"title" : "GoToSocial Testrig Instance" ,
2024-01-05 12:39:31 +00:00
"description" : "\u003cp\u003eHere's a fuller description of the GoToSocial testrig instance.\u003c/p\u003e\u003cp\u003eThis instance is for testing purposes only. It doesn't federate at all. Go check out \u003ca href=\"https://github.com/superseriousbusiness/gotosocial/tree/main/testrig\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003ehttps://github.com/superseriousbusiness/gotosocial/tree/main/testrig\u003c/a\u003e and \u003ca href=\"https://github.com/superseriousbusiness/gotosocial/blob/main/CONTRIBUTING.md#testing\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003ehttps://github.com/superseriousbusiness/gotosocial/blob/main/CONTRIBUTING.md#testing\u003c/a\u003e\u003c/p\u003e\u003cp\u003eUsers on this instance:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cspan class=\"h-card\"\u003e\u003ca href=\"http://localhost:8080/@admin\" class=\"u-url mention\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003e@\u003cspan\u003eadmin\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e (admin!).\u003c/li\u003e\u003cli\u003e\u003cspan class=\"h-card\"\u003e\u003ca href=\"http://localhost:8080/@1happyturtle\" class=\"u-url mention\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003e@\u003cspan\u003e1happyturtle\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e (posts about turtles, we don't know why).\u003c/li\u003e\u003cli\u003e\u003cspan class=\"h-card\"\u003e\u003ca href=\"http://localhost:8080/@the_mighty_zork\" class=\"u-url mention\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003e@\u003cspan\u003ethe_mighty_zork\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e (who knows).\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eIf you need to edit the models for the testrig, you can do so at \u003ccode\u003einternal/testmodels.go\u003c/code\u003e.\u003c/p\u003e" ,
"description_text" : "Here's a fuller description of the GoToSocial testrig instance.\n\nThis instance is for testing purposes only. It doesn't federate at all. Go check out https://github.com/superseriousbusiness/gotosocial/tree/main/testrig and https://github.com/superseriousbusiness/gotosocial/blob/main/CONTRIBUTING.md#testing\n\nUsers on this instance:\n\n- @admin (admin!).\n- @1happyturtle (posts about turtles, we don't know why).\n- @the_mighty_zork (who knows).\n\nIf you need to edit the models for the testrig, you can do so at `+" ` "+ ` internal / testmodels . go ` +" ` "+`." ,
2023-02-02 13:08:13 +00:00
"short_description" : "\u003cp\u003eThis is the GoToSocial testrig. It doesn't federate or anything.\u003c/p\u003e\u003cp\u003eWhen the testrig is shut down, all data on it will be deleted.\u003c/p\u003e\u003cp\u003eDon't use this in production!\u003c/p\u003e" ,
2024-01-05 12:39:31 +00:00
"short_description_text" : "This is the GoToSocial testrig. It doesn't federate or anything.\n\nWhen the testrig is shut down, all data on it will be deleted.\n\nDon't use this in production!" ,
2023-02-02 13:08:13 +00:00
"email" : "admin@example.org" ,
"version" : "0.0.0-testrig" ,
2023-11-17 10:35:28 +00:00
"languages" : [
"nl" ,
"en-gb"
] ,
2023-02-02 13:08:13 +00:00
"registrations" : true ,
"approval_required" : true ,
2023-01-13 16:02:45 +00:00
"invites_enabled" : false ,
2023-02-02 13:08:13 +00:00
"configuration" : {
"statuses" : {
"max_characters" : 5000 ,
"max_media_attachments" : 6 ,
2023-03-02 11:06:40 +00:00
"characters_reserved_per_url" : 25 ,
"supported_mime_types" : [
"text/plain" ,
"text/markdown"
]
2023-02-02 13:08:13 +00:00
} ,
"media_attachments" : {
"supported_mime_types" : [
"image/jpeg" ,
"image/gif" ,
"image/png" ,
"image/webp" ,
"video/mp4"
] ,
"image_size_limit" : 10485760 ,
"image_matrix_limit" : 16777216 ,
"video_size_limit" : 41943040 ,
"video_frame_rate_limit" : 60 ,
"video_matrix_limit" : 16777216
} ,
"polls" : {
"max_options" : 6 ,
"max_characters_per_option" : 50 ,
"min_expiration" : 300 ,
"max_expiration" : 2629746
} ,
"accounts" : {
"allow_custom_css" : true ,
2023-06-13 10:21:26 +00:00
"max_featured_tags" : 10 ,
"max_profile_fields" : 6
2023-02-02 13:08:13 +00:00
} ,
"emojis" : {
"emoji_size_limit" : 51200
}
} ,
"urls" : {
"streaming_api" : "wss://localhost:8080"
} ,
"stats" : {
"domain_count" : 2 ,
2023-12-10 11:36:00 +00:00
"status_count" : 19 ,
2023-02-02 13:08:13 +00:00
"user_count" : 4
} ,
"thumbnail" : "http://localhost:8080/assets/logo.png" ,
"contact_account" : {
"id" : "01F8MH17FWEB39HZJ76B6VXSKF" ,
"username" : "admin" ,
"acct" : "admin" ,
"display_name" : "" ,
"locked" : false ,
2023-02-16 13:20:23 +00:00
"discoverable" : true ,
2023-02-02 13:08:13 +00:00
"bot" : false ,
"created_at" : "2022-05-17T13:10:59.000Z" ,
"note" : "" ,
"url" : "http://localhost:8080/@admin" ,
"avatar" : "" ,
"avatar_static" : "" ,
"header" : "http://localhost:8080/assets/default_header.png" ,
"header_static" : "http://localhost:8080/assets/default_header.png" ,
"followers_count" : 1 ,
"following_count" : 1 ,
"statuses_count" : 4 ,
"last_status_at" : "2021-10-20T10:41:37.000Z" ,
"emojis" : [ ] ,
"fields" : [ ] ,
"enable_rss" : true ,
2023-02-20 16:00:44 +00:00
"role" : {
"name" : "admin"
}
2023-02-02 13:08:13 +00:00
} ,
2023-08-19 12:33:15 +00:00
"max_toot_chars" : 5000 ,
2024-01-05 12:39:31 +00:00
"rules" : [ ] ,
"terms" : "\u003cp\u003eThis is where a list of terms and conditions might go.\u003c/p\u003e\u003cp\u003eFor example:\u003c/p\u003e\u003cp\u003eIf you want to sign up on this instance, you oughta know that we:\u003c/p\u003e\u003col\u003e\u003cli\u003eWill sell your data to whoever offers.\u003c/li\u003e\u003cli\u003eSecure the server with password \u003ccode\u003epassword\u003c/code\u003e wherever possible.\u003c/li\u003e\u003c/ol\u003e" ,
"terms_text" : "This is where a list of terms and conditions might go.\n\nFor example:\n\nIf you want to sign up on this instance, you oughta know that we:\n\n1. Will sell your data to whoever offers.\n2. Secure the server with password `+" ` "+ ` password ` +" ` "+` wherever possible."
2023-01-13 16:02:45 +00:00
} ` , string ( b ) )
2022-05-24 16:20:13 +00:00
}
2023-02-02 13:08:13 +00:00
func ( suite * InternalToFrontendTestSuite ) TestInstanceV2ToFrontend ( ) {
ctx := context . Background ( )
i := & gtsmodel . Instance { }
if err := suite . db . GetWhere ( ctx , [ ] db . Where { { Key : "domain" , Value : config . GetHost ( ) } } , i ) ; err != nil {
suite . FailNow ( err . Error ( ) )
2022-05-24 16:20:13 +00:00
}
2023-02-02 13:08:13 +00:00
instance , err := suite . typeconverter . InstanceToAPIV2Instance ( ctx , i )
if err != nil {
suite . FailNow ( err . Error ( ) )
}
2022-05-24 16:20:13 +00:00
2023-02-02 13:08:13 +00:00
b , err := json . MarshalIndent ( instance , "" , " " )
2022-05-24 16:20:13 +00:00
suite . NoError ( err )
2023-01-13 16:02:45 +00:00
suite . Equal ( ` {
2023-02-02 13:08:13 +00:00
"domain" : "localhost:8080" ,
"account_domain" : "localhost:8080" ,
"title" : "GoToSocial Testrig Instance" ,
"version" : "0.0.0-testrig" ,
"source_url" : "https://github.com/superseriousbusiness/gotosocial" ,
2024-01-05 12:39:31 +00:00
"description" : "\u003cp\u003eHere's a fuller description of the GoToSocial testrig instance.\u003c/p\u003e\u003cp\u003eThis instance is for testing purposes only. It doesn't federate at all. Go check out \u003ca href=\"https://github.com/superseriousbusiness/gotosocial/tree/main/testrig\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003ehttps://github.com/superseriousbusiness/gotosocial/tree/main/testrig\u003c/a\u003e and \u003ca href=\"https://github.com/superseriousbusiness/gotosocial/blob/main/CONTRIBUTING.md#testing\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003ehttps://github.com/superseriousbusiness/gotosocial/blob/main/CONTRIBUTING.md#testing\u003c/a\u003e\u003c/p\u003e\u003cp\u003eUsers on this instance:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cspan class=\"h-card\"\u003e\u003ca href=\"http://localhost:8080/@admin\" class=\"u-url mention\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003e@\u003cspan\u003eadmin\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e (admin!).\u003c/li\u003e\u003cli\u003e\u003cspan class=\"h-card\"\u003e\u003ca href=\"http://localhost:8080/@1happyturtle\" class=\"u-url mention\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003e@\u003cspan\u003e1happyturtle\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e (posts about turtles, we don't know why).\u003c/li\u003e\u003cli\u003e\u003cspan class=\"h-card\"\u003e\u003ca href=\"http://localhost:8080/@the_mighty_zork\" class=\"u-url mention\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003e@\u003cspan\u003ethe_mighty_zork\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e (who knows).\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eIf you need to edit the models for the testrig, you can do so at \u003ccode\u003einternal/testmodels.go\u003c/code\u003e.\u003c/p\u003e" ,
"description_text" : "Here's a fuller description of the GoToSocial testrig instance.\n\nThis instance is for testing purposes only. It doesn't federate at all. Go check out https://github.com/superseriousbusiness/gotosocial/tree/main/testrig and https://github.com/superseriousbusiness/gotosocial/blob/main/CONTRIBUTING.md#testing\n\nUsers on this instance:\n\n- @admin (admin!).\n- @1happyturtle (posts about turtles, we don't know why).\n- @the_mighty_zork (who knows).\n\nIf you need to edit the models for the testrig, you can do so at `+" ` "+ ` internal / testmodels . go ` +" ` "+`." ,
2023-02-02 13:08:13 +00:00
"usage" : {
"users" : {
"active_month" : 0
}
} ,
"thumbnail" : {
"url" : "http://localhost:8080/assets/logo.png"
} ,
2023-11-17 10:35:28 +00:00
"languages" : [
"nl" ,
"en-gb"
] ,
2023-02-02 13:08:13 +00:00
"configuration" : {
"urls" : {
"streaming" : "wss://localhost:8080"
} ,
"accounts" : {
"allow_custom_css" : true ,
2023-06-13 10:21:26 +00:00
"max_featured_tags" : 10 ,
"max_profile_fields" : 6
2023-02-02 13:08:13 +00:00
} ,
"statuses" : {
"max_characters" : 5000 ,
"max_media_attachments" : 6 ,
2023-03-02 11:06:40 +00:00
"characters_reserved_per_url" : 25 ,
"supported_mime_types" : [
"text/plain" ,
"text/markdown"
]
2023-02-02 13:08:13 +00:00
} ,
"media_attachments" : {
"supported_mime_types" : [
"image/jpeg" ,
"image/gif" ,
"image/png" ,
"image/webp" ,
"video/mp4"
] ,
"image_size_limit" : 10485760 ,
"image_matrix_limit" : 16777216 ,
"video_size_limit" : 41943040 ,
"video_frame_rate_limit" : 60 ,
"video_matrix_limit" : 16777216
} ,
"polls" : {
"max_options" : 6 ,
"max_characters_per_option" : 50 ,
"min_expiration" : 300 ,
"max_expiration" : 2629746
} ,
"translation" : {
"enabled" : false
} ,
"emojis" : {
"emoji_size_limit" : 51200
}
} ,
"registrations" : {
"enabled" : true ,
"approval_required" : true ,
"message" : null
} ,
"contact" : {
"email" : "admin@example.org" ,
"account" : {
"id" : "01F8MH17FWEB39HZJ76B6VXSKF" ,
"username" : "admin" ,
"acct" : "admin" ,
"display_name" : "" ,
"locked" : false ,
2023-02-16 13:20:23 +00:00
"discoverable" : true ,
2023-02-02 13:08:13 +00:00
"bot" : false ,
"created_at" : "2022-05-17T13:10:59.000Z" ,
"note" : "" ,
"url" : "http://localhost:8080/@admin" ,
"avatar" : "" ,
"avatar_static" : "" ,
"header" : "http://localhost:8080/assets/default_header.png" ,
"header_static" : "http://localhost:8080/assets/default_header.png" ,
"followers_count" : 1 ,
"following_count" : 1 ,
"statuses_count" : 4 ,
"last_status_at" : "2021-10-20T10:41:37.000Z" ,
"emojis" : [ ] ,
"fields" : [ ] ,
"enable_rss" : true ,
2023-02-20 16:00:44 +00:00
"role" : {
"name" : "admin"
}
2023-02-02 13:08:13 +00:00
}
2023-01-13 16:02:45 +00:00
} ,
2024-01-05 12:39:31 +00:00
"rules" : [ ] ,
"terms" : "\u003cp\u003eThis is where a list of terms and conditions might go.\u003c/p\u003e\u003cp\u003eFor example:\u003c/p\u003e\u003cp\u003eIf you want to sign up on this instance, you oughta know that we:\u003c/p\u003e\u003col\u003e\u003cli\u003eWill sell your data to whoever offers.\u003c/li\u003e\u003cli\u003eSecure the server with password \u003ccode\u003epassword\u003c/code\u003e wherever possible.\u003c/li\u003e\u003c/ol\u003e" ,
"terms_text" : "This is where a list of terms and conditions might go.\n\nFor example:\n\nIf you want to sign up on this instance, you oughta know that we:\n\n1. Will sell your data to whoever offers.\n2. Secure the server with password `+" ` "+ ` password ` +" ` "+` wherever possible."
2023-01-13 16:02:45 +00:00
} ` , string ( b ) )
2022-05-24 16:20:13 +00:00
}
2022-10-12 13:01:42 +00:00
func ( suite * InternalToFrontendTestSuite ) TestEmojiToFrontend ( ) {
emoji , err := suite . typeconverter . EmojiToAPIEmoji ( context . Background ( ) , suite . testEmojis [ "rainbow" ] )
suite . NoError ( err )
2023-01-13 16:02:45 +00:00
b , err := json . MarshalIndent ( emoji , "" , " " )
2022-10-12 13:01:42 +00:00
suite . NoError ( err )
2023-01-13 16:02:45 +00:00
suite . Equal ( ` {
"shortcode" : "rainbow" ,
"url" : "http://localhost:8080/fileserver/01AY6P665V14JJR0AFVRT7311Y/emoji/original/01F8MH9H8E4VG3KDYJR9EGPXCQ.png" ,
"static_url" : "http://localhost:8080/fileserver/01AY6P665V14JJR0AFVRT7311Y/emoji/static/01F8MH9H8E4VG3KDYJR9EGPXCQ.png" ,
"visible_in_picker" : true ,
"category" : "reactions"
} ` , string ( b ) )
2022-10-12 13:01:42 +00:00
}
func ( suite * InternalToFrontendTestSuite ) TestEmojiToFrontendAdmin1 ( ) {
emoji , err := suite . typeconverter . EmojiToAdminAPIEmoji ( context . Background ( ) , suite . testEmojis [ "rainbow" ] )
suite . NoError ( err )
2023-01-13 16:02:45 +00:00
b , err := json . MarshalIndent ( emoji , "" , " " )
2022-10-12 13:01:42 +00:00
suite . NoError ( err )
2023-01-13 16:02:45 +00:00
suite . Equal ( ` {
"shortcode" : "rainbow" ,
"url" : "http://localhost:8080/fileserver/01AY6P665V14JJR0AFVRT7311Y/emoji/original/01F8MH9H8E4VG3KDYJR9EGPXCQ.png" ,
"static_url" : "http://localhost:8080/fileserver/01AY6P665V14JJR0AFVRT7311Y/emoji/static/01F8MH9H8E4VG3KDYJR9EGPXCQ.png" ,
"visible_in_picker" : true ,
"category" : "reactions" ,
"id" : "01F8MH9H8E4VG3KDYJR9EGPXCQ" ,
"disabled" : false ,
"updated_at" : "2021-09-20T10:40:37.000Z" ,
"total_file_size" : 47115 ,
"content_type" : "image/png" ,
"uri" : "http://localhost:8080/emoji/01F8MH9H8E4VG3KDYJR9EGPXCQ"
} ` , string ( b ) )
2022-10-12 13:01:42 +00:00
}
func ( suite * InternalToFrontendTestSuite ) TestEmojiToFrontendAdmin2 ( ) {
emoji , err := suite . typeconverter . EmojiToAdminAPIEmoji ( context . Background ( ) , suite . testEmojis [ "yell" ] )
suite . NoError ( err )
2023-01-13 16:02:45 +00:00
b , err := json . MarshalIndent ( emoji , "" , " " )
2022-10-12 13:01:42 +00:00
suite . NoError ( err )
2023-01-13 16:02:45 +00:00
suite . Equal ( ` {
"shortcode" : "yell" ,
"url" : "http://localhost:8080/fileserver/01AY6P665V14JJR0AFVRT7311Y/emoji/original/01GD5KP5CQEE1R3X43Y1EHS2CW.png" ,
"static_url" : "http://localhost:8080/fileserver/01AY6P665V14JJR0AFVRT7311Y/emoji/static/01GD5KP5CQEE1R3X43Y1EHS2CW.png" ,
"visible_in_picker" : false ,
"id" : "01GD5KP5CQEE1R3X43Y1EHS2CW" ,
"disabled" : false ,
"domain" : "fossbros-anonymous.io" ,
"updated_at" : "2020-03-18T12:12:00.000Z" ,
"total_file_size" : 21697 ,
"content_type" : "image/png" ,
"uri" : "http://fossbros-anonymous.io/emoji/01GD5KP5CQEE1R3X43Y1EHS2CW"
} ` , string ( b ) )
2022-10-12 13:01:42 +00:00
}
2023-01-23 12:14:21 +00:00
func ( suite * InternalToFrontendTestSuite ) TestReportToFrontend1 ( ) {
report , err := suite . typeconverter . ReportToAPIReport ( context . Background ( ) , suite . testReports [ "local_account_2_report_remote_account_1" ] )
suite . NoError ( err )
b , err := json . MarshalIndent ( report , "" , " " )
suite . NoError ( err )
suite . Equal ( ` {
"id" : "01GP3AWY4CRDVRNZKW0TEAMB5R" ,
"created_at" : "2022-05-14T10:20:03.000Z" ,
"action_taken" : false ,
"action_taken_at" : null ,
"action_taken_comment" : null ,
"category" : "other" ,
"comment" : "dark souls sucks, please yeet this nerd" ,
"forwarded" : true ,
"status_ids" : [
"01FVW7JHQFSFK166WWKR8CBA6M"
] ,
2023-08-19 12:33:15 +00:00
"rule_ids" : [
"01GP3AWY4CRDVRNZKW0TEAMB51" ,
"01GP3DFY9XQ1TJMZT5BGAZPXX3"
] ,
2023-01-23 12:14:21 +00:00
"target_account" : {
"id" : "01F8MH5ZK5VRH73AKHQM6Y9VNX" ,
"username" : "foss_satan" ,
"acct" : "foss_satan@fossbros-anonymous.io" ,
"display_name" : "big gerald" ,
"locked" : false ,
2023-02-16 13:20:23 +00:00
"discoverable" : true ,
2023-01-23 12:14:21 +00:00
"bot" : false ,
"created_at" : "2021-09-26T10:52:36.000Z" ,
"note" : "i post about like, i dunno, stuff, or whatever!!!!" ,
"url" : "http://fossbros-anonymous.io/@foss_satan" ,
"avatar" : "" ,
"avatar_static" : "" ,
"header" : "http://localhost:8080/assets/default_header.png" ,
"header_static" : "http://localhost:8080/assets/default_header.png" ,
"followers_count" : 0 ,
"following_count" : 0 ,
2023-11-11 10:15:04 +00:00
"statuses_count" : 3 ,
2023-11-08 14:32:17 +00:00
"last_status_at" : "2021-09-11T09:40:37.000Z" ,
2023-01-23 12:14:21 +00:00
"emojis" : [ ] ,
"fields" : [ ]
}
} ` , string ( b ) )
}
func ( suite * InternalToFrontendTestSuite ) TestReportToFrontend2 ( ) {
report , err := suite . typeconverter . ReportToAPIReport ( context . Background ( ) , suite . testReports [ "remote_account_1_report_local_account_2" ] )
suite . NoError ( err )
b , err := json . MarshalIndent ( report , "" , " " )
suite . NoError ( err )
suite . Equal ( ` {
"id" : "01GP3DFY9XQ1TJMZT5BGAZPXX7" ,
"created_at" : "2022-05-15T14:20:12.000Z" ,
"action_taken" : true ,
"action_taken_at" : "2022-05-15T15:01:56.000Z" ,
"action_taken_comment" : "user was warned not to be a turtle anymore" ,
"category" : "other" ,
"comment" : "this is a turtle, not a person, therefore should not be a poster" ,
"forwarded" : true ,
"status_ids" : [ ] ,
"rule_ids" : [ ] ,
"target_account" : {
"id" : "01F8MH5NBDF2MV7CTC4Q5128HF" ,
"username" : "1happyturtle" ,
"acct" : "1happyturtle" ,
"display_name" : "happy little turtle :3" ,
"locked" : true ,
2023-02-16 13:20:23 +00:00
"discoverable" : false ,
2023-01-23 12:14:21 +00:00
"bot" : false ,
"created_at" : "2022-06-04T13:12:00.000Z" ,
"note" : "\u003cp\u003ei post about things that concern me\u003c/p\u003e" ,
"url" : "http://localhost:8080/@1happyturtle" ,
"avatar" : "" ,
"avatar_static" : "" ,
"header" : "http://localhost:8080/assets/default_header.png" ,
"header_static" : "http://localhost:8080/assets/default_header.png" ,
"followers_count" : 1 ,
"following_count" : 1 ,
2023-11-08 14:32:17 +00:00
"statuses_count" : 8 ,
"last_status_at" : "2021-07-28T08:40:37.000Z" ,
2023-01-23 12:14:21 +00:00
"emojis" : [ ] ,
2023-05-09 10:16:10 +00:00
"fields" : [
{
"name" : "should you follow me?" ,
"value" : "maybe!" ,
"verified_at" : null
} ,
{
"name" : "age" ,
"value" : "120" ,
"verified_at" : null
}
] ,
2024-04-02 09:42:24 +00:00
"hide_collections" : true ,
2023-02-20 16:00:44 +00:00
"role" : {
"name" : "user"
}
2023-01-23 12:14:21 +00:00
}
} ` , string ( b ) )
}
2023-01-25 10:12:17 +00:00
func ( suite * InternalToFrontendTestSuite ) TestAdminReportToFrontend1 ( ) {
requestingAccount := suite . testAccounts [ "admin_account" ]
adminReport , err := suite . typeconverter . ReportToAdminAPIReport ( context . Background ( ) , suite . testReports [ "remote_account_1_report_local_account_2" ] , requestingAccount )
suite . NoError ( err )
b , err := json . MarshalIndent ( adminReport , "" , " " )
suite . NoError ( err )
suite . Equal ( ` {
"id" : "01GP3DFY9XQ1TJMZT5BGAZPXX7" ,
"action_taken" : true ,
"action_taken_at" : "2022-05-15T15:01:56.000Z" ,
"category" : "other" ,
"comment" : "this is a turtle, not a person, therefore should not be a poster" ,
"forwarded" : true ,
"created_at" : "2022-05-15T14:20:12.000Z" ,
"updated_at" : "2022-05-15T14:20:12.000Z" ,
"account" : {
"id" : "01F8MH5ZK5VRH73AKHQM6Y9VNX" ,
"username" : "foss_satan" ,
"domain" : "fossbros-anonymous.io" ,
"created_at" : "2021-09-26T10:52:36.000Z" ,
"email" : "" ,
"ip" : null ,
"ips" : [ ] ,
"locale" : "" ,
"invite_request" : null ,
2023-02-20 16:00:44 +00:00
"role" : {
"name" : "user"
} ,
2023-01-25 10:12:17 +00:00
"confirmed" : false ,
"approved" : false ,
"disabled" : false ,
"silenced" : false ,
"suspended" : false ,
"account" : {
"id" : "01F8MH5ZK5VRH73AKHQM6Y9VNX" ,
"username" : "foss_satan" ,
"acct" : "foss_satan@fossbros-anonymous.io" ,
"display_name" : "big gerald" ,
"locked" : false ,
2023-02-16 13:20:23 +00:00
"discoverable" : true ,
2023-01-25 10:12:17 +00:00
"bot" : false ,
"created_at" : "2021-09-26T10:52:36.000Z" ,
"note" : "i post about like, i dunno, stuff, or whatever!!!!" ,
"url" : "http://fossbros-anonymous.io/@foss_satan" ,
"avatar" : "" ,
"avatar_static" : "" ,
"header" : "http://localhost:8080/assets/default_header.png" ,
"header_static" : "http://localhost:8080/assets/default_header.png" ,
"followers_count" : 0 ,
"following_count" : 0 ,
2023-11-11 10:15:04 +00:00
"statuses_count" : 3 ,
2023-11-08 14:32:17 +00:00
"last_status_at" : "2021-09-11T09:40:37.000Z" ,
2023-01-25 10:12:17 +00:00
"emojis" : [ ] ,
"fields" : [ ]
}
} ,
"target_account" : {
"id" : "01F8MH5NBDF2MV7CTC4Q5128HF" ,
"username" : "1happyturtle" ,
"domain" : null ,
"created_at" : "2022-06-04T13:12:00.000Z" ,
"email" : "tortle.dude@example.org" ,
2024-04-11 09:45:53 +00:00
"ip" : null ,
2023-01-25 10:12:17 +00:00
"ips" : [ ] ,
"locale" : "en" ,
2023-03-31 13:01:29 +00:00
"invite_request" : null ,
2023-02-20 16:00:44 +00:00
"role" : {
"name" : "user"
} ,
2023-01-25 10:12:17 +00:00
"confirmed" : true ,
"approved" : true ,
"disabled" : false ,
"silenced" : false ,
"suspended" : false ,
"account" : {
"id" : "01F8MH5NBDF2MV7CTC4Q5128HF" ,
"username" : "1happyturtle" ,
"acct" : "1happyturtle" ,
"display_name" : "happy little turtle :3" ,
"locked" : true ,
2023-02-16 13:20:23 +00:00
"discoverable" : false ,
2023-01-25 10:12:17 +00:00
"bot" : false ,
"created_at" : "2022-06-04T13:12:00.000Z" ,
"note" : "\u003cp\u003ei post about things that concern me\u003c/p\u003e" ,
"url" : "http://localhost:8080/@1happyturtle" ,
"avatar" : "" ,
"avatar_static" : "" ,
"header" : "http://localhost:8080/assets/default_header.png" ,
"header_static" : "http://localhost:8080/assets/default_header.png" ,
"followers_count" : 1 ,
"following_count" : 1 ,
2023-11-08 14:32:17 +00:00
"statuses_count" : 8 ,
"last_status_at" : "2021-07-28T08:40:37.000Z" ,
2023-01-25 10:12:17 +00:00
"emojis" : [ ] ,
2023-05-09 10:16:10 +00:00
"fields" : [
{
"name" : "should you follow me?" ,
"value" : "maybe!" ,
"verified_at" : null
} ,
{
"name" : "age" ,
"value" : "120" ,
"verified_at" : null
}
] ,
2024-04-02 09:42:24 +00:00
"hide_collections" : true ,
2023-02-20 16:00:44 +00:00
"role" : {
"name" : "user"
}
2023-01-25 10:12:17 +00:00
} ,
"created_by_application_id" : "01F8MGY43H3N2C8EWPR2FPYEXG"
} ,
"assigned_account" : {
"id" : "01F8MH17FWEB39HZJ76B6VXSKF" ,
"username" : "admin" ,
"domain" : null ,
"created_at" : "2022-05-17T13:10:59.000Z" ,
"email" : "admin@example.org" ,
2024-04-11 09:45:53 +00:00
"ip" : null ,
2023-01-25 10:12:17 +00:00
"ips" : [ ] ,
"locale" : "en" ,
2023-03-31 13:01:29 +00:00
"invite_request" : null ,
2023-02-20 16:00:44 +00:00
"role" : {
"name" : "admin"
} ,
2023-01-25 10:12:17 +00:00
"confirmed" : true ,
"approved" : true ,
"disabled" : false ,
"silenced" : false ,
"suspended" : false ,
"account" : {
"id" : "01F8MH17FWEB39HZJ76B6VXSKF" ,
"username" : "admin" ,
"acct" : "admin" ,
"display_name" : "" ,
"locked" : false ,
2023-02-16 13:20:23 +00:00
"discoverable" : true ,
2023-01-25 10:12:17 +00:00
"bot" : false ,
"created_at" : "2022-05-17T13:10:59.000Z" ,
"note" : "" ,
"url" : "http://localhost:8080/@admin" ,
"avatar" : "" ,
"avatar_static" : "" ,
"header" : "http://localhost:8080/assets/default_header.png" ,
"header_static" : "http://localhost:8080/assets/default_header.png" ,
"followers_count" : 1 ,
"following_count" : 1 ,
"statuses_count" : 4 ,
"last_status_at" : "2021-10-20T10:41:37.000Z" ,
"emojis" : [ ] ,
"fields" : [ ] ,
"enable_rss" : true ,
2023-02-20 16:00:44 +00:00
"role" : {
"name" : "admin"
}
2023-01-25 10:12:17 +00:00
} ,
"created_by_application_id" : "01F8MGXQRHYF5QPMTMXP78QC2F"
} ,
"action_taken_by_account" : {
"id" : "01F8MH17FWEB39HZJ76B6VXSKF" ,
"username" : "admin" ,
"domain" : null ,
"created_at" : "2022-05-17T13:10:59.000Z" ,
"email" : "admin@example.org" ,
2024-04-11 09:45:53 +00:00
"ip" : null ,
2023-01-25 10:12:17 +00:00
"ips" : [ ] ,
"locale" : "en" ,
2023-03-31 13:01:29 +00:00
"invite_request" : null ,
2023-02-20 16:00:44 +00:00
"role" : {
"name" : "admin"
} ,
2023-01-25 10:12:17 +00:00
"confirmed" : true ,
"approved" : true ,
"disabled" : false ,
"silenced" : false ,
"suspended" : false ,
"account" : {
"id" : "01F8MH17FWEB39HZJ76B6VXSKF" ,
"username" : "admin" ,
"acct" : "admin" ,
"display_name" : "" ,
"locked" : false ,
2023-02-16 13:20:23 +00:00
"discoverable" : true ,
2023-01-25 10:12:17 +00:00
"bot" : false ,
"created_at" : "2022-05-17T13:10:59.000Z" ,
"note" : "" ,
"url" : "http://localhost:8080/@admin" ,
"avatar" : "" ,
"avatar_static" : "" ,
"header" : "http://localhost:8080/assets/default_header.png" ,
"header_static" : "http://localhost:8080/assets/default_header.png" ,
"followers_count" : 1 ,
"following_count" : 1 ,
"statuses_count" : 4 ,
"last_status_at" : "2021-10-20T10:41:37.000Z" ,
"emojis" : [ ] ,
"fields" : [ ] ,
"enable_rss" : true ,
2023-02-20 16:00:44 +00:00
"role" : {
"name" : "admin"
}
2023-01-25 10:12:17 +00:00
} ,
"created_by_application_id" : "01F8MGXQRHYF5QPMTMXP78QC2F"
} ,
"statuses" : [ ] ,
2023-08-19 12:33:15 +00:00
"rules" : [ ] ,
2023-01-25 10:12:17 +00:00
"action_taken_comment" : "user was warned not to be a turtle anymore"
} ` , string ( b ) )
}
func ( suite * InternalToFrontendTestSuite ) TestAdminReportToFrontend2 ( ) {
requestingAccount := suite . testAccounts [ "admin_account" ]
adminReport , err := suite . typeconverter . ReportToAdminAPIReport ( context . Background ( ) , suite . testReports [ "local_account_2_report_remote_account_1" ] , requestingAccount )
suite . NoError ( err )
b , err := json . MarshalIndent ( adminReport , "" , " " )
suite . NoError ( err )
suite . Equal ( ` {
"id" : "01GP3AWY4CRDVRNZKW0TEAMB5R" ,
"action_taken" : false ,
"action_taken_at" : null ,
"category" : "other" ,
"comment" : "dark souls sucks, please yeet this nerd" ,
"forwarded" : true ,
"created_at" : "2022-05-14T10:20:03.000Z" ,
"updated_at" : "2022-05-14T10:20:03.000Z" ,
"account" : {
"id" : "01F8MH5NBDF2MV7CTC4Q5128HF" ,
"username" : "1happyturtle" ,
"domain" : null ,
"created_at" : "2022-06-04T13:12:00.000Z" ,
"email" : "tortle.dude@example.org" ,
2024-04-11 09:45:53 +00:00
"ip" : null ,
2023-01-25 10:12:17 +00:00
"ips" : [ ] ,
"locale" : "en" ,
2023-03-31 13:01:29 +00:00
"invite_request" : null ,
2023-02-20 16:00:44 +00:00
"role" : {
"name" : "user"
} ,
2023-01-25 10:12:17 +00:00
"confirmed" : true ,
"approved" : true ,
"disabled" : false ,
"silenced" : false ,
"suspended" : false ,
"account" : {
"id" : "01F8MH5NBDF2MV7CTC4Q5128HF" ,
"username" : "1happyturtle" ,
"acct" : "1happyturtle" ,
"display_name" : "happy little turtle :3" ,
"locked" : true ,
2023-02-16 13:20:23 +00:00
"discoverable" : false ,
2023-01-25 10:12:17 +00:00
"bot" : false ,
"created_at" : "2022-06-04T13:12:00.000Z" ,
"note" : "\u003cp\u003ei post about things that concern me\u003c/p\u003e" ,
"url" : "http://localhost:8080/@1happyturtle" ,
"avatar" : "" ,
"avatar_static" : "" ,
"header" : "http://localhost:8080/assets/default_header.png" ,
"header_static" : "http://localhost:8080/assets/default_header.png" ,
"followers_count" : 1 ,
"following_count" : 1 ,
2023-11-08 14:32:17 +00:00
"statuses_count" : 8 ,
"last_status_at" : "2021-07-28T08:40:37.000Z" ,
2023-01-25 10:12:17 +00:00
"emojis" : [ ] ,
2023-05-09 10:16:10 +00:00
"fields" : [
{
"name" : "should you follow me?" ,
"value" : "maybe!" ,
"verified_at" : null
} ,
{
"name" : "age" ,
"value" : "120" ,
"verified_at" : null
}
] ,
2024-04-02 09:42:24 +00:00
"hide_collections" : true ,
2023-02-20 16:00:44 +00:00
"role" : {
"name" : "user"
}
2023-01-25 10:12:17 +00:00
} ,
"created_by_application_id" : "01F8MGY43H3N2C8EWPR2FPYEXG"
} ,
"target_account" : {
"id" : "01F8MH5ZK5VRH73AKHQM6Y9VNX" ,
"username" : "foss_satan" ,
"domain" : "fossbros-anonymous.io" ,
"created_at" : "2021-09-26T10:52:36.000Z" ,
"email" : "" ,
"ip" : null ,
"ips" : [ ] ,
"locale" : "" ,
"invite_request" : null ,
2023-02-20 16:00:44 +00:00
"role" : {
"name" : "user"
} ,
2023-01-25 10:12:17 +00:00
"confirmed" : false ,
"approved" : false ,
"disabled" : false ,
"silenced" : false ,
"suspended" : false ,
"account" : {
"id" : "01F8MH5ZK5VRH73AKHQM6Y9VNX" ,
"username" : "foss_satan" ,
"acct" : "foss_satan@fossbros-anonymous.io" ,
"display_name" : "big gerald" ,
"locked" : false ,
2023-02-16 13:20:23 +00:00
"discoverable" : true ,
2023-01-25 10:12:17 +00:00
"bot" : false ,
"created_at" : "2021-09-26T10:52:36.000Z" ,
"note" : "i post about like, i dunno, stuff, or whatever!!!!" ,
"url" : "http://fossbros-anonymous.io/@foss_satan" ,
"avatar" : "" ,
"avatar_static" : "" ,
"header" : "http://localhost:8080/assets/default_header.png" ,
"header_static" : "http://localhost:8080/assets/default_header.png" ,
"followers_count" : 0 ,
"following_count" : 0 ,
2023-11-11 10:15:04 +00:00
"statuses_count" : 3 ,
2023-11-08 14:32:17 +00:00
"last_status_at" : "2021-09-11T09:40:37.000Z" ,
2023-01-25 10:12:17 +00:00
"emojis" : [ ] ,
"fields" : [ ]
}
} ,
"assigned_account" : null ,
"action_taken_by_account" : null ,
"statuses" : [
{
"id" : "01FVW7JHQFSFK166WWKR8CBA6M" ,
"created_at" : "2021-09-20T10:40:37.000Z" ,
"in_reply_to_id" : null ,
"in_reply_to_account_id" : null ,
"sensitive" : false ,
"spoiler_text" : "" ,
"visibility" : "unlisted" ,
"language" : "en" ,
"uri" : "http://fossbros-anonymous.io/users/foss_satan/statuses/01FVW7JHQFSFK166WWKR8CBA6M" ,
"url" : "http://fossbros-anonymous.io/@foss_satan/statuses/01FVW7JHQFSFK166WWKR8CBA6M" ,
"replies_count" : 0 ,
"reblogs_count" : 0 ,
"favourites_count" : 0 ,
"favourited" : false ,
"reblogged" : false ,
"muted" : false ,
"bookmarked" : false ,
"pinned" : false ,
"content" : "dark souls status bot: \"thoughts of dog\"" ,
"reblog" : null ,
"account" : {
"id" : "01F8MH5ZK5VRH73AKHQM6Y9VNX" ,
"username" : "foss_satan" ,
"acct" : "foss_satan@fossbros-anonymous.io" ,
"display_name" : "big gerald" ,
"locked" : false ,
2023-02-16 13:20:23 +00:00
"discoverable" : true ,
2023-01-25 10:12:17 +00:00
"bot" : false ,
"created_at" : "2021-09-26T10:52:36.000Z" ,
"note" : "i post about like, i dunno, stuff, or whatever!!!!" ,
"url" : "http://fossbros-anonymous.io/@foss_satan" ,
"avatar" : "" ,
"avatar_static" : "" ,
"header" : "http://localhost:8080/assets/default_header.png" ,
"header_static" : "http://localhost:8080/assets/default_header.png" ,
"followers_count" : 0 ,
"following_count" : 0 ,
2023-11-11 10:15:04 +00:00
"statuses_count" : 3 ,
2023-11-08 14:32:17 +00:00
"last_status_at" : "2021-09-11T09:40:37.000Z" ,
2023-01-25 10:12:17 +00:00
"emojis" : [ ] ,
"fields" : [ ]
} ,
"media_attachments" : [
{
"id" : "01FVW7RXPQ8YJHTEXYPE7Q8ZY0" ,
"type" : "image" ,
"url" : "http://localhost:8080/fileserver/01F8MH5ZK5VRH73AKHQM6Y9VNX/attachment/original/01FVW7RXPQ8YJHTEXYPE7Q8ZY0.jpg" ,
"text_url" : "http://localhost:8080/fileserver/01F8MH5ZK5VRH73AKHQM6Y9VNX/attachment/original/01FVW7RXPQ8YJHTEXYPE7Q8ZY0.jpg" ,
"preview_url" : "http://localhost:8080/fileserver/01F8MH5ZK5VRH73AKHQM6Y9VNX/attachment/small/01FVW7RXPQ8YJHTEXYPE7Q8ZY0.jpg" ,
"remote_url" : "http://fossbros-anonymous.io/attachments/original/13bbc3f8-2b5e-46ea-9531-40b4974d9912.jpg" ,
"preview_remote_url" : "http://fossbros-anonymous.io/attachments/small/a499f55b-2d1e-4acd-98d2-1ac2ba6d79b9.jpg" ,
"meta" : {
"original" : {
"width" : 472 ,
"height" : 291 ,
"size" : "472x291" ,
"aspect" : 1.6219932
} ,
"small" : {
"width" : 472 ,
"height" : 291 ,
"size" : "472x291" ,
"aspect" : 1.6219932
} ,
"focus" : {
"x" : 0 ,
"y" : 0
}
} ,
"description" : "tweet from thoughts of dog: i drank. all the water. in my bowl. earlier. but just now. i returned. to the same bowl. and it was. full again.. the bowl. is haunted" ,
"blurhash" : "LARysgM_IU_3~pD%M_Rj_39FIAt6"
}
] ,
"mentions" : [ ] ,
"tags" : [ ] ,
"emojis" : [ ] ,
"card" : null ,
"poll" : null
}
] ,
2023-08-19 12:33:15 +00:00
"rules" : [
{
"id" : "01GP3AWY4CRDVRNZKW0TEAMB51" ,
"text" : "Be gay"
} ,
{
"id" : "01GP3DFY9XQ1TJMZT5BGAZPXX3" ,
"text" : "Do crime"
}
] ,
2023-01-25 10:12:17 +00:00
"action_taken_comment" : null
} ` , string ( b ) )
}
2023-03-31 13:01:29 +00:00
func ( suite * InternalToFrontendTestSuite ) TestAdminReportToFrontendSuspendedLocalAccount ( ) {
ctx := context . Background ( )
requestingAccount := suite . testAccounts [ "admin_account" ]
reportedAccount := & gtsmodel . Account { }
* reportedAccount = * suite . testAccounts [ "local_account_2" ]
// Suspend/delete the reported account.
if err := suite . GetProcessor ( ) . Account ( ) . Delete ( ctx , reportedAccount , requestingAccount . ID ) ; err != nil {
suite . FailNow ( err . Error ( ) )
}
// Wait for the delete to process. Stubbifying
// the account is the last part of the delete,
// so once it's stubbified we know we're done.
if ! testrig . WaitFor ( func ( ) bool {
dbAccount , err := suite . db . GetAccountByID ( ctx , reportedAccount . ID )
if err != nil {
suite . FailNow ( err . Error ( ) )
}
return dbAccount . DisplayName == ""
} ) {
suite . FailNow ( "timed out waiting for account delete" )
}
adminReport , err := suite . typeconverter . ReportToAdminAPIReport ( context . Background ( ) , suite . testReports [ "remote_account_1_report_local_account_2" ] , requestingAccount )
suite . NoError ( err )
b , err := json . MarshalIndent ( adminReport , "" , " " )
suite . NoError ( err )
suite . Equal ( ` {
"id" : "01GP3DFY9XQ1TJMZT5BGAZPXX7" ,
"action_taken" : true ,
"action_taken_at" : "2022-05-15T15:01:56.000Z" ,
"category" : "other" ,
"comment" : "this is a turtle, not a person, therefore should not be a poster" ,
"forwarded" : true ,
"created_at" : "2022-05-15T14:20:12.000Z" ,
"updated_at" : "2022-05-15T14:20:12.000Z" ,
"account" : {
"id" : "01F8MH5ZK5VRH73AKHQM6Y9VNX" ,
"username" : "foss_satan" ,
"domain" : "fossbros-anonymous.io" ,
"created_at" : "2021-09-26T10:52:36.000Z" ,
"email" : "" ,
"ip" : null ,
"ips" : [ ] ,
"locale" : "" ,
"invite_request" : null ,
"role" : {
"name" : "user"
} ,
"confirmed" : false ,
"approved" : false ,
"disabled" : false ,
"silenced" : false ,
"suspended" : false ,
"account" : {
"id" : "01F8MH5ZK5VRH73AKHQM6Y9VNX" ,
"username" : "foss_satan" ,
"acct" : "foss_satan@fossbros-anonymous.io" ,
"display_name" : "big gerald" ,
"locked" : false ,
"discoverable" : true ,
"bot" : false ,
"created_at" : "2021-09-26T10:52:36.000Z" ,
"note" : "i post about like, i dunno, stuff, or whatever!!!!" ,
"url" : "http://fossbros-anonymous.io/@foss_satan" ,
"avatar" : "" ,
"avatar_static" : "" ,
"header" : "http://localhost:8080/assets/default_header.png" ,
"header_static" : "http://localhost:8080/assets/default_header.png" ,
"followers_count" : 0 ,
"following_count" : 0 ,
2023-11-11 10:15:04 +00:00
"statuses_count" : 3 ,
2023-11-08 14:32:17 +00:00
"last_status_at" : "2021-09-11T09:40:37.000Z" ,
2023-03-31 13:01:29 +00:00
"emojis" : [ ] ,
"fields" : [ ]
}
} ,
"target_account" : {
"id" : "01F8MH5NBDF2MV7CTC4Q5128HF" ,
"username" : "1happyturtle" ,
"domain" : null ,
"created_at" : "2022-06-04T13:12:00.000Z" ,
"email" : "tortle.dude@example.org" ,
"ip" : "0.0.0.0" ,
"ips" : [ ] ,
"locale" : "" ,
"invite_request" : null ,
"role" : {
"name" : "user"
} ,
"confirmed" : true ,
"approved" : true ,
"disabled" : false ,
"silenced" : false ,
"suspended" : true ,
"account" : {
"id" : "01F8MH5NBDF2MV7CTC4Q5128HF" ,
"username" : "1happyturtle" ,
"acct" : "1happyturtle" ,
"display_name" : "" ,
"locked" : true ,
"discoverable" : false ,
"bot" : false ,
"created_at" : "2022-06-04T13:12:00.000Z" ,
"note" : "" ,
"url" : "http://localhost:8080/@1happyturtle" ,
"avatar" : "" ,
"avatar_static" : "" ,
"header" : "http://localhost:8080/assets/default_header.png" ,
"header_static" : "http://localhost:8080/assets/default_header.png" ,
"followers_count" : 0 ,
"following_count" : 0 ,
"statuses_count" : 0 ,
"last_status_at" : null ,
"emojis" : [ ] ,
"fields" : [ ] ,
"suspended" : true ,
2024-04-02 09:42:24 +00:00
"hide_collections" : true ,
2023-03-31 13:01:29 +00:00
"role" : {
"name" : "user"
}
}
} ,
"assigned_account" : {
"id" : "01F8MH17FWEB39HZJ76B6VXSKF" ,
"username" : "admin" ,
"domain" : null ,
"created_at" : "2022-05-17T13:10:59.000Z" ,
"email" : "admin@example.org" ,
2024-04-11 09:45:53 +00:00
"ip" : null ,
2023-03-31 13:01:29 +00:00
"ips" : [ ] ,
"locale" : "en" ,
"invite_request" : null ,
"role" : {
"name" : "admin"
} ,
"confirmed" : true ,
"approved" : true ,
"disabled" : false ,
"silenced" : false ,
"suspended" : false ,
"account" : {
"id" : "01F8MH17FWEB39HZJ76B6VXSKF" ,
"username" : "admin" ,
"acct" : "admin" ,
"display_name" : "" ,
"locked" : false ,
"discoverable" : true ,
"bot" : false ,
"created_at" : "2022-05-17T13:10:59.000Z" ,
"note" : "" ,
"url" : "http://localhost:8080/@admin" ,
"avatar" : "" ,
"avatar_static" : "" ,
"header" : "http://localhost:8080/assets/default_header.png" ,
"header_static" : "http://localhost:8080/assets/default_header.png" ,
"followers_count" : 1 ,
"following_count" : 1 ,
"statuses_count" : 4 ,
"last_status_at" : "2021-10-20T10:41:37.000Z" ,
"emojis" : [ ] ,
"fields" : [ ] ,
"enable_rss" : true ,
"role" : {
"name" : "admin"
}
} ,
"created_by_application_id" : "01F8MGXQRHYF5QPMTMXP78QC2F"
} ,
"action_taken_by_account" : {
"id" : "01F8MH17FWEB39HZJ76B6VXSKF" ,
"username" : "admin" ,
"domain" : null ,
"created_at" : "2022-05-17T13:10:59.000Z" ,
"email" : "admin@example.org" ,
2024-04-11 09:45:53 +00:00
"ip" : null ,
2023-03-31 13:01:29 +00:00
"ips" : [ ] ,
"locale" : "en" ,
"invite_request" : null ,
"role" : {
"name" : "admin"
} ,
"confirmed" : true ,
"approved" : true ,
"disabled" : false ,
"silenced" : false ,
"suspended" : false ,
"account" : {
"id" : "01F8MH17FWEB39HZJ76B6VXSKF" ,
"username" : "admin" ,
"acct" : "admin" ,
"display_name" : "" ,
"locked" : false ,
"discoverable" : true ,
"bot" : false ,
"created_at" : "2022-05-17T13:10:59.000Z" ,
"note" : "" ,
"url" : "http://localhost:8080/@admin" ,
"avatar" : "" ,
"avatar_static" : "" ,
"header" : "http://localhost:8080/assets/default_header.png" ,
"header_static" : "http://localhost:8080/assets/default_header.png" ,
"followers_count" : 1 ,
"following_count" : 1 ,
"statuses_count" : 4 ,
"last_status_at" : "2021-10-20T10:41:37.000Z" ,
"emojis" : [ ] ,
"fields" : [ ] ,
"enable_rss" : true ,
"role" : {
"name" : "admin"
}
} ,
"created_by_application_id" : "01F8MGXQRHYF5QPMTMXP78QC2F"
} ,
"statuses" : [ ] ,
2023-08-19 12:33:15 +00:00
"rules" : [ ] ,
2023-03-31 13:01:29 +00:00
"action_taken_comment" : "user was warned not to be a turtle anymore"
} ` , string ( b ) )
}
2024-02-20 17:50:54 +00:00
func ( suite * InternalToFrontendTestSuite ) TestRelationshipFollowRequested ( ) {
var (
ctx = context . Background ( )
account1 = suite . testAccounts [ "admin_account" ]
account2 = suite . testAccounts [ "local_account_2" ]
)
// Put a follow request in the db from
// admin account targeting local_account_2.
followRequest := & gtsmodel . FollowRequest {
ID : "01GEF753FWHCHRDWR0QEHBXM8W" ,
URI : "http://localhost:8080/weeeeeeeeeeeeeeeee" ,
AccountID : account1 . ID ,
TargetAccountID : account2 . ID ,
}
if err := suite . db . PutFollowRequest ( ctx , followRequest ) ; err != nil {
suite . FailNow ( err . Error ( ) )
}
// Fetch the relationship from the database.
dbRelationship , err := suite . state . DB . GetRelationship ( ctx , account1 . ID , account2 . ID )
if err != nil {
suite . FailNow ( err . Error ( ) )
}
// Check API model is set appropriately.
relationship , err := suite . typeconverter . RelationshipToAPIRelationship ( ctx , dbRelationship )
if err != nil {
suite . FailNow ( err . Error ( ) )
}
b , err := json . MarshalIndent ( relationship , "" , " " )
if err != nil {
2024-02-27 12:22:05 +00:00
suite . FailNow ( err . Error ( ) )
}
2024-02-20 17:50:54 +00:00
suite . Equal ( ` {
"id" : "01F8MH5NBDF2MV7CTC4Q5128HF" ,
"following" : false ,
"showing_reblogs" : false ,
"notifying" : false ,
"followed_by" : false ,
"blocking" : false ,
"blocked_by" : false ,
"muting" : false ,
"muting_notifications" : false ,
"requested" : true ,
"requested_by" : false ,
"domain_blocking" : false ,
"endorsed" : false ,
"note" : ""
} ` , string ( b ) )
// Check relationship from the other side too.
dbRelationship , err = suite . state . DB . GetRelationship ( ctx , account2 . ID , account1 . ID )
if err != nil {
suite . FailNow ( err . Error ( ) )
}
// Check API model is set appropriately.
relationship , err = suite . typeconverter . RelationshipToAPIRelationship ( ctx , dbRelationship )
if err != nil {
suite . FailNow ( err . Error ( ) )
}
b , err = json . MarshalIndent ( relationship , "" , " " )
if err != nil {
2024-02-27 12:22:05 +00:00
suite . FailNow ( err . Error ( ) )
}
2024-02-20 17:50:54 +00:00
2024-02-27 12:22:05 +00:00
suite . Equal ( ` {
2024-02-20 17:50:54 +00:00
"id" : "01F8MH17FWEB39HZJ76B6VXSKF" ,
"following" : false ,
"showing_reblogs" : false ,
"notifying" : false ,
"followed_by" : false ,
"blocking" : false ,
"blocked_by" : false ,
"muting" : false ,
"muting_notifications" : false ,
"requested" : false ,
"requested_by" : true ,
"domain_blocking" : false ,
"endorsed" : false ,
"note" : ""
} ` , string ( b ) )
}
2022-05-23 15:40:03 +00:00
func TestInternalToFrontendTestSuite ( t * testing . T ) {
suite . Run ( t , new ( InternalToFrontendTestSuite ) )
}