code.gitea.io/gitea@v1.22.3/models/migrations/v1_22/v286_test.go (about)

     1  // Copyright 2023 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package v1_22 //nolint
     5  
     6  import (
     7  	"testing"
     8  
     9  	"code.gitea.io/gitea/models/migrations/base"
    10  
    11  	"github.com/stretchr/testify/assert"
    12  	"xorm.io/xorm"
    13  )
    14  
    15  func PrepareOldRepository(t *testing.T) (*xorm.Engine, func()) {
    16  	type Repository struct { // old struct
    17  		ID int64 `xorm:"pk autoincr"`
    18  	}
    19  
    20  	type CommitStatus struct {
    21  		ID          int64
    22  		ContextHash string `xorm:"char(40) index"`
    23  	}
    24  
    25  	type RepoArchiver struct {
    26  		ID       int64
    27  		RepoID   int64  `xorm:"index unique(s)"`
    28  		Type     int    `xorm:"unique(s)"`
    29  		CommitID string `xorm:"VARCHAR(40) unique(s)"`
    30  	}
    31  
    32  	type ReviewState struct {
    33  		ID        int64
    34  		UserID    int64  `xorm:"NOT NULL UNIQUE(pull_commit_user)"`
    35  		PullID    int64  `xorm:"NOT NULL INDEX UNIQUE(pull_commit_user) DEFAULT 0"`
    36  		CommitSHA string `xorm:"NOT NULL VARCHAR(40) UNIQUE(pull_commit_user)"`
    37  	}
    38  
    39  	type Comment struct {
    40  		ID        int64
    41  		CommitSHA string
    42  	}
    43  
    44  	type PullRequest struct {
    45  		ID             int64
    46  		CommitSHA      string
    47  		MergeBase      string
    48  		MergedCommitID string
    49  	}
    50  
    51  	type Release struct {
    52  		ID   int64
    53  		Sha1 string
    54  	}
    55  
    56  	type RepoIndexerStatus struct {
    57  		ID        int64
    58  		CommitSHA string
    59  	}
    60  
    61  	type Review struct {
    62  		ID       int64
    63  		CommitID string
    64  	}
    65  
    66  	// Prepare and load the testing database
    67  	return base.PrepareTestEnv(t, 0,
    68  		new(Repository),
    69  		new(CommitStatus),
    70  		new(RepoArchiver),
    71  		new(ReviewState),
    72  		new(Review),
    73  		new(Comment),
    74  		new(PullRequest),
    75  		new(Release),
    76  		new(RepoIndexerStatus),
    77  	)
    78  }
    79  
    80  func Test_RepositoryFormat(t *testing.T) {
    81  	x, deferable := PrepareOldRepository(t)
    82  	defer deferable()
    83  
    84  	assert.NoError(t, AdjustDBForSha256(x))
    85  
    86  	type Repository struct {
    87  		ID               int64  `xorm:"pk autoincr"`
    88  		ObjectFormatName string `xorg:"not null default('sha1')"`
    89  	}
    90  
    91  	repo := new(Repository)
    92  
    93  	// check we have some records to migrate
    94  	count, err := x.Count(new(Repository))
    95  	assert.NoError(t, err)
    96  	assert.EqualValues(t, 4, count)
    97  
    98  	repo.ObjectFormatName = "sha256"
    99  	_, err = x.Insert(repo)
   100  	assert.NoError(t, err)
   101  	id := repo.ID
   102  
   103  	count, err = x.Count(new(Repository))
   104  	assert.NoError(t, err)
   105  	assert.EqualValues(t, 5, count)
   106  
   107  	repo = new(Repository)
   108  	ok, err := x.ID(2).Get(repo)
   109  	assert.NoError(t, err)
   110  	assert.EqualValues(t, true, ok)
   111  	assert.EqualValues(t, "sha1", repo.ObjectFormatName)
   112  
   113  	repo = new(Repository)
   114  	ok, err = x.ID(id).Get(repo)
   115  	assert.NoError(t, err)
   116  	assert.EqualValues(t, true, ok)
   117  	assert.EqualValues(t, "sha256", repo.ObjectFormatName)
   118  }