public async Task GetSurveyAsync_Returns_Survey_Questions()
        {
            // 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,
                    Questions = new List <Question>
                    {
                        new Question {
                            SurveyId = 1
                        }
                    }
                };
                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.Questions);
                Assert.NotEmpty(result.Questions);
            }
        }
        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));
            }
        }
        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 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);
            }
        }