github.com/rivy-go/git-changelog@v0.0.0-20240424224517-b86e6ab57773/internal/changelog/tag_reader_test.go (about)

     1  package changelog
     2  
     3  import (
     4  	"errors"
     5  	"strings"
     6  	"testing"
     7  	"time"
     8  
     9  	"github.com/stretchr/testify/assert"
    10  )
    11  
    12  func TestTagReader(t *testing.T) {
    13  	assert := assert.New(t)
    14  	client := &mockClient{
    15  		ReturnExec: func(subcmd string, args ...string) (string, error) {
    16  			if subcmd != "for-each-ref" {
    17  				return "", errors.New("")
    18  			}
    19  			return strings.Join([]string{
    20  				"",
    21  				"refs/tags/v2.0.4-beta.1@@__CHANGELOG__@@Release v2.0.4-beta.1@@__CHANGELOG__@@Thu Feb 1 00:00:00 2018 +0000@@__CHANGELOG__@@",
    22  				"refs/tags/4.4.3@@__CHANGELOG__@@This is tag subject@@__CHANGELOG__@@@@__CHANGELOG__@@Fri Feb 2 00:00:00 2018 +0000",
    23  				"refs/tags/4.4.4@@__CHANGELOG__@@Release 4.4.4@@__CHANGELOG__@@Fri Feb 2 10:00:40 2018 +0000@@__CHANGELOG__@@",
    24  				"refs/tags/5.0.0-rc.0@@__CHANGELOG__@@Release 5.0.0-rc.0@@__CHANGELOG__@@Sat Feb 3 12:30:10 2018 +0000@@__CHANGELOG__@@",
    25  				"refs/tags/hoge_fuga@@__CHANGELOG__@@Invalid semver tag name@@__CHANGELOG__@@Mon Mar 12 12:30:10 2018 +0000@@__CHANGELOG__@@",
    26  				"hoge@@__CHANGELOG__@@",
    27  			}, "\n"), nil
    28  		},
    29  	}
    30  
    31  	actual, err := newTagReader(client, "").ReadAll()
    32  	assert.Nil(err)
    33  
    34  	assert.Equal(
    35  		[]*Tag{
    36  			&Tag{
    37  				Name:    "hoge_fuga",
    38  				Subject: "Invalid semver tag name",
    39  				Date:    time.Date(2018, 3, 12, 12, 30, 10, 0, time.UTC),
    40  				Next:    nil,
    41  				Previous: &RelateTag{
    42  					Name:    "5.0.0-rc.0",
    43  					Subject: "Release 5.0.0-rc.0",
    44  					Date:    time.Date(2018, 2, 3, 12, 30, 10, 0, time.UTC),
    45  				},
    46  			},
    47  			&Tag{
    48  				Name:    "5.0.0-rc.0",
    49  				Subject: "Release 5.0.0-rc.0",
    50  				Date:    time.Date(2018, 2, 3, 12, 30, 10, 0, time.UTC),
    51  				Next: &RelateTag{
    52  					Name:    "hoge_fuga",
    53  					Subject: "Invalid semver tag name",
    54  					Date:    time.Date(2018, 3, 12, 12, 30, 10, 0, time.UTC),
    55  				},
    56  				Previous: &RelateTag{
    57  					Name:    "4.4.4",
    58  					Subject: "Release 4.4.4",
    59  					Date:    time.Date(2018, 2, 2, 10, 0, 40, 0, time.UTC),
    60  				},
    61  			},
    62  			&Tag{
    63  				Name:    "4.4.4",
    64  				Subject: "Release 4.4.4",
    65  				Date:    time.Date(2018, 2, 2, 10, 0, 40, 0, time.UTC),
    66  				Next: &RelateTag{
    67  					Name:    "5.0.0-rc.0",
    68  					Subject: "Release 5.0.0-rc.0",
    69  					Date:    time.Date(2018, 2, 3, 12, 30, 10, 0, time.UTC),
    70  				},
    71  				Previous: &RelateTag{
    72  					Name:    "4.4.3",
    73  					Subject: "This is tag subject",
    74  					Date:    time.Date(2018, 2, 2, 0, 0, 0, 0, time.UTC),
    75  				},
    76  			},
    77  			&Tag{
    78  				Name:    "4.4.3",
    79  				Subject: "This is tag subject",
    80  				Date:    time.Date(2018, 2, 2, 0, 0, 0, 0, time.UTC),
    81  				Next: &RelateTag{
    82  					Name:    "4.4.4",
    83  					Subject: "Release 4.4.4",
    84  					Date:    time.Date(2018, 2, 2, 10, 0, 40, 0, time.UTC),
    85  				},
    86  				Previous: &RelateTag{
    87  					Name:    "v2.0.4-beta.1",
    88  					Subject: "Release v2.0.4-beta.1",
    89  					Date:    time.Date(2018, 2, 1, 0, 0, 0, 0, time.UTC),
    90  				},
    91  			},
    92  			&Tag{
    93  				Name:    "v2.0.4-beta.1",
    94  				Subject: "Release v2.0.4-beta.1",
    95  				Date:    time.Date(2018, 2, 1, 0, 0, 0, 0, time.UTC),
    96  				Next: &RelateTag{
    97  					Name:    "4.4.3",
    98  					Subject: "This is tag subject",
    99  					Date:    time.Date(2018, 2, 2, 0, 0, 0, 0, time.UTC),
   100  				},
   101  				Previous: nil,
   102  			},
   103  		},
   104  		actual,
   105  	)
   106  
   107  	actualFiltered, errFiltered := newTagReader(client, "^v").ReadAll()
   108  	assert.Nil(errFiltered)
   109  	assert.Equal(
   110  		[]*Tag{
   111  			&Tag{
   112  				Name:     "v2.0.4-beta.1",
   113  				Subject:  "Release v2.0.4-beta.1",
   114  				Date:     time.Date(2018, 2, 1, 0, 0, 0, 0, time.UTC),
   115  				Next:     nil,
   116  				Previous: nil,
   117  			},
   118  		},
   119  		actualFiltered,
   120  	)
   121  }