public void CreateTroubleshooterCategory()
        {
            var troubleshooterCategoryRequest = new TroubleshooterCategoryRequest
            {
                Title = "TitleCategory",
                CategoryType = TroubleshooterCategoryType.Private,
                StaffId = 2,
                DisplayOrder = 1,
                Description = "Description",
                UserVisibilityCustom = true,
                UserGroupIdList = new [] { 1, 2, 3 },
                StaffVisibilityCustom = true,
                StaffGroupIdList = new [] { 3, 4, 5}
            };

            const string apiMethod = "/Troubleshooter/Category";
            const string parameters = "title=TitleCategory&categorytype=3&staffid=2&displayorder=1&description=Description&uservisibilitycustom=1&usergroupidlist=1,2,3&staffvisibilitycustom=1&staffgroupidlist=3,4,5";

            _kayakoApiRequest.Setup(x => x.ExecutePost<TroubleshooterCategoryCollection>(apiMethod, parameters)).Returns(_responseTroubleshooterCategoryCollection);

            var troubleshooterCategory = _troubleshooterController.CreateTroubleshooterCategory(troubleshooterCategoryRequest);

            _kayakoApiRequest.Verify(x => x.ExecutePost<TroubleshooterCategoryCollection>(apiMethod, parameters), Times.Once());
            Assert.That(troubleshooterCategory, Is.EqualTo(_responseTroubleshooterCategoryCollection.FirstOrDefault()));
        }
        public void CreateUpdateDeleteNewsCategory()
        {
            TroubleshooterCategoryRequest troubleshooterCategoryRequest = new TroubleshooterCategoryRequest
                {
                    Title = "Troubleshooter Category Request",
                    CategoryType = TroubleshooterCategoryType.Public,
                    StaffId = 1,
                    DisplayOrder = 5,
                    Description = "Description of Troubleshooter Category Request",
                    UserVisibilityCustom = false,
                    StaffVisibilityCustom = false
                };

            var troubleshooterCategory = TestSetup.KayakoApiService.Troubleshooter.CreateTroubleshooterCategory(troubleshooterCategoryRequest);

            Assert.IsNotNull(troubleshooterCategory);
            Assert.That(troubleshooterCategory.Title, Is.EqualTo(troubleshooterCategoryRequest.Title));
            Assert.That(troubleshooterCategory.CategoryType, Is.EqualTo(troubleshooterCategoryRequest.CategoryType));
            Assert.That(troubleshooterCategory.StaffId, Is.EqualTo(troubleshooterCategoryRequest.StaffId));
            Assert.That(troubleshooterCategory.DisplayOrder, Is.EqualTo(troubleshooterCategoryRequest.DisplayOrder));
            Assert.That(troubleshooterCategory.Description, Is.EqualTo(troubleshooterCategoryRequest.Description));
            Assert.That(troubleshooterCategory.UserVisibilityCustom, Is.EqualTo(troubleshooterCategoryRequest.UserVisibilityCustom));
            Assert.That(troubleshooterCategory.StaffVisibilityCustom, Is.EqualTo(troubleshooterCategoryRequest.StaffVisibilityCustom));

            troubleshooterCategoryRequest.Id = troubleshooterCategory.Id;
            troubleshooterCategoryRequest.Title += "_Title";
            troubleshooterCategoryRequest.Description += "_Updated";

            troubleshooterCategory = TestSetup.KayakoApiService.Troubleshooter.UpdateTroubleshooterCategory(troubleshooterCategoryRequest);

            Assert.IsNotNull(troubleshooterCategory);
            Assert.That(troubleshooterCategory.Title, Is.EqualTo(troubleshooterCategoryRequest.Title));
            Assert.That(troubleshooterCategory.Description, Is.EqualTo(troubleshooterCategoryRequest.Description));

            var deleteResult = TestSetup.KayakoApiService.Troubleshooter.DeleteTroubleshooterCategory(troubleshooterCategoryRequest.Id);
            Assert.IsTrue(deleteResult);
        }
		public TroubleshooterCategory CreateTroubleshooterCategory(TroubleshooterCategoryRequest troubleshooterCategoryRequest)
		{
			RequestBodyBuilder parameters = PopulateRequestParameters(troubleshooterCategoryRequest, RequestTypes.Create);

			TroubleshooterCategoryCollection troubleshooterCategories = Connector.ExecutePost<TroubleshooterCategoryCollection>(TroubleshooterCategoryBaseUrl, parameters.ToString());

			if (troubleshooterCategories != null && troubleshooterCategories.Count > 0)
			{
				return troubleshooterCategories[0];
			}

			return null;
		}
		private RequestBodyBuilder PopulateRequestParameters(TroubleshooterCategoryRequest troubleshooterCategoryRequest, RequestTypes requestType)
		{
			troubleshooterCategoryRequest.EnsureValidData(requestType);

			RequestBodyBuilder parameters = new RequestBodyBuilder();
			parameters.AppendRequestDataNonEmptyString("title", troubleshooterCategoryRequest.Title);
			parameters.AppendRequestData("categorytype", EnumUtility.ToApiString(troubleshooterCategoryRequest.CategoryType));

			if (requestType == RequestTypes.Create)
			{
				parameters.AppendRequestDataNonNegativeInt("staffid", troubleshooterCategoryRequest.StaffId);
			}

			if (troubleshooterCategoryRequest.DisplayOrder.HasValue)
			{
				parameters.AppendRequestDataNonNegativeInt("displayorder", troubleshooterCategoryRequest.DisplayOrder.Value);
			}

			parameters.AppendRequestDataNonEmptyString("description", troubleshooterCategoryRequest.Description);
			parameters.AppendRequestDataBool("uservisibilitycustom", troubleshooterCategoryRequest.UserVisibilityCustom);
			parameters.AppendRequestDataArrayCommaSeparated("usergroupidlist", troubleshooterCategoryRequest.UserGroupIdList);
			parameters.AppendRequestDataBool("staffvisibilitycustom", troubleshooterCategoryRequest.StaffVisibilityCustom);
			parameters.AppendRequestDataArrayCommaSeparated("staffgroupidlist", troubleshooterCategoryRequest.StaffGroupIdList);

			return parameters;
		}
		public TroubleshooterCategory UpdateTroubleshooterCategory(TroubleshooterCategoryRequest troubleshooterCategoryRequest)
		{
			string apiMethod = String.Format("{0}/{1}", TroubleshooterCategoryBaseUrl, troubleshooterCategoryRequest.Id);
			RequestBodyBuilder parameters = PopulateRequestParameters(troubleshooterCategoryRequest, RequestTypes.Update);

			TroubleshooterCategoryCollection troubleshooterCategories = Connector.ExecutePut<TroubleshooterCategoryCollection>(apiMethod, parameters.ToString());

			if (troubleshooterCategories != null && troubleshooterCategories.Count > 0)
			{
				return troubleshooterCategories[0];
			}

			return null;
		}
 public static TroubleshooterCategory ToResponseData(TroubleshooterCategoryRequest requestData) => ToResponseType <TroubleshooterCategoryRequest, TroubleshooterCategory>(requestData);
		public static TroubleshooterCategory ToResponseData(TroubleshooterCategoryRequest requestData)
		{
			return ToResponseType<TroubleshooterCategoryRequest, TroubleshooterCategory>(requestData);
		}