public async Task Update_Single_Media()
        {
            // For the sake of sanity I'll use request object and convert it to JSON before calling API.

            // Always set token first.
            Config.Client.SetToken(this.token);

            // Make some changes so we can correct it later with update command.
            var wrongRequest = ExampleRequest_BreakingBad();

            wrongRequest.Name += " ~some wrong text~";
            wrongRequest.Parts.ToArray()[0].Name += " ~some wrong text~";

            // Add wrong data.
            HttpResponseMessage response = await Config.Client.PostAsync(Common.ApiRoutes.Media.Add,
                                                                         new StringContent(
                                                                             JsonSerializer.Serialize(wrongRequest),
                                                                             Encoding.UTF8, Config.HttpMediaTypeJson));

            var responseMessage = await response.Content.ReadAsStringAsync();

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode, responseMessage);
            Common.Api.Response.MediaHeader responseHeader = JsonSerializer.Deserialize <Common.Api.Response.MediaHeader>(responseMessage);
            Assert.IsNotNull(responseHeader);

            // Change request data, with correct values.
            Common.Api.Request.MediaHeader correctedRequestHeader = ResponseToRequest(responseHeader);
            correctedRequestHeader.Name = "Breaking Bad (2008)";
            correctedRequestHeader.Parts.ToArray()[0].Name = "Pilot";

            // Update. Structures must have id's.
            response = await Config.Client.PostAsync(Common.ApiRoutes.Media.Update,
                                                     new StringContent(
                                                         JsonSerializer.Serialize(correctedRequestHeader),
                                                         Encoding.UTF8, Config.HttpMediaTypeJson));

            responseMessage = await response.Content.ReadAsStringAsync();

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode, responseMessage);
            responseHeader = JsonSerializer.Deserialize <Common.Api.Response.MediaHeader>(responseMessage);
            Assert.IsNotNull(responseHeader);


            // Header
            Assert.AreEqual("Breaking Bad (2008)", responseHeader.Name);
            Assert.IsNotNull(responseHeader.Description);
            Assert.IsTrue(responseHeader.Description.Length > 0);

            // Parts
            Assert.AreEqual(2, responseHeader.Parts.Count);
            Assert.AreEqual("Pilot", responseHeader.Parts.ToArray()[0].Name);
            Assert.AreEqual("Cat's in the Bag...", responseHeader.Parts.ToArray()[1].Name);

            // Part[0] / Versions
            Assert.AreEqual(1, responseHeader.Parts.ToArray()[0].Versions.Count);
            Assert.AreEqual(2, responseHeader.Parts.ToArray()[0].Versions.ToArray()[0].Links.Count);
            // Part[1] / Versions
            Assert.AreEqual(1, responseHeader.Parts.ToArray()[1].Versions.Count);
            Assert.AreEqual(2, responseHeader.Parts.ToArray()[1].Versions.ToArray()[0].Links.Count);
        }
        public async Task Add_Two_Medias()
        {
            // Add "Breaking Bad" Series
            var requestMedia             = ExampleRequest_BreakingBad();
            HttpResponseMessage response = await Config.Client.PostAsync(Common.ApiRoutes.Media.Add,
                                                                         new StringContent(
                                                                             JsonSerializer.Serialize(requestMedia),
                                                                             Encoding.UTF8, Config.HttpMediaTypeJson));

            var responseMessage = await response.Content.ReadAsStringAsync();

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode, responseMessage);
            Common.Api.Response.MediaHeader responseMedia = JsonSerializer.Deserialize <Common.Api.Response.MediaHeader>(responseMessage);
            Assert.IsNotNull(responseMedia);
            CompareRequestAndResponse(requestMedia, responseMedia);

            // Add "American Beauty" movie.
            requestMedia = ExampleRequest_AmericanBeauty();
            response     = await Config.Client.PostAsync(Common.ApiRoutes.Media.Add,
                                                         new StringContent(
                                                             JsonSerializer.Serialize(requestMedia),
                                                             Encoding.UTF8, Config.HttpMediaTypeJson));

            responseMessage = await response.Content.ReadAsStringAsync();

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode, responseMessage);
            responseMedia = JsonSerializer.Deserialize <Common.Api.Response.MediaHeader>(responseMessage);
            Assert.IsNotNull(responseMedia);
            CompareRequestAndResponse(requestMedia, responseMedia);
        }
        public async Task Get_Single()
        {
            // Add something to update in second step.
            var requestHeader            = ExampleRequest_BreakingBad();
            HttpResponseMessage response = await Config.Client.PostAsync(Common.ApiRoutes.Media.Add,
                                                                         new StringContent(
                                                                             JsonSerializer.Serialize(requestHeader),
                                                                             Encoding.UTF8, Config.HttpMediaTypeJson));

            var responseMessage = await response.Content.ReadAsStringAsync();

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode, responseMessage);
            Common.Api.Response.MediaHeader responseHeader = JsonSerializer.Deserialize <Common.Api.Response.MediaHeader>(responseMessage);
            Assert.IsNotNull(responseHeader);

            // Get by id.
            response = await Config.Client.GetAsync(Common.ApiRoutes.Media.GetId(responseHeader.MediaHeaderId));

            responseMessage = await response.Content.ReadAsStringAsync();

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode, responseMessage);
            responseHeader = JsonSerializer.Deserialize <Common.Api.Response.MediaHeader>(responseMessage);
            Assert.IsNotNull(responseHeader);

            CompareRequestAndResponse(requestHeader, responseHeader);
        }
