code.gitea.io/gitea@v1.19.3/modules/packages/vagrant/metadata_test.go (about)

     1  // Copyright 2022 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package vagrant
     5  
     6  import (
     7  	"archive/tar"
     8  	"bytes"
     9  	"compress/gzip"
    10  	"io"
    11  	"testing"
    12  
    13  	"code.gitea.io/gitea/modules/json"
    14  
    15  	"github.com/stretchr/testify/assert"
    16  )
    17  
    18  const (
    19  	author        = "gitea"
    20  	description   = "Package Description"
    21  	projectURL    = "https://gitea.io"
    22  	repositoryURL = "https://gitea.io/gitea/gitea"
    23  )
    24  
    25  func TestParseMetadataFromBox(t *testing.T) {
    26  	createArchive := func(files map[string][]byte) io.Reader {
    27  		var buf bytes.Buffer
    28  		zw := gzip.NewWriter(&buf)
    29  		tw := tar.NewWriter(zw)
    30  		for filename, content := range files {
    31  			hdr := &tar.Header{
    32  				Name: filename,
    33  				Mode: 0o600,
    34  				Size: int64(len(content)),
    35  			}
    36  			tw.WriteHeader(hdr)
    37  			tw.Write(content)
    38  		}
    39  		tw.Close()
    40  		zw.Close()
    41  		return &buf
    42  	}
    43  
    44  	t.Run("MissingInfoFile", func(t *testing.T) {
    45  		data := createArchive(map[string][]byte{"dummy.txt": {}})
    46  
    47  		metadata, err := ParseMetadataFromBox(data)
    48  		assert.NotNil(t, metadata)
    49  		assert.NoError(t, err)
    50  	})
    51  
    52  	t.Run("Valid", func(t *testing.T) {
    53  		content, err := json.Marshal(map[string]string{
    54  			"description": description,
    55  			"author":      author,
    56  			"website":     projectURL,
    57  			"repository":  repositoryURL,
    58  		})
    59  		assert.NoError(t, err)
    60  
    61  		data := createArchive(map[string][]byte{"info.json": content})
    62  
    63  		metadata, err := ParseMetadataFromBox(data)
    64  		assert.NotNil(t, metadata)
    65  		assert.NoError(t, err)
    66  
    67  		assert.Equal(t, author, metadata.Author)
    68  		assert.Equal(t, description, metadata.Description)
    69  		assert.Equal(t, projectURL, metadata.ProjectURL)
    70  		assert.Equal(t, repositoryURL, metadata.RepositoryURL)
    71  	})
    72  }
    73  
    74  func TestParseInfoFile(t *testing.T) {
    75  	t.Run("UnknownKeys", func(t *testing.T) {
    76  		content, err := json.Marshal(map[string]string{
    77  			"package": "",
    78  			"dummy":   "",
    79  		})
    80  		assert.NoError(t, err)
    81  
    82  		metadata, err := ParseInfoFile(bytes.NewReader(content))
    83  		assert.NotNil(t, metadata)
    84  		assert.NoError(t, err)
    85  
    86  		assert.Empty(t, metadata.Author)
    87  		assert.Empty(t, metadata.Description)
    88  		assert.Empty(t, metadata.ProjectURL)
    89  		assert.Empty(t, metadata.RepositoryURL)
    90  	})
    91  
    92  	t.Run("Valid", func(t *testing.T) {
    93  		content, err := json.Marshal(map[string]string{
    94  			"description": description,
    95  			"author":      author,
    96  			"website":     projectURL,
    97  			"repository":  repositoryURL,
    98  		})
    99  		assert.NoError(t, err)
   100  
   101  		metadata, err := ParseInfoFile(bytes.NewReader(content))
   102  		assert.NotNil(t, metadata)
   103  		assert.NoError(t, err)
   104  
   105  		assert.Equal(t, author, metadata.Author)
   106  		assert.Equal(t, description, metadata.Description)
   107  		assert.Equal(t, projectURL, metadata.ProjectURL)
   108  		assert.Equal(t, repositoryURL, metadata.RepositoryURL)
   109  	})
   110  }