public async Task WhenCreatorExists_ShouldCreateSnapshot()
        {
            await this.DatabaseTestAsync(async testDatabase =>
            {
                this.guidCreator.Setup(v => v.CreateSqlSequential()).Returns(SnapshotId);
                this.timestampCreator.Setup(v => v.Create()).Returns(Now);

                this.target = new CreateCreatorChannelsSnapshotDbStatement(
                    this.guidCreator.Object,
                    this.timestampCreator.Object,
                    testDatabase);

                var channels = await this.CreateDataAsync(testDatabase);
                await testDatabase.TakeSnapshotAsync();

                await this.target.ExecuteAsync(CreatorId);

                var expectedCreatorChannelSnapshot = new CreatorChannelsSnapshot(SnapshotId, Now, CreatorId.Value);
                var expectedCreatorChannelItem1    = new CreatorChannelsSnapshotItem(SnapshotId, null, ChannelId1.Value, channels[0].Price);
                var expectedCreatorChannelItem2    = new CreatorChannelsSnapshotItem(SnapshotId, null, ChannelId2.Value, channels[1].Price);

                return(new ExpectedSideEffects
                {
                    Inserts = new List <IIdentityEquatable>
                    {
                        expectedCreatorChannelSnapshot,
                        expectedCreatorChannelItem1,
                        expectedCreatorChannelItem2,
                    }
                });
            });
        }
        public async Task WhenCreatorDoesNotExist_ShouldCreateEmptySnapshot()
        {
            await this.DatabaseTestAsync(async testDatabase =>
            {
                this.guidCreator.Setup(v => v.CreateSqlSequential()).Returns(SnapshotId);
                this.timestampCreator.Setup(v => v.Create()).Returns(Now);

                this.target = new CreateCreatorChannelsSnapshotDbStatement(
                    this.guidCreator.Object,
                    this.timestampCreator.Object,
                    testDatabase);

                var channels = await this.CreateDataAsync(testDatabase);
                await testDatabase.TakeSnapshotAsync();

                var creatorId = UserId.Random();
                await this.target.ExecuteAsync(creatorId);

                var expectedCreatorChannelSnapshot = new CreatorChannelsSnapshot(SnapshotId, Now, creatorId.Value);

                return(new ExpectedSideEffects
                {
                    Inserts = new List <IIdentityEquatable>
                    {
                        expectedCreatorChannelSnapshot,
                    }
                });
            });
        }
        public void Initialize()
        {
            this.guidCreator      = new Mock <IGuidCreator>();
            this.timestampCreator = new Mock <ISnapshotTimestampCreator>();

            this.target = new CreateCreatorChannelsSnapshotDbStatement(
                this.guidCreator.Object,
                this.timestampCreator.Object,
                new Mock <IFifthweekDbConnectionFactory>(MockBehavior.Strict).Object);
        }