2021-08-10 13:32:39 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								package  user_test  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  (  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"context" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"encoding/json" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"fmt" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"io/ioutil" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"net/http" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"net/http/httptest" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"testing" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"github.com/gin-gonic/gin" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"github.com/go-fed/activity/streams" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"github.com/go-fed/activity/streams/vocab" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"github.com/stretchr/testify/assert" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"github.com/stretchr/testify/suite" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"github.com/superseriousbusiness/gotosocial/internal/api/s2s/user" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"github.com/superseriousbusiness/gotosocial/internal/api/security" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"github.com/superseriousbusiness/gotosocial/testrig" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								)  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								type  RepliesGetTestSuite  struct  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									UserStandardTestSuite 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  ( suite  * RepliesGetTestSuite )  SetupSuite ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									suite . testTokens  =  testrig . NewTestTokens ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									suite . testClients  =  testrig . NewTestClients ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									suite . testApplications  =  testrig . NewTestApplications ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									suite . testUsers  =  testrig . NewTestUsers ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									suite . testAccounts  =  testrig . NewTestAccounts ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									suite . testAttachments  =  testrig . NewTestAttachments ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									suite . testStatuses  =  testrig . NewTestStatuses ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  ( suite  * RepliesGetTestSuite )  SetupTest ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									suite . config  =  testrig . NewTestConfig ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									suite . db  =  testrig . NewTestDB ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									suite . tc  =  testrig . NewTestTypeConverter ( suite . db ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									suite . storage  =  testrig . NewTestStorage ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									suite . log  =  testrig . NewTestLog ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									suite . federator  =  testrig . NewTestFederator ( suite . db ,  testrig . NewTestTransportController ( testrig . NewMockHTTPClient ( nil ) ,  suite . db ) ,  suite . storage ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									suite . processor  =  testrig . NewTestProcessor ( suite . db ,  suite . storage ,  suite . federator ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									suite . userModule  =  user . New ( suite . config ,  suite . processor ,  suite . log ) . ( * user . Module ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									suite . securityModule  =  security . New ( suite . config ,  suite . db ,  suite . log ) . ( * security . Module ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									testrig . StandardDBSetup ( suite . db ,  suite . testAccounts ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									testrig . StandardStorageSetup ( suite . storage ,  "../../../../testrig/media" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  ( suite  * RepliesGetTestSuite )  TearDownTest ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									testrig . StandardDBTeardown ( suite . db ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									testrig . StandardStorageTeardown ( suite . storage ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  ( suite  * RepliesGetTestSuite )  TestGetReplies ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// the dereference we're gonna use 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									derefRequests  :=  testrig . NewTestDereferenceRequests ( suite . testAccounts ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									signedRequest  :=  derefRequests [ "foss_satan_dereference_local_account_1_status_1_replies" ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									targetAccount  :=  suite . testAccounts [ "local_account_1" ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									targetStatus  :=  suite . testStatuses [ "local_account_1_status_1" ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									tc  :=  testrig . NewTestTransportController ( testrig . NewMockHTTPClient ( nil ) ,  suite . db ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									federator  :=  testrig . NewTestFederator ( suite . db ,  tc ,  suite . storage ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									processor  :=  testrig . NewTestProcessor ( suite . db ,  suite . storage ,  federator ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									userModule  :=  user . New ( suite . config ,  processor ,  suite . log ) . ( * user . Module ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// setup request 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									recorder  :=  httptest . NewRecorder ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ctx ,  _  :=  gin . CreateTestContext ( recorder ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ctx . Request  =  httptest . NewRequest ( http . MethodGet ,  targetStatus . URI + "/replies" ,  nil )  // the endpoint we're hitting 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ctx . Request . Header . Set ( "Signature" ,  signedRequest . SignatureHeader ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ctx . Request . Header . Set ( "Date" ,  signedRequest . DateHeader ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// we need to pass the context through signature check first to set appropriate values on it 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									suite . securityModule . SignatureCheck ( ctx ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// 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 :    user . UsernameKey , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Value :  targetAccount . Username , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										gin . Param { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Key :    user . StatusIDKey , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Value :  targetStatus . ID , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// trigger the function being tested 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									userModule . StatusRepliesGETHandler ( 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 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									assert . Equal ( suite . T ( ) ,  ` { "@context":"https://www.w3.org/ns/activitystreams","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"} ` ,  string ( b ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// should be a Collection 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									m  :=  make ( map [ string ] interface { } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									err  =  json . Unmarshal ( b ,  & m ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									assert . NoError ( suite . T ( ) ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									t ,  err  :=  streams . ToType ( context . Background ( ) ,  m ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									assert . NoError ( suite . T ( ) ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									_ ,  ok  :=  t . ( vocab . ActivityStreamsCollection ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									assert . True ( suite . T ( ) ,  ok ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  ( suite  * RepliesGetTestSuite )  TestGetRepliesNext ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// the dereference we're gonna use 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									derefRequests  :=  testrig . NewTestDereferenceRequests ( suite . testAccounts ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									signedRequest  :=  derefRequests [ "foss_satan_dereference_local_account_1_status_1_replies_next" ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									targetAccount  :=  suite . testAccounts [ "local_account_1" ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									targetStatus  :=  suite . testStatuses [ "local_account_1_status_1" ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									tc  :=  testrig . NewTestTransportController ( testrig . NewMockHTTPClient ( nil ) ,  suite . db ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									federator  :=  testrig . NewTestFederator ( suite . db ,  tc ,  suite . storage ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									processor  :=  testrig . NewTestProcessor ( suite . db ,  suite . storage ,  federator ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									userModule  :=  user . New ( suite . config ,  processor ,  suite . log ) . ( * user . Module ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// setup request 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									recorder  :=  httptest . NewRecorder ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ctx ,  _  :=  gin . CreateTestContext ( recorder ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ctx . Request  =  httptest . NewRequest ( http . MethodGet ,  targetStatus . URI + "/replies?only_other_accounts=false&page=true" ,  nil )  // the endpoint we're hitting 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ctx . Request . Header . Set ( "Signature" ,  signedRequest . SignatureHeader ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ctx . Request . Header . Set ( "Date" ,  signedRequest . DateHeader ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// we need to pass the context through signature check first to set appropriate values on it 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									suite . securityModule . SignatureCheck ( ctx ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// 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 :    user . UsernameKey , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Value :  targetAccount . Username , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										gin . Param { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Key :    user . StatusIDKey , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Value :  targetStatus . ID , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// trigger the function being tested 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									userModule . StatusRepliesGETHandler ( 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-09-09 16:15:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									assert . Equal ( suite . T ( ) ,  ` { "@context":"https://www.w3.org/ns/activitystreams","id":"http://localhost:8080/users/the_mighty_zork/statuses/01F8MHAMCHF6Y650WCRSCP4WMY/replies?page=true\u0026only_other_accounts=false","items":"http://localhost:8080/users/admin/statuses/01FF25D5Q0DH7CHD57CTRS6WK0","next":"http://localhost:8080/users/the_mighty_zork/statuses/01F8MHAMCHF6Y650WCRSCP4WMY/replies?only_other_accounts=false\u0026page=true\u0026min_id=01FF25D5Q0DH7CHD57CTRS6WK0","partOf":"http://localhost:8080/users/the_mighty_zork/statuses/01F8MHAMCHF6Y650WCRSCP4WMY/replies","type":"CollectionPage"} ` ,  string ( b ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-10 13:32:39 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// should be a Collection 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									m  :=  make ( map [ string ] interface { } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									err  =  json . Unmarshal ( b ,  & m ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									assert . NoError ( suite . T ( ) ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									t ,  err  :=  streams . ToType ( context . Background ( ) ,  m ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									assert . NoError ( suite . T ( ) ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									page ,  ok  :=  t . ( vocab . ActivityStreamsCollectionPage ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									assert . True ( suite . T ( ) ,  ok ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									assert . Equal ( suite . T ( ) ,  page . GetActivityStreamsItems ( ) . Len ( ) ,  1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  ( suite  * RepliesGetTestSuite )  TestGetRepliesLast ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// the dereference we're gonna use 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									derefRequests  :=  testrig . NewTestDereferenceRequests ( suite . testAccounts ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									signedRequest  :=  derefRequests [ "foss_satan_dereference_local_account_1_status_1_replies_last" ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									targetAccount  :=  suite . testAccounts [ "local_account_1" ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									targetStatus  :=  suite . testStatuses [ "local_account_1_status_1" ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									tc  :=  testrig . NewTestTransportController ( testrig . NewMockHTTPClient ( nil ) ,  suite . db ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									federator  :=  testrig . NewTestFederator ( suite . db ,  tc ,  suite . storage ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									processor  :=  testrig . NewTestProcessor ( suite . db ,  suite . storage ,  federator ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									userModule  :=  user . New ( suite . config ,  processor ,  suite . log ) . ( * user . Module ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// setup request 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									recorder  :=  httptest . NewRecorder ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ctx ,  _  :=  gin . CreateTestContext ( recorder ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-09 16:15:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ctx . Request  =  httptest . NewRequest ( http . MethodGet ,  targetStatus . URI + "/replies?only_other_accounts=false&page=true&min_id=01FF25D5Q0DH7CHD57CTRS6WK0" ,  nil )  // the endpoint we're hitting 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-10 13:32:39 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									ctx . Request . Header . Set ( "Signature" ,  signedRequest . SignatureHeader ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ctx . Request . Header . Set ( "Date" ,  signedRequest . DateHeader ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// we need to pass the context through signature check first to set appropriate values on it 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									suite . securityModule . SignatureCheck ( ctx ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// 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 :    user . UsernameKey , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Value :  targetAccount . Username , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										gin . Param { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Key :    user . StatusIDKey , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Value :  targetStatus . ID , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// trigger the function being tested 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									userModule . StatusRepliesGETHandler ( 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 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									fmt . Println ( string ( b ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-09 16:15:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									assert . Equal ( suite . T ( ) ,  ` { "@context":"https://www.w3.org/ns/activitystreams","id":"http://localhost:8080/users/the_mighty_zork/statuses/01F8MHAMCHF6Y650WCRSCP4WMY/replies?page=true\u0026only_other_accounts=false\u0026min_id=01FF25D5Q0DH7CHD57CTRS6WK0","items":[],"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"} ` ,  string ( b ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-10 13:32:39 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// should be a Collection 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									m  :=  make ( map [ string ] interface { } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									err  =  json . Unmarshal ( b ,  & m ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									assert . NoError ( suite . T ( ) ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									t ,  err  :=  streams . ToType ( context . Background ( ) ,  m ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									assert . NoError ( suite . T ( ) ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									page ,  ok  :=  t . ( vocab . ActivityStreamsCollectionPage ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									assert . True ( suite . T ( ) ,  ok ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									assert . Equal ( suite . T ( ) ,  page . GetActivityStreamsItems ( ) . Len ( ) ,  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  TestRepliesGetTestSuite ( t  * testing . T )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									suite . Run ( t ,  new ( RepliesGetTestSuite ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}