public static async Task <TogglActivities> RunAsync([ActivityTrigger] IDurableActivityContext context, ILogger log) { var week = context.GetInput <Week>(); log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}"); var togglApiKey = Environment.GetEnvironmentVariable("TogglApiKey", EnvironmentVariableTarget.Process); var togglWorkspaceId = Environment.GetEnvironmentVariable("TogglWorkspaceId", EnvironmentVariableTarget.Process); var proxy = new TogglProxy(log); log.LogInformation($"Retrieving data for ${week.Start.ToShortDateString()} to ${week.End.ToShortDateString()}"); await proxy.PopulateAsync(togglApiKey, togglWorkspaceId, week.Start, week.End); log.LogInformation($"Get the Skills activities"); var skillActivity = proxy.GetSkillsActivity(); log.LogInformation($"Get the Client split"); var clientActivity = proxy.GetClientActivity(); log.LogInformation($"Get the focus split"); var focusActivity = proxy.GetFocusActivity(); return(new TogglActivities { Skills = skillActivity, Clients = clientActivity, Focus = focusActivity }); }
public async Task Given3hYesterdayAnd5hToday_WhenGettingStatus_ShouldIncludeTodayHours() { const int HoursWithoutToday = 3; const int HoursToday = 5; const long WorkSpaceId = -1L; var yesterdayEntry = new Mock <ITimeEntry>(); yesterdayEntry.Setup(e => e.ServerDeletedAt).Returns(() => null); yesterdayEntry.Setup(e => e.WorkspaceId).Returns(() => WorkSpaceId); yesterdayEntry.Setup(e => e.Duration).Returns(() => (long)TimeSpan.FromHours(HoursToday).TotalSeconds); yesterdayEntry.Setup(e => e.Start).Returns(() => DateTime.Today.AddHours(1)); var observable = Observable.Create <List <ITimeEntry> >((obs) => { obs.OnNext(new List <ITimeEntry>() { yesterdayEntry.Object }); obs.OnCompleted(); return(() => { }); }); var togglMock = new Mock <ITogglApi>(); togglMock.Setup(t => t.TimeEntries.GetAllSince(It.IsAny <DateTimeOffset>())) .Returns(observable); var workspaceMock = new Mock <IWorkspace>(); workspaceMock.Setup(w => w.Name).Returns("test"); workspaceMock.Setup(w => w.Id).Returns(WorkSpaceId); var observableWorkspace = Observable.Create <List <IWorkspace> >((obs) => { obs.OnNext(new List <IWorkspace>() { workspaceMock.Object }); obs.OnCompleted(); return(() => { }); }); togglMock.Setup(t => t.Workspaces.GetAll()) .Returns(observableWorkspace); var reportMock = new Mock <ITogglReportApi>(); reportMock.Setup(r => r.GetUserId()).Returns(Task.FromResult(-1L)); reportMock.Setup(r => r.GetHoursSum(It.IsAny <DateTime>(), It.IsAny <DateTime>(), It.IsAny <long>(), It.IsAny <long>())) .Returns(Task.FromResult(TimeSpan.FromHours(HoursWithoutToday))); var sut = new TogglProxy(reportMock.Object, togglMock.Object); var status = await sut.GetStatus(new DateTime(2020, 02, 04)); status.TodaysHours.Should().Be(TimeSpan.FromHours(HoursToday)); status.TimeInMonth.Should().BeGreaterThan(TimeSpan.FromHours(HoursToday)); }
public StatusWindow() { InitializeComponent(); MouseDown += (s, e) => { if (e.ChangedButton == MouseButton.Left) { DragMove(); } }; Loaded += (s, e) => { var apiToken = new WindowsCredentialManager().Get(); if (string.IsNullOrEmpty(apiToken)) { do { var apiTokenPrompt = new ApiTokenPrompt { Owner = this }; var result = apiTokenPrompt.ShowDialog(); if (!result.HasValue || !result.Value) { this.Close(); return; } apiToken = apiTokenPrompt.ApiToken; new WindowsCredentialManager().Save(apiToken); } while (!TogglProxy.TestApiToken(apiToken)); } var cfg = SettingsManager.LoadSettings(); DataContext = new StatusViewModel(TogglProxy.Create(apiToken), cfg, this); }; }