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());
            }
Example #2
0
        public void Put(Guid manageId, ManagePollExpiryRequest updateRequest)
        {
            using (var context = _contextFactory.CreateContext())
            {
                Poll poll = PollByManageId(manageId, context);

                if (updateRequest.ExpiryDateUtc.HasValue && updateRequest.ExpiryDateUtc < DateTime.UtcNow)
                {
                    ModelState.AddModelError("ExpiryDateUtc", "Invalid ExpiryDateUtc");
                }

                if (!ModelState.IsValid)
                {
                    ThrowError(HttpStatusCode.BadRequest, ModelState);
                }

                if (poll.ExpiryDateUtc == updateRequest.ExpiryDateUtc)
                {
                    return;
                }

                poll.ExpiryDateUtc  = updateRequest.ExpiryDateUtc;
                poll.LastUpdatedUtc = DateTime.UtcNow;
                _metricHandler.HandleExpiryChangedEvent(poll.ExpiryDateUtc, poll.UUID);

                context.SaveChanges();
            }
        }
            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());
            }