Esempio n. 1
0
        public async Task <ActionResult> BulkLoad()
        {
            var config = await _odsSecretConfigurationProvider.GetSecretConfiguration(_instanceContext.Id);

            if (config == null)
            {
                _logger.Error(_missingOdsSecretConfig);
                return(JsonError(_missingOdsSecretConfig));
            }
            var model = new OdsInstanceSettingsModel
            {
                OdsInstanceSettingsTabEnumerations =
                    _tabDisplayService.GetOdsInstanceSettingsTabDisplay(OdsInstanceSettingsTabEnumeration
                                                                        .BulkLoad),
                BulkFileUploadModel = new BulkFileUploadModel
                {
                    ApiKey              = config.BulkUploadCredential?.ApiKey ?? string.Empty,
                    ApiSecret           = config.BulkUploadCredential?.ApiSecret ?? string.Empty,
                    CloudOdsEnvironment = CloudOdsEnvironment.Production
                },
                OdsInstance = _instanceContext
            };

            return(View(model));
        }
Esempio n. 2
0
        public async Task <ActionResult> BulkFileUpload(OdsInstanceSettingsModel model)
        {
            var bulkFiles = model.BulkFileUploadModel.BulkFiles.Where(file => file != null && file.ContentLength > 0).ToArray();

            if (!bulkFiles.Any())
            {
                return(new HttpStatusCodeResult(HttpStatusCode.NoContent));
            }

            if (bulkFiles.Sum(f => f.ContentLength) > BulkFileUploadModel.MaxFileSize)
            {
                throw new Exception($"Upload exceeds maximum limit of {BulkFileUploadModel.MaxFileSize} bytes");
            }

            if (bulkFiles.Length > 1)
            {
                throw new Exception("Currently, the bulk import process only supports a single file at a time");
            }

            var uploadedFiles = _fileUploadHandler.SaveFilesToUploadDirectory(bulkFiles,
                                                                              fileName => InterchangeFileHelpers.BuildFileNameForImport(model.BulkFileUploadModel.BulkFileType, fileName));

            var connectionInformation = await GetConnectionInformationProvider();

            var config = await _odsSecretConfigurationProvider.GetSecretConfiguration(_instanceContext.Id);

            if (config == null)
            {
                throw new InvalidOperationException("ODS secret configuration can not be null.");
            }

            var schemaBasePath  = HostingEnvironment.MapPath(ConfigurationManager.AppSettings["XsdFolder"]);
            var standardVersion = _inferOdsApiVersion.EdFiStandardVersion(connectionInformation.ApiServerUrl);

            var jobContext = new BulkUploadJobContext
            {
                DataDirectoryFullPath = uploadedFiles.Directory,
                Environment           = CloudOdsEnvironment.Production.Value,
                OdsInstanceId         = _instanceContext.Id,
                OdsInstanceName       = _instanceContext.Name,
                ApiBaseUrl            = connectionInformation.ApiBaseUrl,
                OauthUrl        = connectionInformation.OAuthUrl,
                MetadataUrl     = connectionInformation.MetadataUrl,
                DependenciesUrl = connectionInformation.DependenciesUrl,
                ClientKey       = config.BulkUploadCredential?.ApiKey ?? string.Empty,
                ClientSecret    = config.BulkUploadCredential?.ApiSecret ?? string.Empty,
                SchemaPath      = $"{schemaBasePath}\\{standardVersion}"
            };

            if (!_bulkUploadJob.IsJobRunning())
            {
                _bulkUploadJob.EnqueueJob(jobContext);
            }

            var updatedValue = model;

            updatedValue.BulkFileUploadModel.IsJobRunning      = _bulkUploadJob.IsJobRunning();
            updatedValue.BulkFileUploadModel.IsSameOdsInstance = _bulkUploadJob.IsSameOdsInstance(_instanceContext.Id, typeof(BulkUploadJobContext));
            return(PartialView("_SignalRStatus_BulkLoad", updatedValue));
        }
