mirror of https://github.com/go-gitea/gitea.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
2.6 KiB
110 lines
2.6 KiB
// Copyright 2022 The Gitea Authors. All rights reserved. |
|
// SPDX-License-Identifier: MIT |
|
|
|
package vagrant |
|
|
|
import ( |
|
"archive/tar" |
|
"bytes" |
|
"compress/gzip" |
|
"io" |
|
"testing" |
|
|
|
"code.gitea.io/gitea/modules/json" |
|
|
|
"github.com/stretchr/testify/assert" |
|
) |
|
|
|
const ( |
|
author = "gitea" |
|
description = "Package Description" |
|
projectURL = "https://gitea.io" |
|
repositoryURL = "https://gitea.io/gitea/gitea" |
|
) |
|
|
|
func TestParseMetadataFromBox(t *testing.T) { |
|
createArchive := func(files map[string][]byte) io.Reader { |
|
var buf bytes.Buffer |
|
zw := gzip.NewWriter(&buf) |
|
tw := tar.NewWriter(zw) |
|
for filename, content := range files { |
|
hdr := &tar.Header{ |
|
Name: filename, |
|
Mode: 0o600, |
|
Size: int64(len(content)), |
|
} |
|
tw.WriteHeader(hdr) |
|
tw.Write(content) |
|
} |
|
tw.Close() |
|
zw.Close() |
|
return &buf |
|
} |
|
|
|
t.Run("MissingInfoFile", func(t *testing.T) { |
|
data := createArchive(map[string][]byte{"dummy.txt": {}}) |
|
|
|
metadata, err := ParseMetadataFromBox(data) |
|
assert.NotNil(t, metadata) |
|
assert.NoError(t, err) |
|
}) |
|
|
|
t.Run("Valid", func(t *testing.T) { |
|
content, err := json.Marshal(map[string]string{ |
|
"description": description, |
|
"author": author, |
|
"website": projectURL, |
|
"repository": repositoryURL, |
|
}) |
|
assert.NoError(t, err) |
|
|
|
data := createArchive(map[string][]byte{"info.json": content}) |
|
|
|
metadata, err := ParseMetadataFromBox(data) |
|
assert.NotNil(t, metadata) |
|
assert.NoError(t, err) |
|
|
|
assert.Equal(t, author, metadata.Author) |
|
assert.Equal(t, description, metadata.Description) |
|
assert.Equal(t, projectURL, metadata.ProjectURL) |
|
assert.Equal(t, repositoryURL, metadata.RepositoryURL) |
|
}) |
|
} |
|
|
|
func TestParseInfoFile(t *testing.T) { |
|
t.Run("UnknownKeys", func(t *testing.T) { |
|
content, err := json.Marshal(map[string]string{ |
|
"package": "", |
|
"dummy": "", |
|
}) |
|
assert.NoError(t, err) |
|
|
|
metadata, err := ParseInfoFile(bytes.NewReader(content)) |
|
assert.NotNil(t, metadata) |
|
assert.NoError(t, err) |
|
|
|
assert.Empty(t, metadata.Author) |
|
assert.Empty(t, metadata.Description) |
|
assert.Empty(t, metadata.ProjectURL) |
|
assert.Empty(t, metadata.RepositoryURL) |
|
}) |
|
|
|
t.Run("Valid", func(t *testing.T) { |
|
content, err := json.Marshal(map[string]string{ |
|
"description": description, |
|
"author": author, |
|
"website": projectURL, |
|
"repository": repositoryURL, |
|
}) |
|
assert.NoError(t, err) |
|
|
|
metadata, err := ParseInfoFile(bytes.NewReader(content)) |
|
assert.NotNil(t, metadata) |
|
assert.NoError(t, err) |
|
|
|
assert.Equal(t, author, metadata.Author) |
|
assert.Equal(t, description, metadata.Description) |
|
assert.Equal(t, projectURL, metadata.ProjectURL) |
|
assert.Equal(t, repositoryURL, metadata.RepositoryURL) |
|
}) |
|
}
|
|
|