docxTemplater/handlers/generator_test.go

73 lines
1.7 KiB
Go
Raw Normal View History

2023-10-13 10:11:40 +00:00
package handlers
import (
"os"
"reflect"
"strings"
"testing"
"github.com/danilsolovyov/doc-template/docx"
"penahub.gitlab.yandexcloud.net/backend/templategen/templategen"
)
func TestGeneratorService(t *testing.T) {
file, err := os.ReadFile("../assets/TestGeneratorService.docx")
if err != nil {
t.Error(err)
}
2023-10-13 12:29:00 +00:00
r := ReqGeneratorService{
DocNumber: "2",
Date: "13.05.2021",
OrgName: `ООО ЛИГА ХОДЬБЫ "ЖЕНЬШЕНЬ" ПРИМОРСКОГО КРАЯ`,
OrgTaxNum: "999888111",
Sum: "60 000 руб.",
Goods: []ReqGeneratorServiceItem{
{"Консультационные услуги", "2", "1500", "3000"},
{"Развлекательные услуги", "1", "500", "500"},
{"Информационные услуги", "10", "1000", "10000"},
},
2023-10-13 10:11:40 +00:00
}
2023-10-13 12:29:00 +00:00
data := r.TemplateData()
2023-10-13 10:11:40 +00:00
resultBytes, err := templategen.GenerateBytesFile(file, data)
if err != nil {
t.Error(err)
}
document := new(docx.Docx)
err = document.ReadBytes(resultBytes)
if err != nil {
t.Error(err)
}
2023-10-13 12:29:00 +00:00
// _ = os.WriteFile("/tmp/out2.docx", resultBytes, 0644) // TODO delete
checkAllFieldsPresent(t, document.GetContent(), data)
}
2023-10-13 10:11:40 +00:00
2023-10-13 12:29:00 +00:00
func checkAllFieldsPresent(t *testing.T, content string, data interface{}) {
2023-10-13 10:11:40 +00:00
v := reflect.ValueOf(data)
vt := v.Type()
for i := 0; i < v.NumField(); i++ {
field := v.Field(i)
fieldName := vt.Field(i).Name
fieldValue := field.Interface()
2023-10-13 12:29:00 +00:00
switch x := fieldValue.(type) {
case string:
if !strings.Contains(content, x) {
t.Errorf("missing value for '%s': '%s'", fieldName, x)
}
case []ReqGeneratorServiceTemplateDataItem:
for _, item := range x {
checkAllFieldsPresent(t, content, item)
}
default:
t.Error("unhandled field")
2023-10-13 10:11:40 +00:00
}
}
}