// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. namespace ProductivityApiUnitTests { using System; using System.Data.Common; using System.Data.Entity; using System.Data.Entity.Internal; using System.Data.Entity.Resources; using System.Threading; using System.Threading.Tasks; using Moq; using Xunit; public class DatabaseTests : TestBase { public class Exists { [Fact] public void With_null_nameOrConnectionString_throws() { Assert.Equal( Strings.ArgumentIsNullOrWhitespace("nameOrConnectionString"), Assert.Throws(() => Database.Exists((string)null)).Message); } [Fact] public void With_empty_nameOrConnectionString_throws() { Assert.Equal( Strings.ArgumentIsNullOrWhitespace("nameOrConnectionString"), Assert.Throws(() => Database.Exists("")).Message); } [Fact] public void With_whitespace_nameOrConnectionString_throws() { Assert.Equal( Strings.ArgumentIsNullOrWhitespace("nameOrConnectionString"), Assert.Throws(() => Database.Exists(" ")).Message); } [Fact] public void With_null_existingConnection_throws() { Assert.Equal( "existingConnection", Assert.Throws(() => Database.Exists((DbConnection)null)).ParamName); } } public class Delete { [Fact] public void With_null_nameOrConnectionString_throws() { Assert.Equal( Strings.ArgumentIsNullOrWhitespace("nameOrConnectionString"), Assert.Throws(() => Database.Delete((string)null)).Message); } [Fact] public void With_empty_nameOrConnectionString_throws() { Assert.Equal( Strings.ArgumentIsNullOrWhitespace("nameOrConnectionString"), Assert.Throws(() => Database.Delete("")).Message); } [Fact] public void With_whitespace_nameOrConnectionString_throws() { Assert.Equal( Strings.ArgumentIsNullOrWhitespace("nameOrConnectionString"), Assert.Throws(() => Database.Delete(" ")).Message); } [Fact] public void With_null_existingConnection_throws() { Assert.Equal( "existingConnection", Assert.Throws(() => Database.Delete((DbConnection)null)).ParamName); } } public class ExecuteSqlCommand { [Fact] public void With_null_SQL_throws() { var database = new Database(new Mock().Object); Assert.Equal( Strings.ArgumentIsNullOrWhitespace("sql"), Assert.Throws(() => database.ExecuteSqlCommand(null)).Message); } [Fact] public void With_empty_SQL_throws() { var database = new Database(new Mock().Object); Assert.Equal( Strings.ArgumentIsNullOrWhitespace("sql"), Assert.Throws(() => database.ExecuteSqlCommand("")).Message); } [Fact] public void With_whitespace_SQL_throws() { var database = new Database(new Mock().Object); Assert.Equal( Strings.ArgumentIsNullOrWhitespace("sql"), Assert.Throws(() => database.ExecuteSqlCommand(" ")).Message); } [Fact] public void With_null_parameters_throws() { var database = new Database(new Mock().Object); Assert.Equal("parameters", Assert.Throws(() => database.ExecuteSqlCommand("query", null)).ParamName); } [Fact] public void With_valid_arguments_doesnt_throw() { var internalContextMock = new Mock(); var database = new Database(internalContextMock.Object); Assert.NotNull(database.ExecuteSqlCommand("query")); internalContextMock.Verify(m => m.ExecuteSqlCommand("query", new object[0]), Times.Once()); } } #if !NET40 public class ExecuteSqlCommandAsync { [Fact] public void With_null_SQL_throws() { var database = new Database(new Mock().Object); Assert.Equal( Strings.ArgumentIsNullOrWhitespace("sql"), Assert.Throws(() => database.ExecuteSqlCommandAsync(null).Result).Message); } [Fact] public void With_empty_SQL_throws() { var database = new Database(new Mock().Object); Assert.Equal( Strings.ArgumentIsNullOrWhitespace("sql"), Assert.Throws(() => database.ExecuteSqlCommandAsync("").Result).Message); } [Fact] public void With_whitespace_SQL_throws() { var database = new Database(new Mock().Object); Assert.Equal( Strings.ArgumentIsNullOrWhitespace("sql"), Assert.Throws(() => database.ExecuteSqlCommandAsync(" ").Result).Message); } [Fact] public void With_null_parameters_throws() { var database = new Database(new Mock().Object); Assert.Equal( "parameters", Assert.Throws(() => database.ExecuteSqlCommandAsync("query", null).Result).ParamName); } [Fact] public void With_valid_arguments_doesnt_throw() { var internalContextMock = new Mock(); internalContextMock.Setup( m => m.ExecuteSqlCommandAsync(It.IsAny(), It.IsAny(), It.IsAny())) .Returns(Task.FromResult(1)); var database = new Database(internalContextMock.Object); Assert.NotNull(database.ExecuteSqlCommandAsync("query").Result); internalContextMock.Verify( m => m.ExecuteSqlCommandAsync("query", CancellationToken.None, It.IsAny()), Times.Once()); } } #endif public class SqlQuery_Generic { [Fact] public void With_null_SQL_throws() { var database = new Database(new Mock().Object); Assert.Equal( Strings.ArgumentIsNullOrWhitespace("sql"), Assert.Throws(() => database.SqlQuery(null)).Message); } [Fact] public void With_empty_SQL_throws() { var database = new Database(new Mock().Object); Assert.Equal( Strings.ArgumentIsNullOrWhitespace("sql"), Assert.Throws(() => database.SqlQuery("")).Message); } [Fact] public void With_whitespace_SQL_throws() { var database = new Database(new Mock().Object); Assert.Equal( Strings.ArgumentIsNullOrWhitespace("sql"), Assert.Throws(() => database.SqlQuery(" ")).Message); } [Fact] public void With_null_parameters_throws() { var database = new Database(new Mock().Object); Assert.Equal( "parameters", Assert.Throws(() => database.SqlQuery("query", null)).ParamName); } [Fact] public void With_valid_arguments_doesnt_throw() { var database = new Database(new Mock().Object); var query = database.SqlQuery("query"); Assert.NotNull(query); Assert.False(query.InternalQuery.Streaming); } } public class SqlQuery_NonGeneric { [Fact] public void With_null_SQL_throws() { var database = new Database(new Mock().Object); Assert.Equal( Strings.ArgumentIsNullOrWhitespace("sql"), Assert.Throws(() => database.SqlQuery(typeof(Random), null)).Message); } [Fact] public void With_empty_SQL_throws() { var database = new Database(new Mock().Object); Assert.Equal( Strings.ArgumentIsNullOrWhitespace("sql"), Assert.Throws(() => database.SqlQuery(typeof(Random), "")).Message); } [Fact] public void With_whitespace_SQL_throws() { var database = new Database(new Mock().Object); Assert.Equal( Strings.ArgumentIsNullOrWhitespace("sql"), Assert.Throws(() => database.SqlQuery(typeof(Random), " ")).Message); } [Fact] public void With_null_parameters_throws() { var database = new Database(new Mock().Object); Assert.Equal( "parameters", Assert.Throws(() => database.SqlQuery(typeof(Random), "query", null)).ParamName); } [Fact] public void With_null_type_throws() { var database = new Database(new Mock().Object); Assert.Equal( "elementType", Assert.Throws(() => database.SqlQuery(null, "query")).ParamName); } [Fact] public void With_valid_arguments_dont_throw() { var database = new Database(new Mock().Object); var query = database.SqlQuery(typeof(Random), "query"); Assert.NotNull(query); Assert.False(query.InternalQuery.Streaming); } } } }