//#region Copyright
//// /************************************************************************
////    Copyright (c) 2016 Jamie Rees
////    File: ApiModuleTests.cs
////    Created By: Jamie Rees
////   
////    Permission is hereby granted, free of charge, to any person obtaining
////    a copy of this software and associated documentation files (the
////    "Software"), to deal in the Software without restriction, including
////    without limitation the rights to use, copy, modify, merge, publish,
////    distribute, sublicense, and/or sell copies of the Software, and to
////    permit persons to whom the Software is furnished to do so, subject to
////    the following conditions:
////   
////    The above copyright notice and this permission notice shall be
////    included in all copies or substantial portions of the Software.
////   
////    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
////    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
////    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
////    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
////    LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
////    OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
////    WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
////  ************************************************************************/
//#endregion
//using System;
//using System.Collections.Generic;
//using System.Linq;

//using FluentValidation;

//using Moq;

//using Nancy;
//using Nancy.Testing;
//using Nancy.Validation;
//using Nancy.Validation.FluentValidation;

//using Newtonsoft.Json;

//using NUnit.Framework;
//using NUnit.Framework.Constraints;
//using PlexRequests.Core;
//using PlexRequests.Core.SettingModels;
//using PlexRequests.Store;
//using PlexRequests.Store.Repository;
//using PlexRequests.UI.Models;
//using PlexRequests.UI.Modules;
//using PlexRequests.UI.Validators;

//using Ploeh.AutoFixture;

//namespace PlexRequests.UI.Tests
//{
//    [TestFixture]
//    public class ApiModuleTests
//    {
//        private ConfigurableBootstrapper Bootstrapper { get; set; }

//        [SetUp]
//        public void Setup()
//        {
//            var fixture = new Fixture();
//            var requests = fixture.CreateMany<RequestedModel>();
//            var requestMock = new Mock<IRequestService>();
//            var settingsMock = new Mock<ISettingsService<PlexRequestSettings>>();
//            var userRepoMock = new Mock<IRepository<UsersModel>>();
//            var mapperMock = new Mock<ICustomUserMapper>();
//            var authSettingsMock = new Mock<ISettingsService<AuthenticationSettings>>();
//            var plexSettingsMock = new Mock<ISettingsService<PlexSettings>>();
//            var cpMock = new Mock<ISettingsService<CouchPotatoSettings>>();
//            var sonarrMock = new Mock<ISettingsService<SonarrSettings>>();
//            var sickRageMock = new Mock<ISettingsService<SickRageSettings>>();
//            var headphonesMock = new Mock<ISettingsService<HeadphonesSettings>>();

//            var userModels = fixture.CreateMany<UsersModel>().ToList();
//            userModels.Add(new UsersModel
//            {
//                UserName = "user1"
//            });

//            settingsMock.Setup(x => x.GetSettings()).Returns(new PlexRequestSettings { ApiKey = "api" });
//            requestMock.Setup(x => x.GetAll()).Returns(requests);
//            requestMock.Setup(x => x.Get(1)).Returns(requests.FirstOrDefault());
//            requestMock.Setup(x => x.Get(99)).Returns(new RequestedModel());
//            requestMock.Setup(x => x.DeleteRequest(It.IsAny<RequestedModel>()));

//            userRepoMock.Setup(x => x.GetAll()).Returns(userModels);
//            userRepoMock.Setup(x => x.Update(It.IsAny<UsersModel>())).Returns(true);

//            mapperMock.Setup(x => x.ValidateUser("user1", It.IsAny<string>())).Returns(Guid.NewGuid());
//            mapperMock.Setup(x => x.UpdatePassword("user1", "password", "newpassword")).Returns(true);

//            authSettingsMock.Setup(x => x.SaveSettings(It.Is<AuthenticationSettings>(c => c.PlexAuthToken.Equals("abc")))).Returns(true);

//            plexSettingsMock.Setup(x => x.GetSettings()).Returns(fixture.Create<PlexSettings>());
//            plexSettingsMock.Setup(x => x.SaveSettings(It.Is<PlexSettings>(c => c.Ip.Equals("192")))).Returns(true);

