public void TestPost()
        {
            var setup = new TrackerControllerTestSetup(new List <Tracker>());

            setup.TrackerRepoMock.Setup(tr => tr.StartTracker(setup.UserMock.Id, "unit testing")).Returns(new Tracker {
                Id = "tid"
            });

            var response = setup.Subject.Post(new StartTrackingRequest {
                TrackerName = "unit testing"
            });

            Assert.IsInstanceOf <OkObjectResult>(response);
            Assert.IsInstanceOf <Tracker>(((OkObjectResult)response).Value);


            // test that we don't allow to start tracking when there is an active session
            setup = new TrackerControllerTestSetup(new List <Tracker>());
            setup.TrackerRepoMock.Setup(tr => tr.StartTracker(setup.UserMock.Id, "unit testing")).Returns(new Tracker {
                Id = "tid2"
            });
            setup.TrackerRepoMock.Setup(tr => tr.GetActiveTrackerOfUser(setup.UserMock.Id)).Returns(new Tracker {
                Id = "tid1"
            });
            response = setup.Subject.Post(new StartTrackingRequest {
                TrackerName = "unit testing"
            });
            Assert.IsInstanceOf <BadRequestObjectResult>(response);
        }
        public void TestPatch()
        {
            // test that we don't allow to stop an already stopped tracker
            var setup = new TrackerControllerTestSetup(new List <Tracker>());

            setup.TrackerRepoMock.Setup(tr => tr.GetTracker("tid"))
            .Returns(new Tracker {
                Id        = "tid",
                StartedAt = setup.ClockMock.Now.AddDays(-1),
                StoppedAt = setup.ClockMock.Now,
                Name      = "old",
                UserId    = setup.UserMock.Id
            });

            var response = setup.Subject.Patch("tid");

            Assert.IsInstanceOf <BadRequestObjectResult>(response);
        }
        public void TestGetSummaryInterValCalculations()
        {
            var setup   = new TrackerControllerTestSetup(new List <Tracker>());
            var summary = setup.Subject.GetSummary("week");

            setup.TrackerRepoMock.Verify(tr =>
                                         tr.GetTrackerHistoryDuring(setup.UserMock.Id, It.Is <DateTime>(begin => begin == new DateTime(2021, 3, 1)), setup.ClockMock.Now),
                                         Times.Exactly(1)
                                         );

            summary = setup.Subject.GetSummary("month");
            setup.TrackerRepoMock.Verify(tr =>
                                         tr.GetTrackerHistoryDuring(setup.UserMock.Id, It.Is <DateTime>(begin => begin == new DateTime(2021, 3, 1)), setup.ClockMock.Now),
                                         Times.Exactly(2)
                                         );

            summary = setup.Subject.GetSummary("day");
            setup.TrackerRepoMock.Verify(tr =>
                                         tr.GetTrackerHistoryDuring(setup.UserMock.Id, It.Is <DateTime>(begin => begin == new DateTime(2021, 3, 3)), setup.ClockMock.Now),
                                         Times.Exactly(1)
                                         );
        }