public void SetUp()
        {
            databaseConnectionSettingsServiceMock = Substitute.For <IDatabaseConnectionSettingsService>();
            databaseConnectionSettingsServiceMock.GetConnectionString().Returns("connectionString");
            databaseConnectionSettingsServiceMock.GetCommandTimeout().Returns(42);

            databaseConnectionServiceMock        = Substitute.For <IDatabaseConnectionService>();
            databaseConnectionServiceFactoryMock = Substitute.For <IDatabaseConnectionServiceFactory>();
            databaseConnectionServiceFactoryMock
            .Create(loggingServiceMock, "connectionString", 42).Returns(databaseConnectionServiceMock);

            loggingServiceMock = Substitute.For <ILoggingService>();

            errorMessageServiceMock = Substitute.For <IErrorMessageService>();

            systemUnderTest = NewFileDownloadDatabaseProvider(databaseConnectionSettingsServiceMock,
                                                              databaseConnectionServiceFactoryMock, loggingServiceMock);

            DatabaseProviderTestingHelper.SetUpDatabaseConnectionServiceReturns(databaseConnectionServiceMock);

            dbDataReaderMock = Substitute.For <DbDataReader>();
            dbDataReaderMock.Read().Returns(true, true, true, false);
            dbDataReaderMock.GetInt32(0).Returns(100, 200, 300);

            databaseConnectionServiceMock
            .ExecuteReader("SELECT DownloadId FROM [FoldingCoin].[DownloadsReadyForUpload]")
            .Returns(dbDataReaderMock);
        }
        public void SetUp()
        {
            errorMessageServiceMock = Substitute.For <IErrorMessageService>();

            systemUnderTest = NewStatsDownloadDatabaseParameterProvider(errorMessageServiceMock);

            databaseConnectionServiceMock = Substitute.For <IDatabaseConnectionService>();
            DatabaseProviderTestingHelper.SetUpDatabaseConnectionServiceReturns(databaseConnectionServiceMock);
        }
        public void SetUp()
        {
            databaseConnectionServiceMock = Substitute.For <IDatabaseConnectionService>();

            statsDownloadDatabaseServiceMock = Substitute.For <IStatsDownloadDatabaseService>();
            statsDownloadDatabaseServiceMock.When(service =>
                                                  service.CreateDatabaseConnectionAndExecuteAction(
                                                      Arg.Any <Action <IDatabaseConnectionService> >())).Do(callInfo =>
            {
                var service = callInfo.Arg <Action <IDatabaseConnectionService> >();

                service.Invoke(databaseConnectionServiceMock);
            });

            statsDownloadDatabaseParameterServiceMock = Substitute.For <IStatsDownloadDatabaseParameterService>();

            loggingServiceMock = Substitute.For <ILoggingService>();

            systemUnderTest = NewFileDownloadDatabaseProvider(statsDownloadDatabaseServiceMock,
                                                              statsDownloadDatabaseParameterServiceMock, loggingServiceMock);

            DatabaseProviderTestingHelper.SetUpDatabaseConnectionServiceReturns(databaseConnectionServiceMock);

            filePayload = new FilePayload
            {
                DownloadId            = 100,
                UploadPath            = "UploadPath",
                DownloadFileName      = "DownloadFileName",
                DownloadFileExtension = "DownloadFileExtension",
                FileUtcDateTime       = DateTime.Today
            };

            fileDownloadResult = new FileDownloadResult(filePayload);

            dbDataReaderMock = Substitute.For <DbDataReader>();
            dbDataReaderMock.Read().Returns(true, true, true, false);
            dbDataReaderMock.GetInt32(0).Returns(100, 200, 300);

            databaseConnectionServiceMock
            .ExecuteReader("SELECT DownloadId FROM [FoldingCoin].[DownloadsReadyForUpload]")
            .Returns(dbDataReaderMock);

            downloadIdParameterMock = Substitute.For <DbParameter>();
            downloadIdParameterMock.Value.Returns(100);
            statsDownloadDatabaseParameterServiceMock.CreateDownloadIdParameter(databaseConnectionServiceMock, 100)
            .Returns(downloadIdParameterMock);
            statsDownloadDatabaseParameterServiceMock.CreateDownloadIdParameter(databaseConnectionServiceMock)
            .Returns(downloadIdParameterMock);
            statsDownloadDatabaseParameterServiceMock
            .CreateDownloadIdParameter(databaseConnectionServiceMock, ParameterDirection.Output)
            .Returns(downloadIdParameterMock);

            errorMessageParameterMock = Substitute.For <DbParameter>();
        }
        public void SetUp()
        {
            databaseConnectionServiceMock = Substitute.For <IDatabaseConnectionService>();

            statsDownloadDatabaseServiceMock = Substitute.For <IStatsDownloadDatabaseService>();
            statsDownloadDatabaseServiceMock.When(service =>
                                                  service.CreateDatabaseConnectionAndExecuteAction(
                                                      Arg.Any <Action <IDatabaseConnectionService> >())).Do(callInfo =>
            {
                var service = callInfo.Arg <Action <IDatabaseConnectionService> >();

                service.Invoke(databaseConnectionServiceMock);
            });

            statsDownloadDatabaseParameterServiceMock = Substitute.For <IStatsDownloadDatabaseParameterService>();

            loggingServiceMock = Substitute.For <ILoggingService>();

            errorMessageServiceMock = Substitute.For <IErrorMessageService>();

            systemUnderTest = NewStatsUploadDatabaseProvider(statsDownloadDatabaseServiceMock,
                                                             statsDownloadDatabaseParameterServiceMock, loggingServiceMock, errorMessageServiceMock);

            DatabaseProviderTestingHelper.SetUpDatabaseConnectionServiceReturns(databaseConnectionServiceMock);

            dbDataReaderMock = Substitute.For <DbDataReader>();
            dbDataReaderMock.Read().Returns(true, true, true, false);
            dbDataReaderMock.GetInt32(0).Returns(100, 200, 300);

            databaseConnectionServiceMock
            .ExecuteReader("SELECT DownloadId FROM [FoldingCoin].[DownloadsReadyForUpload]")
            .Returns(dbDataReaderMock);

            downloadIdParameterMock = Substitute.For <DbParameter>();
            statsDownloadDatabaseParameterServiceMock.CreateDownloadIdParameter(databaseConnectionServiceMock, 100)
            .Returns(downloadIdParameterMock);
            statsDownloadDatabaseParameterServiceMock.CreateDownloadIdParameter(databaseConnectionServiceMock, 200)
            .Returns(downloadIdParameterMock);
            statsDownloadDatabaseParameterServiceMock.CreateDownloadIdParameter(databaseConnectionServiceMock, 300)
            .Returns(downloadIdParameterMock);
            statsDownloadDatabaseParameterServiceMock.CreateDownloadIdParameter(databaseConnectionServiceMock)
            .Returns(downloadIdParameterMock);

            errorMessageParameterMock    = Substitute.For <DbParameter>();
            rejectionReasonParameterMock = Substitute.For <DbParameter>();
            statsDownloadDatabaseParameterServiceMock.CreateRejectionReasonParameter(databaseConnectionServiceMock)
            .Returns(rejectionReasonParameterMock);
        }
        public void AddUsers_WhenAddUserDataFails_AddsFailedUserToFailedList()
        {
            var dbParameter = Substitute.For <DbParameter>();

            dbParameter.Value.Returns(1);

            databaseConnectionServiceMock.ClearSubstitute();
            var command = Substitute.For <DbCommand>();

            command.Parameters.Returns(Substitute.For <DbParameterCollection>());
            databaseConnectionServiceMock.CreateDbCommand().Returns(command);

            DatabaseProviderTestingHelper.SetUpDatabaseConnectionServiceReturns(databaseConnectionServiceMock,
                                                                                ParameterDirection.Input);

            databaseConnectionServiceMock.CreateParameter("@ReturnValue", DbType.Int32, ParameterDirection.ReturnValue)
            .Returns(dbParameter);

            var user1 = new UserData(999, "name", 10, 100, 1000)
            {
                BitcoinAddress = "address", FriendlyName = "friendly"
            };
            var user2 = new UserData(900, "name", 10, 100, 1000)
            {
                BitcoinAddress = "address", FriendlyName = "friendly"
            };
            IList <FailedUserData> failedUsers = new List <FailedUserData>();

            systemUnderTest.AddUsers(null, 100, new List <UserData> {
                user1, user2
            }, failedUsers);

            Assert.That(failedUsers.Count, Is.EqualTo(2));

            Assert.That(failedUsers[0].RejectionReason, Is.EqualTo(RejectionReason.FailedAddToDatabase));
            Assert.That(failedUsers[0].UserData, Is.EqualTo(user1));
            Assert.That(failedUsers[0].LineNumber, Is.EqualTo(999));

            Assert.That(failedUsers[1].RejectionReason, Is.EqualTo(RejectionReason.FailedAddToDatabase));
            Assert.That(failedUsers[1].UserData, Is.EqualTo(user2));
            Assert.That(failedUsers[1].LineNumber, Is.EqualTo(900));
        }