git-module

fork of https://git.lin.moe/gogs/git-module

git clone git://git.lin.moe/fork/git-module.git

  1package git
  2
  3import (
  4	"context"
  5	"testing"
  6
  7	"github.com/stretchr/testify/assert"
  8)
  9
 10func TestRepository_Tag(t *testing.T) {
 11	ctx := context.Background()
 12	tests := []struct {
 13		name   string
 14		opt    TagOptions
 15		expTag *Tag
 16	}{
 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			}
 41
 42			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}
 49
 50func TestRepository_Tags(t *testing.T) {
 51	ctx := context.Background()
 52	// Make sure it does not blow up
 53	tags, err := testrepo.Tags(ctx, TagsOptions{})
 54	if err != nil {
 55		t.Fatal(err)
 56	}
 57	assert.NotEmpty(t, tags)
 58}
 59
 60func 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()
 67
 68	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	}
 76
 77	tags, err := r.Tags(ctx, TagsOptions{
 78		SortKey: "-version:refname",
 79		Pattern: "v*",
 80	})
 81	if err != nil {
 82		t.Fatal(err)
 83	}
 84
 85	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}
 91
 92func 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()
 99
100	assert.False(t, r.HasReference(ctx, RefsTags+"v2.0.0"))
101
102	err = r.CreateTag(ctx, "v2.0.0", "master", CreateTagOptions{})
103	if err != nil {
104		t.Fatal(err)
105	}
106
107	assert.True(t, r.HasReference(ctx, RefsTags+"v2.0.0"))
108}
109
110func 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()
117
118	assert.False(t, r.HasReference(ctx, RefsTags+"v2.0.0"))
119
120	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	}
130
131	assert.True(t, r.HasReference(ctx, RefsTags+"v2.0.0"))
132
133	tag, err := r.Tag(ctx, "v2.0.0")
134	if err != nil {
135		t.Fatal(err)
136	}
137
138	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}
142
143func 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()
150
151	assert.True(t, r.HasReference(ctx, RefsTags+"v1.0.0"))
152
153	err = r.DeleteTag(ctx, "v1.0.0", DeleteTagOptions{})
154	if err != nil {
155		t.Fatal(err)
156	}
157
158	assert.False(t, r.HasReference(ctx, RefsTags+"v1.0.0"))
159}