//            cpMock.Setup(x => x.GetSettings()).Returns(fixture.Create<CouchPotatoSettings>());
//            cpMock.Setup(x => x.SaveSettings(It.Is<CouchPotatoSettings>(c => c.Ip.Equals("192")))).Returns(true);

//            sonarrMock.Setup(x => x.GetSettings()).Returns(fixture.Create<SonarrSettings>());
//            sonarrMock.Setup(x => x.SaveSettings(It.Is<SonarrSettings>(c => c.Ip.Equals("192")))).Returns(true);

//            sickRageMock.Setup(x => x.GetSettings()).Returns(fixture.Create<SickRageSettings>());
//            sickRageMock.Setup(x => x.SaveSettings(It.Is<SickRageSettings>(c => c.Ip.Equals("192")))).Returns(true);

//            headphonesMock.Setup(x => x.GetSettings()).Returns(fixture.Create<HeadphonesSettings>());
//            headphonesMock.Setup(x => x.SaveSettings(It.Is<HeadphonesSettings>(c => c.Ip.Equals("192")))).Returns(true);

//            Bootstrapper = new ConfigurableBootstrapper(with =>
//            {
//                with.Module<ApiRequestModule>();
//                with.Module<ApiUserModule>();
//                with.Module<ApiSettingsModule>();

//                with.Dependency(requestMock.Object);
//                with.Dependency(settingsMock.Object);
//                with.Dependency(userRepoMock.Object);
//                with.Dependency(mapperMock.Object);
//                with.Dependency(headphonesMock.Object);
//                with.Dependency(authSettingsMock.Object);
//                with.Dependency(plexSettingsMock.Object);
//                with.Dependency(cpMock.Object);
//                with.Dependency(sonarrMock.Object);
//                with.Dependency(sickRageMock.Object);


//                with.RootPathProvider<TestRootPathProvider>();
//                with.ModelValidatorLocator(
//                    new DefaultValidatorLocator(
//                        new List<IModelValidatorFactory>
//                        {
//                                new FluentValidationValidatorFactory(
//                                    new DefaultFluentAdapterFactory(new List<IFluentAdapter>()),
//                                    new List<IValidator> { new RequestedModelValidator(), new UserViewModelValidator(), new PlexValidator() })
//                        }));
//            });
//        }

//        private Action<BrowserContext> GetBrowser()
//        {
//            return with =>
//            {
//                with.HttpRequest();
//                with.Header("Accept", "application/json");
//                with.Query("apikey", "api");
//            };
//        }

//        [Test]
//        public void InvalidApiKey()
//        {
//            var browser = new Browser(Bootstrapper);

//            var result = browser.Get("/api/requests", with =>
//            {
//                with.HttpRequest();
//                with.Header("Accept", "application/json");
//                with.Query("apikey", "a");
//            });

//            Assert.That(HttpStatusCode.OK, Is.EqualTo(result.StatusCode));

//            var body = JsonConvert.DeserializeObject<ApiModel<List<RequestedModel>>>(result.Body.AsString());
//            Assert.That(body.Error, Is.True);
//            Assert.That(body.ErrorMessage, Is.Not.Empty);
//        }

//        [Test]
//        public void GetAllRequests()
//        {
//            var browser = new Browser(Bootstrapper);

//            var result = browser.Get("/api/requests", GetBrowser());
//            Assert.That(HttpStatusCode.OK, Is.EqualTo(result.StatusCode));

//            var body = JsonConvert.DeserializeObject<ApiModel<List<RequestedModel>>>(result.Body.AsString());
//            Assert.That(body.Data, Is.Not.Null);
//            Assert.That(body.Data.Count, Is.GreaterThan(0));
//            Assert.That(body.Error, Is.False);
//            Assert.That(body.ErrorMessage, Is.Null.Or.Empty);
//        }

//        [Test]
//        public void GetSingleRequest()
//        {
//            var browser = new Browser(Bootstrapper);

//            var result = browser.Get("/api/requests/1", GetBrowser());
//            Assert.That(HttpStatusCode.OK, Is.EqualTo(result.StatusCode));

