2023-03-12 16:00:57 +01: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-03-13 16:37:45 +01:00
package status_test
import (
"context"
"testing"
"github.com/stretchr/testify/suite"
2023-01-02 13:10:50 +01:00
apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model"
2022-11-05 13:33:38 +01:00
"github.com/superseriousbusiness/gotosocial/internal/config"
2022-09-27 14:27:53 +02:00
"github.com/superseriousbusiness/gotosocial/internal/db"
"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
2022-03-13 16:37:45 +01:00
)
type StatusCreateTestSuite struct {
StatusStandardTestSuite
}
func ( suite * StatusCreateTestSuite ) TestProcessContentWarningWithQuotationMarks ( ) {
ctx := context . Background ( )
creatingAccount := suite . testAccounts [ "local_account_1" ]
creatingApplication := suite . testApplications [ "application_1" ]
2023-01-02 13:10:50 +01:00
statusCreateForm := & apimodel . AdvancedStatusCreateForm {
StatusCreateRequest : apimodel . StatusCreateRequest {
2022-03-13 16:37:45 +01:00
Status : "poopoo peepee" ,
MediaIDs : [ ] string { } ,
Poll : nil ,
InReplyToID : "" ,
Sensitive : false ,
SpoilerText : "\"test\"" , // these should not be html-escaped when the final text is rendered
2023-01-02 13:10:50 +01:00
Visibility : apimodel . VisibilityPublic ,
2022-03-13 16:37:45 +01:00
ScheduledAt : "" ,
Language : "en" ,
2023-03-02 12:06:40 +01:00
ContentType : apimodel . StatusContentTypePlain ,
2022-03-13 16:37:45 +01:00
} ,
2023-01-02 13:10:50 +01:00
AdvancedVisibilityFlagsForm : apimodel . AdvancedVisibilityFlagsForm {
2022-03-13 16:37:45 +01:00
Federated : nil ,
Boostable : nil ,
Replyable : nil ,
Likeable : nil ,
} ,
}
apiStatus , err := suite . status . Create ( ctx , creatingAccount , creatingApplication , statusCreateForm )
suite . NoError ( err )
suite . NotNil ( apiStatus )
suite . Equal ( "\"test\"" , apiStatus . SpoilerText )
}
func ( suite * StatusCreateTestSuite ) TestProcessContentWarningWithHTMLEscapedQuotationMarks ( ) {
ctx := context . Background ( )
creatingAccount := suite . testAccounts [ "local_account_1" ]
creatingApplication := suite . testApplications [ "application_1" ]
2023-01-02 13:10:50 +01:00
statusCreateForm := & apimodel . AdvancedStatusCreateForm {
StatusCreateRequest : apimodel . StatusCreateRequest {
2022-03-13 16:37:45 +01:00
Status : "poopoo peepee" ,
MediaIDs : [ ] string { } ,
Poll : nil ,
InReplyToID : "" ,
Sensitive : false ,
SpoilerText : ""test"" , // the html-escaped quotation marks should appear as normal quotation marks in the finished text
2023-01-02 13:10:50 +01:00
Visibility : apimodel . VisibilityPublic ,
2022-03-13 16:37:45 +01:00
ScheduledAt : "" ,
Language : "en" ,
2023-03-02 12:06:40 +01:00
ContentType : apimodel . StatusContentTypePlain ,
2022-03-13 16:37:45 +01:00
} ,
2023-01-02 13:10:50 +01:00
AdvancedVisibilityFlagsForm : apimodel . AdvancedVisibilityFlagsForm {
2022-03-13 16:37:45 +01:00
Federated : nil ,
Boostable : nil ,
Replyable : nil ,
Likeable : nil ,
} ,
}
apiStatus , err := suite . status . Create ( ctx , creatingAccount , creatingApplication , statusCreateForm )
suite . NoError ( err )
suite . NotNil ( apiStatus )
suite . Equal ( "\"test\"" , apiStatus . SpoilerText )
}
2022-09-27 14:27:53 +02:00
func ( suite * StatusCreateTestSuite ) TestProcessStatusMarkdownWithUnderscoreEmoji ( ) {
ctx := context . Background ( )
// update the shortcode of the rainbow emoji to surround it in underscores
if err := suite . db . UpdateWhere ( ctx , [ ] db . Where { { Key : "shortcode" , Value : "rainbow" } } , "shortcode" , "_rainbow_" , & gtsmodel . Emoji { } ) ; err != nil {
suite . FailNow ( err . Error ( ) )
}
creatingAccount := suite . testAccounts [ "local_account_1" ]
creatingApplication := suite . testApplications [ "application_1" ]
2023-01-02 13:10:50 +01:00
statusCreateForm := & apimodel . AdvancedStatusCreateForm {
StatusCreateRequest : apimodel . StatusCreateRequest {
2022-09-27 14:27:53 +02:00
Status : "poopoo peepee :_rainbow_:" ,
MediaIDs : [ ] string { } ,
Poll : nil ,
InReplyToID : "" ,
Sensitive : false ,
2023-01-02 13:10:50 +01:00
Visibility : apimodel . VisibilityPublic ,
2022-09-27 14:27:53 +02:00
ScheduledAt : "" ,
Language : "en" ,
2023-03-02 12:06:40 +01:00
ContentType : apimodel . StatusContentTypeMarkdown ,
2022-09-27 14:27:53 +02:00
} ,
2023-01-02 13:10:50 +01:00
AdvancedVisibilityFlagsForm : apimodel . AdvancedVisibilityFlagsForm {
2022-09-27 14:27:53 +02:00
Federated : nil ,
Boostable : nil ,
Replyable : nil ,
Likeable : nil ,
} ,
}
apiStatus , err := suite . status . Create ( ctx , creatingAccount , creatingApplication , statusCreateForm )
suite . NoError ( err )
suite . NotNil ( apiStatus )
suite . Equal ( "<p>poopoo peepee :_rainbow_:</p>" , apiStatus . Content )
suite . NotEmpty ( apiStatus . Emojis )
}
2022-10-02 14:01:47 +02:00
func ( suite * StatusCreateTestSuite ) TestProcessStatusMarkdownWithSpoilerTextEmoji ( ) {
ctx := context . Background ( )
creatingAccount := suite . testAccounts [ "local_account_1" ]
creatingApplication := suite . testApplications [ "application_1" ]
2023-01-02 13:10:50 +01:00
statusCreateForm := & apimodel . AdvancedStatusCreateForm {
StatusCreateRequest : apimodel . StatusCreateRequest {
2022-10-02 14:01:47 +02:00
Status : "poopoo peepee" ,
SpoilerText : "testing something :rainbow:" ,
MediaIDs : [ ] string { } ,
Poll : nil ,
InReplyToID : "" ,
Sensitive : false ,
2023-01-02 13:10:50 +01:00
Visibility : apimodel . VisibilityPublic ,
2022-10-02 14:01:47 +02:00
ScheduledAt : "" ,
Language : "en" ,
2023-03-02 12:06:40 +01:00
ContentType : apimodel . StatusContentTypeMarkdown ,
2022-10-02 14:01:47 +02:00
} ,
2023-01-02 13:10:50 +01:00
AdvancedVisibilityFlagsForm : apimodel . AdvancedVisibilityFlagsForm {
2022-10-02 14:01:47 +02:00
Federated : nil ,
Boostable : nil ,
Replyable : nil ,
Likeable : nil ,
} ,
}
apiStatus , err := suite . status . Create ( ctx , creatingAccount , creatingApplication , statusCreateForm )
suite . NoError ( err )
suite . NotNil ( apiStatus )
suite . Equal ( "<p>poopoo peepee</p>" , apiStatus . Content )
suite . Equal ( "testing something :rainbow:" , apiStatus . SpoilerText )
suite . NotEmpty ( apiStatus . Emojis )
}
2022-11-05 13:33:38 +01:00
func ( suite * StatusCreateTestSuite ) TestProcessMediaDescriptionTooShort ( ) {
ctx := context . Background ( )
config . SetMediaDescriptionMinChars ( 100 )
creatingAccount := suite . testAccounts [ "local_account_1" ]
creatingApplication := suite . testApplications [ "application_1" ]
2023-01-02 13:10:50 +01:00
statusCreateForm := & apimodel . AdvancedStatusCreateForm {
StatusCreateRequest : apimodel . StatusCreateRequest {
2022-11-05 13:33:38 +01:00
Status : "poopoo peepee" ,
MediaIDs : [ ] string { suite . testAttachments [ "local_account_1_unattached_1" ] . ID } ,
Poll : nil ,
InReplyToID : "" ,
Sensitive : false ,
SpoilerText : "" ,
2023-01-02 13:10:50 +01:00
Visibility : apimodel . VisibilityPublic ,
2022-11-05 13:33:38 +01:00
ScheduledAt : "" ,
Language : "en" ,
2023-03-02 12:06:40 +01:00
ContentType : apimodel . StatusContentTypePlain ,
2022-11-05 13:33:38 +01:00
} ,
2023-01-02 13:10:50 +01:00
AdvancedVisibilityFlagsForm : apimodel . AdvancedVisibilityFlagsForm {
2022-11-05 13:33:38 +01:00
Federated : nil ,
Boostable : nil ,
Replyable : nil ,
Likeable : nil ,
} ,
}
apiStatus , err := suite . status . Create ( ctx , creatingAccount , creatingApplication , statusCreateForm )
suite . EqualError ( err , "ProcessMediaIDs: description too short! media description of at least 100 chararacters is required but 15 was provided for media with id 01F8MH8RMYQ6MSNY3JM2XT1CQ5" )
suite . Nil ( apiStatus )
}
2023-08-07 10:25:54 +02:00
func ( suite * StatusCreateTestSuite ) TestProcessLanguageWithScriptPart ( ) {
ctx := context . Background ( )
creatingAccount := suite . testAccounts [ "local_account_1" ]
creatingApplication := suite . testApplications [ "application_1" ]
statusCreateForm := & apimodel . AdvancedStatusCreateForm {
StatusCreateRequest : apimodel . StatusCreateRequest {
Status : "你好世界" , // hello world
MediaIDs : [ ] string { } ,
Poll : nil ,
InReplyToID : "" ,
Sensitive : false ,
SpoilerText : "" ,
Visibility : apimodel . VisibilityPublic ,
ScheduledAt : "" ,
Language : "zh-Hans" ,
ContentType : apimodel . StatusContentTypePlain ,
} ,
AdvancedVisibilityFlagsForm : apimodel . AdvancedVisibilityFlagsForm {
Federated : nil ,
Boostable : nil ,
Replyable : nil ,
Likeable : nil ,
} ,
}
apiStatus , err := suite . status . Create ( ctx , creatingAccount , creatingApplication , statusCreateForm )
suite . NoError ( err )
suite . NotNil ( apiStatus )
suite . Equal ( "zh-Hans" , * apiStatus . Language )
}
2022-03-13 16:37:45 +01:00
func TestStatusCreateTestSuite ( t * testing . T ) {
suite . Run ( t , new ( StatusCreateTestSuite ) )
}