package pasien import ( "testing" "time" ) type testDataAgeCalculator struct { name string birthday time.Time now time.Time expected Age } func parseDate(s string) time.Time { t, err := time.Parse("2006-01-02", s) if err != nil { panic(err) } return t } func TestAgeCalculator(t *testing.T) { dataSet := []testDataAgeCalculator{ { name: "2 month 1 day difference", birthday: parseDate("1998-07-15"), now: parseDate("1998-09-16"), expected: Age{Years: 0, Months: 2, Days: 1}, }, { name: "same day", birthday: parseDate("1998-07-15"), now: parseDate("1998-07-15"), expected: Age{Years: 0, Months: 0, Days: 0}, }, { name: "1 Year 2 month 3 day difference", birthday: parseDate("1998-07-15"), now: parseDate("1999-09-18"), expected: Age{Years: 1, Months: 2, Days: 3}, }, { name: "1 Year 1 month 29 day difference", birthday: parseDate("1998-07-15"), now: parseDate("1999-09-13"), expected: Age{Years: 1, Months: 1, Days: 29}, }, { name: "0 Year 10 month 29 day difference", birthday: parseDate("1998-07-15"), now: parseDate("1999-05-13"), expected: Age{Years: 0, Months: 9, Days: 28}, }, { name: "birthday after now", birthday: parseDate("1998-07-15"), now: parseDate("1997-05-13"), expected: Age{Years: 0, Months: 0, Days: 0}, }, } for _, tt := range dataSet { t.Run(tt.name, func(t *testing.T) { calc := CalculateAge(tt.birthday, tt.now) if calc != tt.expected { t.Fatalf( "expected %+v, got %+v", tt.expected, calc, ) } }) } }