public async Task WhenChannelsDoNotExist_ItShouldReturnTheResult()
        {
            await this.DatabaseTestAsync(async testDatabase =>
            {
                this.target = new GetLandingPageDbStatement(testDatabase);

                await this.CreateDataAsync(testDatabase, true, false);
                await testDatabase.TakeSnapshotAsync();

                var result = await this.target.ExecuteAsync(Username);

                Assert.AreEqual(CreatorId, result.UserId);
                Assert.AreEqual(ProfileFileId, result.ProfileImageFileId);

                Assert.AreEqual(BlogId, result.Blog.BlogId);
                Assert.AreEqual(CreatorId, result.Blog.CreatorId);
                Assert.AreEqual(HeaderFileId, result.Blog.HeaderImageFileId);
                Assert.AreEqual(CreationDate, result.Blog.CreationDate);
                Assert.AreEqual(Description, result.Blog.Description.Value);
                Assert.AreEqual(ExternalVideoUrl, result.Blog.Video.Value);
                Assert.AreEqual(Introduction, result.Blog.Introduction.Value);
                Assert.AreEqual(Name, result.Blog.BlogName.Value);

                Assert.IsNotNull(result.Channels);
                Assert.AreEqual(0, result.Channels.Count);

                return(ExpectedSideEffects.None);
            });
        }
        public async Task WhenBlogDoesNotExist_ItShouldReturnNull()
        {
            await this.DatabaseTestAsync(async testDatabase =>
            {
                this.target = new GetLandingPageDbStatement(testDatabase);

                await this.CreateDataAsync(testDatabase, false);
                await testDatabase.TakeSnapshotAsync();

                var result = await this.target.ExecuteAsync(Username);

                Assert.IsNull(result);

                return(ExpectedSideEffects.None);
            });
        }
        public async Task WhenGettingBlog_ItShouldBeIdempotent()
        {
            await this.DatabaseTestAsync(async testDatabase =>
            {
                this.target = new GetLandingPageDbStatement(testDatabase);

                await this.CreateDataAsync(testDatabase);

                await this.target.ExecuteAsync(Username);
                await testDatabase.TakeSnapshotAsync();

                await this.target.ExecuteAsync(Username);

                return(ExpectedSideEffects.None);
            });
        }
        public async Task WhenGettingBlog_ItShouldReturnTheResult()
        {
            await this.DatabaseTestAsync(async testDatabase =>
            {
                this.target = new GetLandingPageDbStatement(testDatabase);

                await this.CreateDataAsync(testDatabase);
                await testDatabase.TakeSnapshotAsync();

                var result = await this.target.ExecuteAsync(Username);

                Assert.AreEqual(CreatorId, result.UserId);
                Assert.AreEqual(ProfileFileId, result.ProfileImageFileId);

                Assert.AreEqual(BlogId, result.Blog.BlogId);
                Assert.AreEqual(CreatorId, result.Blog.CreatorId);
                Assert.AreEqual(HeaderFileId, result.Blog.HeaderImageFileId);
                Assert.AreEqual(CreationDate, result.Blog.CreationDate);
                Assert.AreEqual(Description, result.Blog.Description.Value);
                Assert.AreEqual(ExternalVideoUrl, result.Blog.Video.Value);
                Assert.AreEqual(Introduction, result.Blog.Introduction.Value);
                Assert.AreEqual(Name, result.Blog.BlogName.Value);

                Assert.IsNotNull(result.Channels);
                Assert.AreEqual(3, result.Channels.Count);

                Assert.IsNotNull(result.Channels.FirstOrDefault(v => v.ChannelId.Equals(ChannelId1)));
                Assert.IsNotNull(result.Channels.FirstOrDefault(v => v.ChannelId.Equals(ChannelId2)));
                Assert.IsNotNull(result.Channels.FirstOrDefault(v => v.ChannelId.Equals(ChannelId3)));

                foreach (var channel in result.Channels)
                {
                    Assert.AreEqual(IsVisibleToNonSubscribers, channel.IsVisibleToNonSubscribers);
                    Assert.AreEqual(Name, channel.Name);
                    Assert.AreEqual(Price, channel.Price);
                }

                return(ExpectedSideEffects.None);
            });
        }
 public void TestInitialize()
 {
     this.target = new GetLandingPageDbStatement(new Mock <IFifthweekDbConnectionFactory>(MockBehavior.Strict).Object);
 }