mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-30 21:12:24 -05:00 
			
		
		
		
	[bugfix] Fix status fields in_reply_to_id and in_reply_to_account_id not being nullable (#798)
		
	* make reply status fields nullable pointers * update tests
This commit is contained in:
		
					parent
					
						
							
								d68c04a6c0
							
						
					
				
			
			
				commit
				
					
						4e13408fd4
					
				
			
		
					 5 changed files with 32 additions and 16 deletions
				
			
		|  | @ -331,8 +331,8 @@ func (suite *StatusCreateTestSuite) TestReplyToLocalStatus() { | ||||||
| 	suite.Equal(fmt.Sprintf("<p>hello <span class=\"h-card\"><a href=\"http://localhost:8080/@%s\" class=\"u-url mention\" rel=\"nofollow noreferrer noopener\" target=\"_blank\">@<span>%s</span></a></span> this reply should work!</p>", testrig.NewTestAccounts()["local_account_2"].Username, testrig.NewTestAccounts()["local_account_2"].Username), statusReply.Content) | 	suite.Equal(fmt.Sprintf("<p>hello <span class=\"h-card\"><a href=\"http://localhost:8080/@%s\" class=\"u-url mention\" rel=\"nofollow noreferrer noopener\" target=\"_blank\">@<span>%s</span></a></span> this reply should work!</p>", testrig.NewTestAccounts()["local_account_2"].Username, testrig.NewTestAccounts()["local_account_2"].Username), statusReply.Content) | ||||||
| 	suite.False(statusReply.Sensitive) | 	suite.False(statusReply.Sensitive) | ||||||
| 	suite.Equal(model.VisibilityPublic, statusReply.Visibility) | 	suite.Equal(model.VisibilityPublic, statusReply.Visibility) | ||||||
| 	suite.Equal(testrig.NewTestStatuses()["local_account_2_status_1"].ID, statusReply.InReplyToID) | 	suite.Equal(testrig.NewTestStatuses()["local_account_2_status_1"].ID, *statusReply.InReplyToID) | ||||||
| 	suite.Equal(testrig.NewTestAccounts()["local_account_2"].ID, statusReply.InReplyToAccountID) | 	suite.Equal(testrig.NewTestAccounts()["local_account_2"].ID, *statusReply.InReplyToAccountID) | ||||||
| 	suite.Len(statusReply.Mentions, 1) | 	suite.Len(statusReply.Mentions, 1) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -30,10 +30,12 @@ type Status struct { | ||||||
| 	CreatedAt string `json:"created_at"` | 	CreatedAt string `json:"created_at"` | ||||||
| 	// ID of the status being replied to. | 	// ID of the status being replied to. | ||||||
| 	// example: 01FBVD42CQ3ZEEVMW180SBX03B | 	// example: 01FBVD42CQ3ZEEVMW180SBX03B | ||||||
| 	InReplyToID string `json:"in_reply_to_id"` | 	// nullable: true | ||||||
|  | 	InReplyToID *string `json:"in_reply_to_id"` | ||||||
| 	// ID of the account being replied to. | 	// ID of the account being replied to. | ||||||
| 	// example: 01FBVD42CQ3ZEEVMW180SBX03B | 	// example: 01FBVD42CQ3ZEEVMW180SBX03B | ||||||
| 	InReplyToAccountID string `json:"in_reply_to_account_id"` | 	// nullable: true | ||||||
|  | 	InReplyToAccountID *string `json:"in_reply_to_account_id"` | ||||||
| 	// Status contains sensitive content. | 	// Status contains sensitive content. | ||||||
| 	// example: false | 	// example: false | ||||||
| 	Sensitive bool `json:"sensitive"` | 	Sensitive bool `json:"sensitive"` | ||||||
|  | @ -75,7 +77,7 @@ type Status struct { | ||||||
| 	// nullable: true | 	// nullable: true | ||||||
| 	Reblog *StatusReblogged `json:"reblog"` | 	Reblog *StatusReblogged `json:"reblog"` | ||||||
| 	// The application used to post this status, if visible. | 	// The application used to post this status, if visible. | ||||||
| 	Application *Application `json:"application"` | 	Application *Application `json:"application,omitempty"` | ||||||
| 	// The account that authored this status. | 	// The account that authored this status. | ||||||
| 	Account *Account `json:"account"` | 	Account *Account `json:"account"` | ||||||
| 	// Media that is attached to this status. | 	// Media that is attached to this status. | ||||||
|  | @ -87,13 +89,15 @@ type Status struct { | ||||||
| 	// Custom emoji to be used when rendering status content. | 	// Custom emoji to be used when rendering status content. | ||||||
| 	Emojis []Emoji `json:"emojis"` | 	Emojis []Emoji `json:"emojis"` | ||||||
| 	// Preview card for links included within status content. | 	// Preview card for links included within status content. | ||||||
|  | 	// nullable: true | ||||||
| 	Card *Card `json:"card"` | 	Card *Card `json:"card"` | ||||||
| 	// The poll attached to the status. | 	// The poll attached to the status. | ||||||
|  | 	// nullable: true | ||||||
| 	Poll *Poll `json:"poll"` | 	Poll *Poll `json:"poll"` | ||||||
| 	// Plain-text source of a status. Returned instead of content when status is deleted, | 	// Plain-text source of a status. Returned instead of content when status is deleted, | ||||||
| 	// so the user may redraft from the source text without the client having to reverse-engineer | 	// so the user may redraft from the source text without the client having to reverse-engineer | ||||||
| 	// the original text from the HTML content. | 	// the original text from the HTML content. | ||||||
| 	Text string `json:"text"` | 	Text string `json:"text,omitempty"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* | /* | ||||||
|  |  | ||||||
|  | @ -94,7 +94,6 @@ func (suite *InternalToASTestSuite) TestStatusToAS() { | ||||||
| 	suite.Equal(`{"@context":"https://www.w3.org/ns/activitystreams","attachment":[],"attributedTo":"http://localhost:8080/users/the_mighty_zork","cc":"http://localhost:8080/users/the_mighty_zork/followers","content":"hello everyone!","id":"http://localhost:8080/users/the_mighty_zork/statuses/01F8MHAMCHF6Y650WCRSCP4WMY","published":"2021-10-20T12:40:37+02:00","replies":{"first":{"id":"http://localhost:8080/users/the_mighty_zork/statuses/01F8MHAMCHF6Y650WCRSCP4WMY/replies?page=true","next":"http://localhost:8080/users/the_mighty_zork/statuses/01F8MHAMCHF6Y650WCRSCP4WMY/replies?only_other_accounts=false\u0026page=true","partOf":"http://localhost:8080/users/the_mighty_zork/statuses/01F8MHAMCHF6Y650WCRSCP4WMY/replies","type":"CollectionPage"},"id":"http://localhost:8080/users/the_mighty_zork/statuses/01F8MHAMCHF6Y650WCRSCP4WMY/replies","type":"Collection"},"sensitive":true,"summary":"introduction post","tag":[],"to":"https://www.w3.org/ns/activitystreams#Public","type":"Note","url":"http://localhost:8080/@the_mighty_zork/statuses/01F8MHAMCHF6Y650WCRSCP4WMY"}`, string(bytes)) | 	suite.Equal(`{"@context":"https://www.w3.org/ns/activitystreams","attachment":[],"attributedTo":"http://localhost:8080/users/the_mighty_zork","cc":"http://localhost:8080/users/the_mighty_zork/followers","content":"hello everyone!","id":"http://localhost:8080/users/the_mighty_zork/statuses/01F8MHAMCHF6Y650WCRSCP4WMY","published":"2021-10-20T12:40:37+02:00","replies":{"first":{"id":"http://localhost:8080/users/the_mighty_zork/statuses/01F8MHAMCHF6Y650WCRSCP4WMY/replies?page=true","next":"http://localhost:8080/users/the_mighty_zork/statuses/01F8MHAMCHF6Y650WCRSCP4WMY/replies?only_other_accounts=false\u0026page=true","partOf":"http://localhost:8080/users/the_mighty_zork/statuses/01F8MHAMCHF6Y650WCRSCP4WMY/replies","type":"CollectionPage"},"id":"http://localhost:8080/users/the_mighty_zork/statuses/01F8MHAMCHF6Y650WCRSCP4WMY/replies","type":"Collection"},"sensitive":true,"summary":"introduction post","tag":[],"to":"https://www.w3.org/ns/activitystreams#Public","type":"Note","url":"http://localhost:8080/@the_mighty_zork/statuses/01F8MHAMCHF6Y650WCRSCP4WMY"}`, string(bytes)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| func (suite *InternalToASTestSuite) TestStatusWithTagsToAS() { | func (suite *InternalToASTestSuite) TestStatusWithTagsToAS() { | ||||||
| 	ctx := context.Background() | 	ctx := context.Background() | ||||||
| 	//get the entire status with all tags | 	//get the entire status with all tags | ||||||
|  | @ -110,7 +109,11 @@ func (suite *InternalToASTestSuite) TestStatusWithTagsToAS() { | ||||||
| 	bytes, err := json.Marshal(ser) | 	bytes, err := json.Marshal(ser) | ||||||
| 	suite.NoError(err) | 	suite.NoError(err) | ||||||
| 
 | 
 | ||||||
| 	suite.Equal(`{"@context":["https://www.w3.org/ns/activitystreams","http://joinmastodon.org/ns"],"attachment":{"blurhash":"LNJRdVM{00Rj%Mayt7j[4nWBofRj","mediaType":"image/jpeg","name":"Black and white image of some 50's style text saying: Welcome On Board","type":"Document","url":"http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/attachment/original/01F8MH6NEM8D7527KZAECTCR76.jpeg"},"attributedTo":"http://localhost:8080/users/admin","cc":"http://localhost:8080/users/admin/followers","content":"hello world! #welcome ! first post on the instance :rainbow: !","id":"http://localhost:8080/users/admin/statuses/01F8MH75CBF9JFX4ZAD54N0W0R","published":"2021-10-20T11:36:45Z","replies":{"first":{"id":"http://localhost:8080/users/admin/statuses/01F8MH75CBF9JFX4ZAD54N0W0R/replies?page=true","next":"http://localhost:8080/users/admin/statuses/01F8MH75CBF9JFX4ZAD54N0W0R/replies?only_other_accounts=false\u0026page=true","partOf":"http://localhost:8080/users/admin/statuses/01F8MH75CBF9JFX4ZAD54N0W0R/replies","type":"CollectionPage"},"id":"http://localhost:8080/users/admin/statuses/01F8MH75CBF9JFX4ZAD54N0W0R/replies","type":"Collection"},"sensitive":false,"summary":"","tag":{"icon":{"mediaType":"image/png","type":"Image","url":"http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/emoji/original/01F8MH9H8E4VG3KDYJR9EGPXCQ.png"},"id":"http://localhost:8080/emoji/01F8MH9H8E4VG3KDYJR9EGPXCQ","name":":rainbow:","type":"Emoji"},"to":"https://www.w3.org/ns/activitystreams#Public","type":"Note","url":"http://localhost:8080/@admin/statuses/01F8MH75CBF9JFX4ZAD54N0W0R"}`, string(bytes)) | 	// we can't be sure in what order the two context entries -- | ||||||
|  | 	// http://joinmastodon.org/ns, https://www.w3.org/ns/activitystreams -- | ||||||
|  | 	// will appear, so trim them out of the string for consistency | ||||||
|  | 	trimmed := strings.SplitAfter(string(bytes), `"attachment":`)[1] | ||||||
|  | 	suite.Equal(`{"blurhash":"LNJRdVM{00Rj%Mayt7j[4nWBofRj","mediaType":"image/jpeg","name":"Black and white image of some 50's style text saying: Welcome On Board","type":"Document","url":"http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/attachment/original/01F8MH6NEM8D7527KZAECTCR76.jpeg"},"attributedTo":"http://localhost:8080/users/admin","cc":"http://localhost:8080/users/admin/followers","content":"hello world! #welcome ! first post on the instance :rainbow: !","id":"http://localhost:8080/users/admin/statuses/01F8MH75CBF9JFX4ZAD54N0W0R","published":"2021-10-20T11:36:45Z","replies":{"first":{"id":"http://localhost:8080/users/admin/statuses/01F8MH75CBF9JFX4ZAD54N0W0R/replies?page=true","next":"http://localhost:8080/users/admin/statuses/01F8MH75CBF9JFX4ZAD54N0W0R/replies?only_other_accounts=false\u0026page=true","partOf":"http://localhost:8080/users/admin/statuses/01F8MH75CBF9JFX4ZAD54N0W0R/replies","type":"CollectionPage"},"id":"http://localhost:8080/users/admin/statuses/01F8MH75CBF9JFX4ZAD54N0W0R/replies","type":"Collection"},"sensitive":false,"summary":"","tag":{"icon":{"mediaType":"image/png","type":"Image","url":"http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/emoji/original/01F8MH9H8E4VG3KDYJR9EGPXCQ.png"},"id":"http://localhost:8080/emoji/01F8MH9H8E4VG3KDYJR9EGPXCQ","name":":rainbow:","type":"Emoji"},"to":"https://www.w3.org/ns/activitystreams#Public","type":"Note","url":"http://localhost:8080/@admin/statuses/01F8MH75CBF9JFX4ZAD54N0W0R"}`, trimmed) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (suite *InternalToASTestSuite) TestStatusToASWithMentions() { | func (suite *InternalToASTestSuite) TestStatusToASWithMentions() { | ||||||
|  |  | ||||||
|  | @ -525,9 +525,6 @@ func (c *converter) StatusToAPIStatus(ctx context.Context, s *gtsmodel.Status, r | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	var apiCard *model.Card |  | ||||||
| 	var apiPoll *model.Poll |  | ||||||
| 
 |  | ||||||
| 	statusInteractions := &statusInteractions{} | 	statusInteractions := &statusInteractions{} | ||||||
| 	si, err := c.interactionsWithStatusForAccount(ctx, s, requestingAccount) | 	si, err := c.interactionsWithStatusForAccount(ctx, s, requestingAccount) | ||||||
| 	if err == nil { | 	if err == nil { | ||||||
|  | @ -537,8 +534,8 @@ func (c *converter) StatusToAPIStatus(ctx context.Context, s *gtsmodel.Status, r | ||||||
| 	apiStatus := &model.Status{ | 	apiStatus := &model.Status{ | ||||||
| 		ID:                 s.ID, | 		ID:                 s.ID, | ||||||
| 		CreatedAt:          util.FormatISO8601(s.CreatedAt), | 		CreatedAt:          util.FormatISO8601(s.CreatedAt), | ||||||
| 		InReplyToID:        s.InReplyToID, | 		InReplyToID:        nil, | ||||||
| 		InReplyToAccountID: s.InReplyToAccountID, | 		InReplyToAccountID: nil, | ||||||
| 		Sensitive:          *s.Sensitive, | 		Sensitive:          *s.Sensitive, | ||||||
| 		SpoilerText:        s.ContentWarning, | 		SpoilerText:        s.ContentWarning, | ||||||
| 		Visibility:         c.VisToAPIVis(ctx, s.Visibility), | 		Visibility:         c.VisToAPIVis(ctx, s.Visibility), | ||||||
|  | @ -554,17 +551,29 @@ func (c *converter) StatusToAPIStatus(ctx context.Context, s *gtsmodel.Status, r | ||||||
| 		Reblogged:          statusInteractions.Reblogged, | 		Reblogged:          statusInteractions.Reblogged, | ||||||
| 		Pinned:             *s.Pinned, | 		Pinned:             *s.Pinned, | ||||||
| 		Content:            s.Content, | 		Content:            s.Content, | ||||||
|  | 		Reblog:             nil, | ||||||
| 		Application:        apiApplication, | 		Application:        apiApplication, | ||||||
| 		Account:            apiAuthorAccount, | 		Account:            apiAuthorAccount, | ||||||
| 		MediaAttachments:   apiAttachments, | 		MediaAttachments:   apiAttachments, | ||||||
| 		Mentions:           apiMentions, | 		Mentions:           apiMentions, | ||||||
| 		Tags:               apiTags, | 		Tags:               apiTags, | ||||||
| 		Emojis:             apiEmojis, | 		Emojis:             apiEmojis, | ||||||
| 		Card:               apiCard, // TODO: implement cards | 		Card:               nil, // TODO: implement cards | ||||||
| 		Poll:               apiPoll, // TODO: implement polls | 		Poll:               nil, // TODO: implement polls | ||||||
| 		Text:               s.Text, | 		Text:               s.Text, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	// nullable fields | ||||||
|  | 	if s.InReplyToID != "" { | ||||||
|  | 		i := s.InReplyToID | ||||||
|  | 		apiStatus.InReplyToID = &i | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if s.InReplyToAccountID != "" { | ||||||
|  | 		i := s.InReplyToAccountID | ||||||
|  | 		apiStatus.InReplyToAccountID = &i | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	if apiRebloggedStatus != nil { | 	if apiRebloggedStatus != nil { | ||||||
| 		apiStatus.Reblog = &model.StatusReblogged{Status: apiRebloggedStatus} | 		apiStatus.Reblog = &model.StatusReblogged{Status: apiRebloggedStatus} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -63,7 +63,7 @@ func (suite *InternalToFrontendTestSuite) TestStatusToFrontend() { | ||||||
| 	b, err := json.Marshal(apiStatus) | 	b, err := json.Marshal(apiStatus) | ||||||
| 	suite.NoError(err) | 	suite.NoError(err) | ||||||
| 
 | 
 | ||||||
| 	suite.Equal(`{"id":"01F8MH75CBF9JFX4ZAD54N0W0R","created_at":"2021-10-20T11:36:45.000Z","in_reply_to_id":"","in_reply_to_account_id":"","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":0,"reblogs_count":0,"favourites_count":1,"favourited":true,"reblogged":false,"muted":false,"bookmarked":false,"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,"bot":false,"created_at":"2022-05-17T13:10:59.000Z","note":"","url":"http://localhost:8080/@admin","avatar":"","avatar_static":"","header":"","header_static":"","followers_count":1,"following_count":1,"statuses_count":4,"last_status_at":"2021-10-20T10:41:37.000Z","emojis":[],"fields":[]},"media_attachments":[{"id":"01F8MH6NEM8D7527KZAECTCR76","type":"image","url":"http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/attachment/original/01F8MH6NEM8D7527KZAECTCR76.jpeg","text_url":"http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/attachment/original/01F8MH6NEM8D7527KZAECTCR76.jpeg","preview_url":"http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/attachment/small/01F8MH6NEM8D7527KZAECTCR76.jpeg","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/01F8MH17FWEB39HZJ76B6VXSKF/emoji/original/01F8MH9H8E4VG3KDYJR9EGPXCQ.png","static_url":"http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/emoji/static/01F8MH9H8E4VG3KDYJR9EGPXCQ.png","visible_in_picker":true}],"card":null,"poll":null,"text":""}`, string(b)) | 	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":0,"reblogs_count":0,"favourites_count":1,"favourited":true,"reblogged":false,"muted":false,"bookmarked":false,"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,"bot":false,"created_at":"2022-05-17T13:10:59.000Z","note":"","url":"http://localhost:8080/@admin","avatar":"","avatar_static":"","header":"","header_static":"","followers_count":1,"following_count":1,"statuses_count":4,"last_status_at":"2021-10-20T10:41:37.000Z","emojis":[],"fields":[]},"media_attachments":[{"id":"01F8MH6NEM8D7527KZAECTCR76","type":"image","url":"http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/attachment/original/01F8MH6NEM8D7527KZAECTCR76.jpeg","text_url":"http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/attachment/original/01F8MH6NEM8D7527KZAECTCR76.jpeg","preview_url":"http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/attachment/small/01F8MH6NEM8D7527KZAECTCR76.jpeg","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/01F8MH17FWEB39HZJ76B6VXSKF/emoji/original/01F8MH9H8E4VG3KDYJR9EGPXCQ.png","static_url":"http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/emoji/static/01F8MH9H8E4VG3KDYJR9EGPXCQ.png","visible_in_picker":true}],"card":null,"poll":null}`, string(b)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (suite *InternalToFrontendTestSuite) TestInstanceToFrontend() { | func (suite *InternalToFrontendTestSuite) TestInstanceToFrontend() { | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue