73 lines
1.7 KiB
Go
73 lines
1.7 KiB
Go
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)
|
||
}
|
||
|
||
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"},
|
||
},
|
||
}
|
||
|
||
data := r.TemplateData()
|
||
|
||
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)
|
||
}
|
||
|
||
// _ = os.WriteFile("/tmp/out2.docx", resultBytes, 0644) // TODO delete
|
||
|
||
checkAllFieldsPresent(t, document.GetContent(), data)
|
||
}
|
||
|
||
func checkAllFieldsPresent(t *testing.T, content string, data interface{}) {
|
||
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()
|
||
|
||
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")
|
||
}
|
||
}
|
||
}
|