code.gitea.io/gitea@v1.19.3/modules/markup/markdown/meta_test.go (about) 1 // Copyright 2020 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package markdown 5 6 import ( 7 "fmt" 8 "strings" 9 "testing" 10 11 "github.com/stretchr/testify/assert" 12 ) 13 14 /* 15 IssueTemplate is a legacy to keep the unit tests working. 16 Copied from structs.IssueTemplate, the original type has been changed a lot to support yaml template. 17 */ 18 type IssueTemplate struct { 19 Name string `json:"name" yaml:"name"` 20 Title string `json:"title" yaml:"title"` 21 About string `json:"about" yaml:"about"` 22 Labels []string `json:"labels" yaml:"labels"` 23 Ref string `json:"ref" yaml:"ref"` 24 } 25 26 func (it *IssueTemplate) Valid() bool { 27 return strings.TrimSpace(it.Name) != "" && strings.TrimSpace(it.About) != "" 28 } 29 30 func TestExtractMetadata(t *testing.T) { 31 t.Run("ValidFrontAndBody", func(t *testing.T) { 32 var meta IssueTemplate 33 body, err := ExtractMetadata(fmt.Sprintf("%s\n%s\n%s\n%s", sepTest, frontTest, sepTest, bodyTest), &meta) 34 assert.NoError(t, err) 35 assert.Equal(t, bodyTest, body) 36 assert.Equal(t, metaTest, meta) 37 assert.True(t, meta.Valid()) 38 }) 39 40 t.Run("NoFirstSeparator", func(t *testing.T) { 41 var meta IssueTemplate 42 _, err := ExtractMetadata(fmt.Sprintf("%s\n%s\n%s", frontTest, sepTest, bodyTest), &meta) 43 assert.Error(t, err) 44 }) 45 46 t.Run("NoLastSeparator", func(t *testing.T) { 47 var meta IssueTemplate 48 _, err := ExtractMetadata(fmt.Sprintf("%s\n%s\n%s", sepTest, frontTest, bodyTest), &meta) 49 assert.Error(t, err) 50 }) 51 52 t.Run("NoBody", func(t *testing.T) { 53 var meta IssueTemplate 54 body, err := ExtractMetadata(fmt.Sprintf("%s\n%s\n%s", sepTest, frontTest, sepTest), &meta) 55 assert.NoError(t, err) 56 assert.Equal(t, "", body) 57 assert.Equal(t, metaTest, meta) 58 assert.True(t, meta.Valid()) 59 }) 60 } 61 62 func TestExtractMetadataBytes(t *testing.T) { 63 t.Run("ValidFrontAndBody", func(t *testing.T) { 64 var meta IssueTemplate 65 body, err := ExtractMetadataBytes([]byte(fmt.Sprintf("%s\n%s\n%s\n%s", sepTest, frontTest, sepTest, bodyTest)), &meta) 66 assert.NoError(t, err) 67 assert.Equal(t, bodyTest, string(body)) 68 assert.Equal(t, metaTest, meta) 69 assert.True(t, meta.Valid()) 70 }) 71 72 t.Run("NoFirstSeparator", func(t *testing.T) { 73 var meta IssueTemplate 74 _, err := ExtractMetadataBytes([]byte(fmt.Sprintf("%s\n%s\n%s", frontTest, sepTest, bodyTest)), &meta) 75 assert.Error(t, err) 76 }) 77 78 t.Run("NoLastSeparator", func(t *testing.T) { 79 var meta IssueTemplate 80 _, err := ExtractMetadataBytes([]byte(fmt.Sprintf("%s\n%s\n%s", sepTest, frontTest, bodyTest)), &meta) 81 assert.Error(t, err) 82 }) 83 84 t.Run("NoBody", func(t *testing.T) { 85 var meta IssueTemplate 86 body, err := ExtractMetadataBytes([]byte(fmt.Sprintf("%s\n%s\n%s", sepTest, frontTest, sepTest)), &meta) 87 assert.NoError(t, err) 88 assert.Equal(t, "", string(body)) 89 assert.Equal(t, metaTest, meta) 90 assert.True(t, meta.Valid()) 91 }) 92 } 93 94 var ( 95 sepTest = "-----" 96 frontTest = `name: Test 97 about: "A Test" 98 title: "Test Title" 99 labels: 100 - bug 101 - "test label"` 102 bodyTest = "This is the body" 103 metaTest = IssueTemplate{ 104 Name: "Test", 105 About: "A Test", 106 Title: "Test Title", 107 Labels: []string{"bug", "test label"}, 108 } 109 )