using AutoFixture; using MockQueryable.Moq; using Moq; using Moq.AutoMock; using NUnit.Framework; using Ombi.Core.Authentication; using Ombi.Core.Helpers; using Ombi.Core.Models.Requests; using Ombi.Core.Services; using Ombi.Core.Settings; using Ombi.Settings.Settings.Models; using Ombi.Store.Entities; using Ombi.Store.Entities.Requests; using Ombi.Store.Repository.Requests; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace Ombi.Core.Tests.Services { [TestFixture] public class RecentlyRequestedServiceTests { private AutoMocker _mocker; private RecentlyRequestedService _subject; private Fixture _fixture; [SetUp] public void Setup() { _fixture = new Fixture(); _fixture.Behaviors.OfType().ToList() .ForEach(b => _fixture.Behaviors.Remove(b)); _fixture.Behaviors.Add(new OmitOnRecursionBehavior()); _mocker = new AutoMocker(); _mocker.Setup>(x => x.GetUser()).ReturnsAsync(new OmbiUser { UserName = "test", Alias = "alias", Language = "en" }); _mocker.Setup(x => x.Username).Returns("test"); _subject = _mocker.CreateInstance(); } [Test] public async Task GetRecentlyRequested_Movies() { _mocker.Setup, Task>(x => x.GetSettingsAsync()) .ReturnsAsync(new CustomizationSettings()); var releaseDate = new DateTime(2019, 01, 01); var requestDate = DateTime.Now; var movies = new List { new MovieRequests { Id = 1, Approved = true, Available = true, ReleaseDate = releaseDate, Title = "title", Overview = "overview", RequestedDate = requestDate, RequestedUser = new Store.Entities.OmbiUser { UserName = "a" }, RequestedUserId = "b", } }; var albums = new List(); var chilRequests = new List(); _mocker.Setup>(x => x.GetAll()).Returns(movies.AsQueryable().BuildMock()); _mocker.Setup>(x => x.GetAll()).Returns(albums.AsQueryable().BuildMock()); _mocker.Setup>(x => x.GetChild()).Returns(chilRequests.AsQueryable().BuildMock()); var result = await _subject.GetRecentlyRequested(CancellationToken.None); Assert.That(result.Count, Is.EqualTo(1)); Assert.That(result.First(), Is.InstanceOf() .With.Property(nameof(RecentlyRequestedModel.RequestId)).EqualTo(1) .With.Property(nameof(RecentlyRequestedModel.Approved)).EqualTo(true) .With.Property(nameof(RecentlyRequestedModel.Available)).EqualTo(true) .With.Property(nameof(RecentlyRequestedModel.Title)).EqualTo("title") .With.Property(nameof(RecentlyRequestedModel.Overview)).EqualTo("overview") .With.Property(nameof(RecentlyRequestedModel.RequestDate)).EqualTo(requestDate) .With.Property(nameof(RecentlyRequestedModel.ReleaseDate)).EqualTo(releaseDate) .With.Property(nameof(RecentlyRequestedModel.Type)).EqualTo(RequestType.Movie) ); } [Test] public async Task GetRecentlyRequested_Movies_HideAvailable() { _mocker.Setup, Task>(x => x.GetSettingsAsync()) .ReturnsAsync(new CustomizationSettings() { HideAvailableRecentlyRequested = true }); var releaseDate = new DateTime(2019, 01, 01); var requestDate = DateTime.Now; var movies = new List { new MovieRequests { Id = 1, Approved = true, Available = true, ReleaseDate = releaseDate, Title = "title", Overview = "overview", RequestedDate = requestDate, RequestedUser = new Store.Entities.OmbiUser { UserName = "a" }, RequestedUserId = "b", }, new MovieRequests { Id = 1, Approved = true, Available = false, ReleaseDate = releaseDate, Title = "title2", Overview = "overview2", RequestedDate = requestDate, RequestedUser = new Store.Entities.OmbiUser { UserName = "a" }, RequestedUserId = "b", } }; var albums = new List(); var chilRequests = new List(); _mocker.Setup>(x => x.GetAll()).Returns(movies.AsQueryable().BuildMock()); _mocker.Setup>(x => x.GetAll()).Returns(albums.AsQueryable().BuildMock()); _mocker.Setup>(x => x.GetChild()).Returns(chilRequests.AsQueryable().BuildMock()); var result = await _subject.GetRecentlyRequested(CancellationToken.None); Assert.That(result.Count, Is.EqualTo(1)); Assert.That(result.First(), Is.InstanceOf() .With.Property(nameof(RecentlyRequestedModel.RequestId)).EqualTo(1) .With.Property(nameof(RecentlyRequestedModel.Approved)).EqualTo(true) .With.Property(nameof(RecentlyRequestedModel.Available)).EqualTo(false) .With.Property(nameof(RecentlyRequestedModel.Title)).EqualTo("title2") .With.Property(nameof(RecentlyRequestedModel.Overview)).EqualTo("overview2") .With.Property(nameof(RecentlyRequestedModel.RequestDate)).EqualTo(requestDate) .With.Property(nameof(RecentlyRequestedModel.ReleaseDate)).EqualTo(releaseDate) .With.Property(nameof(RecentlyRequestedModel.Type)).EqualTo(RequestType.Movie) ); } [Test] public async Task GetRecentlyRequested() { _mocker.Setup, Task>(x => x.GetSettingsAsync()) .ReturnsAsync(new CustomizationSettings()); var releaseDate = new DateTime(2019, 01, 01); var requestDate = DateTime.Now; var movies = _fixture.CreateMany(10); var albums = _fixture.CreateMany(10); var chilRequests = _fixture.CreateMany(10); _mocker.Setup>(x => x.GetAll()).Returns(movies.AsQueryable().BuildMock()); _mocker.Setup>(x => x.GetAll()).Returns(albums.AsQueryable().BuildMock()); _mocker.Setup>(x => x.GetChild()).Returns(chilRequests.AsQueryable().BuildMock()); var result = await _subject.GetRecentlyRequested(CancellationToken.None); Assert.That(result.Count, Is.EqualTo(21)); } [Test] public async Task GetRecentlyRequested_HideUsernames() { _mocker.Setup, Task>(x => x.GetSettingsAsync()) .ReturnsAsync(new CustomizationSettings()); _mocker.Setup, Task>(x => x.GetSettingsAsync()) .ReturnsAsync(new OmbiSettings { HideRequestsUsers = true }); var releaseDate = new DateTime(2019, 01, 01); var requestDate = DateTime.Now; var movies = _fixture.CreateMany(10).ToList(); var albums = _fixture.CreateMany(10); var chilRequests = _fixture.CreateMany(10); movies.Add(_fixture.Build().With(x => x.RequestedUserId, "a").With(x => x.Title, "unit").Create()); _mocker.Setup>(x => x.GetAll()).Returns(movies.AsQueryable().BuildMock()); _mocker.Setup>(x => x.GetAll()).Returns(albums.AsQueryable().BuildMock()); _mocker.Setup>(x => x.GetChild()).Returns(chilRequests.AsQueryable().BuildMock()); _mocker.Setup>(x => x.GetUser()).ReturnsAsync(new OmbiUser { UserName = "test", Id = "a", Alias = "alias", UserType = UserType.LocalUser }); _mocker.Setup(x => x.Username).Returns("test"); _mocker.Setup>(x => x.IsInRoleAsync(It.IsAny(), It.IsAny())).ReturnsAsync(false); var result = await _subject.GetRecentlyRequested(CancellationToken.None); Assert.Multiple(() => { Assert.That(result.Count, Is.EqualTo(1)); Assert.That(result.First().Title, Is.EqualTo("unit")); }); } } }