//            var body = JsonConvert.DeserializeObject<ApiModel<List<RequestedModel>>>(result.Body.AsString());
//            Assert.That(body.Data, Is.Not.Null);
//            Assert.That(body.Data.Count, Is.EqualTo(1));
//            Assert.That(body.Error, Is.False);
//            Assert.That(body.ErrorMessage, Is.Null.Or.Empty);
//        }

//        [Test]
//        public void GetSingleRequestThatDoesntExist()
//        {
//            var browser = new Browser(Bootstrapper);

//            var result = browser.Get("/api/requests/99", GetBrowser());
//            Assert.That(HttpStatusCode.OK, Is.EqualTo(result.StatusCode));

//            var body = JsonConvert.DeserializeObject<ApiModel<List<RequestedModel>>>(result.Body.AsString());
//            Assert.That(body.Data, Is.Not.Null);
//            Assert.That(body.Data.Count, Is.EqualTo(0));
//            Assert.That(body.Error, Is.True);
//            Assert.That(body.ErrorMessage, Is.Not.Null.Or.Empty);
//        }

//        [Test]
//        public void DeleteARequest()
//        {
//            var browser = new Browser(Bootstrapper);

//            var result = browser.Delete("/api/requests/1", GetBrowser());
//            Assert.That(HttpStatusCode.OK, Is.EqualTo(result.StatusCode));

//            var body = JsonConvert.DeserializeObject<ApiModel<bool>>(result.Body.AsString());
//            Assert.That(body.Data, Is.True);
//            Assert.That(body.Error, Is.False);
//            Assert.That(body.ErrorMessage, Is.Null.Or.Empty);
//        }

//        [Test]
//        public void DeleteARequestThatDoesNotExist()
//        {
//            var browser = new Browser(Bootstrapper);

//            var result = browser.Delete("/api/requests/99", GetBrowser());
//            Assert.That(HttpStatusCode.OK, Is.EqualTo(result.StatusCode));

//            var body = JsonConvert.DeserializeObject<ApiModel<bool>>(result.Body.AsString());
//            Assert.That(body.Data, Is.False);
//            Assert.That(body.Error, Is.True);
//            Assert.That(body.ErrorMessage, Is.Not.Null.Or.Empty);
//        }

        
//        [Test]
//        public void UpdateUsersPassword()
//        {
//            var model = new UserUpdateViewModel
//            {
//                CurrentPassword = "password",
//                NewPassword = "newpassword"
//            };
//            var browser = new Browser(Bootstrapper);
//            var result = browser.Put("/api/credentials/user1", with =>
//            {
//                with.HttpRequest();
//                with.Header("Accept", "application/json");
//                with.Query("apikey", "api");
//                with.JsonBody(model);
//            });

//            Assert.That(HttpStatusCode.OK, Is.EqualTo(result.StatusCode));

//            var body = JsonConvert.DeserializeObject<ApiModel<string>>(result.Body.AsString());
//            Assert.That(body.Data, Is.Not.Null.Or.Empty);
//            Assert.That(body.Error, Is.False);
//            Assert.That(body.ErrorMessage, Is.Null.Or.Empty);
//        }

//        [Test]
//        public void UpdateInvalidUsersPassword()
//        {
//            var model = new UserUpdateViewModel
//            {
//                CurrentPassword = "password",
//                NewPassword = "newpassword"
//            };
//            var browser = new Browser(Bootstrapper);
//            var result = browser.Put("/api/credentials/user99", with =>
//            {
//                with.HttpRequest();
//                with.Header("Accept", "application/json");
//                with.Query("apikey", "api");
//                with.JsonBody(model);
//            });

//            Assert.That(HttpStatusCode.OK, Is.EqualTo(result.StatusCode));

//            var body = JsonConvert.DeserializeObject<ApiModel<string>>(result.Body.AsString());
//            Assert.That(body.Data, Is.Null.Or.Empty);
//            Assert.That(body.Error, Is.True);
//            Assert.That(body.ErrorMessage, Is.Not.Null.Or.Empty);
//        }

