[feature] Advertise rich text formats, support content_type field (#1370)

* Advertise rich text formats, support content_type field

* Update JSON in instance patch tests

* Replace format with content_type everywhere

* update migration to work with both pg and sqlite

* regenerate swagger docs

* update instance serialization + tests

* fix up

* learn to code tobi please, i'm begging you

---------

Co-authored-by: tsmethurst <tobi.smethurst@protonmail.com>
This commit is contained in:
Vyr Cossont
2023-03-02 03:06:40 -08:00
committed by GitHub
parent baf933cb9f
commit e6cde25466
23 changed files with 244 additions and 96 deletions

View File

@ -99,9 +99,9 @@ import (
// description: Default language to use for authored statuses (ISO 6391).
// type: string
// -
// name: source[status_format]
// name: source[status_content_type]
// in: formData
// description: Default format to use for authored statuses (plain or markdown).
// description: Default content type to use for authored statuses (text/plain or text/markdown).
// type: string
// -
// name: custom_css
@ -190,8 +190,8 @@ func parseUpdateAccountForm(c *gin.Context) (*apimodel.UpdateCredentialsRequest,
form.Source.Language = &language
}
if statusFormat, ok := sourceMap["status_format"]; ok {
form.Source.StatusFormat = &statusFormat
if statusContentType, ok := sourceMap["status_content_type"]; ok {
form.Source.StatusContentType = &statusContentType
}
if form == nil ||
@ -205,7 +205,7 @@ func parseUpdateAccountForm(c *gin.Context) (*apimodel.UpdateCredentialsRequest,
form.Source.Privacy == nil &&
form.Source.Sensitive == nil &&
form.Source.Language == nil &&
form.Source.StatusFormat == nil &&
form.Source.StatusContentType == nil &&
form.FieldsAttributes == nil &&
form.CustomCSS == nil &&
form.EnableRSS == nil) {

View File

@ -414,13 +414,13 @@ func (suite *AccountUpdateTestSuite) TestAccountUpdateCredentialsPATCHHandlerUpd
suite.True(apimodelAccount.Locked)
}
func (suite *AccountUpdateTestSuite) TestAccountUpdateCredentialsPATCHHandlerUpdateStatusFormatOK() {
func (suite *AccountUpdateTestSuite) TestAccountUpdateCredentialsPATCHHandlerUpdateStatusContentTypeOK() {
// set up the request
// we're updating the language of zork
requestBody, w, err := testrig.CreateMultipartFormData(
"", "",
map[string]string{
"source[status_format]": "markdown",
"source[status_content_type]": "text/markdown",
})
if err != nil {
panic(err)
@ -450,22 +450,22 @@ func (suite *AccountUpdateTestSuite) TestAccountUpdateCredentialsPATCHHandlerUpd
// check the returned api model account
// fields should be updated
suite.Equal("markdown", apimodelAccount.Source.StatusFormat)
suite.Equal("text/markdown", apimodelAccount.Source.StatusContentType)
dbAccount, err := suite.db.GetAccountByID(context.Background(), suite.testAccounts["local_account_1"].ID)
if err != nil {
suite.FailNow(err.Error())
}
suite.Equal(dbAccount.StatusFormat, "markdown")
suite.Equal(dbAccount.StatusContentType, "text/markdown")
}
func (suite *AccountUpdateTestSuite) TestAccountUpdateCredentialsPATCHHandlerUpdateStatusFormatBad() {
func (suite *AccountUpdateTestSuite) TestAccountUpdateCredentialsPATCHHandlerUpdateStatusContentTypeBad() {
// set up the request
// we're updating the language of zork
requestBody, w, err := testrig.CreateMultipartFormData(
"", "",
map[string]string{
"source[status_format]": "peepeepoopoo",
"source[status_content_type]": "peepeepoopoo",
})
if err != nil {
panic(err)
@ -486,7 +486,7 @@ func (suite *AccountUpdateTestSuite) TestAccountUpdateCredentialsPATCHHandlerUpd
b, err := ioutil.ReadAll(result.Body)
suite.NoError(err)
suite.Equal(`{"error":"Bad Request: status format 'peepeepoopoo' was not recognized, valid options are 'plain', 'markdown'"}`, string(b))
suite.Equal(`{"error":"Bad Request: status content type 'peepeepoopoo' was not recognized, valid options are 'text/plain', 'text/markdown'"}`, string(b))
}
func TestAccountUpdateTestSuite(t *testing.T) {

View File

@ -90,7 +90,11 @@ func (suite *InstancePatchTestSuite) TestInstancePatch1() {
"statuses": {
"max_characters": 5000,
"max_media_attachments": 6,
"characters_reserved_per_url": 25
"characters_reserved_per_url": 25,
"supported_mime_types": [
"text/plain",
"text/markdown"
]
},
"media_attachments": {
"supported_mime_types": [
@ -188,7 +192,11 @@ func (suite *InstancePatchTestSuite) TestInstancePatch2() {
"statuses": {
"max_characters": 5000,
"max_media_attachments": 6,
"characters_reserved_per_url": 25
"characters_reserved_per_url": 25,
"supported_mime_types": [
"text/plain",
"text/markdown"
]
},
"media_attachments": {
"supported_mime_types": [
@ -286,7 +294,11 @@ func (suite *InstancePatchTestSuite) TestInstancePatch3() {
"statuses": {
"max_characters": 5000,
"max_media_attachments": 6,
"characters_reserved_per_url": 25
"characters_reserved_per_url": 25,
"supported_mime_types": [
"text/plain",
"text/markdown"
]
},
"media_attachments": {
"supported_mime_types": [
@ -435,7 +447,11 @@ func (suite *InstancePatchTestSuite) TestInstancePatch6() {
"statuses": {
"max_characters": 5000,
"max_media_attachments": 6,
"characters_reserved_per_url": 25
"characters_reserved_per_url": 25,
"supported_mime_types": [
"text/plain",
"text/markdown"
]
},
"media_attachments": {
"supported_mime_types": [
@ -554,7 +570,11 @@ func (suite *InstancePatchTestSuite) TestInstancePatch8() {
"statuses": {
"max_characters": 5000,
"max_media_attachments": 6,
"characters_reserved_per_url": 25
"characters_reserved_per_url": 25,
"supported_mime_types": [
"text/plain",
"text/markdown"
]
},
"media_attachments": {
"supported_mime_types": [
@ -689,7 +709,11 @@ func (suite *InstancePatchTestSuite) TestInstancePatch9() {
"statuses": {
"max_characters": 5000,
"max_media_attachments": 6,
"characters_reserved_per_url": 25
"characters_reserved_per_url": 25,
"supported_mime_types": [
"text/plain",
"text/markdown"
]
},
"media_attachments": {
"supported_mime_types": [

View File

@ -105,14 +105,14 @@ func (suite *StatusCreateTestSuite) TestPostNewStatus() {
func (suite *StatusCreateTestSuite) TestPostNewStatusMarkdown() {
// set default post language of account 1 to markdown
testAccount := suite.testAccounts["local_account_1"]
testAccount.StatusFormat = "markdown"
testAccount.StatusContentType = "text/markdown"
a := testAccount
err := suite.db.UpdateAccount(context.Background(), a)
if err != nil {
suite.FailNow(err.Error())
}
suite.Equal(a.StatusFormat, "markdown")
suite.Equal(a.StatusContentType, "text/markdown")
t := suite.testTokens["local_account_1"]
oauthToken := oauth.DBTokenToToken(t)