public async Task BeginConversationTimerAsync_ArgumentsCannotBeNull()
        {
            // Arrange
            var provider = new SqlServerServiceBroker(connection);

            // Act
            Func<Task> call = async () => await provider.BeginConversationTimerAsync(null);

            // Assert
            await Assert.ThrowsAsync<ArgumentNullException>("arguments", call);
        }
        public async Task BeginConversationTimerAsync_Succeeds()
        {
            // Arrange
            await InitializeDatabaseAsync();
            var handle = await BeginDialogAsync();
            var provider = new SqlServerServiceBroker(connection);
            var arguments = new BeginConversationTimerArguments(handle, 600);

            // Act
            await provider.BeginConversationTimerAsync(arguments);
            var sql = @"SELECT * FROM sys.conversation_endpoints WHERE conversation_handle = @handle";
            var results = await connection.QueryAsync(sql, new { handle });
            var scheduledTime = (DateTime)results.Single().dialog_timer;

            // Assert
            Assert.True(scheduledTime > DateTime.Now);
        }
        public async Task BeginConversationTimerAsync_UsesTransaction()
        {
            // Arrange
            await InitializeDatabaseAsync();
            var handle = await BeginDialogAsync();
            var provider = new SqlServerServiceBroker(connection);
            var arguments = new BeginConversationTimerArguments(handle, 600);

            // Act
            using (var transaction = await provider.BeginTransactionAsync())
            {
                await provider.BeginConversationTimerAsync(arguments);
                transaction.Rollback();
            }

            var sql = @"SELECT * FROM sys.conversation_endpoints WHERE conversation_handle = @handle";
            var results = await connection.QueryAsync(sql, new { handle });
            var scheduledTime = (DateTime)results.Single().dialog_timer;

            // Assert
            Assert.Equal(1900, scheduledTime.Year);
        }