public void InterpretHoursRecordMessage_canInterpretHoursYesterdayForProject() { var sut = new HoursInterpreter().InterpretMessage(ToPayload("record au 8 yesterday")); sut.Date.Date.Should().Be(DateTime.UtcNow.AddDays(-1).Date); sut.Hours.Should().Be(8d); }
public void InterpretHoursRecordMessage_canInterpretSickHours() { var sut = new HoursInterpreter().InterpretMessage(ToPayload("record sick 8 \"flu\"")); sut.Date.Date.Should().Be(DateTime.UtcNow.Date); sut.Hours.Should().Be(8d); sut.IsBillable.Should().BeFalse(); sut.TimeEntryType.Should().Be(TimeEntryTypeEnum.Sick); sut.NonBillReason.Should().Be("flu"); }
public void InterpretHoursRecordMessage_canInterpretHoursTodayWithWfh() { var sut = new HoursInterpreter().InterpretMessage(ToPayload("record au 8 wfh")); sut.Hours.Should().Be(8d); sut.IsWorkFromHome.Should().BeTrue(); sut.Project.Should().Be("au"); sut.TimeEntryType.Should().Be(TimeEntryTypeEnum.BillableProject); sut.Date.Day.Should().Be(DateTime.UtcNow.Day); }
public void InterpretHoursRecordMessage_canInterpretVacationEasyDate() { var sut = new HoursInterpreter().InterpretMessage(ToPayload("record vacation 8 jan-21")); sut.Date.Date.Should().Be(new DateTime(2019, 1, 21, 0, 0, 0, DateTimeKind.Utc)); sut.Hours.Should().Be(8d); sut.IsBillable.Should().BeFalse(); sut.TimeEntryType.Should().Be(TimeEntryTypeEnum.Vacation); sut.NonBillReason.Should().BeNullOrEmpty(); }
public void InterpretHoursRecordMessage_canInterpretVacationHours() { var sut = new HoursInterpreter().InterpretMessage(ToPayload("record vacation 8")); sut.Date.Date.Should().Be(DateTime.UtcNow.Date); sut.Hours.Should().Be(8d); sut.IsBillable.Should().BeFalse(); sut.TimeEntryType.Should().Be(TimeEntryTypeEnum.Vacation); sut.NonBillReason.Should().BeNullOrEmpty(); }
public void InterpretHoursRecordMessage_canInterpretHoursTodayForProjectWFH() { var sut = new HoursInterpreter().InterpretMessage(ToPayload("record au 8 wfh")); // change timezone on sut. date, and then compare the Date portion only. var tzi = TimeZoneInfo.FindSystemTimeZoneById("Asia/Kabul"); var kabulTime = TimeZoneInfo.ConvertTimeFromUtc(sut.Date, tzi); sut.Hours.Should().Be(8d); sut.Project.Should().Be("au"); sut.IsWorkFromHome.Should().BeTrue(); sut.TimeEntryType.Should().Be(TimeEntryTypeEnum.BillableProject); kabulTime.Day.Should().Be(sut.Date.Day); }
public void InterpretHoursRecordMessage_canInterpretNonBillableWithVarietyText(string nonbillText, string description, double hours, string dateText) { var sut = new HoursInterpreter().InterpretMessage(ToPayload($"record {nonbillText} {hours:F1} {description} {dateText ?? ""}")); if (dateText != "some non bill reason") { sut.Date.Date.Should().Be(EasyDateParser.ParseEasyDate(dateText)); sut.NonBillReason.Should().Be(description.Replace("\"", "")); } else { sut.Date.Date.Should().Be(EasyDateParser.ParseEasyDate(description)); sut.NonBillReason.Should().Be(dateText.Replace("\"", "")); } sut.Hours.Should().Be(hours); sut.IsBillable.Should().BeFalse(); sut.TimeEntryType.Should().Be(TimeEntryTypeEnum.NonBillable); }
public void InterpretHoursRecordMessage_doesNotFullyInterpretGibberish() { var sut = new HoursInterpreter().InterpretMessage(ToPayload("record au 8 yesterday or maybe today")); sut.ErrorMessage.Should().Be("Not sure how to interpret 'or maybe today'"); }