public void CreateAsync_WhenCustomFieldNull_ThrowArgumentNullException()
        {
            WrikeCustomField newCustomField = null;
            var ex = Assert.ThrowsAsync <ArgumentNullException>(() => TestConstants.WrikeClient.CustomFields
                                                                .CreateAsync(newCustomField));

            Assert.AreEqual("newCustomField", ex.ParamName);
        }
        public void CreateAsync_ShouldAddCreateNewCustomField()
        {
            var newCustomField     = new WrikeCustomField("TestCustomField#2", WrikeCustomFieldType.Text);
            var createdCustomField = WrikeClientFactory.GetWrikeClient().CustomFields.CreateAsync(newCustomField).Result;

            Assert.IsNotNull(newCustomField);
            Assert.AreEqual(newCustomField.Title, createdCustomField.Title);
            Assert.AreEqual(newCustomField.Type, createdCustomField.Type);

            //TODO: test other properties
        }
        public void UpdateAsync_ShouldUpdateCommentText()
        {
            var newCustomField     = new WrikeCustomField("TestCustomField#3", WrikeCustomFieldType.Text);
            var createdCustomField = WrikeClientFactory.GetWrikeClient().CustomFields.CreateAsync(newCustomField).Result;

            var expectedTitle = "TestCustomField#3[Updated]";
            var expectedType  = WrikeCustomFieldType.Checkbox;

            var updatedCustomField = WrikeClientFactory.GetWrikeClient().CustomFields.UpdateAsync(
                createdCustomField.Id, expectedTitle, expectedType).Result;

            Assert.IsNotNull(updatedCustomField);
            Assert.AreEqual(expectedTitle, updatedCustomField.Title);
            Assert.AreEqual(expectedType, updatedCustomField.Type);

            //TODO: test other properties
        }
        async Task <WrikeCustomField> IWrikeCustomFieldsClient.CreateAsync(WrikeCustomField newCustomField)
        {
            if (newCustomField == null)
            {
                throw new ArgumentNullException(nameof(newCustomField));
            }

            var postDataBuilder = new WrikeFormUrlEncodedContentBuilder()
                                  .AddParameter("title", newCustomField.Title)
                                  .AddParameter("type", newCustomField.Type)
                                  .AddParameter("shareds", newCustomField.SharedIds)
                                  .AddParameter("settings", newCustomField.Settings);


            var response = await SendRequest <WrikeCustomField>("customfields",
                                                                HttpMethods.Post, postDataBuilder.GetContent()).ConfigureAwait(false);

            return(GetReponseDataFirstItem(response));
        }
        public static async Task Run(WrikeClient client)
        {
            var customFields = await client.CustomFields.GetAsync();

            var newCustomField = new WrikeCustomField("TestCustomField", WrikeCustomFieldType.Text);

            newCustomField = await client.CustomFields.CreateAsync(newCustomField);

            customFields = await client.CustomFields.GetAsync();



            foreach (var customField in customFields)
            {
                await client.CustomFields.UpdateAsync(customField.Id, type : customField.Type);
            }


            //customFields = await client.CustomFields.GetAsync(new List<string> { "customFieldId", "customFieldId" });

            //var newCustomField = new WrikeCustomField
            //{
            //    AccountId = "accountId",
            //    Title = "New Custom Field",
            //    Type = WrikeCustomFieldType.Duration
            //};
            //newCustomField = await client.CustomFields.CreateAsync(newCustomField);

            //TODO: returns invalid-parameter error if type is not Text
            customFields[18].Settings.DecimalPlaces = 0;
            customFields[18].Settings.Aggregation   = WrikeCustomFieldAggregationType.None;

            var updatedCustomField = await client.CustomFields.UpdateAsync(
                customFields[18].Id,
                settings : customFields[18].Settings);
        }