// Copyright 2023 The Gitea Authors. All rights reserved. // SPDX-License-Identifier: MIT package v1_22 //nolint import ( "testing" "code.gitea.io/gitea/models/migrations/base" "github.com/stretchr/testify/assert" "xorm.io/xorm" ) func PrepareOldRepository(t *testing.T) (*xorm.Engine, func()) { type Repository struct { // old struct ID int64 `xorm:"pk autoincr"` ObjectFormatName string `xorm:"VARCHAR(6) NOT NULL DEFAULT 'sha1'"` } type CommitStatus struct { // old struct ID int64 `xorm:"pk autoincr"` ContextHash string `xorm:"char(40)"` } type Comment struct { // old struct ID int64 `xorm:"pk autoincr"` CommitSHA string `xorm:"VARCHAR(40)"` } type PullRequest struct { // old struct ID int64 `xorm:"pk autoincr"` MergeBase string `xorm:"VARCHAR(40)"` MergedCommitID string `xorm:"VARCHAR(40)"` } type Review struct { // old struct ID int64 `xorm:"pk autoincr"` CommitID string `xorm:"VARCHAR(40)"` } type ReviewState struct { // old struct ID int64 `xorm:"pk autoincr"` CommitSHA string `xorm:"VARCHAR(40)"` } type RepoArchiver struct { // old struct ID int64 `xorm:"pk autoincr"` CommitID string `xorm:"VARCHAR(40)"` } type Release struct { // old struct ID int64 `xorm:"pk autoincr"` Sha1 string `xorm:"VARCHAR(40)"` } type RepoIndexerStatus struct { // old struct ID int64 `xorm:"pk autoincr"` CommitSha string `xorm:"VARCHAR(40)"` } // Prepare and load the testing database return base.PrepareTestEnv(t, 0, new(Repository), new(CommitStatus), new(Comment), new(PullRequest), new(Review), new(ReviewState), new(RepoArchiver), new(Release), new(RepoIndexerStatus)) } func Test_RepositoryFormat(t *testing.T) { x, deferable := PrepareOldRepository(t) defer deferable() type Repository struct { ID int64 `xorm:"pk autoincr"` ObjectFormatName string `xorg:"not null default('sha1')"` } repo := new(Repository) // check we have some records to migrate count, err := x.Count(new(Repository)) assert.NoError(t, err) assert.EqualValues(t, 4, count) assert.NoError(t, AdjustDBForSha256(x)) repo.ID = 20 repo.ObjectFormatName = "sha256" _, err = x.Insert(repo) assert.NoError(t, err) count, err = x.Count(new(Repository)) assert.NoError(t, err) assert.EqualValues(t, 5, count) repo = new(Repository) ok, err := x.ID(2).Get(repo) assert.NoError(t, err) assert.EqualValues(t, true, ok) assert.EqualValues(t, "sha1", repo.ObjectFormatName) repo = new(Repository) ok, err = x.ID(20).Get(repo) assert.NoError(t, err) assert.EqualValues(t, true, ok) assert.EqualValues(t, "sha256", repo.ObjectFormatName) }