Esempio n. 4
0
 public static void MapResponseMedia(this Dal.Model.MediaHeader media, ref Common.Api.Response.MediaHeader responseHeader)
 {
     responseHeader.MediaHeaderId = media.MediaHeaderId;
     responseHeader.Name          = media.Name;
     responseHeader.Year          = media.Year;
     responseHeader.Description   = media.Description;
     responseHeader.ReferenceLink = media.ReferenceLink != null ? media.ReferenceLink.AbsoluteUri : string.Empty;
     responseHeader.User          = media.User.MapReponseUser();
 }
        public async Task Add_Single_Media_And_Check_All_Content()
        {
            // For the sake of simplicity I'll use request object and convert it to JSON before calling API.
            var requestMedia = ExampleRequest_BreakingBad();

            HttpResponseMessage response = await Config.Client.PostAsync(Common.ApiRoutes.Media.Add,
                                                                         new StringContent(JsonSerializer.Serialize(requestMedia), Encoding.UTF8, Config.HttpMediaTypeJson));

            var responseMessage = await response.Content.ReadAsStringAsync();

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode, responseMessage);
            Common.Api.Response.MediaHeader responseMedia = JsonSerializer.Deserialize <Common.Api.Response.MediaHeader>(responseMessage);
            Assert.IsNotNull(responseMedia);

            CompareRequestAndResponse(requestMedia, responseMedia);
        }
 private static Common.Api.Request.MediaHeader ResponseToRequest(Common.Api.Response.MediaHeader responseHeader)
 {
     return(new()
     {
         MediaHeaderId = responseHeader.MediaHeaderId,
         Name = responseHeader.Name,
         Description = responseHeader.Description,
         ReferenceLink = responseHeader.ReferenceLink,
         Parts = responseHeader.Parts.Select(p => new Common.Api.Request.MediaPart
         {
             MediaPartId = p.MediaPartId,
             Season = p.Season,
             Episode = p.Episode,
             Name = p.Name,
             Description = p.Description,
             ReferenceLink = p.ReferenceLink,
             Version = new Common.Api.Request.MediaVersion
             {
                 MediaVersionId = p.Versions.FirstOrDefault().MediaVersionId,
                 VersionComment = p.Versions.FirstOrDefault().VersionComment,
                 Links = p.Versions.FirstOrDefault().Links.Select(l => new Common.Api.Request.MediaLink
                 {
                     MediaLinkId = l.MediaLinkId,
                     LinkOrderId = l.LinkOrderId,
                     Link = l.Link
                 }).ToList(),
                 Tags = p.Versions.FirstOrDefault().Tags.Select(t => new Common.Api.Request.MediaTag
                 {
                     Name = t.Name
                 }).ToList()
             },
             Tags = p.Tags.Select(t => new Common.Api.Request.MediaTag
             {
                 Name = t.Name
             }).ToList()
         }).ToList(),
         Tags = responseHeader.Tags.Select(t => new Common.Api.Request.MediaTag
         {
             Name = t.Name
         }).ToList()
     });
 }
        public async Task Remove_One_Part_Tag()
        {
            // For the sake of sanity I'll use request object and convert it to JSON before calling API.

            // Add wrong data.
            HttpResponseMessage response = await Config.Client.PostAsync(Common.ApiRoutes.Media.Add,
                                                                         new StringContent(
                                                                             JsonSerializer.Serialize(ExampleRequest_BreakingBad()),
                                                                             Encoding.UTF8, Config.HttpMediaTypeJson));

            var responseMessage = await response.Content.ReadAsStringAsync();

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode, responseMessage);
            Common.Api.Response.MediaHeader responseHeader = JsonSerializer.Deserialize <Common.Api.Response.MediaHeader>(responseMessage);
            Assert.IsNotNull(responseHeader);

            // Delete one tag from first part.
            Common.Api.Request.MediaHeader updatedRequest = ResponseToRequest(responseHeader);
            var part1Tags        = ((List <Common.Api.Request.MediaTag>)((List <Common.Api.Request.MediaPart>)updatedRequest.Parts).First().Tags);
            var oldPart1TagCount = part1Tags.Count;

            part1Tags.Remove(part1Tags.LastOrDefault());

            // Update. Structures must have id's.
            response = await Config.Client.PostAsync(Common.ApiRoutes.Media.Update,
                                                     new StringContent(
                                                         JsonSerializer.Serialize(updatedRequest),
                                                         Encoding.UTF8, Config.HttpMediaTypeJson));

            responseMessage = await response.Content.ReadAsStringAsync();

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode, responseMessage);
            responseHeader = JsonSerializer.Deserialize <Common.Api.Response.MediaHeader>(responseMessage);
            Assert.IsNotNull(responseHeader);

            Assert.AreEqual(--oldPart1TagCount, ((IList <Common.Api.Response.MediaTag>)((IList <Common.Api.Response.MediaPart>)responseHeader.Parts).First().Tags).Count);
        }
        private static void CompareRequestAndResponse(Common.Api.Request.MediaHeader requestMedia, Common.Api.Response.MediaHeader responseMedia)
        {
            // Header
            Assert.AreEqual(requestMedia.Name, responseMedia.Name);
            Assert.AreEqual(requestMedia.Year, responseMedia.Year);
            Assert.AreEqual(requestMedia.Description, responseMedia.Description);
            Assert.AreEqual(requestMedia.ReferenceLink, responseMedia.ReferenceLink);
            if (requestMedia.Tags != null)
            {
                Assert.AreEqual(requestMedia.Tags.Count, responseMedia.Tags.Count);
                foreach (var requestTag in requestMedia.Tags)
                {
                    Assert.IsTrue((responseMedia.Tags as IList <Common.Api.Response.MediaTag>).Any(responseTag => responseTag.Name == requestTag.Name));
                }
            }

            // Parts
            if (requestMedia.Parts != null)
            {
                Assert.AreEqual(requestMedia.Parts.Count, responseMedia.Parts.Count);
                foreach (var requestPart in requestMedia.Parts)
                {
                    var responsePart = responseMedia.Parts.SingleOrDefault(p => p.Season == requestPart.Season && p.Episode == requestPart.Episode);
                    Assert.IsNotNull(responsePart, "Can't find response part.");

                    if (requestPart.Name != null)
                    {
                        Assert.AreEqual(requestPart.Name, responsePart.Name);
                    }
                    if (requestPart.Description != null)
                    {
                        Assert.AreEqual(requestPart.Description, responsePart.Description);
                    }
                    if (requestPart.ReferenceLink != null)
                    {
                        Assert.AreEqual(requestPart.ReferenceLink, responsePart.ReferenceLink);
                    }

                    // Part Tags
                    if (requestPart.Tags != null)
                    {
                        Assert.AreEqual(requestPart.Tags.Count, responsePart.Tags.Count);
                        foreach (var requestTag in requestPart.Tags)
                        {
                            Assert.IsTrue((responsePart.Tags as IList <Common.Api.Response.MediaTag>).Any(responseTag => responseTag.Name == requestTag.Name));
                        }
                    }

                    // Version
                    Assert.AreEqual(requestPart.Version.VersionComment, responsePart.Versions.FirstOrDefault().VersionComment);

                    // Version Tags
                    if (requestPart.Version.Tags != null)
                    {
                        Assert.AreEqual(requestPart.Version.Tags.Count, responsePart.Versions.FirstOrDefault().Tags.Count);
                        foreach (var requestTag in requestPart.Version.Tags)
                        {
                            Assert.IsTrue((responsePart.Versions.FirstOrDefault().Tags as IList <Common.Api.Response.MediaTag>).Any(responseTag => responseTag.Name == requestTag.Name));
                        }
                    }

                    // Links
                    Assert.AreEqual(requestPart.Version.Links.Count, responsePart.Versions.FirstOrDefault().Links.Count);
                    foreach (var requestLink in requestPart.Version.Links)
                    {
                        var responseLink = responsePart.Versions.FirstOrDefault().Links.SingleOrDefault(l => l.LinkOrderId == requestLink.LinkOrderId);
                        Assert.IsNotNull(responseLink);
                        Assert.AreEqual(requestLink.Link, responseLink.Link);
                    }
                }
            }
        }