1package git23import (4 "context"5 "testing"67 "github.com/stretchr/testify/assert"8)910func TestRepository_Tag(t *testing.T) {11 ctx := context.Background()12 tests := []struct {13 name string14 opt TagOptions15 expTag *Tag16 }{17 {18 name: "v1.0.0",19 expTag: &Tag{20 typ: ObjectCommit,21 id: MustIDFromString(testrepoMarks[30].String()),22 commitID: MustIDFromString(testrepoMarks[30].String()),23 refspec: "refs/tags/v1.0.0",24 },25 }, {26 name: "v1.1.0",27 expTag: &Tag{28 typ: ObjectTag,29 id: MustIDFromString(testrepoMarks[50].String()),30 commitID: MustIDFromString(testrepoMarks[30].String()),31 refspec: "refs/tags/v1.1.0",32 },33 },34 }35 for _, test := range tests {36 t.Run("", func(t *testing.T) {37 tag, err := testrepo.Tag(ctx, test.name, test.opt)38 if err != nil {39 t.Fatal(err)40 }4142 assert.Equal(t, test.expTag.Type(), tag.Type())43 assert.Equal(t, test.expTag.ID().String(), tag.ID().String())44 assert.Equal(t, test.expTag.CommitID().String(), tag.CommitID().String())45 assert.Equal(t, test.expTag.Refspec(), tag.Refspec())46 })47 }48}4950func TestRepository_Tags(t *testing.T) {51 ctx := context.Background()52 // Make sure it does not blow up53 tags, err := testrepo.Tags(ctx, TagsOptions{})54 if err != nil {55 t.Fatal(err)56 }57 assert.NotEmpty(t, tags)58}5960func TestRepository_Tags_VersionSort(t *testing.T) {61 ctx := context.Background()62 r, cleanup, err := setupTempRepo()63 if err != nil {64 t.Fatal(err)65 }66 defer cleanup()6768 err = r.CreateTag(ctx, "v3.0.0", "master")69 if err != nil {70 t.Fatal(err)71 }72 err = r.CreateTag(ctx, "v2.999.0", "master")73 if err != nil {74 t.Fatal(err)75 }7677 tags, err := r.Tags(ctx, TagsOptions{78 SortKey: "-version:refname",79 Pattern: "v*",80 })81 if err != nil {82 t.Fatal(err)83 }8485 if len(tags) < 2 {86 t.Fatalf("Should have at least two tags but got %d", len(tags))87 }88 assert.Equal(t, "v3.0.0", tags[0])89 assert.Equal(t, "v2.999.0", tags[1])90}9192func TestRepository_CreateTag(t *testing.T) {93 ctx := context.Background()94 r, cleanup, err := setupTempRepo()95 if err != nil {96 t.Fatal(err)97 }98 defer cleanup()99100 assert.False(t, r.HasReference(ctx, RefsTags+"v2.0.0"))101102 err = r.CreateTag(ctx, "v2.0.0", "master", CreateTagOptions{})103 if err != nil {104 t.Fatal(err)105 }106107 assert.True(t, r.HasReference(ctx, RefsTags+"v2.0.0"))108}109110func TestRepository_CreateAnnotatedTag(t *testing.T) {111 ctx := context.Background()112 r, cleanup, err := setupTempRepo()113 if err != nil {114 t.Fatal(err)115 }116 defer cleanup()117118 assert.False(t, r.HasReference(ctx, RefsTags+"v2.0.0"))119120 err = r.CreateTag(ctx, "v2.0.0", "master", CreateTagOptions{121 Annotated: true,122 Author: &Signature{123 Name: "alice",124 Email: "alice@example.com",125 },126 })127 if err != nil {128 t.Fatal(err)129 }130131 assert.True(t, r.HasReference(ctx, RefsTags+"v2.0.0"))132133 tag, err := r.Tag(ctx, "v2.0.0")134 if err != nil {135 t.Fatal(err)136 }137138 assert.Equal(t, "alice", tag.tagger.Name)139 assert.Equal(t, "alice@example.com", tag.tagger.Email)140 assert.False(t, tag.tagger.When.IsZero())141}142143func TestRepository_DeleteTag(t *testing.T) {144 ctx := context.Background()145 r, cleanup, err := setupTempRepo()146 if err != nil {147 t.Fatal(err)148 }149 defer cleanup()150151 assert.True(t, r.HasReference(ctx, RefsTags+"v1.0.0"))152153 err = r.DeleteTag(ctx, "v1.0.0", DeleteTagOptions{})154 if err != nil {155 t.Fatal(err)156 }157158 assert.False(t, r.HasReference(ctx, RefsTags+"v1.0.0"))159}