//        [Test]
//        public void UpdateUsersInvalidPassword()
//        {
//            var model = new UserUpdateViewModel
//            {
//                CurrentPassword = "password",
//                NewPassword = "password2"
//            };
//            var browser = new Browser(Bootstrapper);
//            var result = browser.Put("/api/credentials/user1", with =>
//            {
//                with.HttpRequest();
//                with.Header("Accept", "application/json");
//                with.Query("apikey", "api");
//                with.JsonBody(model);
//            });

//            Assert.That(HttpStatusCode.OK, Is.EqualTo(result.StatusCode));

//            var body = JsonConvert.DeserializeObject<ApiModel<string>>(result.Body.AsString());
//            Assert.That(body.Data, Is.Null.Or.Empty);
//            Assert.That(body.Error, Is.True);
//            Assert.That(body.ErrorMessage, Is.Not.Null.Or.Empty);
//        }

//        [Test]
//        public void UpdateUsersWithBadModel()
//        {
//            var model = new UserUpdateViewModel
//            {
//                CurrentPassword = null,
//                NewPassword = "password2"
//            };
//            var browser = new Browser(Bootstrapper);
//            var result = browser.Put("/api/credentials/user1", with =>
//            {
//                with.HttpRequest();
//                with.Header("Accept", "application/json");
//                with.Query("apikey", "api");
//                with.JsonBody(model);
//            });

//            Assert.That(HttpStatusCode.OK, Is.EqualTo(result.StatusCode));

//            var body = JsonConvert.DeserializeObject<ApiModel<string[]>>(result.Body.AsString());
//            Assert.That(body.Data.Length, Is.GreaterThan(0));
//            Assert.That(body.Error, Is.True);
//            Assert.That(body.ErrorMessage, Is.Not.Null.Or.Empty);
//        }

//        [Test]
//        public void GetApiKey()
//        {
//            var browser = new Browser(Bootstrapper);
//            var result = browser.Get("/api/apikey", with =>
//            {
//                with.HttpRequest();
//                with.Header("Accept", "application/json");
//                with.Query("apikey", "api");
//                with.Query("username", "user1");
//                with.Query("password", "password");
//            });

//            Assert.That(HttpStatusCode.OK, Is.EqualTo(result.StatusCode));

//            var body = JsonConvert.DeserializeObject<ApiModel<string>>(result.Body.AsString());
//            Assert.That(body.Data, Is.Not.Null.Or.Empty);
//            Assert.That(body.Error, Is.False);
//            Assert.That(body.ErrorMessage, Is.Null.Or.Empty);
//        }

//        [Test]
//        public void GetApiKeyWithBadCredentials()
//        {
//            var browser = new Browser(Bootstrapper);
//            var result = browser.Get("/api/apikey", with =>
//            {
//                with.HttpRequest();
//                with.Header("Accept", "application/json");
//                with.Query("apikey", "api");
//                with.Query("username", "user");
//                with.Query("password", "password");
//            });

//            Assert.That(HttpStatusCode.OK, Is.EqualTo(result.StatusCode));

//            var body = JsonConvert.DeserializeObject<ApiModel<string>>(result.Body.AsString());
//            Assert.That(body.Data, Is.Null.Or.Empty);
//            Assert.That(body.Error, Is.True);
//            Assert.That(body.ErrorMessage, Is.Not.Null.Or.Empty);
//        }


//        [Test]
//        public void SaveNewAuthSettings()
//        {
//            var model = new AuthenticationSettings
//            {
//                Id = 1,
//                PlexAuthToken = "abc",
//                DeniedUsers = "abc",
//                UsePassword = false,
//                UserAuthentication = true
//            };
//            var browser = new Browser(Bootstrapper);
//            var result = browser.Post("api/settings/authentication", with =>
//            {
//                with.HttpRequest();
//                with.Header("Accept", "application/json");
//                with.Query("apikey", "api");
//                with.JsonBody(model);
//            });

//            Assert.That(HttpStatusCode.OK, Is.EqualTo(result.StatusCode));

