public async Task GetSurveyAsync_Returns_Survey_Contributors()
        {
            // All contexts that share the same service provider will share the same InMemory database
            var options = CreateNewContextOptions();

            // Run the test against one instance of the context
            using (var context = new ApplicationDbContext(options))
            {
                var survey = new Survey
                {
                    Id = 1,
                    Contributors = new List<SurveyContributor>
                    {
                        new SurveyContributor { SurveyId = 1, UserId = 2 }
                    }
                };
                context.Add(survey);
                context.SaveChanges();
            }

            // Use a separate instance of the context to verify correct data was saved to database
            using (var context = new ApplicationDbContext(options))
            {
                var store = new SqlServerSurveyStore(context);
                var result = await store.GetSurveyAsync(1);

                Assert.NotNull(result.Contributors);
                Assert.NotEmpty(result.Contributors);
            }
        }
        public async Task GetSurveyAsync_Returns_CorrectSurvey()
        {
            // All contexts that share the same service provider will share the same InMemory database
            var options = CreateNewContextOptions();

            using (var context = new ApplicationDbContext(options))
            {
                context.Add(new Survey { Id = 1 });
                context.SaveChanges();
            }

            using (var context = new ApplicationDbContext(options))
            {
                var store = new SqlServerSurveyStore(context);
                var result = await store.GetSurveyAsync(1);
                Assert.Equal(1, result.Id);
            }
        }
        public async Task GetSurveysByContributorAsync_Returns_CorrectSurveys()
        {
            // All contexts that share the same service provider will share the same InMemory database
            var options = CreateNewContextOptions();

            // Run the test against one instance of the context
            using (var context = new ApplicationDbContext(options))
            {
                context.AddRange(
                    new SurveyContributor { SurveyId = 1, UserId = 10 },
                    new SurveyContributor { SurveyId = 2, UserId = 10 },
                    new SurveyContributor { SurveyId = 3, UserId = 20 }
                    );
                context.AddRange(
                    new Survey { Id = 1, OwnerId = 1 },
                    new Survey { Id = 2, OwnerId = 2 },
                    new Survey { Id = 3, OwnerId = 3 },
                    new Survey { Id = 4, OwnerId = 4 }
                    );

                context.SaveChanges();
            }

            // Use a separate instance of the context to verify correct data was saved to database
            using (var context = new ApplicationDbContext(options))
            {
                var store = new SqlServerSurveyStore(context);
                var result = await store.GetSurveysByContributorAsync(10);

                Assert.Equal(2, result.Count);
                Assert.Contains(result, s => s.Id == 1);
                Assert.Contains(result, s => s.Id == 2);
            }
        }
        public async Task GetPublishedSurveysAsync_Returns_CorrectSurveys()
        {
            // All contexts that share the same service provider will share the same InMemory database
            var options = CreateNewContextOptions();

            // Run the test against one instance of the context
            using (var context = new ApplicationDbContext(options))
            {
                context.AddRange(
                    new Survey { Id = 1, TenantId = 1 },
                    new Survey { Id = 2, TenantId = 1, Published = true },
                    new Survey { Id = 3, TenantId = 2 },
                    new Survey { Id = 4, TenantId = 2, Published = true }
                    );
                context.SaveChanges();
            }

            // Use a separate instance of the context to verify correct data was saved to database
            using (var context = new ApplicationDbContext(options))
            {
                var store = new SqlServerSurveyStore(context);
                var result = await store.GetPublishedSurveysAsync();

                Assert.Equal(2, result.Count);
                Assert.True(result.All(x => x.Published));
            }
        }
        public async Task GetSurveysByOwnerAsync_Returns_CorrectSurveys()
        {
            // All contexts that share the same service provider will share the same InMemory database
            var options = CreateNewContextOptions();

            // Run the test against one instance of the context
            using (var context = new ApplicationDbContext(options))
            {
                context.AddRange(
                    new Survey { Id = 1, OwnerId = 1 },
                    new Survey { Id = 2, OwnerId = 1 },
                    new Survey { Id = 3, OwnerId = 2 }
                    );
                context.SaveChanges();
            }

            // Use a separate instance of the context to verify correct data was saved to database
            using (var context = new ApplicationDbContext(options))
            {
                var store = new SqlServerSurveyStore(context);
                var result = await store.GetSurveysByOwnerAsync(1);

                Assert.NotEmpty(result);
                // Returned collection should only contain surveys with the matching owner ID.
                Assert.True(result.All(s => s.OwnerId == 1));
            }
        }