Exemplo n.º 1
0
        public async Task Put_WritesContentsToFile_ReturnsOkResult()
        {
            string folderName = "folderName";
            string fileName   = "configOne.json";

            ConfigOne testConfigOne = new ConfigOne();

            testConfigOne.Dsn      = "Dsn1";
            testConfigOne.User     = "******";
            testConfigOne.Password = "******";
            testConfigOne.Colors   = new List <string>();
            testConfigOne.Colors.Add("White");
            testConfigOne.Colors.Add("Green");
            testConfigOne.Stat          = new Statistic();
            testConfigOne.Stat.Health   = 100;
            testConfigOne.Stat.Vitality = 100;

            string output = JsonConvert.SerializeObject(testConfigOne);

            ActionResult <object> result = await controller.WriteConfig(folderName, fileName, output);

            Assert.IsInstanceOf <OkObjectResult>(result.Result);

            string folderPath = Path.Combine(baseFolderPath, folderName);
            string filePath   = Path.Combine(baseFolderPath, folderName, fileName);
            string fileText;

            using (var reader = File.OpenText(filePath))
            {
                fileText = await reader.ReadToEndAsync();
            }

            File.Delete(filePath);
            Directory.Delete(folderPath);

            Assert.AreEqual(fileText, output);
        }
        public async Task <ActionResult> WriteConfig([FromRoute()] string folderName, [FromRoute()] string fileName, [FromBody()] object fileContent)
        {
            _logger.LogInformation("API WriteConfig()");

            #region INPUT CHECKS

            if (fileContent == null)
            {
                string message = "fileContent is empty";
                _logger.LogError(message);
                return(BadRequest(message));
            }

            if (folderName == null)
            {
                string message = "folderName is empty";
                _logger.LogError(message);
                return(BadRequest(message));
            }

            if (fileName == null)
            {
                string message = "fileName is empty";
                _logger.LogError(message);
                return(BadRequest(message));
            }

            folderName = folderName.Trim();
            fileName   = fileName.Trim();

            #endregion

            //check file content type

            object configInstance = null;

            try
            {
                ConfigOne config = JsonConvert.DeserializeObject <ConfigOne>(fileContent.ToString());
                configInstance = config;
            }
            catch (Exception e)
            {
                _logger.LogInformation("Input object is not of type ConfigOne");
            }

            if (configInstance == null)
            {
                try
                {
                    ConfigTwo config = JsonConvert.DeserializeObject <ConfigTwo>(fileContent.ToString());
                    configInstance = config;
                }
                catch (Exception e)
                {
                    _logger.LogInformation("Input object is not of type ConfigTwo");
                }
            }

            if (configInstance == null)
            {
                string message = "Input object is not of known type";
                _logger.LogError(message);
                return(BadRequest(message));
            }

            ConfigManager.FileWriter fileWriter = new FileWriter();

            IMethodResult result = await fileWriter.WriteConfigFile(folderName, fileName, JsonConvert.SerializeObject(configInstance));

            if (result.IsSuccessful)
            {
                return(Ok("Config file written successfully"));
            }
            else
            {
                return(BadRequest(result.Message));
            }
        }