aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Timeline.Tests/IntegratedTests/UserAvatarTests.cs11
-rw-r--r--Timeline.Tests/UserAvatarServiceTest.cs89
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