package api import ( "os" "testing" "time" ) // Opt-in регрессия на реальную выгрузку ПроДокторова «Онлайн-запись» (Appointment-2026-10.xlsx). // Файл берётся только из локальной переменной окружения, в репозиторий не копируется и не печатается. // Эталон снят независимым читателем (openpyxl): 9 записей и 8 уникальных телефонов. // Месяц кабинета отбирается по дате создания записи (столбец «Дата»), а не по дате приёма // («Запись на» заходит в следующий месяц), поэтому период 1С фильтруется именно по ней. func TestProdoctorovSuppliedXLSXSample(t *testing.T) { path := os.Getenv("DANA_PRODOCTOROV_SAMPLE_FILE") if path == "" { t.Skip("local source sample not supplied") } data, err := os.ReadFile(path) if err != nil { t.Fatal("cannot read local sample") } day := func(d, h, m int) time.Time { return time.Date(2026, 10, d, h, m, 0, 0, moscow) } for _, c := range []struct { name string from, to time.Time records, phn int }{ {"весь месяц до 06.10", day(1, 0, 0), day(6, 0, 0), 9, 8}, {"два дня", day(2, 0, 0), day(4, 0, 0), 1, 1}, {"правая граница исключается", day(5, 0, 0), day(5, 13, 45), 3, 2}, {"правая граница чуть позже", day(5, 0, 0), day(5, 13, 46), 4, 3}, } { phones, records, err := parseProdoctorovExport(data, c.from, c.to) if err != nil { t.Fatalf("%s: %v", c.name, err) } if records != c.records || len(phones) != c.phn { t.Errorf("%s: записей %d, телефонов %d; ожидали %d и %d", c.name, records, len(phones), c.records, c.phn) } } }