github.com/git-chglog/git-chglog@v0.15.5-0.20240126074033-6a6993d52d69/tag_reader_test.go (about)

     1  package chglog
     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@@__CHGLOG__@@Release v2.0.4-beta.1@@__CHGLOG__@@Thu Feb 1 00:00:00 2018 +0000@@__CHGLOG__@@",
    22  				"refs/tags/4.4.3@@__CHGLOG__@@This is tag subject@@__CHGLOG__@@@@__CHGLOG__@@Fri Feb 2 00:00:00 2018 +0000",
    23  				"refs/tags/4.4.4@@__CHGLOG__@@Release 4.4.4@@__CHGLOG__@@Fri Feb 2 10:00:40 2018 +0000@@__CHGLOG__@@",
    24  				"refs/tags/v2.0.4-beta.2@@__CHGLOG__@@Release v2.0.4-beta.2@@__CHGLOG__@@Sat Feb 3 12:15:00 2018 +0000@@__CHGLOG__@@",
    25  				"refs/tags/5.0.0-rc.0@@__CHGLOG__@@Release 5.0.0-rc.0@@__CHGLOG__@@Sat Feb 3 12:30:10 2018 +0000@@__CHGLOG__@@",
    26  				"refs/tags/hoge_fuga@@__CHGLOG__@@Invalid semver tag name@@__CHGLOG__@@Mon Mar 12 12:30:10 2018 +0000@@__CHGLOG__@@",
    27  				"hoge@@__CHGLOG__@@",
    28  			}, "\n"), nil
    29  		},
    30  	}
    31  
    32  	actual, err := newTagReader(client, "", "date").ReadAll()
    33  	assert.Nil(err)
    34  
    35  	assert.Equal(
    36  		[]*Tag{
    37  			{
    38  				Name:    "hoge_fuga",
    39  				Subject: "Invalid semver tag name",
    40  				Date:    time.Date(2018, 3, 12, 12, 30, 10, 0, time.UTC),
    41  				Next:    nil,
    42  				Previous: &RelateTag{
    43  					Name:    "5.0.0-rc.0",
    44  					Subject: "Release 5.0.0-rc.0",
    45  					Date:    time.Date(2018, 2, 3, 12, 30, 10, 0, time.UTC),
    46  				},
    47  			},
    48  			{
    49  				Name:    "5.0.0-rc.0",
    50  				Subject: "Release 5.0.0-rc.0",
    51  				Date:    time.Date(2018, 2, 3, 12, 30, 10, 0, time.UTC),
    52  				Next: &RelateTag{
    53  					Name:    "hoge_fuga",
    54  					Subject: "Invalid semver tag name",
    55  					Date:    time.Date(2018, 3, 12, 12, 30, 10, 0, time.UTC),
    56  				},
    57  				Previous: &RelateTag{
    58  					Name:    "v2.0.4-beta.2",
    59  					Subject: "Release v2.0.4-beta.2",
    60  					Date:    time.Date(2018, 2, 3, 12, 15, 0, 0, time.UTC),
    61  				},
    62  			},
    63  			{
    64  				Name:    "v2.0.4-beta.2",
    65  				Subject: "Release v2.0.4-beta.2",
    66  				Date:    time.Date(2018, 2, 3, 12, 15, 0, 0, time.UTC),
    67  				Next: &RelateTag{
    68  					Name:    "5.0.0-rc.0",
    69  					Subject: "Release 5.0.0-rc.0",
    70  					Date:    time.Date(2018, 2, 3, 12, 30, 10, 0, time.UTC),
    71  				},
    72  				Previous: &RelateTag{
    73  					Name:    "4.4.4",
    74  					Subject: "Release 4.4.4",
    75  					Date:    time.Date(2018, 2, 2, 10, 0, 40, 0, time.UTC),
    76  				},
    77  			},
    78  			{
    79  				Name:    "4.4.4",
    80  				Subject: "Release 4.4.4",
    81  				Date:    time.Date(2018, 2, 2, 10, 0, 40, 0, time.UTC),
    82  				Next: &RelateTag{
    83  					Name:    "v2.0.4-beta.2",
    84  					Subject: "Release v2.0.4-beta.2",
    85  					Date:    time.Date(2018, 2, 3, 12, 15, 0, 0, time.UTC),
    86  				},
    87  				Previous: &RelateTag{
    88  					Name:    "4.4.3",
    89  					Subject: "This is tag subject",
    90  					Date:    time.Date(2018, 2, 2, 0, 0, 0, 0, time.UTC),
    91  				},
    92  			},
    93  			{
    94  				Name:    "4.4.3",
    95  				Subject: "This is tag subject",
    96  				Date:    time.Date(2018, 2, 2, 0, 0, 0, 0, time.UTC),
    97  				Next: &RelateTag{
    98  					Name:    "4.4.4",
    99  					Subject: "Release 4.4.4",
   100  					Date:    time.Date(2018, 2, 2, 10, 0, 40, 0, time.UTC),
   101  				},
   102  				Previous: &RelateTag{
   103  					Name:    "v2.0.4-beta.1",
   104  					Subject: "Release v2.0.4-beta.1",
   105  					Date:    time.Date(2018, 2, 1, 0, 0, 0, 0, time.UTC),
   106  				},
   107  			},
   108  			{
   109  				Name:    "v2.0.4-beta.1",
   110  				Subject: "Release v2.0.4-beta.1",
   111  				Date:    time.Date(2018, 2, 1, 0, 0, 0, 0, time.UTC),
   112  				Next: &RelateTag{
   113  					Name:    "4.4.3",
   114  					Subject: "This is tag subject",
   115  					Date:    time.Date(2018, 2, 2, 0, 0, 0, 0, time.UTC),
   116  				},
   117  				Previous: nil,
   118  			},
   119  		},
   120  		actual,
   121  	)
   122  
   123  	actual, err = newTagReader(client, "", "semver").ReadAll()
   124  	assert.Nil(err)
   125  
   126  	assert.Equal(
   127  		[]*Tag{
   128  			{
   129  				Name:    "5.0.0-rc.0",
   130  				Subject: "Release 5.0.0-rc.0",
   131  				Date:    time.Date(2018, 2, 3, 12, 30, 10, 0, time.UTC),
   132  				Next:    nil,
   133  				Previous: &RelateTag{
   134  					Name:    "4.4.4",
   135  					Subject: "Release 4.4.4",
   136  					Date:    time.Date(2018, 2, 2, 10, 0, 40, 0, time.UTC),
   137  				},
   138  			},
   139  			{
   140  				Name:    "4.4.4",
   141  				Subject: "Release 4.4.4",
   142  				Date:    time.Date(2018, 2, 2, 10, 0, 40, 0, time.UTC),
   143  				Next: &RelateTag{
   144  					Name:    "5.0.0-rc.0",
   145  					Subject: "Release 5.0.0-rc.0",
   146  					Date:    time.Date(2018, 2, 3, 12, 30, 10, 0, time.UTC),
   147  				},
   148  				Previous: &RelateTag{
   149  					Name:    "4.4.3",
   150  					Subject: "This is tag subject",
   151  					Date:    time.Date(2018, 2, 2, 0, 0, 0, 0, time.UTC),
   152  				},
   153  			},
   154  			{
   155  				Name:    "4.4.3",
   156  				Subject: "This is tag subject",
   157  				Date:    time.Date(2018, 2, 2, 0, 0, 0, 0, time.UTC),
   158  				Next: &RelateTag{
   159  					Name:    "4.4.4",
   160  					Subject: "Release 4.4.4",
   161  					Date:    time.Date(2018, 2, 2, 10, 0, 40, 0, time.UTC),
   162  				},
   163  				Previous: &RelateTag{
   164  					Name:    "v2.0.4-beta.2",
   165  					Subject: "Release v2.0.4-beta.2",
   166  					Date:    time.Date(2018, 2, 3, 12, 15, 0, 0, time.UTC),
   167  				},
   168  			},
   169  			{
   170  				Name:    "v2.0.4-beta.2",
   171  				Subject: "Release v2.0.4-beta.2",
   172  				Date:    time.Date(2018, 2, 3, 12, 15, 0, 0, time.UTC),
   173  				Next: &RelateTag{
   174  					Name:    "4.4.3",
   175  					Subject: "This is tag subject",
   176  					Date:    time.Date(2018, 2, 2, 0, 0, 0, 0, time.UTC),
   177  				},
   178  				Previous: &RelateTag{
   179  					Name:    "v2.0.4-beta.1",
   180  					Subject: "Release v2.0.4-beta.1",
   181  					Date:    time.Date(2018, 2, 1, 0, 0, 0, 0, time.UTC),
   182  				},
   183  			},
   184  			{
   185  				Name:    "v2.0.4-beta.1",
   186  				Subject: "Release v2.0.4-beta.1",
   187  				Date:    time.Date(2018, 2, 1, 0, 0, 0, 0, time.UTC),
   188  				Next: &RelateTag{
   189  					Name:    "v2.0.4-beta.2",
   190  					Subject: "Release v2.0.4-beta.2",
   191  					Date:    time.Date(2018, 2, 3, 12, 15, 0, 0, time.UTC),
   192  				},
   193  				Previous: nil,
   194  			},
   195  		},
   196  		actual,
   197  	)
   198  
   199  	actualFiltered, errFiltered := newTagReader(client, "^v", "date").ReadAll()
   200  	assert.Nil(errFiltered)
   201  	assert.Equal(
   202  		[]*Tag{
   203  			{
   204  				Name:    "v2.0.4-beta.2",
   205  				Subject: "Release v2.0.4-beta.2",
   206  				Date:    time.Date(2018, 2, 3, 12, 15, 0, 0, time.UTC),
   207  				Next:    nil,
   208  				Previous: &RelateTag{
   209  					Name:    "v2.0.4-beta.1",
   210  					Subject: "Release v2.0.4-beta.1",
   211  					Date:    time.Date(2018, 2, 1, 0, 0, 0, 0, time.UTC),
   212  				},
   213  			},
   214  			{
   215  				Name:    "v2.0.4-beta.1",
   216  				Subject: "Release v2.0.4-beta.1",
   217  				Date:    time.Date(2018, 2, 1, 0, 0, 0, 0, time.UTC),
   218  				Next: &RelateTag{
   219  					Name:    "v2.0.4-beta.2",
   220  					Subject: "Release v2.0.4-beta.2",
   221  					Date:    time.Date(2018, 2, 3, 12, 15, 0, 0, time.UTC),
   222  				},
   223  				Previous: nil,
   224  			},
   225  		},
   226  		actualFiltered,
   227  	)
   228  }