//            var body = JsonConvert.DeserializeObject<ApiModel<string>>(result.Body.AsString());
//            Assert.That(body.Data, Is.Not.Null.Or.Empty);
//            Assert.That(body.Error, Is.False);
//            Assert.That(body.ErrorMessage, Is.Null.Or.Empty);
//        }

//        [Test]
//        public void GetPlexSettings()
//        {
//            var browser = new Browser(Bootstrapper);
//            var result = browser.Get("/api/settings/plex", with =>
//            {
//                with.HttpRequest();
//                with.Header("Accept", "application/json");
//                with.Query("apikey", "api");
//            });

//            var body = JsonConvert.DeserializeObject<ApiModel<PlexSettings>>(result.Body.AsString());

//            Assert.That(body.Data, Is.Not.Null);
//            Assert.That(body.Error, Is.False);
//            Assert.That(body.ErrorMessage, Is.Null);
//        }

//        [Test]
//        public void SavePlexSettings()
//        {
//            var model = new PlexSettings()
//            {
//                Port = 231,
//                Ip = "192",
//                Ssl = true,
//            };
//            var browser = new Browser(Bootstrapper);
//            var result = browser.Post("/api/settings/plex", with =>
//            {
//                with.HttpRequest();
//                with.Header("Accept", "application/json");
//                with.Query("apikey", "api");
//                with.JsonBody(model);
//            });

//            var body = JsonConvert.DeserializeObject<ApiModel<bool>>(result.Body.AsString());

//            Assert.That(body.Data, Is.EqualTo(true));
//            Assert.That(body.Error, Is.False);
//            Assert.That(body.ErrorMessage, Is.Null);
//        }
//        [Test]
//        public void SaveBadPlexSettings()
//        {
//            var model = new PlexSettings
//            {
//                Ip = "q",
//                Ssl = true,
//            };
//            var browser = new Browser(Bootstrapper);
//            var result = browser.Post("/api/settings/plex", with =>
//            {
//                with.HttpRequest();
//                with.Header("Accept", "application/json");
//                with.Query("apikey", "api");
//                with.JsonBody(model);
//            });

//            var body = JsonConvert.DeserializeObject<ApiModel<bool>>(result.Body.AsString());

//            Assert.That(body.Data, Is.EqualTo(false));
//            Assert.That(body.Error, Is.True);
//            Assert.That(body.ErrorMessage, Is.EqualTo("Could not update the settings"));
//        }

//        [Test]
//        public void GetCpSettings()
//        {
//            var browser = new Browser(Bootstrapper);
//            var result = browser.Get("/api/settings/couchpotato", with =>
//            {
//                with.HttpRequest();
//                with.Header("Accept", "application/json");
//                with.Query("apikey", "api");
//            });

//            var body = JsonConvert.DeserializeObject<ApiModel<CouchPotatoSettings>>(result.Body.AsString());

//            Assert.That(body.Data, Is.Not.Null);
//            Assert.That(body.Error, Is.False);
//            Assert.That(body.ErrorMessage, Is.Null);
//        }

//        [Test]
//        public void SaveCpSettings()
//        {
//            var model = new CouchPotatoSettings
//            {
//                Port = 231,
//                Ip = "192",
//                Ssl = true,
//            };
//            var browser = new Browser(Bootstrapper);
//            var result = browser.Post("/api/settings/couchpotato", with =>
//            {
//                with.HttpRequest();
//                with.Header("Accept", "application/json");
//                with.Query("apikey", "api");
//                with.JsonBody(model);
//            });

//            var body = JsonConvert.DeserializeObject<ApiModel<bool>>(result.Body.AsString());

//            Assert.That(body.Data, Is.EqualTo(true));
//            Assert.That(body.Error, Is.False);
//            Assert.That(body.ErrorMessage, Is.Null);
//        }
//        [Test]
//        public void SaveBadCpSettings()
//        {
//            var model = new CouchPotatoSettings
//            {
//                Ip = "q",
//                Ssl = true,
//            };
//            var browser = new Browser(Bootstrapper);
//            var result = browser.Post("/api/settings/couchpotato", with =>
//            {
//                with.HttpRequest();
//                with.Header("Accept", "application/json");
//                with.Query("apikey", "api");
//                with.JsonBody(model);
//            });

