github.com/gitbundle/modules@v0.0.0-20231025071548-85b91c5c3b01/packages/conan/reference_test.go (about)

     1  // Copyright 2023 The GitBundle Inc. All rights reserved.
     2  // Copyright 2017 The Gitea Authors. All rights reserved.
     3  // Use of this source code is governed by a MIT-style
     4  // license that can be found in the LICENSE file.
     5  
     6  package conan
     7  
     8  import (
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  func TestNewRecipeReference(t *testing.T) {
    15  	cases := []struct {
    16  		Name     string
    17  		Version  string
    18  		User     string
    19  		Channel  string
    20  		Revision string
    21  		IsValid  bool
    22  	}{
    23  		{"", "", "", "", "", false},
    24  		{"name", "", "", "", "", false},
    25  		{"", "1.0", "", "", "", false},
    26  		{"", "", "user", "", "", false},
    27  		{"", "", "", "channel", "", false},
    28  		{"", "", "", "", "0", false},
    29  		{"name", "1.0", "", "", "", true},
    30  		{"name", "1.0", "user", "", "", false},
    31  		{"name", "1.0", "", "channel", "", false},
    32  		{"name", "1.0", "user", "channel", "", true},
    33  		{"name", "1.0", "_", "", "", true},
    34  		{"name", "1.0", "", "_", "", true},
    35  		{"name", "1.0", "_", "_", "", true},
    36  		{"name", "1.0", "_", "_", "0", true},
    37  		{"name", "1.0", "", "", "0", true},
    38  		{"name", "1.0.0q", "", "", "0", true},
    39  		{"name", "1.0", "", "", "000000000000000000000000000000000000000000000000000000000000", false},
    40  	}
    41  
    42  	for i, c := range cases {
    43  		rref, err := NewRecipeReference(c.Name, c.Version, c.User, c.Channel, c.Revision)
    44  		if c.IsValid {
    45  			assert.NoError(t, err, "case %d, should be invalid", i)
    46  			assert.NotNil(t, rref, "case %d, should not be nil", i)
    47  		} else {
    48  			assert.Error(t, err, "case %d, should be valid", i)
    49  		}
    50  	}
    51  }
    52  
    53  func TestRecipeReferenceRevisionOrDefault(t *testing.T) {
    54  	rref, err := NewRecipeReference("name", "1.0", "", "", "")
    55  	assert.NoError(t, err)
    56  	assert.Equal(t, DefaultRevision, rref.RevisionOrDefault())
    57  
    58  	rref, err = NewRecipeReference("name", "1.0", "", "", DefaultRevision)
    59  	assert.NoError(t, err)
    60  	assert.Equal(t, DefaultRevision, rref.RevisionOrDefault())
    61  
    62  	rref, err = NewRecipeReference("name", "1.0", "", "", "Az09")
    63  	assert.NoError(t, err)
    64  	assert.Equal(t, "Az09", rref.RevisionOrDefault())
    65  }
    66  
    67  func TestRecipeReferenceString(t *testing.T) {
    68  	rref, err := NewRecipeReference("name", "1.0", "", "", "")
    69  	assert.NoError(t, err)
    70  	assert.Equal(t, "name/1.0", rref.String())
    71  
    72  	rref, err = NewRecipeReference("name", "1.0", "user", "channel", "")
    73  	assert.NoError(t, err)
    74  	assert.Equal(t, "name/1.0@user/channel", rref.String())
    75  
    76  	rref, err = NewRecipeReference("name", "1.0", "user", "channel", "Az09")
    77  	assert.NoError(t, err)
    78  	assert.Equal(t, "name/1.0@user/channel#Az09", rref.String())
    79  }
    80  
    81  func TestRecipeReferenceLinkName(t *testing.T) {
    82  	rref, err := NewRecipeReference("name", "1.0", "", "", "")
    83  	assert.NoError(t, err)
    84  	assert.Equal(t, "name/1.0/_/_/0", rref.LinkName())
    85  
    86  	rref, err = NewRecipeReference("name", "1.0", "user", "channel", "")
    87  	assert.NoError(t, err)
    88  	assert.Equal(t, "name/1.0/user/channel/0", rref.LinkName())
    89  
    90  	rref, err = NewRecipeReference("name", "1.0", "user", "channel", "Az09")
    91  	assert.NoError(t, err)
    92  	assert.Equal(t, "name/1.0/user/channel/Az09", rref.LinkName())
    93  }
    94  
    95  func TestNewPackageReference(t *testing.T) {
    96  	rref, _ := NewRecipeReference("name", "1.0", "", "", "")
    97  
    98  	cases := []struct {
    99  		Recipe    *RecipeReference
   100  		Reference string
   101  		Revision  string
   102  		IsValid   bool
   103  	}{
   104  		{nil, "", "", false},
   105  		{rref, "", "", false},
   106  		{nil, "aZ09", "", false},
   107  		{rref, "aZ09", "", true},
   108  		{rref, "", "Az09", false},
   109  		{rref, "aZ09", "Az09", true},
   110  	}
   111  
   112  	for i, c := range cases {
   113  		pref, err := NewPackageReference(c.Recipe, c.Reference, c.Revision)
   114  		if c.IsValid {
   115  			assert.NoError(t, err, "case %d, should be invalid", i)
   116  			assert.NotNil(t, pref, "case %d, should not be nil", i)
   117  		} else {
   118  			assert.Error(t, err, "case %d, should be valid", i)
   119  		}
   120  	}
   121  }
   122  
   123  func TestPackageReferenceRevisionOrDefault(t *testing.T) {
   124  	rref, _ := NewRecipeReference("name", "1.0", "", "", "")
   125  
   126  	pref, err := NewPackageReference(rref, "ref", "")
   127  	assert.NoError(t, err)
   128  	assert.Equal(t, DefaultRevision, pref.RevisionOrDefault())
   129  
   130  	pref, err = NewPackageReference(rref, "ref", DefaultRevision)
   131  	assert.NoError(t, err)
   132  	assert.Equal(t, DefaultRevision, pref.RevisionOrDefault())
   133  
   134  	pref, err = NewPackageReference(rref, "ref", "Az09")
   135  	assert.NoError(t, err)
   136  	assert.Equal(t, "Az09", pref.RevisionOrDefault())
   137  }
   138  
   139  func TestPackageReferenceLinkName(t *testing.T) {
   140  	rref, _ := NewRecipeReference("name", "1.0", "", "", "")
   141  
   142  	pref, err := NewPackageReference(rref, "ref", "")
   143  	assert.NoError(t, err)
   144  	assert.Equal(t, "ref/0", pref.LinkName())
   145  
   146  	pref, err = NewPackageReference(rref, "ref", "Az09")
   147  	assert.NoError(t, err)
   148  	assert.Equal(t, "ref/Az09", pref.LinkName())
   149  }