chore: enable forcetypeassert linter, fix issues (#38804)

Enable [`forcetypeassert`](https://github.com/gostaticanalysis/forcetypeassert)
linter to prevent unchecked type assertions. ~650 issues fixed, most
fixes were clean, some use `setting.PanicInDevOrTesting`.

The only behaviour changes are where code would previously send a 500 error
or panic, a 4xx error is now emitted.

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
silverwind
2026-08-09 10:25:06 +00:00
committed by GitHub
co-authored by wxiaoguang
parent fac8bf2eca
commit 76a81b24f9
248 changed files with 1110 additions and 995 deletions
+1 -1
View File
@@ -214,7 +214,7 @@ func TestAPIEditUser(t *testing.T) {
errMap := make(map[string]any)
json.Unmarshal(resp.Body.Bytes(), &errMap)
assert.Equal(t, "e-mail invalid [email: ]", errMap["message"].(string))
assert.Equal(t, "e-mail invalid [email: ]", errMap["message"])
user2 = unittest.AssertExistsAndLoadBean(t, &user_model.User{LoginName: "user2"})
assert.False(t, user2.IsRestricted)
+5 -2
View File
@@ -16,6 +16,7 @@ import (
"gitea.dev/tests"
"github.com/42wim/httpsig"
"github.com/stretchr/testify/require"
"golang.org/x/crypto/ssh"
)
@@ -112,7 +113,9 @@ func TestHTTPSigCert(t *testing.T) {
keyID := "gitea"
// create our certificate signer using the ssh signer and our certificate
certSigner, err := ssh.NewCertSigner(pkcert.(*ssh.Certificate), sshSigner)
cert, ok := pkcert.(*ssh.Certificate)
require.True(t, ok)
certSigner, err := ssh.NewCertSigner(cert, sshSigner)
if err != nil {
t.Fatal(err)
}
@@ -121,7 +124,7 @@ func TestHTTPSigCert(t *testing.T) {
req = NewRequest(t, "GET", "/api/v1/admin/users")
// add our cert to the request
certString := base64.RawStdEncoding.EncodeToString(pkcert.(*ssh.Certificate).Marshal())
certString := base64.RawStdEncoding.EncodeToString(cert.Marshal())
req.SetHeader("x-ssh-certificate", certString)
signer, _, err := httpsig.NewSSHSigner(certSigner, httpsig.DigestSha512, []string{httpsig.RequestTarget, "(created)", "(expires)", "x-ssh-certificate"}, httpsig.Signature, 10)
+3 -2
View File
@@ -23,6 +23,7 @@ import (
"gitea.dev/tests"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
const (
@@ -327,8 +328,8 @@ func TestPackageConan(t *testing.T) {
assert.Nil(t, pd.SemVer)
assert.Equal(t, name, pd.Package.Name)
assert.Equal(t, version1, pd.Version.Version)
assert.IsType(t, &conan_module.Metadata{}, pd.Metadata)
metadata := pd.Metadata.(*conan_module.Metadata)
metadata, ok := pd.Metadata.(*conan_module.Metadata)
require.True(t, ok)
assert.Equal(t, conanLicense, metadata.License)
assert.Equal(t, conanAuthor, metadata.Author)
assert.Equal(t, conanHomepage, metadata.ProjectURL)
@@ -427,8 +427,8 @@ func TestPackageContainer(t *testing.T) {
assert.ElementsMatch(t, []string{strings.ToLower(user.LowerName + "/" + image)}, getAllByName(pd.PackageProperties, container_module.PropertyRepository))
assert.True(t, has(pd.VersionProperties, container_module.PropertyManifestTagged))
assert.IsType(t, &container_module.Metadata{}, pd.Metadata)
metadata := pd.Metadata.(*container_module.Metadata)
metadata, ok := pd.Metadata.(*container_module.Metadata)
require.True(t, ok)
assert.Equal(t, container_module.TypeOCI, metadata.Type)
assert.Len(t, metadata.ImageLayers, 2)
assert.Empty(t, metadata.Manifests)
@@ -570,8 +570,8 @@ func TestPackageContainer(t *testing.T) {
assert.ElementsMatch(t, []string{manifestDigest, untaggedManifestDigest}, getAllByName(pd.VersionProperties, container_module.PropertyManifestReference))
assert.IsType(t, &container_module.Metadata{}, pd.Metadata)
metadata := pd.Metadata.(*container_module.Metadata)
metadata, ok := pd.Metadata.(*container_module.Metadata)
require.True(t, ok)
assert.Equal(t, container_module.TypeOCI, metadata.Type)
assert.Len(t, metadata.Manifests, 2)
assert.Condition(t, func() bool {
+3 -2
View File
@@ -199,8 +199,9 @@ func TestPackageMaven(t *testing.T) {
pd, err = packages.GetPackageDescriptor(t.Context(), pvs[0])
require.NoError(t, err)
assert.IsType(t, &maven.Metadata{}, pd.Metadata)
assert.Equal(t, packageDescription, pd.Metadata.(*maven.Metadata).Description)
metadata, ok := pd.Metadata.(*maven.Metadata)
require.True(t, ok)
assert.Equal(t, packageDescription, metadata.Description)
pfs, err := packages.GetFilesByVersionID(t.Context(), pvs[0].ID)
require.NoError(t, err)
+10 -6
View File
@@ -20,6 +20,7 @@ import (
"gitea.dev/tests"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestPackagePyPI(t *testing.T) {
@@ -86,8 +87,9 @@ func TestPackagePyPI(t *testing.T) {
pd, err := packages.GetPackageDescriptor(t.Context(), pvs[0])
assert.NoError(t, err)
assert.Nil(t, pd.SemVer)
assert.IsType(t, &pypi.Metadata{}, pd.Metadata)
assert.Equal(t, projectURL, pd.Metadata.(*pypi.Metadata).ProjectURL)
metadata, ok := pd.Metadata.(*pypi.Metadata)
require.True(t, ok)
assert.Equal(t, projectURL, metadata.ProjectURL)
assert.Equal(t, packageName, pd.Package.Name)
assert.Equal(t, packageVersion, pd.Version.Version)
@@ -165,8 +167,9 @@ func TestPackagePyPI(t *testing.T) {
pd, err := packages.GetPackageDescriptor(t.Context(), pvs[0])
assert.NoError(t, err)
assert.IsType(t, &pypi.Metadata{}, pd.Metadata)
assert.Equal(t, projectURL, pd.Metadata.(*pypi.Metadata).ProjectURL)
metadata, ok := pd.Metadata.(*pypi.Metadata)
require.True(t, ok)
assert.Equal(t, projectURL, metadata.ProjectURL)
})
t.Run("UploadWithoutAnyHomepageURLMetadata", func(t *testing.T) {
@@ -185,8 +188,9 @@ func TestPackagePyPI(t *testing.T) {
pd, err := packages.GetPackageDescriptor(t.Context(), pvs[0])
assert.NoError(t, err)
assert.IsType(t, &pypi.Metadata{}, pd.Metadata)
assert.Empty(t, pd.Metadata.(*pypi.Metadata).ProjectURL)
metadata, ok := pd.Metadata.(*pypi.Metadata)
require.True(t, ok)
assert.Empty(t, metadata.ProjectURL)
})
t.Run("Download", func(t *testing.T) {
+4 -4
View File
@@ -164,8 +164,8 @@ func TestPackageSwift(t *testing.T) {
assert.NotNil(t, pd.SemVer)
assert.Equal(t, packageID, pd.Package.Name)
assert.Equal(t, packageVersion, pd.Version.Version)
assert.IsType(t, &swift_module.Metadata{}, pd.Metadata)
metadata := pd.Metadata.(*swift_module.Metadata)
metadata, ok := pd.Metadata.(*swift_module.Metadata)
require.True(t, ok)
assert.Equal(t, packageDescription, metadata.Description)
assert.Len(t, metadata.Manifests, 2)
assert.Equal(t, contentManifest1, metadata.Manifests[""].Content)
@@ -241,8 +241,8 @@ func TestPackageSwift(t *testing.T) {
assert.NotNil(t, pd.SemVer)
assert.Equal(t, packageID, pd.Package.Name)
assert.Equal(t, packageVersion2, pd.Version.Version)
assert.IsType(t, &swift_module.Metadata{}, pd.Metadata)
metadata := pd.Metadata.(*swift_module.Metadata)
metadata, ok := pd.Metadata.(*swift_module.Metadata)
require.True(t, ok)
assert.Equal(t, packageDescription, metadata.Description)
assert.Len(t, metadata.Manifests, 2)
assert.Equal(t, contentManifest1, metadata.Manifests[""].Content)
+1 -1
View File
@@ -210,7 +210,7 @@ func testAPIPullReviewGeneral(t *testing.T) {
resp = MakeRequest(t, req, http.StatusUnprocessableEntity)
errMap := make(map[string]any)
json.Unmarshal(resp.Body.Bytes(), &errMap)
assert.Equal(t, "review event COMMENT requires a body or a comment", errMap["message"].(string))
assert.Equal(t, "review event COMMENT requires a body or a comment", errMap["message"])
// test get review requests
// to make it simple, use same api with get review
+2 -1
View File
@@ -352,7 +352,8 @@ func testLDAPUserSyncWithGroupFilter(t *testing.T) {
ldapSource := unittest.AssertExistsAndLoadBean(t, &auth_model.Source{
Name: "ldap",
})
ldapConfig := ldapSource.Cfg.(*ldap.Source)
ldapConfig, ok := ldapSource.Cfg.(*ldap.Source)
require.True(t, ok)
ldapConfig.GroupFilter = "(cn=ship_crew)"
require.NoError(t, auth_model.UpdateSource(t.Context(), ldapSource))
+3 -1
View File
@@ -113,7 +113,9 @@ func TestMigrateAzureADV2ToOIDC(t *testing.T) {
// --- Step 3: Set ExternalIDClaim = "oid" to restore account continuity ---
// Set ExternalIDClaim = "oid" so that the OIDC source extracts the same Object ID that the Azure AD V2 provider previously stored.
authSource.Cfg.(*oauth2.Source).ExternalIDClaim = "oid"
oauth2Source, ok := authSource.Cfg.(*oauth2.Source)
require.True(t, ok)
oauth2Source.ExternalIDClaim = "oid"
err = auth_model.UpdateSource(t.Context(), authSource)
require.NoError(t, err)
+7 -4
View File
@@ -23,6 +23,7 @@ import (
"gitea.dev/tests"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestIncomingEmail(t *testing.T) {
@@ -48,13 +49,15 @@ func TestIncomingEmail(t *testing.T) {
ref, err := incoming_payload.GetReferenceFromPayload(t.Context(), issuePayload)
assert.NoError(t, err)
assert.IsType(t, ref, new(issues_model.Issue))
assert.Equal(t, issue.ID, ref.(*issues_model.Issue).ID)
refIssue, ok := ref.(*issues_model.Issue)
require.True(t, ok)
assert.Equal(t, issue.ID, refIssue.ID)
ref, err = incoming_payload.GetReferenceFromPayload(t.Context(), commentPayload)
assert.NoError(t, err)
assert.IsType(t, ref, new(issues_model.Comment))
assert.Equal(t, comment.ID, ref.(*issues_model.Comment).ID)
refComment, ok := ref.(*issues_model.Comment)
require.True(t, ok)
assert.Equal(t, comment.ID, refComment.ID)
})
t.Run("Token", func(t *testing.T) {
+4 -2
View File
@@ -78,10 +78,12 @@ func TestExternalMarkupRenderer(t *testing.T) {
})
// above tested in-page rendering (no iframe), then we test iframe mode below
r := markup.DetectRendererTypeByFilename("any-file.html").(*external.Renderer)
r, ok := markup.DetectRendererTypeByFilename("any-file.html").(*external.Renderer)
require.True(t, ok)
defer test.MockVariableValue(&r.RenderContentMode, setting.RenderContentModeIframe)()
assert.True(t, r.NeedPostProcess())
r = markup.DetectRendererTypeByFilename("any-file.no-sanitizer").(*external.Renderer)
r, ok = markup.DetectRendererTypeByFilename("any-file.no-sanitizer").(*external.Renderer)
require.True(t, ok)
defer test.MockVariableValue(&r.RenderContentMode, setting.RenderContentModeIframe)()
assert.False(t, r.NeedPostProcess())
+3 -1
View File
@@ -39,7 +39,9 @@ func TestOAuth2AvatarFromPicture(t *testing.T) {
})
authSource, err := auth_model.GetActiveOAuth2SourceByAuthName(t.Context(), "test-oidc-avatar")
require.NoError(t, err)
providerName := authSource.Cfg.(*oauth2.Source).Provider
oauth2Source, ok := authSource.Cfg.(*oauth2.Source)
require.True(t, ok)
providerName := oauth2Source.Provider
t.Run("AutoRegister", func(t *testing.T) {
defer test.MockVariableValue(&setting.OAuth2Client.Username, "")()
+3 -1
View File
@@ -1299,6 +1299,8 @@ func testSignInOauthCallbackSyncSSHKeys(t *testing.T) {
addOAuth2Source(t, "test-oidc-source", oauth2Source)
authSource, err := auth_model.GetActiveOAuth2SourceByAuthName(ctx, "test-oidc-source")
require.NoError(t, err)
authSourceCfg, ok := authSource.Cfg.(*oauth2.Source)
require.True(t, ok)
sshKey1 := "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICV0MGX/W9IvLA4FXpIuUcdDcbj5KX4syHgsTy7soVgf"
sshKey2 := "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIE7kM1R02+4ertDKGKEDcKG0s+2vyDDcIvceJ0Gqv5f1AAAABHNzaDo="
@@ -1336,7 +1338,7 @@ func testSignInOauthCallbackSyncSSHKeys(t *testing.T) {
defer test.MockVariableValue(&setting.OAuth2Client.EnableAutoRegistration, true)()
defer test.MockVariableValue(&gothic.CompleteUserAuth, func(res http.ResponseWriter, req *http.Request) (goth.User, error) {
return goth.User{
Provider: authSource.Cfg.(*oauth2.Source).Provider,
Provider: authSourceCfg.Provider,
UserID: "oidc-userid",
Email: "oidc-email@example.com",
RawData: c.mockRawData,