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
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|