public async Task Validate_FileNotExists_ReturnErrorCode()
        {
            // Arrange
            var blobStorageProviderMoq = new Mock <IBlobStorageProvider>();

            blobStorageProviderMoq.Setup(x => x.GetBlobInfoAsync(It.IsAny <string>()))
            .ReturnsAsync((BlobInfo)null);

            var settingsManagerMoq = TestHelper.GetSettingsManagerMoq();

            var validator = new CsvPriceDataValidator(blobStorageProviderMoq.Object, settingsManagerMoq.Object, new ImportConfigurationFactory());

            // Act
            var result = await validator.ValidateAsync("file url");

            // Assert
            Assert.Single(result.Errors);
            Assert.True(result.Errors[0].ErrorCode == ModuleConstants.ValidationErrors.FileNotExisted);
        }
        public async Task Validate_FileWithoutError_ReturnEmptyErrors()
        {
            // Arrange
            var blobStorageProviderMoq = GetBlobStorageProviderMoq();

            var stream = TestHelper.GetStream(CsvFileContentWithoutError);

            blobStorageProviderMoq.Setup(x => x.OpenRead(It.IsAny <string>()))
            .Returns(stream);

            var settingsManagerMoq = TestHelper.GetSettingsManagerMoq();

            var validator = new CsvPriceDataValidator(blobStorageProviderMoq.Object, settingsManagerMoq.Object, new ImportConfigurationFactory());

            // Act
            var result = await validator.ValidateAsync("file url");

            // Assert
            Assert.Empty(result.Errors);
        }
        public async Task Validate_NoData_ReturnErrorCode(string csv)
        {
            // Arrange
            var blobStorageProviderMoq = GetBlobStorageProviderMoq();

            var stream = TestHelper.GetStream(csv);

            blobStorageProviderMoq.Setup(x => x.OpenRead(It.IsAny <string>()))
            .Returns(stream);

            var settingsManagerMoq = TestHelper.GetSettingsManagerMoq();

            var validator = new CsvPriceDataValidator(blobStorageProviderMoq.Object, settingsManagerMoq.Object, new ImportConfigurationFactory());

            // Act
            var result = await validator.ValidateAsync("file url");

            // Assert
            Assert.Single(result.Errors);
            Assert.True(result.Errors[0].ErrorCode == ModuleConstants.ValidationErrors.NoData);
        }
        public async Task Validate_ExceedingLineLimits_ReturnErrorCode()
        {
            // Arrange
            var blobStorageProviderMoq = GetBlobStorageProviderMoq();

            var records = TestHelper.GetArrayOfSameRecords(CsvRecord, (int)ModuleConstants.Settings.General.ImportLimitOfLines.DefaultValue + 1);
            var stream  = TestHelper.GetStream(TestHelper.GetCsv(records, CsvHeader));

            blobStorageProviderMoq.Setup(x => x.OpenRead(It.IsAny <string>()))
            .Returns(stream);

            var settingsManagerMoq = TestHelper.GetSettingsManagerMoq();

            var validator = new CsvPriceDataValidator(blobStorageProviderMoq.Object, settingsManagerMoq.Object, new ImportConfigurationFactory());

            // Act
            var result = await validator.ValidateAsync("file url");

            // Assert
            Assert.Single(result.Errors);
            Assert.True(result.Errors[0].ErrorCode == ModuleConstants.ValidationErrors.ExceedingLineLimits);
        }
        public async Task Validate_FileWithLargeSize_ReturnErrorCode()
        {
            // Arrange
            var blobStorageProviderMoq = new Mock <IBlobStorageProvider>();

            var blobInfo = new BlobInfo()
            {
                Size = (int)ModuleConstants.Settings.General.ImportFileMaxSize.DefaultValue * ModuleConstants.MByte + 1
            };

            blobStorageProviderMoq.Setup(x => x.GetBlobInfoAsync(It.IsAny <string>()))
            .Returns(Task.FromResult(blobInfo));

            var settingsManagerMoq = TestHelper.GetSettingsManagerMoq();

            var validator = new CsvPriceDataValidator(blobStorageProviderMoq.Object, settingsManagerMoq.Object, new ImportConfigurationFactory());

            // Act
            var result = await validator.ValidateAsync("file url");

            // Assert
            Assert.Single(result.Errors);
            Assert.True(result.Errors[0].ErrorCode == ModuleConstants.ValidationErrors.ExceedingFileMaxSize);
        }