Ejemplo n.º 1
0
        public async Task ItShouldRequestSnapshotAfterUpdate()
        {
            await this.DatabaseTestAsync(async testDatabase =>
            {
                var trackingDatabase = new TrackingConnectionFactory(testDatabase);
                this.target          = new UpdateFreeAccessUsersDbStatement(trackingDatabase, this.requestSnapshot);

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

                this.requestSnapshot.VerifyConnectionDisposed(trackingDatabase);

                await this.target.ExecuteAsync(CreatorId, BlogId, null);

                this.requestSnapshot.VerifyCalledWith(CreatorId, SnapshotType.CreatorFreeAccessUsers);

                return(new ExpectedSideEffects
                {
                    Deletes = new List <FreeAccessUser>
                    {
                        new FreeAccessUser {
                            BlogId = BlogId.Value, Email = "*****@*****.**"
                        },
                        new FreeAccessUser {
                            BlogId = BlogId.Value, Email = "*****@*****.**"
                        },
                        new FreeAccessUser {
                            BlogId = BlogId.Value, Email = "*****@*****.**"
                        },
                    },
                });
            });
        }
Ejemplo n.º 2
0
        public async Task ItShouldBeIdempotent()
        {
            await this.DatabaseTestAsync(async testDatabase =>
            {
                this.target = new UpdateFreeAccessUsersDbStatement(testDatabase, this.requestSnapshot);

                await this.CreateDataAsync(testDatabase, true);

                await this.target.ExecuteAsync(
                    CreatorId,
                    BlogId,
                    new List <ValidEmail>
                {
                    ValidEmail.Parse("*****@*****.**"),
                    ValidEmail.Parse("*****@*****.**"),
                    ValidEmail.Parse("*****@*****.**")
                });

                await testDatabase.TakeSnapshotAsync();

                await this.target.ExecuteAsync(
                    CreatorId,
                    BlogId,
                    new List <ValidEmail>
                {
                    ValidEmail.Parse("*****@*****.**"),
                    ValidEmail.Parse("*****@*****.**"),
                    ValidEmail.Parse("*****@*****.**")
                });

                return(ExpectedSideEffects.None);
            });
        }
Ejemplo n.º 3
0
        public async Task WhenNewEmailListIsNull_ItShouldDeleteAllEmailsForBlog()
        {
            await this.DatabaseTestAsync(async testDatabase =>
            {
                this.target = new UpdateFreeAccessUsersDbStatement(testDatabase, this.requestSnapshot);

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

                await this.target.ExecuteAsync(CreatorId, BlogId, null);

                return(new ExpectedSideEffects
                {
                    Deletes = new List <FreeAccessUser>
                    {
                        new FreeAccessUser {
                            BlogId = BlogId.Value, Email = "*****@*****.**"
                        },
                        new FreeAccessUser {
                            BlogId = BlogId.Value, Email = "*****@*****.**"
                        },
                        new FreeAccessUser {
                            BlogId = BlogId.Value, Email = "*****@*****.**"
                        },
                    },
                });
            });
        }
Ejemplo n.º 4
0
        public async Task WhenNewEmailList_AndEmailsForBlogIsEmpty_ItShouldModifyEmailsForBlog()
        {
            await this.DatabaseTestAsync(async testDatabase =>
            {
                this.target = new UpdateFreeAccessUsersDbStatement(testDatabase, this.requestSnapshot);

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

                await this.target.ExecuteAsync(
                    CreatorId,
                    BlogId,
                    new List <ValidEmail>
                {
                    ValidEmail.Parse("*****@*****.**"),
                    ValidEmail.Parse("*****@*****.**")
                });

                return(new ExpectedSideEffects
                {
                    Inserts = new List <FreeAccessUser>
                    {
                        new FreeAccessUser {
                            BlogId = BlogId.Value, Email = "*****@*****.**"
                        },
                        new FreeAccessUser {
                            BlogId = BlogId.Value, Email = "*****@*****.**"
                        },
                    },
                });
            });
        }
Ejemplo n.º 5
0
        public async Task WhenNewEmailListIsEmpty_AndEmailsForBlogIsEmpty_ItShouldNotAddEmailsForBlog()
        {
            await this.DatabaseTestAsync(async testDatabase =>
            {
                this.target = new UpdateFreeAccessUsersDbStatement(testDatabase, this.requestSnapshot);

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

                await this.target.ExecuteAsync(CreatorId, BlogId, new List <ValidEmail>());

                return(ExpectedSideEffects.None);
            });
        }
Ejemplo n.º 6
0
        public async Task ItShouldNotUpdateIfSnapshotFails()
        {
            await this.DatabaseTestAsync(async testDatabase =>
            {
                this.target = new UpdateFreeAccessUsersDbStatement(testDatabase, this.requestSnapshot);

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

                this.requestSnapshot.ThrowException();

                await ExpectedException.AssertExceptionAsync <SnapshotException>(
                    () => this.target.ExecuteAsync(CreatorId, BlogId, null));

                return(ExpectedSideEffects.TransactionAborted);
            });
        }
Ejemplo n.º 7
0
        public async Task WhenNewEmailListIsSame_AndOrderIsDifferent_ItShouldNotModifyEmailsForBlog()
        {
            await this.DatabaseTestAsync(async testDatabase =>
            {
                this.target = new UpdateFreeAccessUsersDbStatement(testDatabase, this.requestSnapshot);

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

                await this.target.ExecuteAsync(
                    CreatorId,
                    BlogId,
                    new List <ValidEmail>
                {
                    ValidEmail.Parse("*****@*****.**"),
                    ValidEmail.Parse("*****@*****.**"),
                    ValidEmail.Parse("*****@*****.**"),
                });

                return(ExpectedSideEffects.None);
            });
        }
Ejemplo n.º 8
0
 public void TestInitialize()
 {
     this.requestSnapshot = new MockRequestSnapshotService();
     this.target          = new UpdateFreeAccessUsersDbStatement(new Mock <IFifthweekDbConnectionFactory>(MockBehavior.Strict).Object, this.requestSnapshot);
 }