//            var body = JsonConvert.DeserializeObject<ApiModel<bool>>(result.Body.AsString());

//            Assert.That(body.Data, Is.EqualTo(false));
//            Assert.That(body.Error, Is.True);
//            Assert.That(body.ErrorMessage, Is.EqualTo("Could not update the settings"));
//        }

//        [Test]
//        public void GetSonarrSettings()
//        {
//            var browser = new Browser(Bootstrapper);
//            var result = browser.Get("/api/settings/sonarr", with =>
//            {
//                with.HttpRequest();
//                with.Header("Accept", "application/json");
//                with.Query("apikey", "api");
//            });

//            var body = JsonConvert.DeserializeObject<ApiModel<SonarrSettings>>(result.Body.AsString());

//            Assert.That(body.Data, Is.Not.Null);
//            Assert.That(body.Error, Is.False);
//            Assert.That(body.ErrorMessage, Is.Null);
//        }

//        [Test]
//        public void SaveSonarrSettings()
//        {
//            var model = new SonarrSettings
//            {
//                Port = 231,
//                Ip = "192",
//                Ssl = true,
//            };
//            var browser = new Browser(Bootstrapper);
//            var result = browser.Post("/api/settings/sonarr", with =>
//            {
//                with.HttpRequest();
//                with.Header("Accept", "application/json");
//                with.Query("apikey", "api");
//                with.JsonBody(model);
//            });

//            var body = JsonConvert.DeserializeObject<ApiModel<bool>>(result.Body.AsString());

//            Assert.That(body.Data, Is.EqualTo(true));
//            Assert.That(body.Error, Is.False);
//            Assert.That(body.ErrorMessage, Is.Null);
//        }
//        [Test]
//        public void SaveBadSonarrSettings()
//        {
//            var model = new SonarrSettings
//            {
//                Ip = "q",
//                Ssl = true,
//            };
//            var browser = new Browser(Bootstrapper);
//            var result = browser.Post("/api/settings/sonarr", with =>
//            {
//                with.HttpRequest();
//                with.Header("Accept", "application/json");
//                with.Query("apikey", "api");
//                with.JsonBody(model);
//            });

//            var body = JsonConvert.DeserializeObject<ApiModel<bool>>(result.Body.AsString());

//            Assert.That(body.Data, Is.EqualTo(false));
//            Assert.That(body.Error, Is.True);
//            Assert.That(body.ErrorMessage, Is.EqualTo("Could not update the settings"));
//        }

//        [Test]
//        public void GetSickRageSettings()
//        {
//            var browser = new Browser(Bootstrapper);
//            var result = browser.Get("/api/settings/sickrage", with =>
//            {
//                with.HttpRequest();
//                with.Header("Accept", "application/json");
//                with.Query("apikey", "api");
//            });

//            var body = JsonConvert.DeserializeObject<ApiModel<SickRageSettings>>(result.Body.AsString());

//            Assert.That(body.Data, Is.Not.Null);
//            Assert.That(body.Error, Is.False);
//            Assert.That(body.ErrorMessage, Is.Null);
//        }

//        [Test]
//        public void SaveSickRageSettings()
//        {
//            var model = new SickRageSettings
//            {
//                Port = 231,
//                Ip = "192",
//                Ssl = true,
//            };
//            var browser = new Browser(Bootstrapper);
//            var result = browser.Post("/api/settings/sickrage", with =>
//            {
//                with.HttpRequest();
//                with.Header("Accept", "application/json");
//                with.Query("apikey", "api");
//                with.JsonBody(model);
//            });

//            var body = JsonConvert.DeserializeObject<ApiModel<bool>>(result.Body.AsString());

