public void IsTimeValidReturnsFalseOn3d()
        {
            // Arrange
            var logWorkPageViewModel = new LogWorkPageViewModel(new Loader(null), null, null, null);

            // Act
            logWorkPageViewModel.TimeSpent = "3d";

            // Assert
            Assert.IsFalse(logWorkPageViewModel.IsTimeValid);
        }
        public void IsTimeValidReturnsFalseOnMultipleValidMinutes()
        {
            // Arrange
            var logWorkPageViewModel = new LogWorkPageViewModel(new Loader(null), null, null, null);

            // Act
            logWorkPageViewModel.TimeSpent = $"40{LogWork.Minutes} 35{LogWork.Minutes}";

            // Assert
            Assert.IsFalse(logWorkPageViewModel.IsTimeValid);
        }
        public void IsTimeValidReturnsTrueOn2h()
        {
            // Arrange
            var logWorkPageViewModel = new LogWorkPageViewModel(new Loader(null), null, null, null);

            // Act
            logWorkPageViewModel.TimeSpent = $"2{LogWork.Hours}";

            // Assert
            Assert.IsTrue(logWorkPageViewModel.IsTimeValid);
        }
        public void IsTimeValidReturnsFalseOnRandomSet()
        {
            // Arrange
            var logWorkPageViewModel = new LogWorkPageViewModel(new Loader(null), null, null, null);

            // Act
            logWorkPageViewModel.TimeSpent = "d,bv kfdjvnlisueg nireug or";

            // Assert
            Assert.IsFalse(logWorkPageViewModel.IsTimeValid);
        }
        public async void WorkLogServiceIsCalledCorrectly()
        {
            // Arrange
            var wokrLogServiceMoq = new Mock<IWorkLogService>();
            wokrLogServiceMoq.Setup(
                moq =>
                    moq.LogTimeAsync(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<DateTime>(), It.IsAny<TimeSpan>(),
                        It.IsAny<CancellationToken>())).Returns(Task.FromResult<WorkLogItem>(null));

            var loaderMoq = new Mock<ILoader>();
            loaderMoq.Setup(moq => moq.LoadAsync(It.IsAny<Func<CancellationToken, Task>>()))
                .Returns((Func<CancellationToken, Task> factory) => factory(It.IsAny<CancellationToken>()));

            const string timeSpent = "2h 20m";
            const int issueNumber = 5;
            const string repoPath = "test";
            var date = DateTime.Now.Date;
            var timeSpan = TimeSpan.FromMinutes(140);

            var viewModel = new LogWorkPageViewModel(loaderMoq.Object, null, null, wokrLogServiceMoq.Object);
            viewModel.TimeSpent = timeSpent;
            viewModel.Issue = new IssueViewModel(Mock.Of<IIssue>(issue => issue.Number == issueNumber));
            viewModel._repo = Mock.Of<IRepo>(repo => repo.Path == repoPath);
            viewModel.Date = date;

            // Act
            await viewModel.LogCommand.Execute();

            // Assert
            wokrLogServiceMoq.Verify(
                moq =>
                    moq.LogTimeAsync(repoPath, issueNumber, date, timeSpan,
                        It.IsAny<CancellationToken>()), Times.Once);
        }