Esempio n. 3
0
        public async Task <ActionResult> LearningStandards()
        {
            var odsApiFacade = await _odsApiFacadeFactory.Create(CloudOdsEnvironment.Production);

            var config = await _odsSecretConfigurationProvider.GetSecretConfiguration(_instanceContext.Id);

            if (config == null)
            {
                _logger.Error("ODS secret configuration is null.");
                throw new InvalidOperationException("ODS secret configuration can not be null.");
            }

            var model = new OdsInstanceSettingsModel
            {
                OdsInstanceSettingsTabEnumerations =
                    _tabDisplayService.GetOdsInstanceSettingsTabDisplay(OdsInstanceSettingsTabEnumeration
                                                                        .LearningStandards),
                LearningStandardsModel = new LearningStandardsModel
                {
                    ApiKey     = config.LearningStandardsCredential?.ApiKey ?? string.Empty,
                    ApiSecret  = config.LearningStandardsCredential?.ApiSecret ?? string.Empty,
                    HasApiData = odsApiFacade.DoesApiDataExist(),
                    SynchronizationWasSuccessful =
                        config.LearningStandardsCredential?.SynchronizationWasSuccessful ?? false,
                    IsJobRunning      = _learningStandardsJob.IsJobRunning(),
                    IsSameOdsInstance = _learningStandardsJob.IsSameOdsInstance(_instanceContext.Id, typeof(LearningStandardsJobContext)),
                    LastUpdatedDate   = config.LearningStandardsCredential?.LastUpdatedDate ?? DateTime.MinValue
                },
                OdsInstance = _instanceContext
            };

            return(View(model));
        }
        public void When_Perform_Post_Request_To_BulkFileUpload_With_Multiple_Files_ThrowsException()
        {
            // Arrange
            var file1 = new Mock <HttpPostedFileBase>();

            file1.Setup(x => x.ContentLength).Returns(200);
            var file2 = new Mock <HttpPostedFileBase>();

            file2.Setup(x => x.ContentLength).Returns(200);

            var model = new OdsInstanceSettingsModel
            {
                BulkFileUploadModel = new BulkFileUploadModel
                {
                    BulkFiles = new List <HttpPostedFileBase>
                    {
                        file1.Object, file2.Object
                    }
                }
            };

            // Assert
            Assert.ThrowsAsync <Exception>(() => SystemUnderTest.BulkFileUpload(model)).Message
            .Contains("Currently, the bulk import process only supports a single file at a time").ShouldBeTrue();
        }
Esempio n. 5
0
            protected override void AdditionalSetup()
            {
                _settingsModel = new OdsInstanceSettingsModel
                {
                    LearningStandardsModel = new LearningStandardsModel
                    {
                        ApiKey    = ApiKey,
                        ApiSecret = ApiSecret
                    }
                };

                ApiModeProvider
                .Setup(x => x.GetApiMode())
                .Returns(ApiMode.Sandbox);

                ApiConnectionInformationProvider
                .Setup(x => x.GetConnectionInformationForEnvironment(CloudOdsEnvironment.Production))
                .ReturnsAsync(new OdsApiConnectionInformation("Ods Instance", ApiMode.Sandbox)
                {
                    ApiServerUrl = ProductionUrl
                });

                LearningStandardsSetupCommand.Setup(x => x.Execute(It.IsAny <AcademicBenchmarkConfig>()))
                .Returns(Task.CompletedTask);

                LearningStandardsJob.Setup(x => x.EnqueueJob(It.IsAny <LearningStandardsJobContext>()));
            }
Esempio n. 6
0
        public ActionResult Setup(OdsInstanceSettingsModel model)
        {
            if (CloudOdsAdminAppSettings.Instance.SystemManagedSqlServer)
            {
                _productionSetupJob.EnqueueJob(1);
            }

            return(new HttpStatusCodeResult(200));
        }
Esempio n. 7
0
        public ActionResult Descriptors()
        {
            var model = new OdsInstanceSettingsModel
            {
                OdsInstanceSettingsTabEnumerations =
                    _tabDisplayService.GetOdsInstanceSettingsTabDisplay(OdsInstanceSettingsTabEnumeration.Descriptors),
                OdsInstance = _instanceContext
            };

            return(View(model));
        }
Esempio n. 8
0
        public ActionResult EducationOrganizations()
        {
            var model = new OdsInstanceSettingsModel
            {
                OdsInstanceSettingsTabEnumerations =
                    _tabDisplayService.GetOdsInstanceSettingsTabDisplay(OdsInstanceSettingsTabEnumeration
                                                                        .EducationOrganizations),
                OdsInstance = _instanceContext
            };

            return(View(model));
        }
