From 2c50b2bebc15a2ae48fb124fcf090d32c043d62b Mon Sep 17 00:00:00 2001 From: 杨宇千 Date: Mon, 19 Aug 2019 00:41:47 +0800 Subject: Add unit tests for avatar validator. --- Timeline.Tests/UserAvatarServiceTest.cs | 89 +++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) (limited to 'Timeline.Tests/UserAvatarServiceTest.cs') diff --git a/Timeline.Tests/UserAvatarServiceTest.cs b/Timeline.Tests/UserAvatarServiceTest.cs index fbec8228..04f52c71 100644 --- a/Timeline.Tests/UserAvatarServiceTest.cs +++ b/Timeline.Tests/UserAvatarServiceTest.cs @@ -1,7 +1,11 @@ using FluentAssertions; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; +using SixLabors.ImageSharp; +using SixLabors.ImageSharp.PixelFormats; +using SixLabors.ImageSharp.Formats.Png; using System; +using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -32,6 +36,91 @@ namespace Timeline.Tests } } + public class UserAvatarValidatorTest : IClassFixture + { + private readonly UserAvatarValidator _validator; + + public UserAvatarValidatorTest(UserAvatarValidator validator) + { + _validator = validator; + } + + [Fact] + public void CantDecode() + { + Avatar avatar = new Avatar + { + Data = Encoding.ASCII.GetBytes("This is not a image."), + Type = "image/png" + }; + _validator.Awaiting(v => v.Validate(avatar)) + .Should().Throw() + .Where(e => e.Avatar == avatar && e.Error == AvatarDataException.ErrorReason.CantDecode); + } + + [Fact] + public void UnmatchedFormat() + { + Avatar avatar; + using (var image = new Image(100, 100)) + { + using (var stream = new MemoryStream()) + { + image.SaveAsPng(stream); + avatar = new Avatar + { + Data = stream.ToArray(), + Type = "image/jpeg" + }; + } + } + _validator.Awaiting(v => v.Validate(avatar)) + .Should().Throw() + .Where(e => e.Avatar == avatar && e.Error == AvatarDataException.ErrorReason.UnmatchedFormat); + } + + [Fact] + public void BadSize() + { + Avatar avatar; + using (var image = new Image(100, 200)) + { + using (var stream = new MemoryStream()) + { + image.SaveAsPng(stream); + avatar = new Avatar + { + Data = stream.ToArray(), + Type = PngFormat.Instance.DefaultMimeType + }; + } + } + _validator.Awaiting(v => v.Validate(avatar)) + .Should().Throw() + .Where(e => e.Avatar == avatar && e.Error == AvatarDataException.ErrorReason.BadSize); + } + + [Fact] + public void Success() + { + Avatar avatar; + using (var image = new Image(100, 100)) + { + using (var stream = new MemoryStream()) + { + image.SaveAsPng(stream); + avatar = new Avatar + { + Data = stream.ToArray(), + Type = PngFormat.Instance.DefaultMimeType + }; + } + } + _validator.Awaiting(v => v.Validate(avatar)) + .Should().NotThrow(); + } + } + public class UserAvatarServiceTest : IDisposable, IClassFixture, IClassFixture { private static Avatar MockAvatar { get; } = new Avatar -- cgit v1.2.3