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