diff options
-rw-r--r-- | Timeline.Tests/IntegratedTests/UserAvatarTests.cs | 11 | ||||
-rw-r--r-- | Timeline.Tests/UserAvatarServiceTest.cs | 89 |
2 files changed, 100 insertions, 0 deletions
diff --git a/Timeline.Tests/IntegratedTests/UserAvatarTests.cs b/Timeline.Tests/IntegratedTests/UserAvatarTests.cs new file mode 100644 index 00000000..14781474 --- /dev/null +++ b/Timeline.Tests/IntegratedTests/UserAvatarTests.cs @@ -0,0 +1,11 @@ +using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace Timeline.Tests.IntegratedTests
+{
+ public class UserAvatarTests
+ {
+ }
+}
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<UserAvatarValidator>
+ {
+ 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<AvatarDataException>()
+ .Where(e => e.Avatar == avatar && e.Error == AvatarDataException.ErrorReason.CantDecode);
+ }
+
+ [Fact]
+ public void UnmatchedFormat()
+ {
+ Avatar avatar;
+ using (var image = new Image<Rgba32>(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<AvatarDataException>()
+ .Where(e => e.Avatar == avatar && e.Error == AvatarDataException.ErrorReason.UnmatchedFormat);
+ }
+
+ [Fact]
+ public void BadSize()
+ {
+ Avatar avatar;
+ using (var image = new Image<Rgba32>(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<AvatarDataException>()
+ .Where(e => e.Avatar == avatar && e.Error == AvatarDataException.ErrorReason.BadSize);
+ }
+
+ [Fact]
+ public void Success()
+ {
+ Avatar avatar;
+ using (var image = new Image<Rgba32>(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<MockDefaultUserAvatarProvider>, IClassFixture<MockUserAvatarValidator>
{
private static Avatar MockAvatar { get; } = new Avatar
|