Esempio n. 9
0
        public async Task <ActionResult> LearningStandards(OdsInstanceSettingsModel model)
        {
            await _learningStandardsSetupCommand.Execute(
                new AcademicBenchmarkConfig
            {
                ApiKey     = model.LearningStandardsModel.ApiKey,
                ApiSecret  = model.LearningStandardsModel.ApiSecret,
                OdsApiMode = CloudOdsAdminAppSettings.Instance.Mode
            });

            await RunLearningStandardsJob();

            return(new HttpStatusCodeResult(200));
        }
Esempio n. 10
0
        public async Task <ActionResult> Applications()
        {
            OdsInstanceSettingsModel model;

            model = new OdsInstanceSettingsModel
            {
                OdsInstanceSettingsTabEnumerations =
                    _tabDisplayService.GetOdsInstanceSettingsTabDisplay(OdsInstanceSettingsTabEnumeration.Applications),
                OdsInstance      = _instanceContext,
                ProductionApiUrl = (await GetConnectionInformationProvider()).ApiServerUrl
            };

            return(View("Index", model));
        }
Esempio n. 11
0
        OdsInstanceSettingsModel GetReportModel(int id)
        {
            var model = new OdsInstanceSettingsModel
            {
                ReportsModel = new ReportsModel
                {
                    LocalEducationAgencyId = id
                },
                OdsInstanceSettingsTabEnumerations =
                    _tabDisplayService.GetOdsInstanceSettingsTabDisplay(OdsInstanceSettingsTabEnumeration.Reports),
                OdsInstance = _instanceContext
            };

            return(model);
        }
Esempio n. 12
0
        public async Task <ActionResult> SaveBulkLoadCredentials(OdsInstanceSettingsModel model)
        {
            var config = await _odsSecretConfigurationProvider.GetSecretConfiguration(_instanceContext.Id);

            if (config == null)
            {
                return(JsonError(_missingOdsSecretConfig));
            }
            config.BulkUploadCredential = new BulkUploadCredential {
                ApiKey    = model.BulkFileUploadModel.ApiKey,
                ApiSecret = model.BulkFileUploadModel.ApiSecret
            };
            await _odsSecretConfigurationProvider.SetSecretConfiguration(config, _instanceContext.Id);

            return(JsonSuccess("Credentials successfully saved"));
        }
Esempio n. 13
0
        public async Task <ActionResult> SetupComplete()
        {
            var defaultOdsInstance = await _cachedItems.GetDefaultCloudOdsInstance();

            var model = new OdsInstanceSettingsModel
            {
                ProductionSetupCompletedModel = new OdsInstanceSetupCompletedModel
                {
                    ProvisioningWarnings = await _getProductionApiProvisioningWarningsQuery.Execute(defaultOdsInstance)
                },
                OdsInstanceSettingsTabEnumerations =
                    _tabDisplayService.GetOdsInstanceSettingsTabDisplay(OdsInstanceSettingsTabEnumeration.Setup)
            };

            return(View(model));
        }
Esempio n. 14
0
        public async Task <ActionResult> Setup()
        {
            var setupCompleted = (await _odsApiFacadeFactory.Create(CloudOdsEnvironment.Production)).DoesApiDataExist();

            if (setupCompleted)
            {
                return(RedirectToAction("SetupComplete"));
            }

            var model = new OdsInstanceSettingsModel
            {
                OdsInstanceSettingsTabEnumerations =
                    _tabDisplayService.GetOdsInstanceSettingsTabDisplay(OdsInstanceSettingsTabEnumeration.Setup)
            };

            return(View(model));
        }
Esempio n. 15
0
        public async Task <ActionResult> Logging()
        {
            var settings = await _cloudOdsSettingsService.GetSettings(_appSettings.DefaultOdsInstance);

            var model = new OdsInstanceSettingsModel
            {
                LogSettingsModel = new LogSettingsModel
                {
                    LogLevel = settings.LogLevel
                },
                OdsInstanceSettingsTabEnumerations =
                    _tabDisplayService.GetOdsInstanceSettingsTabDisplay(OdsInstanceSettingsTabEnumeration.Logging),
                OdsInstance = _instanceContext
            };

            return(View(model));
        }
        public async Task When_Perform_Post_Request_To_BulkFileUpload_With_No_File_Returns_NoContent()
        {
            // Arrange
            var model = new OdsInstanceSettingsModel
            {
                BulkFileUploadModel = new BulkFileUploadModel
                {
                    BulkFiles = new List <HttpPostedFileBase>()
                }
            };

            // Act
            var result = (HttpStatusCodeResult)await SystemUnderTest.BulkFileUpload(model);

            // Assert
            result.ShouldNotBeNull();
            result.StatusCode.ShouldBe((int)HttpStatusCode.NoContent);
        }
