67 lines
1.5 KiB
Go
67 lines
1.5 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)
|
||
}
|
||
|
||
data := NewReqGeneratorService()
|
||
|
||
// 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"
|
||
|
||
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/out3.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)
|
||
}
|
||
default:
|
||
t.Error("unhandled field")
|
||
}
|
||
}
|
||
}
|