public async Task ExecuteActionAsync_GivenOpenConnection_ShouldNotCallCloseOnDbConnection() { //---------------Set up test pack------------------- var dataModel = new FakeTestDataModel { Id = Guid.NewGuid() }; var dbCommand = Substitute.For <IDbCommand>(); var dbConnection = Substitute.For <IDbConnection>(); dbConnection.State.Returns(ConnectionState.Open); dbConnection.CreateCommand().Returns(dbCommand); var databaseConnectionProvider = Substitute.For <IDatabaseConnectionProvider>(); databaseConnectionProvider.GetConnection(Arg.Any <string>()).Returns(dbConnection); var dbContext = CreateDatabaseContext(databaseConnectionProvider: databaseConnectionProvider); //---------------Assert Precondition---------------- //---------------Execute Test ---------------------- var _ = await dbContext.ExecuteActionAsync(DbContextAction.Create, dataModel); //---------------Test Result ----------------------- dbConnection.DidNotReceive().Close(); }
public async Task ExecuteActionAsync_GivenClosedConnection_ShouldCallOpenAndCloseOnDbConnection() { //---------------Set up test pack------------------- var dataModel = new FakeTestDataModel { Id = Guid.NewGuid() }; var dbConnectionState = ConnectionState.Closed; var dbConnection = Substitute.For <IDbConnection>(); dbConnection.State.Returns(info => dbConnectionState); dbConnection.When(connection => connection.Open()) .Do(info => dbConnectionState = ConnectionState.Open); var databaseConnectionProvider = Substitute.For <IDatabaseConnectionProvider>(); databaseConnectionProvider.GetConnection(Arg.Any <string>()).Returns(dbConnection); var dbContext = CreateDatabaseContext(databaseConnectionProvider: databaseConnectionProvider); //---------------Assert Precondition---------------- //---------------Execute Test ---------------------- var _ = await dbContext.ExecuteActionAsync(DbContextAction.Create, dataModel); //---------------Test Result ----------------------- dbConnection.Received(1).Open(); dbConnection.Received(1).Close(); }
public async Task ExecuteActionAsync_GivenRetrieveAction_And_NoData_ShouldMapReturnedEmptyList() { //---------------Set up test pack------------------- var dataModel = new FakeTestDataModel { Id = Guid.NewGuid() }; var dataReaderData = new List <FakeTestDataModel>(); var fakeDataReader = TestHelper.CreateSubstituteDataReader(dataReaderData); var dbCommand = Substitute.For <IDbCommand>(); dbCommand.ExecuteReader().Returns(fakeDataReader); var dbConnection = Substitute.For <IDbConnection>(); dbConnection.CreateCommand().Returns(dbCommand); var databaseConnectionProvider = Substitute.For <IDatabaseConnectionProvider>(); databaseConnectionProvider.GetConnection(Arg.Any <string>()).Returns(dbConnection); var dbContext = CreateDatabaseContext(databaseConnectionProvider: databaseConnectionProvider); //---------------Assert Precondition---------------- //---------------Execute Test ---------------------- var actionResult = await dbContext.ExecuteActionAsync(DbContextAction.Retrieve, dataModel); //---------------Test Result ----------------------- actionResult.ActionResult.Should().Be(DbContextActionResult.Success); actionResult.Results.Any().Should().BeFalse(); }
public void BuildInsertStatement_GivenNullDataModel_ShouldThrowArgumentNullException() { //---------------Set up test pack------------------- FakeTestDataModel dataModel = null; var buildProvider = CreateProvider(); //---------------Assert Precondition---------------- //---------------Execute Test ---------------------- // ReSharper disable once ExpressionIsAlwaysNull var exception = Assert.Throws <ArgumentNullException>(() => buildProvider.BuildInsertStatement(dataModel)); //---------------Test Result ----------------------- exception.ParamName.Should().Be("dataModel"); }
public async Task ExecuteActionAsync_GivenCreateAction_ShouldCallBuildInsertStatement() { //---------------Set up test pack------------------- var dataModel = new FakeTestDataModel(); var statementBuildProvider = Substitute.For <IStatementBuildProvider>(); var dbContext = CreateDatabaseContext(sqlStatementBuildProvider: statementBuildProvider); //---------------Assert Precondition---------------- //---------------Execute Test ---------------------- await dbContext.ExecuteActionAsync(DbContextAction.Create, dataModel); //---------------Test Result ----------------------- statementBuildProvider.Received(1).BuildInsertStatement(dataModel); }
public void BuildSelectStatement_GivenDataModel_ShouldBuildExpectedStatement() { //---------------Set up test pack------------------- FakeTestDataModel dataModel = new FakeTestDataModel { Id = Guid.NewGuid() }; var expectedStatement = $"SELECT [FakeTest].[Id], [FakeTest].[Name], [FakeTest].[Date], [FakeTest].[SomeFieldAlias] AS [SomeField] " + $"FROM [FakeTest] " + $"WHERE [FakeTest].[Id] = '{dataModel.Id}'"; var buildProvider = CreateProvider(); //---------------Assert Precondition---------------- //---------------Execute Test ---------------------- // ReSharper disable once ExpressionIsAlwaysNull var selectStatement = buildProvider.BuildSelectStatement(dataModel); //---------------Test Result ----------------------- selectStatement.Trim().Should().Be(expectedStatement); }
public void BuildInsertStatement_GivenDataModel_ShouldBuildExpectedStatement() { //---------------Set up test pack------------------- FakeTestDataModel dataModel = new FakeTestDataModel { Id = Guid.NewGuid(), Name = RandomValueGenerator.CreateRandomString(10, 20), Date = RandomValueGenerator.CreateRandomDate(), SomeField = RandomValueGenerator.CreateRandomString(15, 30) }; var expectedStatement = "INSERT INTO [FakeTest] ([Id],[Name],[Date],[SomeFieldAlias]) " + $"VALUES ('{dataModel.Id}','{dataModel.Name}','{dataModel.Date}','{dataModel.SomeField}')"; var buildProvider = CreateProvider(); //---------------Assert Precondition---------------- //---------------Execute Test ---------------------- // ReSharper disable once ExpressionIsAlwaysNull var insertStatement = buildProvider.BuildInsertStatement(dataModel); //---------------Test Result ----------------------- insertStatement.Trim().Should().Be(expectedStatement); }
public async Task ExecuteActionAsync_GivenRetrieveAction_ShouldCallExecuteReader() { //---------------Set up test pack------------------- var dataModel = new FakeTestDataModel { Id = Guid.NewGuid() }; var dbCommand = Substitute.For <IDbCommand>(); var dbConnection = Substitute.For <IDbConnection>(); dbConnection.CreateCommand().Returns(dbCommand); var databaseConnectionProvider = Substitute.For <IDatabaseConnectionProvider>(); databaseConnectionProvider.GetConnection(Arg.Any <string>()).Returns(dbConnection); var dbContext = CreateDatabaseContext(databaseConnectionProvider: databaseConnectionProvider); //---------------Assert Precondition---------------- //---------------Execute Test ---------------------- var actionResult = await dbContext.ExecuteActionAsync(DbContextAction.Retrieve, dataModel); //---------------Test Result ----------------------- dbCommand.Received(1).ExecuteReader(); }