public async Task DeleteSurveyByTenantAndSlugNameDeleteQuestionsByTenantAndSlugNameInPartitionKeyFromQuestionTable()
        {
            string expectedKey = string.Format(CultureInfo.InvariantCulture, "{0}_{1}", "tenant", "slug-name");
            var    surveyRow   = new SurveyRow {
                RowKey = expectedKey
            };
            var mockSurveyTable = new Mock <IAzureTable <SurveyRow> >();

            mockSurveyTable.Setup(t => t.GetByRowKeyAsync(expectedKey)).ReturnsAsync(new[] { surveyRow });
            var questionRow = new QuestionRow {
                PartitionKey = expectedKey, PossibleAnswers = "possible answers", Type = Enum.GetName(typeof(QuestionType), QuestionType.SimpleText)
            };
            var questions         = new[] { questionRow };
            var mockQuestionTable = new Mock <IAzureTable <QuestionRow> >();

            mockQuestionTable.Setup(t => t.GetByPartitionKeyAsync(expectedKey)).ReturnsAsync(questions);
            IEnumerable <QuestionRow> actualQuestionsToDelete = null;

            mockQuestionTable.Setup(t => t.DeleteAsync(It.IsAny <IEnumerable <QuestionRow> >()))
            .Returns(Task.Delay(0))
            .Callback <IEnumerable <QuestionRow> >(q => actualQuestionsToDelete = q);

            var store = new SurveyStore(mockSurveyTable.Object, mockQuestionTable.Object, new Mock <IInitializationStatusService>().Object);

            await store.DeleteSurveyByTenantAndSlugNameAsync("tenant", "slug-name");

            Assert.AreEqual(1, actualQuestionsToDelete.Count());
            Assert.AreSame(questionRow, actualQuestionsToDelete.First());
        }
        public async Task DeleteSurveyByTenantAndSlugNameDoesNotDeleteSurveyAndQuestionWhenSurveyDoesNotExist()
        {
            var mockSurveyTable = new Mock <IAzureTable <SurveyRow> >();

            mockSurveyTable.Setup(t => t.GetByRowKeyAsync(It.IsAny <string>())).ReturnsAsync(null);
            var mockQuestionTable = new Mock <IAzureTable <QuestionRow> >();

            mockQuestionTable.Setup(t => t.GetByPartitionKeyAsync(It.IsAny <string>())).ReturnsAsync(new QuestionRow[] { });
            var store = new SurveyStore(mockSurveyTable.Object, mockQuestionTable.Object, new Mock <IInitializationStatusService>().Object);

            await store.DeleteSurveyByTenantAndSlugNameAsync("tenant", "slug-name");

            mockSurveyTable.Verify(t => t.DeleteAsync(It.IsAny <SurveyRow>()), Times.Never());
            mockQuestionTable.Verify(t => t.DeleteAsync(It.IsAny <IEnumerable <QuestionRow> >()), Times.Never());
        }
        public async Task DeleteSurveyByTenantAndSlugNameDeletesSurveyWithTenantAndSlugNameInRowKeyFromSurveyTable()
        {
            string expectedRowKey = string.Format(CultureInfo.InvariantCulture, "{0}_{1}", "tenant", "slug-name");
            var    surveyRow      = new SurveyRow {
                RowKey = expectedRowKey
            };
            var mockSurveyTable = new Mock <IAzureTable <SurveyRow> >();

            mockSurveyTable.Setup(t => t.GetByRowKeyAsync(expectedRowKey)).ReturnsAsync(new[] { surveyRow });
            var mockQuestionTable = new Mock <IAzureTable <QuestionRow> >();

            mockQuestionTable.Setup(t => t.GetByPartitionKeyAsync(expectedRowKey)).ReturnsAsync(new QuestionRow[] { });
            var store = new SurveyStore(mockSurveyTable.Object, mockQuestionTable.Object, new Mock <IInitializationStatusService>().Object);

            await store.DeleteSurveyByTenantAndSlugNameAsync("tenant", "slug-name");

            mockSurveyTable.Verify(t => t.DeleteAsync(It.Is <SurveyRow>(s => s.RowKey == expectedRowKey)));
        }