package router import "testing" func TestParseMoneyQuery(t *testing.T) { cases := []struct { in string window MoneyWindow ok bool }{ {"сколько я потратил сегодня?", MoneyToday, true}, {"сколько я потратил в этом месяце?", MoneyMonth, true}, {"сколько я потратил?", MoneyMonth, true}, // month-to-date by default {"покажи мои траты", MoneyMonth, true}, {"какие у меня расходы за месяц", MoneyMonth, true}, {"how much did I spend today", MoneyToday, true}, {"сколько я заработал в этом месяце", MoneyMonth, true}, // Windows nothing is stored for are claimed and refused, never answered // with the month-to-date figure. {"сколько я потратил вчера?", MoneyUnsupported, true}, {"сколько я потратил на прошлой неделе?", MoneyUnsupported, true}, {"how much did I spend yesterday", MoneyUnsupported, true}, // Not about money. {"я потратил весь день на это", MoneyNone, false}, // A statement, not a question: the noun and the ask must be independent // evidence, and "траты" used to satisfy both halves on its own. {"у меня в этом месяце большие траты", MoneyNone, false}, {"потратил много сил", MoneyNone, false}, {"какая погода?", MoneyNone, false}, {"я купил молоко", MoneyNone, false}, {"", MoneyNone, false}, } for _, c := range cases { q, ok := ParseMoneyQuery(c.in) if ok != c.ok || q.Window != c.window { t.Errorf("ParseMoneyQuery(%q) = (%v, %v), want (%v, %v)", c.in, q.Window, ok, c.window, c.ok) } } }