mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 09:42:26 -05:00 
			
		
		
		
	[feature] More consistent API error handling (#637)
* update templates * start reworking api error handling * update template * return AP status at web endpoint if negotiated * start making api error handling much more consistent * update account endpoints to new error handling * use new api error handling in admin endpoints * go fmt ./... * use api error logic in app * use generic error handling in auth * don't export generic error handler * don't defer clearing session * user nicer error handling on oidc callback handler * tidy up the sign in handler * tidy up the token handler * use nicer error handling in blocksget * auth emojis endpoint * fix up remaining api endpoints * fix whoopsie during login flow * regenerate swagger docs * change http error logging to debug
This commit is contained in:
		
					parent
					
						
							
								91c0ed863a
							
						
					
				
			
			
				commit
				
					
						1ede54ddf6
					
				
			
		
					 130 changed files with 2154 additions and 1673 deletions
				
			
		|  | @ -26,6 +26,7 @@ import ( | |||
| 
 | ||||
| 	"github.com/stretchr/testify/suite" | ||||
| 	"github.com/superseriousbusiness/gotosocial/internal/api/client/instance" | ||||
| 	"github.com/superseriousbusiness/gotosocial/internal/oauth" | ||||
| 	"github.com/superseriousbusiness/gotosocial/testrig" | ||||
| ) | ||||
| 
 | ||||
|  | @ -125,6 +126,67 @@ func (suite *InstancePatchTestSuite) TestInstancePatch3() { | |||
| 	suite.Equal(`{"uri":"http://localhost:8080","title":"localhost:8080","description":"","short_description":"\u003cp\u003eThis is some html, which is \u003cem\u003eallowed\u003c/em\u003e in short descriptions.\u003c/p\u003e","email":"","version":"","registrations":true,"approval_required":true,"invites_enabled":false,"urls":{"streaming_api":"wss://localhost:8080"},"stats":{"domain_count":0,"status_count":16,"user_count":4},"thumbnail":"","max_toot_chars":5000}`, string(b)) | ||||
| } | ||||
| 
 | ||||
| func (suite *InstancePatchTestSuite) TestInstancePatch4() { | ||||
| 	requestBody, w, err := testrig.CreateMultipartFormData( | ||||
| 		"", "", | ||||
| 		map[string]string{}) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	bodyBytes := requestBody.Bytes() | ||||
| 
 | ||||
| 	// set up the request | ||||
| 	recorder := httptest.NewRecorder() | ||||
| 	ctx := suite.newContext(recorder, http.MethodPatch, bodyBytes, instance.InstanceInformationPath, w.FormDataContentType()) | ||||
| 
 | ||||
| 	// call the handler | ||||
| 	suite.instanceModule.InstanceUpdatePATCHHandler(ctx) | ||||
| 
 | ||||
| 	suite.Equal(http.StatusBadRequest, recorder.Code) | ||||
| 
 | ||||
| 	result := recorder.Result() | ||||
| 	defer result.Body.Close() | ||||
| 
 | ||||
| 	b, err := io.ReadAll(result.Body) | ||||
| 	suite.NoError(err) | ||||
| 
 | ||||
| 	suite.Equal(`{"error":"Bad Request: empty form submitted"}`, string(b)) | ||||
| } | ||||
| 
 | ||||
| func (suite *InstancePatchTestSuite) TestInstancePatch5() { | ||||
| 	requestBody, w, err := testrig.CreateMultipartFormData( | ||||
| 		"", "", | ||||
| 		map[string]string{ | ||||
| 			"short_description": "<p>This is some html, which is <em>allowed</em> in short descriptions.</p>", | ||||
| 		}) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	bodyBytes := requestBody.Bytes() | ||||
| 
 | ||||
| 	// set up the request | ||||
| 	recorder := httptest.NewRecorder() | ||||
| 	ctx := suite.newContext(recorder, http.MethodPatch, bodyBytes, instance.InstanceInformationPath, w.FormDataContentType()) | ||||
| 
 | ||||
| 	ctx.Set(oauth.SessionAuthorizedAccount, suite.testAccounts["local_account_1"]) | ||||
| 	ctx.Set(oauth.SessionAuthorizedToken, oauth.DBTokenToToken(suite.testTokens["local_account_1"])) | ||||
| 	ctx.Set(oauth.SessionAuthorizedApplication, suite.testApplications["application_1"]) | ||||
| 	ctx.Set(oauth.SessionAuthorizedUser, suite.testUsers["local_account_1"]) | ||||
| 
 | ||||
| 	// call the handler | ||||
| 	suite.instanceModule.InstanceUpdatePATCHHandler(ctx) | ||||
| 
 | ||||
| 	suite.Equal(http.StatusForbidden, recorder.Code) | ||||
| 
 | ||||
| 	result := recorder.Result() | ||||
| 	defer result.Body.Close() | ||||
| 
 | ||||
| 	b, err := io.ReadAll(result.Body) | ||||
| 	suite.NoError(err) | ||||
| 
 | ||||
| 	suite.Equal(`{"error":"Forbidden: user is not an admin so cannot update instance settings"}`, string(b)) | ||||
| } | ||||
| 
 | ||||
| func TestInstancePatchTestSuite(t *testing.T) { | ||||
| 	suite.Run(t, &InstancePatchTestSuite{}) | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue