diff --git a/PlexRequests.UI.Tests/PlexRequests.UI.Tests.csproj b/PlexRequests.UI.Tests/PlexRequests.UI.Tests.csproj index 07171162c..594207c57 100644 --- a/PlexRequests.UI.Tests/PlexRequests.UI.Tests.csproj +++ b/PlexRequests.UI.Tests/PlexRequests.UI.Tests.csproj @@ -104,6 +104,10 @@ {95834072-A675-415D-AA8F-877C91623810} PlexRequests.Api.Interfaces + + {CB37A5F8-6DFC-4554-99D3-A42B502E4591} + PlexRequests.Api.Models + {DD7DC444-D3BF-4027-8AB9-EFC71F5EC581} PlexRequests.Core diff --git a/PlexRequests.UI.Tests/UserLoginModuleTests.cs b/PlexRequests.UI.Tests/UserLoginModuleTests.cs index 3cab03fc2..1d6603d89 100644 --- a/PlexRequests.UI.Tests/UserLoginModuleTests.cs +++ b/PlexRequests.UI.Tests/UserLoginModuleTests.cs @@ -36,6 +36,8 @@ using Newtonsoft.Json; using NUnit.Framework; using PlexRequests.Api.Interfaces; +using PlexRequests.Api.Models; +using PlexRequests.Api.Models.Tv; using PlexRequests.Core; using PlexRequests.Core.SettingModels; using PlexRequests.UI.Models; @@ -89,5 +91,205 @@ namespace PlexRequests.UI.Tests Assert.That(body.Result, Is.EqualTo(true)); } + + [Test] + public void LoginWithUsernameSuccessfully() + { + var expectedSettings = new AuthenticationSettings { UserAuthentication = true, PlexAuthToken = "abc" }; + var plexFriends = new PlexFriends + { + User = new[] + { + new UserFriends + { + Username = "abc", + }, + } + }; + + AuthMock.Setup(x => x.GetSettings()).Returns(expectedSettings); + PlexMock.Setup(x => x.GetUsers(It.IsAny())).Returns(plexFriends); + + var bootstrapper = new ConfigurableBootstrapper(with => + { + with.Module(); + with.Dependency(AuthMock.Object); + with.Dependency(PlexMock.Object); + with.RootPathProvider(); + }); + + bootstrapper.WithSession(new Dictionary()); + + var browser = new Browser(bootstrapper); + // When + var result = browser.Post("/userlogin", with => + { + with.HttpRequest(); + with.Header("Accept", "application/json"); + with.FormValue("Username", "abc"); + }); + + // Then + Assert.That(HttpStatusCode.OK, Is.EqualTo(result.StatusCode)); + Assert.That(result.Context.Request.Session[SessionKeys.UsernameKey], Is.EqualTo("abc")); + + var body = JsonConvert.DeserializeObject(result.Body.AsString()); + Assert.That(body.Result, Is.EqualTo(true)); + + } + + [Test] + public void LoginWithUsernameUnSuccessfully() + { + var expectedSettings = new AuthenticationSettings { UserAuthentication = true, PlexAuthToken = "abc" }; + var plexFriends = new PlexFriends + { + User = new[] + { + new UserFriends + { + Username = "aaaa", + }, + } + }; + + AuthMock.Setup(x => x.GetSettings()).Returns(expectedSettings); + PlexMock.Setup(x => x.GetUsers(It.IsAny())).Returns(plexFriends); + + var bootstrapper = new ConfigurableBootstrapper(with => + { + with.Module(); + with.Dependency(AuthMock.Object); + with.Dependency(PlexMock.Object); + with.RootPathProvider(); + }); + + bootstrapper.WithSession(new Dictionary()); + + var browser = new Browser(bootstrapper); + + var result = browser.Post("/userlogin", with => + { + with.HttpRequest(); + with.Header("Accept", "application/json"); + with.FormValue("Username", "abc"); + }); + + + Assert.That(HttpStatusCode.OK, Is.EqualTo(result.StatusCode)); + Assert.That(result.Context.Request.Session[SessionKeys.UsernameKey], Is.EqualTo("abc")); + + var body = JsonConvert.DeserializeObject(result.Body.AsString()); + Assert.That(body.Result, Is.EqualTo(false)); + Assert.That(body.Message, Is.Not.Empty); + } + + [Test] + public void LoginWithUsernameAndPasswordSuccessfully() + { + var expectedSettings = new AuthenticationSettings { UserAuthentication = true, UsePassword = true, PlexAuthToken = "abc" }; + var plexFriends = new PlexFriends + { + User = new[] + { + new UserFriends + { + Username = "abc", + }, + } + }; + var plexAuth = new PlexAuthentication + { + user = new User + { + authentication_token = "abc" + } + }; + + AuthMock.Setup(x => x.GetSettings()).Returns(expectedSettings); + PlexMock.Setup(x => x.GetUsers(It.IsAny())).Returns(plexFriends); + PlexMock.Setup(x => x.SignIn(It.IsAny(), It.IsAny())).Returns(plexAuth); + + var bootstrapper = new ConfigurableBootstrapper(with => + { + with.Module(); + with.Dependency(AuthMock.Object); + with.Dependency(PlexMock.Object); + with.RootPathProvider(); + }); + + bootstrapper.WithSession(new Dictionary()); + + var browser = new Browser(bootstrapper); + // When + var result = browser.Post("/userlogin", with => + { + with.HttpRequest(); + with.Header("Accept", "application/json"); + with.FormValue("Username", "abc"); + with.FormValue("Password", "abc"); + }); + + // Then + Assert.That(HttpStatusCode.OK, Is.EqualTo(result.StatusCode)); + Assert.That(result.Context.Request.Session[SessionKeys.UsernameKey], Is.EqualTo("abc")); + + var body = JsonConvert.DeserializeObject(result.Body.AsString()); + Assert.That(body.Result, Is.EqualTo(true)); + + } + + [Test] + public void LoginWithUsernameAndPasswordUnSuccessfully() + { + var expectedSettings = new AuthenticationSettings { UserAuthentication = true, UsePassword = true, PlexAuthToken = "abc" }; + var plexFriends = new PlexFriends + { + User = new[] + { + new UserFriends + { + Username = "abc", + }, + } + }; + var plexAuth = new PlexAuthentication + { + user = null + }; + + AuthMock.Setup(x => x.GetSettings()).Returns(expectedSettings); + PlexMock.Setup(x => x.GetUsers(It.IsAny())).Returns(plexFriends); + PlexMock.Setup(x => x.SignIn(It.IsAny(), It.IsAny())).Returns(plexAuth); + + var bootstrapper = new ConfigurableBootstrapper(with => + { + with.Module(); + with.Dependency(AuthMock.Object); + with.Dependency(PlexMock.Object); + with.RootPathProvider(); + }); + + bootstrapper.WithSession(new Dictionary()); + + var browser = new Browser(bootstrapper); + // When + var result = browser.Post("/userlogin", with => + { + with.HttpRequest(); + with.Header("Accept", "application/json"); + with.FormValue("Username", "abc"); + with.FormValue("Password", "abc"); + }); + + // Then + Assert.That(HttpStatusCode.OK, Is.EqualTo(result.StatusCode)); + Assert.That(result.Context.Request.Session[SessionKeys.UsernameKey], Is.EqualTo("abc")); + + var body = JsonConvert.DeserializeObject(result.Body.AsString()); + Assert.That(body.Result, Is.EqualTo(false)); + Assert.That(body.Message, Is.Not.Empty); + + } } } \ No newline at end of file