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