//            Assert.That(body.Data, Is.EqualTo(true));
//            Assert.That(body.Error, Is.False);
//            Assert.That(body.ErrorMessage, Is.Null);
//        }
//        [Test]
//        public void SaveBadSickRageSettings()
//        {
//            var model = new SickRageSettings
//            {
//                Ip = "q",
//                Ssl = true,
//            };
//            var browser = new Browser(Bootstrapper);
//            var result = browser.Post("/api/settings/sickrage", with =>
//            {
//                with.HttpRequest();
//                with.Header("Accept", "application/json");
//                with.Query("apikey", "api");
//                with.JsonBody(model);
//            });

//            var body = JsonConvert.DeserializeObject<ApiModel<bool>>(result.Body.AsString());

//            Assert.That(body.Data, Is.EqualTo(false));
//            Assert.That(body.Error, Is.True);
//            Assert.That(body.ErrorMessage, Is.EqualTo("Could not update the settings"));
//        }

//        [Test]
//        public void GetHeadphonesSettings()
//        {
//            var browser = new Browser(Bootstrapper);
//            var result = browser.Get("/api/settings/headphones", with =>
//            {
//                with.HttpRequest();
//                with.Header("Accept", "application/json");
//                with.Query("apikey", "api");
//            });

//            var body = JsonConvert.DeserializeObject<ApiModel<HeadphonesSettings>>(result.Body.AsString());

//            Assert.That(body.Data, Is.Not.Null);
//            Assert.That(body.Error, Is.False);
//            Assert.That(body.ErrorMessage, Is.Null);
//        }

//        [Test]
//        public void SaveHeadphonesSettings()
//        {
//            var model = new HeadphonesSettings
//            {
//                Port = 231,
//                Ip = "192",
//                Ssl = true,
//            };
//            var browser = new Browser(Bootstrapper);
//            var result = browser.Post("/api/settings/headphones", with =>
//            {
//                with.HttpRequest();
//                with.Header("Accept", "application/json");
//                with.Query("apikey", "api");
//                with.JsonBody(model);
//            });

//            var body = JsonConvert.DeserializeObject<ApiModel<bool>>(result.Body.AsString());

//            Assert.That(body.Data, Is.EqualTo(true));
//            Assert.That(body.Error, Is.False);
//            Assert.That(body.ErrorMessage, Is.Null);
//        }
//        [Test]
//        public void SaveBadHeadphonesSettings()
//        {
//            var model = new HeadphonesSettings
//            {
//                Ip = "q",
//                Ssl = true,
//            };
//            var browser = new Browser(Bootstrapper);
//            var result = browser.Post("/api/settings/headphones", with =>
//            {
//                with.HttpRequest();
//                with.Header("Accept", "application/json");
//                with.Query("apikey", "api");
//                with.JsonBody(model);
//            });

//            var body = JsonConvert.DeserializeObject<ApiModel<bool>>(result.Body.AsString());

//            Assert.That(body.Data, Is.EqualTo(false));
//            Assert.That(body.Error, Is.True);
//            Assert.That(body.ErrorMessage, Is.EqualTo("Could not update the settings"));
//        }



//        [TestCaseSource(nameof(AuthSettingsData))]
//        public object SaveNewAuthSettings(object model)
//        {

//            var browser = new Browser(Bootstrapper);
//            var result = browser.Post("api/settings/authentication", with =>
//            {
//                with.HttpRequest();
//                with.Header("Accept", "application/json");
//                with.Query("apikey", "api");
//                with.JsonBody(model);
//            });

//            Assert.That(HttpStatusCode.OK, Is.EqualTo(result.StatusCode));
//            var body = JsonConvert.DeserializeObject<ApiModel<bool>>(result.Body.AsString());

//            var retVal = new List<string> { body.ErrorMessage, body.Error.ToString(), body.Data.ToString() };
//            return retVal;
//        }

//        private static IEnumerable<TestCaseData> AuthSettingsData
//        {
//            get
//            {
//                yield return
//                    new TestCaseData(new AuthenticationSettings { Id = 1, PlexAuthToken = "abc", DeniedUsers = "abc", UsePassword = false, UserAuthentication = true })
//                        .Returns(new List<string> { null, false.ToString(), true.ToString() });
//            }
//        }
//    }
//}