code.gitea.io/gitea@v1.19.3/modules/packages/cargo/parser_test.go (about)

     1  // Copyright 2022 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package cargo
     5  
     6  import (
     7  	"bytes"
     8  	"encoding/binary"
     9  	"io"
    10  	"strings"
    11  	"testing"
    12  
    13  	"github.com/stretchr/testify/assert"
    14  )
    15  
    16  const (
    17  	description = "Package Description"
    18  	author      = "KN4CK3R"
    19  	homepage    = "https://gitea.io/"
    20  	license     = "MIT"
    21  )
    22  
    23  func TestParsePackage(t *testing.T) {
    24  	createPackage := func(name, version string) io.Reader {
    25  		metadata := `{
    26     "name":"` + name + `",
    27     "vers":"` + version + `",
    28     "description":"` + description + `",
    29     "authors": ["` + author + `"],
    30     "deps":[
    31        {
    32           "name":"dep",
    33           "version_req":"1.0"
    34        }
    35     ],
    36     "homepage":"` + homepage + `",
    37     "license":"` + license + `"
    38  }`
    39  
    40  		var buf bytes.Buffer
    41  		binary.Write(&buf, binary.LittleEndian, uint32(len(metadata)))
    42  		buf.WriteString(metadata)
    43  		binary.Write(&buf, binary.LittleEndian, uint32(4))
    44  		buf.WriteString("test")
    45  		return &buf
    46  	}
    47  
    48  	t.Run("InvalidName", func(t *testing.T) {
    49  		for _, name := range []string{"", "0test", "-test", "_test", strings.Repeat("a", 65)} {
    50  			data := createPackage(name, "1.0.0")
    51  
    52  			cp, err := ParsePackage(data)
    53  			assert.Nil(t, cp)
    54  			assert.ErrorIs(t, err, ErrInvalidName)
    55  		}
    56  	})
    57  
    58  	t.Run("InvalidVersion", func(t *testing.T) {
    59  		for _, version := range []string{"", "1.", "-1.0", "1.0.0/1"} {
    60  			data := createPackage("test", version)
    61  
    62  			cp, err := ParsePackage(data)
    63  			assert.Nil(t, cp)
    64  			assert.ErrorIs(t, err, ErrInvalidVersion)
    65  		}
    66  	})
    67  
    68  	t.Run("Valid", func(t *testing.T) {
    69  		data := createPackage("test", "1.0.0")
    70  
    71  		cp, err := ParsePackage(data)
    72  		assert.NotNil(t, cp)
    73  		assert.NoError(t, err)
    74  
    75  		assert.Equal(t, "test", cp.Name)
    76  		assert.Equal(t, "1.0.0", cp.Version)
    77  		assert.Equal(t, description, cp.Metadata.Description)
    78  		assert.Equal(t, []string{author}, cp.Metadata.Authors)
    79  		assert.Len(t, cp.Metadata.Dependencies, 1)
    80  		assert.Equal(t, "dep", cp.Metadata.Dependencies[0].Name)
    81  		assert.Equal(t, homepage, cp.Metadata.ProjectURL)
    82  		assert.Equal(t, license, cp.Metadata.License)
    83  		content, _ := io.ReadAll(cp.Content)
    84  		assert.Equal(t, "test", string(content))
    85  	})
    86  }