Example #1
0
        /// <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);
                 */
            }
        }
Example #2
0
        /// <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);
                 */
            }
        }
Example #3
0
        /// <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"]);
                 */
            }
        }