public void UnchangedExpiryDateDoesNotGenerateMetric()
            {
                // Arrange
                IDbSet <Poll> existingPolls = DbSetTestHelper.CreateMockDbSet <Poll>();
                Poll          existingPoll  = CreatePoll();
                DateTime      currentExpiry = DateTime.UtcNow.AddHours(1);

                existingPoll.ExpiryDateUtc = currentExpiry;
                existingPolls.Add(existingPoll);


                IContextFactory         contextFactory = ContextFactoryTestHelper.CreateContextFactory(existingPolls);
                ManagePollExpiryRequest request        = new ManagePollExpiryRequest {
                    ExpiryDateUtc = currentExpiry
                };

                Mock <IMetricHandler>  metricHandler = new Mock <IMetricHandler>();
                ManageExpiryController controller    = CreateManageExpiryController(contextFactory, metricHandler.Object);

                // Act
                controller.Put(PollManageGuid, request);

                // Assert
                metricHandler.Verify(m => m.HandleExpiryChangedEvent(It.IsAny <DateTimeOffset?>(), It.IsAny <Guid>()), Times.Never());
            }
            public void UnknownManageId_ReturnsNotFound()
            {
                IDbSet <Poll>           existingPolls  = DbSetTestHelper.CreateMockDbSet <Poll>();
                IContextFactory         contextFactory = ContextFactoryTestHelper.CreateContextFactory(existingPolls);
                ManagePollExpiryRequest request        = new ManagePollExpiryRequest {
                };

                ManageExpiryController controller = CreateManageExpiryController(contextFactory, new Mock <IMetricHandler>().Object);

                controller.Put(Guid.NewGuid(), request);
            }
            public void ExpiryInThePast_IsRejected()
            {
                IDbSet <Poll> existingPolls = DbSetTestHelper.CreateMockDbSet <Poll>();
                Poll          existingPoll  = CreatePoll();

                existingPolls.Add(existingPoll);

                DateTime past = DateTime.UtcNow.AddHours(-1);

                IContextFactory         contextFactory = ContextFactoryTestHelper.CreateContextFactory(existingPolls);
                ManagePollExpiryRequest request        = new ManagePollExpiryRequest {
                    ExpiryDateUtc = past
                };

                ManageExpiryController controller = CreateManageExpiryController(contextFactory, new Mock <IMetricHandler>().Object);

                controller.Put(PollManageGuid, request);
            }
            public void SetExpiry_SetsExpiry()
            {
                IDbSet <Poll> existingPolls = DbSetTestHelper.CreateMockDbSet <Poll>();
                Poll          existingPoll  = CreatePoll();

                existingPolls.Add(existingPoll);

                DateTime expiry = DateTime.UtcNow.AddHours(1);

                IContextFactory         contextFactory = ContextFactoryTestHelper.CreateContextFactory(existingPolls);
                ManagePollExpiryRequest request        = new ManagePollExpiryRequest {
                    ExpiryDateUtc = expiry
                };

                ManageExpiryController controller = CreateManageExpiryController(contextFactory, new Mock <IMetricHandler>().Object);

                controller.Put(PollManageGuid, request);

                Assert.AreEqual(expiry, existingPoll.ExpiryDateUtc);
            }
            public void NullExpiry_SetsExpiryToNull()
            {
                // Arrange
                IDbSet <Poll> existingPolls = DbSetTestHelper.CreateMockDbSet <Poll>();
                Poll          existingPoll  = CreatePoll();

                existingPolls.Add(existingPoll);

                IContextFactory         contextFactory = ContextFactoryTestHelper.CreateContextFactory(existingPolls);
                ManagePollExpiryRequest request        = new ManagePollExpiryRequest {
                };

                ManageExpiryController controller = CreateManageExpiryController(contextFactory, new Mock <IMetricHandler>().Object);

                controller.Validate(request);

                // Act
                controller.Put(PollManageGuid, request);

                // Assert
                Assert.IsNull(existingPoll.ExpiryDateUtc);
            }
            public void ChangedExpiryDateGeneratesMetric()
            {
                // Arrange
                IDbSet <Poll> existingPolls = DbSetTestHelper.CreateMockDbSet <Poll>();
                Poll          existingPoll  = CreatePoll();

                existingPolls.Add(existingPoll);

                DateTime future = DateTime.UtcNow.AddHours(1);

                IContextFactory         contextFactory = ContextFactoryTestHelper.CreateContextFactory(existingPolls);
                ManagePollExpiryRequest request        = new ManagePollExpiryRequest {
                    ExpiryDateUtc = future
                };

                Mock <IMetricHandler>  metricHandler = new Mock <IMetricHandler>();
                ManageExpiryController controller    = CreateManageExpiryController(contextFactory, metricHandler.Object);

                // Act
                controller.Put(PollManageGuid, request);

                // Assert
                metricHandler.Verify(m => m.HandleExpiryChangedEvent(future, existingPoll.UUID), Times.Once());
            }