public void RunCreatesNewSummaryAndAddsItToCacheWhenNotFoundInCache()
        {
            var mockUpdateableQueue = new Mock <IUpdateableAzureQueue>();
            var mockTenantSurveyProcessingInfoCache = new Mock <IDictionary <string, TenantSurveyProcessingInfo> >();
            var mockSurveyAnswerStore = new Mock <ISurveyAnswerStore>();
            var command = new UpdatingSurveyResultsSummaryCommand(mockTenantSurveyProcessingInfoCache.Object, mockSurveyAnswerStore.Object, new Mock <ISurveyAnswersSummaryStore>().Object);
            var message = new SurveyAnswerStoredMessage
            {
                Tenant            = "tenant",
                SurveySlugName    = "slug-name",
                AppendedToAnswers = false
            };

            message.SetUpdateableQueueReference(mockUpdateableQueue.Object);

            mockTenantSurveyProcessingInfoCache.Setup(c => c["tenant-slug-name"])
            .Returns(default(TenantSurveyProcessingInfo));

            command.Run(message);

            mockTenantSurveyProcessingInfoCache.VerifySet(
                c => c["tenant-slug-name"] = It.Is <TenantSurveyProcessingInfo>(s => s.AnswersSummary.Tenant == "tenant" && s.AnswersSummary.SlugName == "slug-name"),
                Times.Once());
            mockUpdateableQueue.Verify(q => q.UpdateMessage(message), Times.Once());
        }
        public void PostRunAddsTheAnswerIdToTheListInTheStore()
        {
            var mockTenantSurveyProcessingInfoCache = new Mock <IDictionary <string, TenantSurveyProcessingInfo> >();
            var mockUpdateableQueue           = new Mock <IUpdateableAzureQueue>();
            var mockSurveyAnswerStore         = new Mock <ISurveyAnswerStore>();
            var mockSurveyAnswersSummaryStore = new Mock <ISurveyAnswersSummaryStore>();
            var command = new UpdatingSurveyResultsSummaryCommand(mockTenantSurveyProcessingInfoCache.Object, mockSurveyAnswerStore.Object, mockSurveyAnswersSummaryStore.Object);
            var message = new SurveyAnswerStoredMessage
            {
                Tenant             = "tenant",
                SurveySlugName     = "slug-name",
                SurveyAnswerBlobId = "id",
                AppendedToAnswers  = false
            };

            message.SetUpdateableQueueReference(mockUpdateableQueue.Object);
            var tenantSurveyProcessingInfo = new TenantSurveyProcessingInfo("tenant", "slug-name");

            tenantSurveyProcessingInfo.AnswersMessages.Add(message);
            mockTenantSurveyProcessingInfoCache.Setup(c => c.Values).Returns(new[] { tenantSurveyProcessingInfo });

            command.PostRun();

            mockSurveyAnswerStore.Verify(
                r => r.AppendSurveyAnswerIdsToAnswersList("tenant", "slug-name", It.IsAny <IEnumerable <string> >()),
                Times.Once());
            mockUpdateableQueue.Verify(q => q.UpdateMessage(message), Times.Once());
        }
        public void PostRunAddsTheAnswerIdToTheListInTheStore()
        {
            var mockTenantSurveyProcessingInfoCache = new Mock<IDictionary<string, TenantSurveyProcessingInfo>>();
            var mockUpdateableQueue = new Mock<IUpdateableAzureQueue>();
            var mockSurveyAnswerStore = new Mock<ISurveyAnswerStore>();
            var mockSurveyAnswersSummaryStore = new Mock<ISurveyAnswersSummaryStore>();
            var command = new UpdatingSurveyResultsSummaryCommand(mockTenantSurveyProcessingInfoCache.Object, mockSurveyAnswerStore.Object, mockSurveyAnswersSummaryStore.Object);
            var message = new SurveyAnswerStoredMessage
            {
                Tenant = "tenant",
                SurveySlugName = "slug-name",
                SurveyAnswerBlobId = "id",
                AppendedToAnswers = false
            };
            message.SetUpdateableQueueReference(mockUpdateableQueue.Object);
            var tenantSurveyProcessingInfo = new TenantSurveyProcessingInfo("tenant", "slug-name");
            tenantSurveyProcessingInfo.AnswersMessages.Add(message);
            mockTenantSurveyProcessingInfoCache.Setup(c => c.Values).Returns(new[] { tenantSurveyProcessingInfo });

            command.PostRun();

            mockSurveyAnswerStore.Verify(
                r => r.AppendSurveyAnswerIdsToAnswersList("tenant", "slug-name", It.IsAny<IEnumerable<string>>()),
                Times.Once());
            mockUpdateableQueue.Verify(q => q.UpdateMessage(message), Times.Once());
        }
        public void RunAddsTheSurveyAnswerToTheSummary()
        {
            var mockTenantSurveyProcessingInfo      = new Mock <TenantSurveyProcessingInfo>("tenant", "slug-name");
            var mockTenantSurveyProcessingInfoObj   = mockTenantSurveyProcessingInfo.Object;
            var mockTenantSurveyProcessingInfoCache = new Mock <IDictionary <string, TenantSurveyProcessingInfo> >();
            var mockSurveyAnswerStore = new Mock <ISurveyAnswerStore>();
            var command = new UpdatingSurveyResultsSummaryCommand(mockTenantSurveyProcessingInfoCache.Object, mockSurveyAnswerStore.Object, new Mock <ISurveyAnswersSummaryStore>().Object);

            mockTenantSurveyProcessingInfoCache.Setup(c => c.ContainsKey("tenant-slug-name")).Returns(true);
            mockTenantSurveyProcessingInfoCache.Setup(c => c["tenant-slug-name"]).Returns(mockTenantSurveyProcessingInfoObj);
            var surveyAnswer = new SurveyAnswer()
            {
                Tenant = "tenant", SlugName = "slug-name"
            };

            mockSurveyAnswerStore.Setup(r => r.GetSurveyAnswer(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>())).Returns(surveyAnswer);
            var message = new SurveyAnswerStoredMessage
            {
                Tenant            = "tenant",
                SurveySlugName    = "slug-name",
                AppendedToAnswers = true
            };

            command.Run(message);

            Assert.AreEqual(1, mockTenantSurveyProcessingInfoObj.AnswersSummary.TotalAnswers);
        }
        public void PreRunClearsSurveyAnswersCache()
        {
            var mockTenantSurveyProcessingInfoCache = new Mock <IDictionary <string, TenantSurveyProcessingInfo> >();
            var command = new UpdatingSurveyResultsSummaryCommand(mockTenantSurveyProcessingInfoCache.Object, new Mock <ISurveyAnswerStore>().Object, new Mock <ISurveyAnswersSummaryStore>().Object);

            command.PreRun();

            mockTenantSurveyProcessingInfoCache.Verify(c => c.Clear(), Times.Once());
        }
        public void PostRunMergesTheSummaryToTheStore()
        {
            var mockTenantSurveyProcessingInfoCache = new Mock<IDictionary<string, TenantSurveyProcessingInfo>>();
            var mockSurveyAnswerStore = new Mock<ISurveyAnswerStore>();
            var mockSurveyAnswersSummaryStore = new Mock<ISurveyAnswersSummaryStore>();
            var command = new UpdatingSurveyResultsSummaryCommand(mockTenantSurveyProcessingInfoCache.Object, mockSurveyAnswerStore.Object, mockSurveyAnswersSummaryStore.Object);
            var tenantSurveyProcessingInfo = new TenantSurveyProcessingInfo("tenant", "slug-name");
            mockTenantSurveyProcessingInfoCache.Setup(c => c.Values).Returns(new[] { tenantSurveyProcessingInfo });

            command.PostRun();

            mockSurveyAnswersSummaryStore.Verify(
                r => r.MergeSurveyAnswersSummary(It.Is<SurveyAnswersSummary>(s => s == tenantSurveyProcessingInfo.AnswersSummary)),
                Times.Once());
        }
        public void PostRunMergesTheSummaryToTheStore()
        {
            var mockTenantSurveyProcessingInfoCache = new Mock <IDictionary <string, TenantSurveyProcessingInfo> >();
            var mockSurveyAnswerStore         = new Mock <ISurveyAnswerStore>();
            var mockSurveyAnswersSummaryStore = new Mock <ISurveyAnswersSummaryStore>();
            var command = new UpdatingSurveyResultsSummaryCommand(mockTenantSurveyProcessingInfoCache.Object, mockSurveyAnswerStore.Object, mockSurveyAnswersSummaryStore.Object);
            var tenantSurveyProcessingInfo = new TenantSurveyProcessingInfo("tenant", "slug-name");

            mockTenantSurveyProcessingInfoCache.Setup(c => c.Values).Returns(new[] { tenantSurveyProcessingInfo });

            command.PostRun();

            mockSurveyAnswersSummaryStore.Verify(
                r => r.MergeSurveyAnswersSummary(It.Is <SurveyAnswersSummary>(s => s == tenantSurveyProcessingInfo.AnswersSummary)),
                Times.Once());
        }
        public void PostRunMergesTheSummaryFromTheReporitoryWithTheSumamryInTheCache()
        {
            var mockTenantSurveyProcessingInfoCache = new Mock<IDictionary<string, TenantSurveyProcessingInfo>>();
            var mockSurveyAnswerStore = new Mock<ISurveyAnswerStore>();
            var mockSurveyAnswersSummaryStore = new Mock<ISurveyAnswersSummaryStore>();

            var command = new UpdatingSurveyResultsSummaryCommand(mockTenantSurveyProcessingInfoCache.Object, mockSurveyAnswerStore.Object, mockSurveyAnswersSummaryStore.Object);
            var mockTenantSurveyProcessingInfo = new Mock<TenantSurveyProcessingInfo>("tenant", "slug-name");
            var mockTenantSurveyProcessingInfoObj = mockTenantSurveyProcessingInfo.Object;
            mockTenantSurveyProcessingInfoObj.AnswersSummary.TotalAnswers = 1;
            mockTenantSurveyProcessingInfoObj.AnswersSummary.QuestionAnswersSummaries.Add(new QuestionAnswersSummary() { QuestionType = QuestionType.FiveStars, AnswersSummary = "1" });
            mockTenantSurveyProcessingInfoCache.Setup(c => c.Values).Returns(new[] { mockTenantSurveyProcessingInfoObj });

            command.PostRun();

            mockSurveyAnswersSummaryStore.Verify(s => s.MergeSurveyAnswersSummary(mockTenantSurveyProcessingInfoObj.AnswersSummary), Times.Once());
        }
        public void RunGetsTheSurveyAnswersSummaryFromTheCache()
        {
            var mockTenantSurveyProcessingInfoCache = new Mock <IDictionary <string, TenantSurveyProcessingInfo> >();
            var mockSurveyAnswerStore = new Mock <ISurveyAnswerStore>();
            var command = new UpdatingSurveyResultsSummaryCommand(mockTenantSurveyProcessingInfoCache.Object, mockSurveyAnswerStore.Object, new Mock <ISurveyAnswersSummaryStore>().Object);

            mockTenantSurveyProcessingInfoCache.Setup(c => c.ContainsKey("tenant-slug-name")).Returns(true);
            mockTenantSurveyProcessingInfoCache.Setup(c => c["tenant-slug-name"]).Returns(new TenantSurveyProcessingInfo("tenant", "slug-name"));
            var message = new SurveyAnswerStoredMessage
            {
                Tenant            = "tenant",
                SurveySlugName    = "slug-name",
                AppendedToAnswers = false
            };

            command.Run(message);

            mockTenantSurveyProcessingInfoCache.Verify(c => c["tenant-slug-name"], Times.Once());
        }
        public void RunGetsTheSurveyAnswerFromTheStore()
        {
            var mockTenantSurveyProcessingInfoCache = new Mock <IDictionary <string, TenantSurveyProcessingInfo> >();
            var mockSurveyAnswerStore = new Mock <ISurveyAnswerStore>();
            var command = new UpdatingSurveyResultsSummaryCommand(mockTenantSurveyProcessingInfoCache.Object, mockSurveyAnswerStore.Object, new Mock <ISurveyAnswersSummaryStore>().Object);

            mockTenantSurveyProcessingInfoCache.Setup(c => c["tenant-slug-name"])
            .Returns(new TenantSurveyProcessingInfo("tenant", "slug-name"));
            var message = new SurveyAnswerStoredMessage
            {
                Tenant             = "tenant",
                SurveySlugName     = "slug-name",
                SurveyAnswerBlobId = "id",
                AppendedToAnswers  = true
            };

            command.Run(message);

            mockSurveyAnswerStore.Verify(r => r.GetSurveyAnswer("tenant", "slug-name", "id"));
        }
        public void RunAddTheAnswerIdToTheListInTheStore()
        {
            var mockUpdateableQueue = new Mock <IUpdateableAzureQueue>();
            var mockTenantSurveyProcessingInfoCache = new Mock <IDictionary <string, TenantSurveyProcessingInfo> >();
            var mockSurveyAnswerStore = new Mock <ISurveyAnswerStore>();
            var command = new UpdatingSurveyResultsSummaryCommand(mockTenantSurveyProcessingInfoCache.Object, mockSurveyAnswerStore.Object, new Mock <ISurveyAnswersSummaryStore>().Object);
            var message = new SurveyAnswerStoredMessage
            {
                Tenant             = "tenant",
                SurveySlugName     = "slug-name",
                SurveyAnswerBlobId = "id",
                AppendedToAnswers  = false
            };

            message.SetUpdateableQueueReference(mockUpdateableQueue.Object);

            command.Run(message);

            mockSurveyAnswerStore.Verify(r => r.AppendSurveyAnswerIdToAnswersList("tenant", "slug-name", "id"));
            mockUpdateableQueue.Verify(q => q.UpdateMessage(message), Times.Once());
        }
        public void PostRunMergesTheSummaryFromTheReporitoryWithTheSumamryInTheCache()
        {
            var mockTenantSurveyProcessingInfoCache = new Mock <IDictionary <string, TenantSurveyProcessingInfo> >();
            var mockSurveyAnswerStore         = new Mock <ISurveyAnswerStore>();
            var mockSurveyAnswersSummaryStore = new Mock <ISurveyAnswersSummaryStore>();

            var command = new UpdatingSurveyResultsSummaryCommand(mockTenantSurveyProcessingInfoCache.Object, mockSurveyAnswerStore.Object, mockSurveyAnswersSummaryStore.Object);
            var mockTenantSurveyProcessingInfo    = new Mock <TenantSurveyProcessingInfo>("tenant", "slug-name");
            var mockTenantSurveyProcessingInfoObj = mockTenantSurveyProcessingInfo.Object;

            mockTenantSurveyProcessingInfoObj.AnswersSummary.TotalAnswers = 1;
            mockTenantSurveyProcessingInfoObj.AnswersSummary.QuestionAnswersSummaries.Add(new QuestionAnswersSummary()
            {
                QuestionType = QuestionType.FiveStars, AnswersSummary = "1"
            });
            mockTenantSurveyProcessingInfoCache.Setup(c => c.Values).Returns(new[] { mockTenantSurveyProcessingInfoObj });

            command.PostRun();

            mockSurveyAnswersSummaryStore.Verify(s => s.MergeSurveyAnswersSummary(mockTenantSurveyProcessingInfoObj.AnswersSummary), Times.Once());
        }
        public void PreRunClearsSurveyAnswersCache()
        {
            var mockTenantSurveyProcessingInfoCache = new Mock<IDictionary<string, TenantSurveyProcessingInfo>>();
            var command = new UpdatingSurveyResultsSummaryCommand(mockTenantSurveyProcessingInfoCache.Object, new Mock<ISurveyAnswerStore>().Object, new Mock<ISurveyAnswersSummaryStore>().Object);

            command.PreRun();

            mockTenantSurveyProcessingInfoCache.Verify(c => c.Clear(), Times.Once());
        }
        public void RunGetsTheSurveyAnswersSummaryFromTheCache()
        {
            var mockTenantSurveyProcessingInfoCache = new Mock<IDictionary<string, TenantSurveyProcessingInfo>>();
            var mockSurveyAnswerStore = new Mock<ISurveyAnswerStore>();
            var command = new UpdatingSurveyResultsSummaryCommand(mockTenantSurveyProcessingInfoCache.Object, mockSurveyAnswerStore.Object, new Mock<ISurveyAnswersSummaryStore>().Object);
            mockTenantSurveyProcessingInfoCache.Setup(c => c.ContainsKey("tenant-slug-name")).Returns(true);
            mockTenantSurveyProcessingInfoCache.Setup(c => c["tenant-slug-name"]).Returns(new TenantSurveyProcessingInfo("tenant", "slug-name"));
            var message = new SurveyAnswerStoredMessage
            {
                Tenant = "tenant",
                SurveySlugName = "slug-name",
                AppendedToAnswers = false
            };

            command.Run(message);

            mockTenantSurveyProcessingInfoCache.Verify(c => c["tenant-slug-name"], Times.Once());
        }
        public void RunGetsTheSurveyAnswerFromTheStore()
        {
            var mockTenantSurveyProcessingInfoCache = new Mock<IDictionary<string, TenantSurveyProcessingInfo>>();
            var mockSurveyAnswerStore = new Mock<ISurveyAnswerStore>();
            var command = new UpdatingSurveyResultsSummaryCommand(mockTenantSurveyProcessingInfoCache.Object, mockSurveyAnswerStore.Object, new Mock<ISurveyAnswersSummaryStore>().Object);
            mockTenantSurveyProcessingInfoCache.Setup(c => c["tenant-slug-name"])
                                         .Returns(new TenantSurveyProcessingInfo("tenant", "slug-name"));
            var message = new SurveyAnswerStoredMessage
            {
                Tenant = "tenant",
                SurveySlugName = "slug-name",
                SurveyAnswerBlobId = "id",
                AppendedToAnswers = true
            };

            command.Run(message);

            mockSurveyAnswerStore.Verify(r => r.GetSurveyAnswer("tenant", "slug-name", "id"));
        }
        public void RunCreatesNewSummaryAndAddsItToCacheWhenNotFoundInCache()
        {
            var mockTenantSurveyProcessingInfoCache = new Mock<IDictionary<string, TenantSurveyProcessingInfo>>();
            var mockSurveyAnswerStore = new Mock<ISurveyAnswerStore>();
            var command = new UpdatingSurveyResultsSummaryCommand(mockTenantSurveyProcessingInfoCache.Object, mockSurveyAnswerStore.Object, new Mock<ISurveyAnswersSummaryStore>().Object);
            var message = new SurveyAnswerStoredMessage
            {
                Tenant = "tenant",
                SurveySlugName = "slug-name",
                AppendedToAnswers = false
            };

            mockTenantSurveyProcessingInfoCache.Setup(c => c["tenant-slug-name"])
                                         .Returns(default(TenantSurveyProcessingInfo));

            command.Run(message);

            mockTenantSurveyProcessingInfoCache.VerifySet(
                c => c["tenant-slug-name"] = It.Is<TenantSurveyProcessingInfo>(s => s.AnswersSummary.Tenant == "tenant" && s.AnswersSummary.SlugName == "slug-name"),
                Times.Once());
        }
        public void RunAddsTheSurveyAnswerToTheSummary()
        {
            var mockTenantSurveyProcessingInfo = new Mock<TenantSurveyProcessingInfo>("tenant", "slug-name");
            var mockTenantSurveyProcessingInfoObj = mockTenantSurveyProcessingInfo.Object;
            var mockTenantSurveyProcessingInfoCache = new Mock<IDictionary<string, TenantSurveyProcessingInfo>>();
            var mockSurveyAnswerStore = new Mock<ISurveyAnswerStore>();
            var command = new UpdatingSurveyResultsSummaryCommand(mockTenantSurveyProcessingInfoCache.Object, mockSurveyAnswerStore.Object, new Mock<ISurveyAnswersSummaryStore>().Object);
            mockTenantSurveyProcessingInfoCache.Setup(c => c.ContainsKey("tenant-slug-name")).Returns(true);
            mockTenantSurveyProcessingInfoCache.Setup(c => c["tenant-slug-name"]).Returns(mockTenantSurveyProcessingInfoObj);
            var surveyAnswer = new SurveyAnswer() { Tenant = "tenant", SlugName = "slug-name" };
            mockSurveyAnswerStore.Setup(r => r.GetSurveyAnswer(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())).Returns(surveyAnswer);
            var message = new SurveyAnswerStoredMessage
            {
                Tenant = "tenant",
                SurveySlugName = "slug-name",
                AppendedToAnswers = true
            };

            command.Run(message);

            Assert.AreEqual(1, mockTenantSurveyProcessingInfoObj.AnswersSummary.TotalAnswers);
        }