From a69cd6a33ccd24600982a1e0b6d47c9388b0dedc Mon Sep 17 00:00:00 2001 From: Cameron Date: Sun, 8 Sep 2024 14:08:48 -0500 Subject: [PATCH] fixed and reorganized tests --- ComiServ/Controllers/ComicController.cs | 4 +- .../AuthenticationServiceTests.cs | 38 -------- .../ContollerTests/ComicControllerTests.cs | 15 +++- .../EntityTests/PaginatedTests.cs | 87 +++++++++++++++++++ .../EntityTests/TruncatedTests.cs | 67 ++++++++++++++ .../Mocks/MockPictureConverter.cs | 29 +++++-- ComiServUnitTest/PaginatedTests.cs | 87 ------------------- .../AuthenticationServiceTests.cs | 38 ++++++++ ComiServUnitTest/TruncatedTests.cs | 67 -------------- 9 files changed, 227 insertions(+), 205 deletions(-) delete mode 100644 ComiServUnitTest/AuthenticationServiceTests.cs create mode 100644 ComiServUnitTest/EntityTests/PaginatedTests.cs create mode 100644 ComiServUnitTest/EntityTests/TruncatedTests.cs delete mode 100644 ComiServUnitTest/PaginatedTests.cs create mode 100644 ComiServUnitTest/ServiceTests/AuthenticationServiceTests.cs delete mode 100644 ComiServUnitTest/TruncatedTests.cs diff --git a/ComiServ/Controllers/ComicController.cs b/ComiServ/Controllers/ComicController.cs index 729c18e..522a190 100644 --- a/ComiServ/Controllers/ComicController.cs +++ b/ComiServ/Controllers/ComicController.cs @@ -471,8 +471,8 @@ public class ComicController(ComicsContext context, ILogger log public async Task GetLibraryStats() { return Ok(new LibraryResponse( - await _context.Comics.CountAsync(), - await _context.Comics.Select(c => c.FileXxhash64).Distinct().CountAsync() + ComicCount: await _context.Comics.CountAsync(), + UniqueFiles: await _context.Comics.Select(c => c.FileXxhash64).Distinct().CountAsync() )); } } diff --git a/ComiServUnitTest/AuthenticationServiceTests.cs b/ComiServUnitTest/AuthenticationServiceTests.cs deleted file mode 100644 index 7274b2c..0000000 --- a/ComiServUnitTest/AuthenticationServiceTests.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using ComiServ.Entities; -using ComiServ.Services; - -namespace ComiServUnitTest; - -[TestClass] -public class AuthenticationServiceTests -{ - [TestMethod] - public void FailAuth() - { - IAuthenticationService auth = new AuthenticationService(); - Assert.IsFalse(auth.Tested); - auth.FailAuth(); - Assert.IsTrue(auth.Tested); - Assert.IsNull(auth.User); - } - [TestMethod] - public void AuthenticateUser() - { - IAuthenticationService auth = new AuthenticationService(); - User user = new() - { - Username = "NewUser", - UserTypeId = UserTypeEnum.User, - }; - Assert.IsFalse(auth.Tested); - auth.Authenticate(user); - Assert.IsTrue(auth.Tested); - Assert.IsNotNull(auth.User); - Assert.AreSame(user, auth.User); - } -} diff --git a/ComiServUnitTest/ContollerTests/ComicControllerTests.cs b/ComiServUnitTest/ContollerTests/ComicControllerTests.cs index f41b04f..53cb365 100644 --- a/ComiServUnitTest/ContollerTests/ComicControllerTests.cs +++ b/ComiServUnitTest/ContollerTests/ComicControllerTests.cs @@ -61,7 +61,9 @@ public class ComicControllerTests ComicPage comicPage = new(PAGE_FILEPATH, PAGE_MIME, [1, 2, 3, 4, 5]); MockComicAnalyzer analyzer = new(); analyzer.ComicPages.Add((Path.Join(config.LibraryRoot, comic.Filepath), PAGE_NUMBER), comicPage); - IPictureConverter converter = new MockPictureConverter(); + //returned from all MockPictureConverter functions + byte[] mockPictureData = [1, 2, 3, 4, 5]; + MockPictureConverter converter = new MockPictureConverter(mockPictureData); AuthenticationService auth = new(); auth.Authenticate(user); var controller = new ComicController( @@ -78,10 +80,17 @@ public class ComicControllerTests var contents = ((FileContentResult)result).FileContents; Assert.IsTrue(comicPage.Data.SequenceEqual(contents)); //invalid handle (too short) - var result2 = await controller.GetComicFile(string.Join("", Enumerable.Repeat("A", ComicsContext.HANDLE_LENGTH - 1))); + var result2 = await controller.GetComicPage(comic.Handle.Substring(comic.Handle.Length-1), + PAGE_NUMBER, null, null, null); Assert.IsInstanceOfType(result2); //valid handle but doesn't exist - var result3 = await controller.GetComicFile(string.Join("", Enumerable.Repeat("B", ComicsContext.HANDLE_LENGTH))); + var result3 = await controller.GetComicPage(string.Join("", Enumerable.Repeat("B", ComicsContext.HANDLE_LENGTH)), + PAGE_NUMBER, null, null, null); Assert.IsInstanceOfType(result3); + //valid handle and convert + var result4 = await controller.GetComicPage(comic.Handle, PAGE_NUMBER, 500, 500, PictureFormats.Webp); + Assert.AreEqual(1, converter.ResizeIfBiggerCount); + Assert.IsInstanceOfType(result4); + Assert.IsTrue(mockPictureData.SequenceEqual(((FileContentResult)result4).FileContents)); } } diff --git a/ComiServUnitTest/EntityTests/PaginatedTests.cs b/ComiServUnitTest/EntityTests/PaginatedTests.cs new file mode 100644 index 0000000..5063ad3 --- /dev/null +++ b/ComiServUnitTest/EntityTests/PaginatedTests.cs @@ -0,0 +1,87 @@ +using ComiServ.Models; +using Microsoft.EntityFrameworkCore.Metadata.Conventions; +using System.CodeDom; +using System.Security.Policy; + +namespace ComiServUnitTest.EntityTests; + +[TestClass] +public class PaginatedTests +{ + [TestMethod] + public void PageUnderUnderflow() + { + const int pageNum = 1; + const int pageSize = 20; + const int dataSize = 30; + var data = Enumerable.Range(0, dataSize).ToArray(); + var page = new Paginated(pageSize, pageNum, data); + Assert.IsTrue(page.Last); + Assert.AreEqual(pageSize, page.Max); + Assert.AreEqual(pageNum, page.Page); + Assert.AreEqual(10, page.Count); + Assert.AreEqual(page.Items.Count, page.Count); + Assert.AreEqual(20, page.Items.First()); + Assert.AreEqual(data.Last(), page.Items.Last()); + } + [TestMethod] + public void PageOverflow() + { + const int pageNum = 2; + const int pageSize = 30; + const int dataSize = 150; + var data = Enumerable.Range(0, dataSize).ToArray(); + var page = new Paginated(pageSize, pageNum, data); + Assert.IsFalse(page.Last); + Assert.AreEqual(pageSize, page.Max); + Assert.AreEqual(pageNum, page.Page); + Assert.AreEqual(pageSize, page.Count); + Assert.AreEqual(page.Items.Count, page.Count); + Assert.AreEqual(pageSize * pageNum, page.Items.First()); + Assert.AreEqual(pageSize * (pageNum + 1) - 1, page.Items.Last()); + } + [TestMethod] + public void PageExact() + { + const int pageNum = 1; + const int pageSize = 30; + const int dataSize = 60; + var data = Enumerable.Range(0, dataSize).ToArray(); + var page = new Paginated(pageSize, pageNum, data); + Assert.IsTrue(page.Last); + Assert.AreEqual(pageSize, page.Max); + Assert.AreEqual(pageNum, page.Page); + Assert.AreEqual(pageSize, page.Count); + Assert.AreEqual(page.Items.Count, page.Count); + Assert.AreEqual(pageSize * pageNum, page.Items.First()); + Assert.AreEqual(data.Last(), page.Items.Last()); + } + [TestMethod] + public void PageEmpty() + { + const int pageNum = 0; + const int pageSize = 10; + const int dataSize = 0; + var data = Enumerable.Range(0, dataSize).ToArray(); + var page = new Paginated(pageSize, pageNum, data); + Assert.IsTrue(page.Last); + Assert.AreEqual(pageSize, page.Max); + Assert.AreEqual(pageNum, page.Page); + Assert.AreEqual(page.Items.Count, page.Count); + Assert.IsFalse(page.Items.Any()); + } + [TestMethod] + public void PageDoesntExist() + { + const int pageNum = 5; + const int pageSize = 20; + const int dataSize = 50; + var data = Enumerable.Range(0, dataSize).ToArray(); + var page = new Paginated(pageSize, pageNum, data); + Assert.IsTrue(page.Last); + Assert.AreEqual(pageSize, page.Max); + Assert.AreEqual(pageNum, page.Page); + Assert.AreEqual(page.Items.Count, page.Count); + Assert.IsFalse(page.Items.Any()); + } +} \ No newline at end of file diff --git a/ComiServUnitTest/EntityTests/TruncatedTests.cs b/ComiServUnitTest/EntityTests/TruncatedTests.cs new file mode 100644 index 0000000..ddc0fbd --- /dev/null +++ b/ComiServUnitTest/EntityTests/TruncatedTests.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ComiServ.Models; + +namespace ComiServUnitTest.EntityTests; + +[TestClass] +public class TruncatedTests +{ + [TestMethod] + public void TruncationUnderflow() + { + const int truncMax = 20; + const int dataSize = 10; + var data = Enumerable.Range(0, dataSize).ToArray(); + var trunc = new Truncated(truncMax, data); + Assert.IsTrue(trunc.Complete); + Assert.AreEqual(truncMax, trunc.Max); + Assert.AreEqual(dataSize, trunc.Count); + Assert.AreEqual(trunc.Items.Count, trunc.Count); + Assert.AreEqual(data.First(), trunc.Items.First()); + Assert.AreEqual(data.Last(), trunc.Items.Last()); + } + [TestMethod] + public void TruncationOverflow() + { + const int truncMax = 20; + const int dataSize = 30; + var data = Enumerable.Range(0, dataSize).ToArray(); + var trunc = new Truncated(truncMax, data); + Assert.IsFalse(trunc.Complete); + Assert.AreEqual(truncMax, trunc.Max); + Assert.AreEqual(truncMax, trunc.Count); + Assert.AreEqual(trunc.Items.Count, trunc.Count); + Assert.AreEqual(data.First(), trunc.Items.First()); + Assert.AreEqual(truncMax - 1, trunc.Items.Last()); + } + [TestMethod] + public void TruncationExact() + { + const int truncMax = 5; + const int dataSize = 5; + var data = Enumerable.Range(0, dataSize).ToArray(); + var trunc = new Truncated(truncMax, data); + Assert.IsTrue(trunc.Complete); + Assert.AreEqual(truncMax, trunc.Max); + Assert.AreEqual(truncMax, trunc.Count); + Assert.AreEqual(trunc.Items.Count, trunc.Count); + Assert.AreEqual(data.First(), trunc.Items.First()); + Assert.AreEqual(data.Last(), trunc.Items.Last()); + } + [TestMethod] + public void TruncationEmpty() + { + const int truncMax = 5; + const int dataSize = 0; + var data = Enumerable.Range(0, dataSize).ToArray(); + var trunc = new Truncated(truncMax, data); + Assert.IsTrue(trunc.Complete); + Assert.AreEqual(truncMax, trunc.Max); + Assert.AreEqual(0, trunc.Count); + Assert.AreEqual(trunc.Items.Count, trunc.Count); + } +} diff --git a/ComiServUnitTest/Mocks/MockPictureConverter.cs b/ComiServUnitTest/Mocks/MockPictureConverter.cs index 5d12de4..0dbf445 100644 --- a/ComiServUnitTest/Mocks/MockPictureConverter.cs +++ b/ComiServUnitTest/Mocks/MockPictureConverter.cs @@ -10,24 +10,37 @@ namespace ComiServUnitTest.Mocks { internal class MockPictureConverter : IPictureConverter { - public MockPictureConverter() + public int MakeThumbnailCount = 0; + public int ResizeCount = 0; + public int ResizeIfBiggerCount = 0; + private byte[] StreamObject { get; } + public MockPictureConverter(byte[] streamObject) { - + StreamObject = streamObject; } - public Task MakeThumbnail(Stream image) +#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously + public async Task MakeThumbnail(Stream image) +#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously { - throw new NotImplementedException(); + MakeThumbnailCount++; + return new MemoryStream(StreamObject); } - public Task Resize(Stream image, Size newSize, PictureFormats? newFormat = null) +#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously + public async Task Resize(Stream image, Size newSize, PictureFormats? newFormat = null) +#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously { - throw new NotImplementedException(); + ResizeCount++; + return new MemoryStream(StreamObject); } - public Task ResizeIfBigger(Stream image, Size maxSize, PictureFormats? newFormat = null) +#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously + public async Task ResizeIfBigger(Stream image, Size maxSize, PictureFormats? newFormat = null) +#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously { - throw new NotImplementedException(); + ResizeIfBiggerCount++; + return new MemoryStream(StreamObject); } } } diff --git a/ComiServUnitTest/PaginatedTests.cs b/ComiServUnitTest/PaginatedTests.cs deleted file mode 100644 index d04a911..0000000 --- a/ComiServUnitTest/PaginatedTests.cs +++ /dev/null @@ -1,87 +0,0 @@ -using ComiServ.Models; -using Microsoft.EntityFrameworkCore.Metadata.Conventions; -using System.CodeDom; -using System.Security.Policy; - -namespace ComiServUnitTest; - -[TestClass] -public class PaginatedTests -{ - [TestMethod] - public void PageUnderUnderflow() - { - const int pageNum = 1; - const int pageSize = 20; - const int dataSize = 30; - var data = Enumerable.Range(0, dataSize).ToArray(); - var page = new Paginated(pageSize, pageNum, data); - Assert.IsTrue(page.Last); - Assert.AreEqual(pageSize, page.Max); - Assert.AreEqual(pageNum, page.Page); - Assert.AreEqual(10, page.Count); - Assert.AreEqual(page.Items.Count, page.Count); - Assert.AreEqual(20, page.Items.First()); - Assert.AreEqual(data.Last(), page.Items.Last()); - } - [TestMethod] - public void PageOverflow() - { - const int pageNum = 2; - const int pageSize = 30; - const int dataSize = 150; - var data = Enumerable.Range(0, dataSize).ToArray(); - var page = new Paginated(pageSize, pageNum, data); - Assert.IsFalse(page.Last); - Assert.AreEqual(pageSize, page.Max); - Assert.AreEqual(pageNum, page.Page); - Assert.AreEqual(pageSize, page.Count); - Assert.AreEqual(page.Items.Count, page.Count); - Assert.AreEqual(pageSize*pageNum, page.Items.First()); - Assert.AreEqual(pageSize*(pageNum+1)-1, page.Items.Last()); - } - [TestMethod] - public void PageExact() - { - const int pageNum = 1; - const int pageSize = 30; - const int dataSize = 60; - var data = Enumerable.Range(0, dataSize).ToArray(); - var page = new Paginated(pageSize, pageNum, data); - Assert.IsTrue(page.Last); - Assert.AreEqual(pageSize, page.Max); - Assert.AreEqual(pageNum, page.Page); - Assert.AreEqual(pageSize, page.Count); - Assert.AreEqual(page.Items.Count, page.Count); - Assert.AreEqual(pageSize * pageNum, page.Items.First()); - Assert.AreEqual(data.Last(), page.Items.Last()); - } - [TestMethod] - public void PageEmpty() - { - const int pageNum = 0; - const int pageSize = 10; - const int dataSize = 0; - var data = Enumerable.Range(0, dataSize).ToArray(); - var page = new Paginated(pageSize, pageNum, data); - Assert.IsTrue(page.Last); - Assert.AreEqual(pageSize, page.Max); - Assert.AreEqual(pageNum, page.Page); - Assert.AreEqual(page.Items.Count, page.Count); - Assert.IsFalse(page.Items.Any()); - } - [TestMethod] - public void PageDoesntExist() - { - const int pageNum = 5; - const int pageSize = 20; - const int dataSize = 50; - var data = Enumerable.Range(0, dataSize).ToArray(); - var page = new Paginated(pageSize, pageNum, data); - Assert.IsTrue(page.Last); - Assert.AreEqual(pageSize, page.Max); - Assert.AreEqual(pageNum, page.Page); - Assert.AreEqual(page.Items.Count, page.Count); - Assert.IsFalse(page.Items.Any()); - } -} \ No newline at end of file diff --git a/ComiServUnitTest/ServiceTests/AuthenticationServiceTests.cs b/ComiServUnitTest/ServiceTests/AuthenticationServiceTests.cs new file mode 100644 index 0000000..12a62e1 --- /dev/null +++ b/ComiServUnitTest/ServiceTests/AuthenticationServiceTests.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ComiServ.Entities; +using ComiServ.Services; + +namespace ComiServUnitTest.ServiceTests; + +[TestClass] +public class AuthenticationServiceTests +{ + [TestMethod] + public void FailAuth() + { + IAuthenticationService auth = new AuthenticationService(); + Assert.IsFalse(auth.Tested); + auth.FailAuth(); + Assert.IsTrue(auth.Tested); + Assert.IsNull(auth.User); + } + [TestMethod] + public void AuthenticateUser() + { + IAuthenticationService auth = new AuthenticationService(); + User user = new() + { + Username = "NewUser", + UserTypeId = UserTypeEnum.User, + }; + Assert.IsFalse(auth.Tested); + auth.Authenticate(user); + Assert.IsTrue(auth.Tested); + Assert.IsNotNull(auth.User); + Assert.AreSame(user, auth.User); + } +} diff --git a/ComiServUnitTest/TruncatedTests.cs b/ComiServUnitTest/TruncatedTests.cs deleted file mode 100644 index 8926f6e..0000000 --- a/ComiServUnitTest/TruncatedTests.cs +++ /dev/null @@ -1,67 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using ComiServ.Models; - -namespace ComiServUnitTest; - -[TestClass] -public class TruncatedTests -{ - [TestMethod] - public void TruncationUnderflow() - { - const int truncMax = 20; - const int dataSize = 10; - var data = Enumerable.Range(0, dataSize).ToArray(); - var trunc = new Truncated(truncMax, data); - Assert.IsTrue(trunc.Complete); - Assert.AreEqual(truncMax, trunc.Max); - Assert.AreEqual(dataSize, trunc.Count); - Assert.AreEqual(trunc.Items.Count, trunc.Count); - Assert.AreEqual(data.First(), trunc.Items.First()); - Assert.AreEqual(data.Last(), trunc.Items.Last()); - } - [TestMethod] - public void TruncationOverflow() - { - const int truncMax = 20; - const int dataSize = 30; - var data = Enumerable.Range(0, dataSize).ToArray(); - var trunc = new Truncated(truncMax, data); - Assert.IsFalse(trunc.Complete); - Assert.AreEqual(truncMax, trunc.Max); - Assert.AreEqual(truncMax, trunc.Count); - Assert.AreEqual(trunc.Items.Count, trunc.Count); - Assert.AreEqual(data.First(), trunc.Items.First()); - Assert.AreEqual(truncMax - 1, trunc.Items.Last()); - } - [TestMethod] - public void TruncationExact() - { - const int truncMax = 5; - const int dataSize = 5; - var data = Enumerable.Range(0, dataSize).ToArray(); - var trunc = new Truncated(truncMax, data); - Assert.IsTrue(trunc.Complete); - Assert.AreEqual(truncMax, trunc.Max); - Assert.AreEqual(truncMax, trunc.Count); - Assert.AreEqual(trunc.Items.Count, trunc.Count); - Assert.AreEqual(data.First(), trunc.Items.First()); - Assert.AreEqual(data.Last(), trunc.Items.Last()); - } - [TestMethod] - public void TruncationEmpty() - { - const int truncMax = 5; - const int dataSize = 0; - var data = Enumerable.Range(0, dataSize).ToArray(); - var trunc = new Truncated(truncMax, data); - Assert.IsTrue(trunc.Complete); - Assert.AreEqual(truncMax, trunc.Max); - Assert.AreEqual(0, trunc.Count); - Assert.AreEqual(trunc.Items.Count, trunc.Count); - } -}