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  )