2022-03-13 15:37:45 +00:00
/ *
GoToSocial
Copyright ( C ) 2021 - 2022 GoToSocial Authors admin @ gotosocial . org
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/>.
* /
package status_test
import (
"context"
"testing"
"github.com/stretchr/testify/suite"
"github.com/superseriousbusiness/gotosocial/internal/api/model"
2022-11-05 12:33:38 +00:00
"github.com/superseriousbusiness/gotosocial/internal/config"
2022-09-27 12:27:53 +00:00
"github.com/superseriousbusiness/gotosocial/internal/db"
"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
2022-03-13 15:37:45 +00:00
)
type StatusCreateTestSuite struct {
StatusStandardTestSuite
}
func ( suite * StatusCreateTestSuite ) TestProcessContentWarningWithQuotationMarks ( ) {
ctx := context . Background ( )
creatingAccount := suite . testAccounts [ "local_account_1" ]
creatingApplication := suite . testApplications [ "application_1" ]
statusCreateForm := & model . AdvancedStatusCreateForm {
StatusCreateRequest : model . StatusCreateRequest {
Status : "poopoo peepee" ,
MediaIDs : [ ] string { } ,
Poll : nil ,
InReplyToID : "" ,
Sensitive : false ,
SpoilerText : "\"test\"" , // these should not be html-escaped when the final text is rendered
Visibility : model . VisibilityPublic ,
ScheduledAt : "" ,
Language : "en" ,
Format : model . StatusFormatPlain ,
} ,
AdvancedVisibilityFlagsForm : model . 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 ( "\"test\"" , apiStatus . SpoilerText )
}
func ( suite * StatusCreateTestSuite ) TestProcessContentWarningWithHTMLEscapedQuotationMarks ( ) {
ctx := context . Background ( )
creatingAccount := suite . testAccounts [ "local_account_1" ]
creatingApplication := suite . testApplications [ "application_1" ]
statusCreateForm := & model . AdvancedStatusCreateForm {
StatusCreateRequest : model . StatusCreateRequest {
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
Visibility : model . VisibilityPublic ,
ScheduledAt : "" ,
Language : "en" ,
Format : model . StatusFormatPlain ,
} ,
AdvancedVisibilityFlagsForm : model . 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 ( "\"test\"" , apiStatus . SpoilerText )
}
2022-09-27 12:27:53 +00: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" ]
statusCreateForm := & model . AdvancedStatusCreateForm {
StatusCreateRequest : model . StatusCreateRequest {
Status : "poopoo peepee :_rainbow_:" ,
MediaIDs : [ ] string { } ,
Poll : nil ,
InReplyToID : "" ,
Sensitive : false ,
Visibility : model . VisibilityPublic ,
ScheduledAt : "" ,
Language : "en" ,
Format : model . StatusFormatMarkdown ,
} ,
AdvancedVisibilityFlagsForm : model . 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 ( "<p>poopoo peepee :_rainbow_:</p>" , apiStatus . Content )
suite . NotEmpty ( apiStatus . Emojis )
}
2022-10-02 12:01:47 +00:00
func ( suite * StatusCreateTestSuite ) TestProcessStatusMarkdownWithSpoilerTextEmoji ( ) {
ctx := context . Background ( )
creatingAccount := suite . testAccounts [ "local_account_1" ]
creatingApplication := suite . testApplications [ "application_1" ]
statusCreateForm := & model . AdvancedStatusCreateForm {
StatusCreateRequest : model . StatusCreateRequest {
Status : "poopoo peepee" ,
SpoilerText : "testing something :rainbow:" ,
MediaIDs : [ ] string { } ,
Poll : nil ,
InReplyToID : "" ,
Sensitive : false ,
Visibility : model . VisibilityPublic ,
ScheduledAt : "" ,
Language : "en" ,
Format : model . StatusFormatMarkdown ,
} ,
AdvancedVisibilityFlagsForm : model . 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 ( "<p>poopoo peepee</p>" , apiStatus . Content )
suite . Equal ( "testing something :rainbow:" , apiStatus . SpoilerText )
suite . NotEmpty ( apiStatus . Emojis )
}
2022-11-05 12:33:38 +00:00
func ( suite * StatusCreateTestSuite ) TestProcessMediaDescriptionTooShort ( ) {
ctx := context . Background ( )
config . SetMediaDescriptionMinChars ( 100 )
creatingAccount := suite . testAccounts [ "local_account_1" ]
creatingApplication := suite . testApplications [ "application_1" ]
statusCreateForm := & model . AdvancedStatusCreateForm {
StatusCreateRequest : model . StatusCreateRequest {
Status : "poopoo peepee" ,
MediaIDs : [ ] string { suite . testAttachments [ "local_account_1_unattached_1" ] . ID } ,
Poll : nil ,
InReplyToID : "" ,
Sensitive : false ,
SpoilerText : "" ,
Visibility : model . VisibilityPublic ,
ScheduledAt : "" ,
Language : "en" ,
Format : model . StatusFormatPlain ,
} ,
AdvancedVisibilityFlagsForm : model . AdvancedVisibilityFlagsForm {
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 )
}
2022-03-13 15:37:45 +00:00
func TestStatusCreateTestSuite ( t * testing . T ) {
suite . Run ( t , new ( StatusCreateTestSuite ) )
}