2021-04-19 19:42:19 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								/ *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   GoToSocial 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-20 18:42:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								   Copyright  ( C )  2021 - 2022  GoToSocial  Authors  admin @ gotosocial . org 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-19 19:42:19 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   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/>. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								* /  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-05-08 14:25:55 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								package  status_test  
						 
					
						
							
								
									
										
										
										
											2021-04-19 19:42:19 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  (  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"encoding/json" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"fmt" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"io/ioutil" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"net/http" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"net/http/httptest" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"strings" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"testing" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"github.com/gin-gonic/gin" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"github.com/stretchr/testify/assert" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"github.com/stretchr/testify/suite" 
							 
						 
					
						
							
								
									
										
										
										
											2021-05-08 14:25:55 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"github.com/superseriousbusiness/gotosocial/internal/api/client/status" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"github.com/superseriousbusiness/gotosocial/internal/api/model" 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-19 19:42:19 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									"github.com/superseriousbusiness/gotosocial/internal/oauth" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								)  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								type  StatusFaveTestSuite  struct  {  
						 
					
						
							
								
									
										
										
										
											2021-05-08 14:25:55 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									StatusStandardTestSuite 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-19 19:42:19 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// fave a status  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  ( suite  * StatusFaveTestSuite )  TestPostFave ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									t  :=  suite . testTokens [ "local_account_1" ] 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 15:34:33 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									oauthToken  :=  oauth . DBTokenToToken ( t ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-19 19:42:19 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									targetStatus  :=  suite . testStatuses [ "admin_account_status_2" ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// setup 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									recorder  :=  httptest . NewRecorder ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ctx ,  _  :=  gin . CreateTestContext ( recorder ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ctx . Set ( oauth . SessionAuthorizedApplication ,  suite . testApplications [ "application_1" ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ctx . Set ( oauth . SessionAuthorizedToken ,  oauthToken ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ctx . Set ( oauth . SessionAuthorizedUser ,  suite . testUsers [ "local_account_1" ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ctx . Set ( oauth . SessionAuthorizedAccount ,  suite . testAccounts [ "local_account_1" ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ctx . Request  =  httptest . NewRequest ( http . MethodPost ,  fmt . Sprintf ( "http://localhost:8080%s" ,  strings . Replace ( status . FavouritePath ,  ":id" ,  targetStatus . ID ,  1 ) ) ,  nil )  // the endpoint we're hitting 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-11 17:50:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ctx . Request . Header . Set ( "accept" ,  "application/json" ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-19 19:42:19 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// normally the router would populate these params from the path values, 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// but because we're calling the function directly, we need to set them manually. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ctx . Params  =  gin . Params { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										gin . Param { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Key :    status . IDKey , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Value :  targetStatus . ID , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									suite . statusModule . StatusFavePOSTHandler ( ctx ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// check response 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									suite . EqualValues ( http . StatusOK ,  recorder . Code ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									result  :=  recorder . Result ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									defer  result . Body . Close ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									b ,  err  :=  ioutil . ReadAll ( result . Body ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									assert . NoError ( suite . T ( ) ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-05-08 14:25:55 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									statusReply  :=  & model . Status { } 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-19 19:42:19 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									err  =  json . Unmarshal ( b ,  statusReply ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									assert . NoError ( suite . T ( ) ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									assert . Equal ( suite . T ( ) ,  targetStatus . ContentWarning ,  statusReply . SpoilerText ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									assert . Equal ( suite . T ( ) ,  targetStatus . Content ,  statusReply . Content ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									assert . True ( suite . T ( ) ,  statusReply . Sensitive ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-05-08 14:25:55 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									assert . Equal ( suite . T ( ) ,  model . VisibilityPublic ,  statusReply . Visibility ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-19 19:42:19 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									assert . True ( suite . T ( ) ,  statusReply . Favourited ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									assert . Equal ( suite . T ( ) ,  1 ,  statusReply . FavouritesCount ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// try to fave a status that's not faveable  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  ( suite  * StatusFaveTestSuite )  TestPostUnfaveable ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									t  :=  suite . testTokens [ "local_account_1" ] 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-25 15:34:33 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									oauthToken  :=  oauth . DBTokenToToken ( t ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-19 19:42:19 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									targetStatus  :=  suite . testStatuses [ "local_account_2_status_3" ]  // this one is unlikeable and unreplyable 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// setup 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									recorder  :=  httptest . NewRecorder ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ctx ,  _  :=  gin . CreateTestContext ( recorder ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ctx . Set ( oauth . SessionAuthorizedApplication ,  suite . testApplications [ "application_1" ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ctx . Set ( oauth . SessionAuthorizedToken ,  oauthToken ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ctx . Set ( oauth . SessionAuthorizedUser ,  suite . testUsers [ "local_account_1" ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ctx . Set ( oauth . SessionAuthorizedAccount ,  suite . testAccounts [ "local_account_1" ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ctx . Request  =  httptest . NewRequest ( http . MethodPost ,  fmt . Sprintf ( "http://localhost:8080%s" ,  strings . Replace ( status . FavouritePath ,  ":id" ,  targetStatus . ID ,  1 ) ) ,  nil )  // the endpoint we're hitting 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-11 17:50:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ctx . Request . Header . Set ( "accept" ,  "application/json" ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-19 19:42:19 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// normally the router would populate these params from the path values, 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// but because we're calling the function directly, we need to set them manually. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ctx . Params  =  gin . Params { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										gin . Param { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Key :    status . IDKey , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Value :  targetStatus . ID , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									suite . statusModule . StatusFavePOSTHandler ( ctx ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// check response 
							 
						 
					
						
							
								
									
										
										
										
											2022-06-08 20:38:03 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									suite . EqualValues ( http . StatusForbidden ,  recorder . Code ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-19 19:42:19 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									result  :=  recorder . Result ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									defer  result . Body . Close ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									b ,  err  :=  ioutil . ReadAll ( result . Body ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									assert . NoError ( suite . T ( ) ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-06-08 20:38:03 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									assert . Equal ( suite . T ( ) ,  ` { "error":"Forbidden"} ` ,  string ( b ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-19 19:42:19 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  TestStatusFaveTestSuite ( t  * testing . T )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									suite . Run ( t ,  new ( StatusFaveTestSuite ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}