/// <summary>
        /// Updates information for a web link.
        /// </summary>
        /// <param name="webLinkId">Id of the weblink.</param>
        /// <param name="updateWebLinkRequest">BoxWebLinkRequest object</param>
        /// <returns>An updated web link object if the update was successful.</returns>
        public async Task <BoxWebLink> UpdateWebLinkAsync(string webLinkId, BoxWebLinkRequest updateWebLinkRequest)
        {
            webLinkId.ThrowIfNullOrWhiteSpace("webLinkId");
            updateWebLinkRequest.ThrowIfNull("updateWebLinkRequest");

            BoxRequest request = new BoxRequest(_config.WebLinksEndpointUri, webLinkId)
                                 .Method(RequestMethod.Put)
                                 .Payload(_converter.Serialize(updateWebLinkRequest));

            IBoxResponse <BoxWebLink> response = await ToResponseAsync <BoxWebLink>(request).ConfigureAwait(false);

            return(response.ResponseObject);
        }
        /// <summary>
        /// Creates a web link object within a given folder.
        /// </summary>
        /// <param name="createWebLinkRequest">BoxWebLinkRequest object</param>
        /// <returns>The web link object is returned.</returns>
        public async Task <BoxWebLink> CreateWebLinkAsync(BoxWebLinkRequest createWebLinkRequest)
        {
            createWebLinkRequest.ThrowIfNull("createWebLinkRequest")
            .Parent.ThrowIfNull("createWebLinkRequest.Parent")
            .Id.ThrowIfNullOrWhiteSpace("createWebLinkRequest.Parent.Id");

            BoxRequest request = new BoxRequest(_config.WebLinksEndpointUri)
                                 .Method(RequestMethod.Post)
                                 .Payload(_converter.Serialize(createWebLinkRequest));

            IBoxResponse <BoxWebLink> response = await ToResponseAsync <BoxWebLink>(request).ConfigureAwait(false);

            return(response.ResponseObject);
        }
        public async Task UpdateWebLinkAsync_ForExistingWebLink_ShouldUpdateWebLink()
        {
            var webLink = await CreateWebLink(GetUniqueName("weblink"), FolderId);

            var newUrl = new Uri("http://www.box.com/v2");
            var updateWebLinkRequest = new BoxWebLinkRequest()
            {
                Url = newUrl
            };

            var updatedWeblink = await UserClient.WebLinksManager.UpdateWebLinkAsync(webLink.Id, updateWebLinkRequest);

            Assert.AreEqual(updatedWeblink.Url, newUrl);
        }
        public async Task WebLinks_CRUD_LiveSession()
        {
            const string subFolderId = "1927308583";
            var          url         = new Uri("http://www.box.com");
            const string description = "A weblink to Box.com";
            const string name        = "Box.com website";

            //create weblink
            var wlr = new BoxWebLinkRequest()
            {
                Url = url, Name = name, Description = description, Parent = new BoxRequestEntity()
                {
                    Id = "0"
                }
            };
            var weblink = await _client.WebLinksManager.CreateWebLinkAsync(wlr);

            Assert.AreEqual(name, weblink.Name, "Failed to create weblink.");
            Assert.AreEqual(url, weblink.Url);

            //get weblink
            var fetchedWeblink = await _client.WebLinksManager.GetWebLinkAsync(weblink.Id);

            Assert.AreEqual(weblink.Id, fetchedWeblink.Id, "Failed to fetch existing weblink.");
            Assert.AreEqual(weblink.Name, fetchedWeblink.Name, "Failed to fetch existing weblink.");

            //update weblink
            var newUrl         = new Uri("http://www.google.com");
            var newName        = "Google website";
            var newDescription = "A weblink to Google.com";

            wlr = new BoxWebLinkRequest()
            {
                Url = newUrl, Description = newDescription, Name = newName
            };
            var updatedWeblink = await _client.WebLinksManager.UpdateWebLinkAsync(fetchedWeblink.Id, wlr);

            Assert.AreEqual(fetchedWeblink.Id, updatedWeblink.Id, "Failed to update existing weblink.");
            Assert.AreEqual(newUrl, updatedWeblink.Url, "Failed to update existing weblink.");
            Assert.AreEqual(newDescription, updatedWeblink.Description, "Failed to update existing weblink.");
            Assert.AreEqual(newName, updatedWeblink.Name, "Failed to update existing weblink.");

            //delete weblink
            var result = await _client.WebLinksManager.DeleteWebLinkAsync(updatedWeblink.Id);

            Assert.IsTrue(result, "Failed to delete weblink.");
        }
        public async Task DeleteWebLinkAsync_ForExistingWebLink_ShouldDeleteWebLinkAndExceptionShouldBeThrown()
        {
            var          url            = new Uri("http://www.box.com");
            const string Description    = "A weblink to Box.com";
            const string Name           = "Box.com website";
            var          webLinkRequest = new BoxWebLinkRequest()
            {
                Url = url, Name = Name, Description = Description, Parent = new BoxRequestEntity()
                {
                    Id = FolderId
                }
            };
            var weblink = await UserClient.WebLinksManager.CreateWebLinkAsync(webLinkRequest);

            var result = await UserClient.WebLinksManager.DeleteWebLinkAsync(weblink.Id);

            await Assert.ThrowsExceptionAsync <BoxAPIException>(async() => { _ = await UserClient.WebLinksManager.GetWebLinkAsync(weblink.Id); });
        }
        public async Task <string> Execute(IBoxClient client)
        {
            var webLinkRequest = new BoxWebLinkRequest()
            {
                Url         = new Uri("http://www.box.com"),
                Name        = _name,
                Description = "A weblink to Box.com",
                Parent      = new BoxRequestEntity()
                {
                    Id = _parentFolderId
                }
            };

            WebLink = await client.WebLinksManager.CreateWebLinkAsync(webLinkRequest);

            _webLinkId = WebLink.Id;

            return(_webLinkId);
        }
        public async Task CreateWebLinkAsync_ForCorrectWeblinkRequest_ShouldCreateNewWeblink()
        {
            var          url            = new Uri("http://www.box.com");
            const string Description    = "A weblink to Box.com";
            const string Name           = "Box.com website";
            var          webLinkRequest = new BoxWebLinkRequest()
            {
                Url = url, Name = Name, Description = Description, Parent = new BoxRequestEntity()
                {
                    Id = "0"
                }
            };

            var weblink = await UserClient.WebLinksManager.CreateWebLinkAsync(webLinkRequest);

            Assert.AreEqual(Name, weblink.Name);
            Assert.AreEqual(url, weblink.Url);

            await UserClient.WebLinksManager.DeleteWebLinkAsync(weblink.Id);
        }
        public async Task UpdateWeblink_ValidResponse()
        {
            /*** Arrange ***/
            string      responseString = @"{
                                        ""type"": ""web_link"",
                                        ""id"": ""6742981"",
                                        ""sequence_id"": ""2"",
                                        ""etag"": ""2"",
                                        ""name"": ""Box Marketing Web Page"",
                                        ""url"": ""https://www.box.com"",
                                        ""created_by"": {
                                            ""type"": ""user"",
                                            ""id"": ""10523870"",
                                            ""name"": ""Ted Blosser"",
                                            ""login"": ""*****@*****.**""
                                        },
                                        ""created_at"": ""2015-05-07T14:31:16-07:00"",
                                        ""modified_at"": ""2015-05-07T15:45:04-07:00"",
                                        ""parent"": {
                                            ""type"": ""folder"",
                                            ""id"": ""848123342"",
                                            ""sequence_id"": ""1"",
                                            ""etag"": ""1"",
                                            ""name"": ""Documentation""
                                        },
                                        ""description"": ""Cloud Content Management"",
                                        ""item_status"": ""active"",
                                        ""trashed_at"": null,
                                        ""purged_at"": null,
                                        ""shared_link"": null,
                                        ""path_collection"": {
                                            ""total_count"": 2,
                                            ""entries"": [
                                                {
                                                    ""type"": ""folder"",
                                                    ""id"": ""0"",
                                                    ""sequence_id"": null,
                                                    ""etag"": null,
                                                    ""name"": ""All Files""
                                                },
                                                {
                                                    ""type"": ""folder"",
                                                    ""id"": ""848123342"",
                                                    ""sequence_id"": ""1"",
                                                    ""etag"": ""1"",
                                                    ""name"": ""Documentation""
                                                }
                                            ]
                                        },
                                        ""modified_by"": {
                                            ""type"": ""user"",
                                            ""id"": ""10523870"",
                                            ""name"": ""Ted Blosser"",
                                            ""login"": ""*****@*****.**""
                                        },
                                        ""owned_by"": {
                                            ""type"": ""user"",
                                            ""id"": ""10523870"",
                                            ""name"": ""Ted Blosser"",
                                            ""login"": ""*****@*****.**""
                                        }
                                    }";
            IBoxRequest boxRequest     = null;
            Uri         webLinksUri    = new Uri(Constants.WebLinksEndpointString);

            _config.SetupGet(x => x.WebLinksEndpointUri).Returns(webLinksUri);
            _handler.Setup(h => h.ExecuteAsync <BoxWebLink>(It.IsAny <IBoxRequest>()))
            .Returns(Task.FromResult <IBoxResponse <BoxWebLink> >(new BoxResponse <BoxWebLink>()
            {
                Status        = ResponseStatus.Success,
                ContentString = responseString
            }))
            .Callback <IBoxRequest>(r => boxRequest = r);

            /*** Act ***/
            BoxWebLinkRequest updateWebLinkRequest = new BoxWebLinkRequest()
            {
                Name = "Box Marketing Web Page"
            };
            BoxWebLink result = await _webLinkManager.UpdateWebLinkAsync("6742981", updateWebLinkRequest);

            /*** Assert ***/
            //Request check
            Assert.IsNotNull(boxRequest);
            Assert.AreEqual(RequestMethod.Put, boxRequest.Method);
            Assert.AreEqual(webLinksUri + "6742981", boxRequest.AbsoluteUri.AbsoluteUri);
            BoxWebLinkRequest payload = JsonConvert.DeserializeObject <BoxWebLinkRequest>(boxRequest.Payload);

            Assert.AreEqual("Box Marketing Web Page", payload.Name);


            //Response check
            Assert.AreEqual("web_link", result.Type);
            Assert.AreEqual("6742981", result.Id);
            Assert.AreEqual(new Uri("https://www.box.com"), result.Url);
            Assert.AreEqual("Box Marketing Web Page", result.Name);
            Assert.AreEqual("Cloud Content Management", result.Description);
            Assert.AreEqual("0", result.PathCollection.Entries[0].Id);
            Assert.AreEqual("All Files", result.PathCollection.Entries[0].Name);
            Assert.AreEqual("848123342", result.PathCollection.Entries[1].Id);
            Assert.AreEqual("Documentation", result.PathCollection.Entries[1].Name);
            Assert.AreEqual("10523870", result.ModifiedBy.Id);
            Assert.AreEqual("10523870", result.OwnedBy.Id);
        }