/// <summary> /// Осуществляет проверку того, что <see cref="FileDescription"/> с заданными ключом загрузки и именем файла /// корректно десериализуется из JSON-строки. /// </summary> //[Test] public void TestDeserializationFromJsonByUploadKeyAndFileNameProperties() { string fileBaseUrl = "http://localhost/api/File"; // Свойства достаточные для описания файла, который не привязан к объекту данных (ключ загрузки и имя файла). string fileUploadKey = Guid.NewGuid().ToString("D"); string fileName = "readme.txt"; // Размер и тип файла. long fileSize = 1024; string fileMimeType = MimeMapping.GetMimeMapping(fileName); FileDescription fileDescription = new FileDescription(fileBaseUrl) { FileUploadKey = fileUploadKey, FileName = fileName, FileSize = fileSize, FileMimeType = fileMimeType }; string serializedFileDescription = fileDescription.ToJson(); // Получаем десериализованные описания файла, полученные различными способами. List <FileDescription> deserializedFileDescriptions = new List <FileDescription> { FileDescription.FromJson(serializedFileDescription) }; using (HttpConfiguration config = new HttpConfiguration()) { config.EnableCors(new EnableCorsAttribute("*", "*", "*")); config.Routes.MapHttpRoute("File", "api/File", new { controller = "FileDescriptionTest" }); using (HttpServer server = new HttpServer(config)) { using (HttpClient client = new HttpClient(server, false)) { // Получаем десериализованное описание файла из тела POST-запроса. using (HttpResponseMessage response = client.PostAsJsonStringAsync("http://localhost/api/File", serializedFileDescription).Result) { // Убедимся, что запрос завершился успешно. //Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); deserializedFileDescriptions.Add(FileDescriptionTestController.FileDescriptionPost); } // Получаем десериализованное описание файла из URL PUT-запроса. string putUrl = string.Format( "http://localhost/api/File?{0}={1}&{2}={3}&{4}={5}&{6}={7}", nameof(FileDescription.FileUploadKey), fileDescription.FileUploadKey, nameof(FileDescription.FileName), fileDescription.FileName, nameof(FileDescription.FileSize), fileDescription.FileSize, nameof(FileDescription.FileMimeType), fileDescription.FileMimeType); using (HttpResponseMessage response = client.SendAsync(new HttpRequestMessage(HttpMethod.Put, putUrl)).Result) { // Убедимся, что запрос завершился успешно. //Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); deserializedFileDescriptions.Add(FileDescriptionTestController.FileDescriptionPut); } } } } // Проверяем, что результаты десериализации, полученные разными способами - одинаковы и корректны. foreach (FileDescription deserializedFileDescription in deserializedFileDescriptions) { /* * Assert.AreEqual(fileUploadKey, deserializedFileDescription.FileUploadKey); * Assert.AreEqual(fileName, deserializedFileDescription.FileName); * Assert.AreEqual(fileSize, deserializedFileDescription.FileSize); * Assert.AreEqual(fileMimeType, deserializedFileDescription.FileMimeType); * Assert.AreEqual(fileDescription.FileUrl, deserializedFileDescription.FileUrl); * Assert.AreEqual(fileDescription.PreviewUrl, deserializedFileDescription.PreviewUrl); * Assert.AreEqual(null, deserializedFileDescription.EntityTypeName); * Assert.AreEqual(null, deserializedFileDescription.EntityPropertyName); * Assert.AreEqual(null, deserializedFileDescription.EntityPrimaryKey); */ } }
/// <summary> /// Осуществляет проверку того, что <see cref="FileDescription"/> с заданными свойствами, описывающими объект данных, /// корректно десериализуется из JSON-строки. /// </summary> //[Test] public void TestDeserializationFromJsonByEntityProperties() { string fileBaseUrl = "http://localhost/api/File"; // Имя, размер и тип файла. string fileName = "readme.txt"; long fileSize = 1024; string fileMimeType = MimeMapping.GetMimeMapping(fileName); // Свойства достаточные для описания файла, который привязан к объекту данных // (тип и первичный ключ объекта данных, а так же имя файлового свойства в объекте данных). КлассСМножествомТипов entity = new КлассСМножествомТипов(); string entityTypeName = entity.GetType().AssemblyQualifiedName; string entityPropertyName = nameof(entity.PropertyStormnetFile); string entityPrimaryKey = entity.__PrimaryKey.ToString(); // Описание файла с избыточным набором свойств. FileDescription fileDescription = new FileDescription(fileBaseUrl) { FileName = fileName, FileSize = fileSize, FileMimeType = fileMimeType, EntityTypeName = entityTypeName, EntityPropertyName = entityPropertyName, EntityPrimaryKey = entityPrimaryKey }; string serializedFileDescription = fileDescription.ToJson(); // Получаем десериализованные описания файла, полученные различными способами. List <FileDescription> deserializedFileDescriptions = new List <FileDescription> { FileDescription.FromJson(serializedFileDescription) }; using (HttpConfiguration config = new HttpConfiguration()) { config.EnableCors(new EnableCorsAttribute("*", "*", "*")); config.Routes.MapHttpRoute("File", "api/File", new { controller = "FileDescriptionTest" }); using (HttpServer server = new HttpServer(config)) { using (HttpClient client = new HttpClient(server, false)) { // Получаем десериализованное описание файла из тела POST-запроса. using (HttpResponseMessage response = client.PostAsJsonStringAsync("http://localhost/api/File", serializedFileDescription).Result) { // Убедимся, что запрос завершился успешно. //Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); deserializedFileDescriptions.Add(FileDescriptionTestController.FileDescriptionPost); } // Получаем десериализованное описание файла из URL PUT-запроса. string putUrl = string.Format( "http://localhost/api/File?{0}={1}&{2}={3}&{4}={5}&{6}={7}&{8}={9}&{10}={11}", nameof(FileDescription.FileName), fileDescription.FileName, nameof(FileDescription.FileSize), fileDescription.FileSize, nameof(FileDescription.FileMimeType), fileDescription.FileMimeType, nameof(FileDescription.EntityTypeName), fileDescription.EntityTypeName, nameof(FileDescription.EntityPropertyName), fileDescription.EntityPropertyName, nameof(FileDescription.EntityPrimaryKey), fileDescription.EntityPrimaryKey); using (HttpResponseMessage response = client.SendAsync(new HttpRequestMessage(HttpMethod.Put, putUrl)).Result) { // Убедимся, что запрос завершился успешно. //Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); deserializedFileDescriptions.Add(FileDescriptionTestController.FileDescriptionPut); } } } } // Проверяем, что результаты десериализации, полученные разными способами - одинаковы и корректны. foreach (FileDescription deserializedFileDescription in deserializedFileDescriptions) { /* * Assert.AreEqual(fileName, deserializedFileDescription.FileName); * Assert.AreEqual(fileSize, deserializedFileDescription.FileSize); * Assert.AreEqual(fileMimeType, deserializedFileDescription.FileMimeType); * Assert.AreEqual(entityTypeName, deserializedFileDescription.EntityTypeName); * Assert.AreEqual(entityPropertyName, deserializedFileDescription.EntityPropertyName); * Assert.AreEqual(entityPrimaryKey, deserializedFileDescription.EntityPrimaryKey); * Assert.AreEqual(fileDescription.FileUrl, deserializedFileDescription.FileUrl); * Assert.AreEqual(fileDescription.PreviewUrl, deserializedFileDescription.PreviewUrl); * Assert.AreEqual(null, deserializedFileDescription.FileUploadKey); */ } }
/// <summary> /// Осуществляет проверку того, что <see cref="FileDescription"/> /// корректно сериализуется в JSON-строку. /// </summary> //[Test] public void TestSerializationToJson() { string fileBaseUrl = "http://localhost/api/File"; // Свойства достаточные для описания файла, который не привязан к объекту данных (ключ загрузки и имя файла). string fileUploadKey = Guid.NewGuid().ToString("D"); string fileName = "readme.txt"; // Размер и тип файла. long fileSize = 1024; string fileMimeType = MimeMapping.GetMimeMapping(fileName); // Свойства достаточные для описания файла, который привязан к объекту данных // (тип и первичный ключ объекта данных, а так же имя файлового свойства в объекте данных). КлассСМножествомТипов entity = new КлассСМножествомТипов(); string entityTypeName = entity.GetType().AssemblyQualifiedName; string entityPropertyName = nameof(entity.PropertyStormnetFile); string entityPrimaryKey = entity.__PrimaryKey.ToString(); // Описание файла с избыточным набором свойств. FileDescription fileDescription = new FileDescription(fileBaseUrl) { FileUploadKey = fileUploadKey, FileName = fileName, FileSize = fileSize, FileMimeType = fileMimeType, EntityTypeName = entityTypeName, EntityPropertyName = entityPropertyName, EntityPrimaryKey = entityPrimaryKey }; FileDescriptionTestController.FileDescriptionGet = fileDescription; // Получаем сериализованные описания файлов несколькими способами (вручную, и из ответа, получаемого от сервера). List <string> serializedFileDescriptions = new List <string> { fileDescription.ToJson() }; using (HttpConfiguration config = new HttpConfiguration()) { config.EnableCors(new EnableCorsAttribute("*", "*", "*")); config.Routes.MapHttpRoute("File", "api/File", new { controller = "FileDescriptionTest" }); using (HttpServer server = new HttpServer(config)) { using (HttpClient client = new HttpClient(server, false)) { using (HttpResponseMessage response = client.GetAsync("http://localhost/api/File").Result) { // Убедимся, что запрос завершился успешно. //Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); serializedFileDescriptions.Add(response.Content.ReadAsStringAsync().Result); } } } } // Проверяем, что результаты сериализации, полученные разными способами - одинаковы и корректны. foreach (string serializedFileDescription in serializedFileDescriptions) { // Преобразуем сериализованное описание файла в словарь. Dictionary <string, object> deserializedFileDescription = new JavaScriptSerializer().Deserialize <Dictionary <string, object> >(serializedFileDescription); /* * Assert.AreEqual(5, deserializedFileDescription.Keys.Count); * Assert.AreEqual(fileName, deserializedFileDescription["fileName"]); * Assert.AreEqual((int)fileSize, (int)deserializedFileDescription["fileSize"]); * Assert.AreEqual(fileMimeType, deserializedFileDescription["fileMimeType"]); * Assert.AreEqual(fileDescription.FileUrl, deserializedFileDescription["fileUrl"]); * Assert.AreEqual(fileDescription.PreviewUrl, deserializedFileDescription["previewUrl"]); */ } }