docxTemplater/handlers/generator_test.go

67 lines
1.5 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-14 03:56:03 +00:00
data := NewReqGeneratorService()
2023-10-13 10:11:40 +00:00
2023-10-14 03:56:03 +00:00
// is filled by json.Unmarshal
data.DocNumber = "2"
data.Date = "13.05.2021"
data.OrgName = `ООО ЛИГА ХОДЬБЫ "ЖЕНЬШЕНЬ" ПРИМОРСКОГО КРАЯ`
data.OrgTaxNum = "999888111"
data.Sum = "60 000 руб."
data.Name = "Консультационные услуги"
data.Amount = "2"
data.Price = "1500"
data.Sum = "3000"
2023-10-13 12:29:00 +00:00
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-14 03:56:03 +00:00
// _ = os.WriteFile("/tmp/out3.docx", resultBytes, 0644) // TODO delete
2023-10-13 12:29:00 +00:00
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)
}
default:
t.Error("unhandled field")
2023-10-13 10:11:40 +00:00
}
}
}