Esempio n. 1
0
        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
            });
        }
Esempio n. 2
0
        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));
        }
Esempio n. 3
0
        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);
            };
        }