mirror of
https://github.com/go-gitea/gitea.git
synced 2026-01-25 23:45:54 +01:00
This PR fixes missed repo_id on the migration of attachments to Gitea. It also provides a doctor check to fix the dirty data on the database. Backport #36389
93 lines
2.7 KiB
Go
93 lines
2.7 KiB
Go
// Copyright 2023 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package repo
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"code.gitea.io/gitea/models/db"
|
|
"code.gitea.io/gitea/models/unittest"
|
|
"code.gitea.io/gitea/modules/util"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestMigrate_InsertReleases(t *testing.T) {
|
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
|
|
|
a := &Attachment{
|
|
UUID: "a0eebc91-9c0c-4ef7-bb6e-6bb9bd380a12",
|
|
}
|
|
r := &Release{
|
|
Attachments: []*Attachment{a},
|
|
}
|
|
|
|
err := InsertReleases(t.Context(), r)
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
func Test_FindTagsByCommitIDs(t *testing.T) {
|
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
|
|
|
sha1Rels, err := FindTagsByCommitIDs(t.Context(), 1, "65f1bf27bc3bf70f64657658635e66094edbcb4d")
|
|
assert.NoError(t, err)
|
|
assert.Len(t, sha1Rels, 1)
|
|
rels := sha1Rels["65f1bf27bc3bf70f64657658635e66094edbcb4d"]
|
|
assert.Len(t, rels, 3)
|
|
assert.Equal(t, "v1.1", rels[0].TagName)
|
|
assert.Equal(t, "delete-tag", rels[1].TagName)
|
|
assert.Equal(t, "v1.0", rels[2].TagName)
|
|
}
|
|
|
|
func TestAddReleaseAttachmentsRejectsDifferentRepo(t *testing.T) {
|
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
|
|
|
uuid := "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12" // attachment 2 belongs to repo 2
|
|
err := AddReleaseAttachments(t.Context(), 1, []string{uuid})
|
|
assert.Error(t, err)
|
|
assert.ErrorIs(t, err, util.ErrPermissionDenied)
|
|
|
|
attach, err := GetAttachmentByUUID(t.Context(), uuid)
|
|
assert.NoError(t, err)
|
|
assert.Zero(t, attach.ReleaseID, "attachment should not be linked to release on failure")
|
|
}
|
|
|
|
func TestAddReleaseAttachmentsAllowsLegacyMissingRepoID(t *testing.T) {
|
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
|
|
|
legacyUUID := "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a20" // attachment 10 has repo_id 0
|
|
err := AddReleaseAttachments(t.Context(), 1, []string{legacyUUID})
|
|
assert.NoError(t, err)
|
|
|
|
attach, err := GetAttachmentByUUID(t.Context(), legacyUUID)
|
|
assert.NoError(t, err)
|
|
assert.EqualValues(t, 1, attach.RepoID)
|
|
assert.EqualValues(t, 1, attach.ReleaseID)
|
|
}
|
|
|
|
func TestAddReleaseAttachmentsRejectsRecentZeroRepoID(t *testing.T) {
|
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
|
|
|
recentUUID := "a0eebc99-9c0b-4ef8-bb6d-6bb9bd3800aa"
|
|
attachment := &Attachment{
|
|
UUID: recentUUID,
|
|
RepoID: 0,
|
|
IssueID: 0,
|
|
ReleaseID: 0,
|
|
CommentID: 0,
|
|
Name: "recent-zero",
|
|
CreatedUnix: LegacyAttachmentMissingRepoIDCutoff + 1,
|
|
}
|
|
assert.NoError(t, db.Insert(t.Context(), attachment))
|
|
|
|
err := AddReleaseAttachments(t.Context(), 1, []string{recentUUID})
|
|
assert.Error(t, err)
|
|
assert.ErrorIs(t, err, util.ErrPermissionDenied)
|
|
|
|
attach, err := GetAttachmentByUUID(t.Context(), recentUUID)
|
|
assert.NoError(t, err)
|
|
assert.Zero(t, attach.ReleaseID)
|
|
assert.Zero(t, attach.RepoID)
|
|
}
|