Esempio n. 17
0
        public async Task <ActionResult> Logging()
        {
            var settings = await _cloudOdsSettingsService.GetSettings(
                CloudOdsAdminAppSettings.Instance.OdsInstanceName, CloudOdsEnvironment.Production);

            var model = new OdsInstanceSettingsModel
            {
                LogSettingsModel = new LogSettingsModel
                {
                    Environment = CloudOdsEnvironment.Production,
                    LogLevel    = settings.LogLevel
                },
                OdsInstanceSettingsTabEnumerations =
                    _tabDisplayService.GetOdsInstanceSettingsTabDisplay(OdsInstanceSettingsTabEnumeration.Logging),
                OdsInstance = _instanceContext
            };

            return(View(model));
        }
        public void When_Perform_Post_Request_To_BulkFileUpload_With_Greater_File_ContentLength_ThrowsException()
        {
            // Arrange
            var file = new Mock <HttpPostedFileBase>();

            file.Setup(x => x.ContentLength).Returns(20000002);
            var model = new OdsInstanceSettingsModel
            {
                BulkFileUploadModel = new BulkFileUploadModel
                {
                    BulkFiles = new List <HttpPostedFileBase>
                    {
                        file.Object
                    }
                }
            };

            // Assert
            Assert.ThrowsAsync <Exception>(() => SystemUnderTest.BulkFileUpload(model)).Message
            .Contains("Upload exceeds maximum limit").ShouldBeTrue();
        }
        private OdsInstanceSettingsModel SetupBulkUpload(out FileUploadResult fileUploadResult)
        {
            const string filename = "test.xml";
            var          file     = new Mock <HttpPostedFileBase>();

            file.Setup(x => x.ContentLength).Returns(200);
            file.Setup(x => x.FileName).Returns("test.xml");
            var model = new OdsInstanceSettingsModel
            {
                BulkFileUploadModel = new BulkFileUploadModel
                {
                    BulkFiles = new List <HttpPostedFileBase>
                    {
                        file.Object
                    }
                }
            };

            fileUploadResult = new FileUploadResult
            {
                Directory = "directoryPath",
                FileNames = new[] { filename }
            };

            InstanceContext.Id   = OdsInstanceContext.Id;
            InstanceContext.Name = OdsInstanceContext.Name;

            FileUploadHandler.Setup(x =>
                                    x.SaveFilesToUploadDirectory(It.IsAny <HttpPostedFileBase[]>(), It.IsAny <Func <string, string> >()))
            .Returns(fileUploadResult);

            ApiConnectionInformationProvider
            .Setup(x => x.GetConnectionInformationForEnvironment(CloudOdsEnvironment.Production))
            .ReturnsAsync(_connectionInformation);

            OdsSecretConfigurationProvider.Setup(x => x.GetSecretConfiguration(It.IsAny <int>()))
            .Returns(Task.FromResult(OdsSecretConfig));
            return(model);
        }
Esempio n. 20
0
        public async Task When_Perform_Post_Request_To_SaveBulkLoadCredentials_With_BulkUpload_Credentials_Return_Json_Success()
        {
            // Arrange
            const string expectedKey    = "key";
            const string expectedSecret = "secret";
            var          model          = new OdsInstanceSettingsModel
            {
                BulkFileUploadModel = new BulkFileUploadModel
                {
                    ApiKey    = expectedKey,
                    ApiSecret = expectedSecret
                }
            };

            OdsSecretConfigurationProvider.Setup(x => x.GetSecretConfiguration(It.IsAny <int>()))
            .Returns(Task.FromResult(new OdsSecretConfiguration()));

            // Act
            var result = (ContentResult)await SystemUnderTest.SaveBulkLoadCredentials(model);

            // Assert
            result.Content.Contains("Credentials successfully saved").ShouldBeTrue();
        }