@ -7,6 +7,7 @@ package release
import (
import (
"path/filepath"
"path/filepath"
"testing"
"testing"
"time"
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/git"
@ -101,3 +102,153 @@ func TestRelease_Create(t *testing.T) {
IsTag : true ,
IsTag : true ,
} , nil ) )
} , nil ) )
}
}
func TestRelease_Update ( t * testing . T ) {
assert . NoError ( t , models . PrepareTestDatabase ( ) )
user := models . AssertExistsAndLoadBean ( t , & models . User { ID : 2 } ) . ( * models . User )
repo := models . AssertExistsAndLoadBean ( t , & models . Repository { ID : 1 } ) . ( * models . Repository )
repoPath := models . RepoPath ( user . Name , repo . Name )
gitRepo , err := git . OpenRepository ( repoPath )
assert . NoError ( t , err )
defer gitRepo . Close ( )
// Test a changed release
assert . NoError ( t , CreateRelease ( gitRepo , & models . Release {
RepoID : repo . ID ,
PublisherID : user . ID ,
TagName : "v1.1.1" ,
Target : "master" ,
Title : "v1.1.1 is released" ,
Note : "v1.1.1 is released" ,
IsDraft : false ,
IsPrerelease : false ,
IsTag : false ,
} , nil ) )
release , err := models . GetRelease ( repo . ID , "v1.1.1" )
assert . NoError ( t , err )
releaseCreatedUnix := release . CreatedUnix
time . Sleep ( 2 * time . Second ) // sleep 2 seconds to ensure a different timestamp
release . Note = "Changed note"
assert . NoError ( t , UpdateRelease ( user , gitRepo , release , nil ) )
release , err = models . GetReleaseByID ( release . ID )
assert . NoError ( t , err )
assert . Equal ( t , int64 ( releaseCreatedUnix ) , int64 ( release . CreatedUnix ) )
// Test a changed draft
assert . NoError ( t , CreateRelease ( gitRepo , & models . Release {
RepoID : repo . ID ,
PublisherID : user . ID ,
TagName : "v1.2.1" ,
Target : "65f1bf2" ,
Title : "v1.2.1 is draft" ,
Note : "v1.2.1 is draft" ,
IsDraft : true ,
IsPrerelease : false ,
IsTag : false ,
} , nil ) )
release , err = models . GetRelease ( repo . ID , "v1.2.1" )
assert . NoError ( t , err )
releaseCreatedUnix = release . CreatedUnix
time . Sleep ( 2 * time . Second ) // sleep 2 seconds to ensure a different timestamp
release . Title = "Changed title"
assert . NoError ( t , UpdateRelease ( user , gitRepo , release , nil ) )
release , err = models . GetReleaseByID ( release . ID )
assert . NoError ( t , err )
assert . Less ( t , int64 ( releaseCreatedUnix ) , int64 ( release . CreatedUnix ) )
// Test a changed pre-release
assert . NoError ( t , CreateRelease ( gitRepo , & models . Release {
RepoID : repo . ID ,
PublisherID : user . ID ,
TagName : "v1.3.1" ,
Target : "65f1bf2" ,
Title : "v1.3.1 is pre-released" ,
Note : "v1.3.1 is pre-released" ,
IsDraft : false ,
IsPrerelease : true ,
IsTag : false ,
} , nil ) )
release , err = models . GetRelease ( repo . ID , "v1.3.1" )
assert . NoError ( t , err )
releaseCreatedUnix = release . CreatedUnix
time . Sleep ( 2 * time . Second ) // sleep 2 seconds to ensure a different timestamp
release . Title = "Changed title"
release . Note = "Changed note"
assert . NoError ( t , UpdateRelease ( user , gitRepo , release , nil ) )
release , err = models . GetReleaseByID ( release . ID )
assert . NoError ( t , err )
assert . Equal ( t , int64 ( releaseCreatedUnix ) , int64 ( release . CreatedUnix ) )
}
func TestRelease_createTag ( t * testing . T ) {
assert . NoError ( t , models . PrepareTestDatabase ( ) )
user := models . AssertExistsAndLoadBean ( t , & models . User { ID : 2 } ) . ( * models . User )
repo := models . AssertExistsAndLoadBean ( t , & models . Repository { ID : 1 } ) . ( * models . Repository )
repoPath := models . RepoPath ( user . Name , repo . Name )
gitRepo , err := git . OpenRepository ( repoPath )
assert . NoError ( t , err )
defer gitRepo . Close ( )
// Test a changed release
release := & models . Release {
RepoID : repo . ID ,
PublisherID : user . ID ,
TagName : "v2.1.1" ,
Target : "master" ,
Title : "v2.1.1 is released" ,
Note : "v2.1.1 is released" ,
IsDraft : false ,
IsPrerelease : false ,
IsTag : false ,
}
assert . NoError ( t , createTag ( gitRepo , release ) )
assert . NotEmpty ( t , release . CreatedUnix )
releaseCreatedUnix := release . CreatedUnix
time . Sleep ( 2 * time . Second ) // sleep 2 seconds to ensure a different timestamp
release . Note = "Changed note"
assert . NoError ( t , createTag ( gitRepo , release ) )
assert . Equal ( t , int64 ( releaseCreatedUnix ) , int64 ( release . CreatedUnix ) )
// Test a changed draft
release = & models . Release {
RepoID : repo . ID ,
PublisherID : user . ID ,
TagName : "v2.2.1" ,
Target : "65f1bf2" ,
Title : "v2.2.1 is draft" ,
Note : "v2.2.1 is draft" ,
IsDraft : true ,
IsPrerelease : false ,
IsTag : false ,
}
assert . NoError ( t , createTag ( gitRepo , release ) )
releaseCreatedUnix = release . CreatedUnix
time . Sleep ( 2 * time . Second ) // sleep 2 seconds to ensure a different timestamp
release . Title = "Changed title"
assert . NoError ( t , createTag ( gitRepo , release ) )
assert . Less ( t , int64 ( releaseCreatedUnix ) , int64 ( release . CreatedUnix ) )
// Test a changed pre-release
release = & models . Release {
RepoID : repo . ID ,
PublisherID : user . ID ,
TagName : "v2.3.1" ,
Target : "65f1bf2" ,
Title : "v2.3.1 is pre-released" ,
Note : "v2.3.1 is pre-released" ,
IsDraft : false ,
IsPrerelease : true ,
IsTag : false ,
}
assert . NoError ( t , createTag ( gitRepo , release ) )
releaseCreatedUnix = release . CreatedUnix
time . Sleep ( 2 * time . Second ) // sleep 2 seconds to ensure a different timestamp
release . Title = "Changed title"
release . Note = "Changed note"
assert . NoError ( t , createTag ( gitRepo , release ) )
assert . Equal ( t , int64 ( releaseCreatedUnix ) , int64 ( release . CreatedUnix ) )
}