diff options
Diffstat (limited to 'Timeline.Tests')
-rw-r--r-- | Timeline.Tests/DatabaseTest.cs | 37 | ||||
-rw-r--r-- | Timeline.Tests/Helpers/MyWebApplicationFactory.cs | 4 | ||||
-rw-r--r-- | Timeline.Tests/IntegratedTests/UserAvatarTests.cs | 12 | ||||
-rw-r--r-- | Timeline.Tests/Mock/Data/TestDatabase.cs | 12 | ||||
-rw-r--r-- | Timeline.Tests/Mock/Data/TestUsers.cs | 40 | ||||
-rw-r--r-- | Timeline.Tests/UserAvatarServiceTest.cs | 17 |
6 files changed, 90 insertions, 32 deletions
diff --git a/Timeline.Tests/DatabaseTest.cs b/Timeline.Tests/DatabaseTest.cs new file mode 100644 index 00000000..e280637c --- /dev/null +++ b/Timeline.Tests/DatabaseTest.cs @@ -0,0 +1,37 @@ +using FluentAssertions;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Linq;
+using Timeline.Entities;
+using Timeline.Tests.Mock.Data;
+using Xunit;
+
+namespace Timeline.Tests
+{
+ public class DatabaseTest : IDisposable
+ {
+ private readonly TestDatabase _database;
+ private readonly DatabaseContext _context;
+
+ public DatabaseTest()
+ {
+ _database = new TestDatabase();
+ _context = _database.DatabaseContext;
+ }
+
+ public void Dispose()
+ {
+ _database.Dispose();
+ }
+
+ [Fact]
+ public void DeleteUserShouldAlsoDeleteAvatar()
+ {
+ _context.UserAvatars.Count().Should().Be(2);
+ var user = _context.Users.First();
+ _context.Users.Remove(user);
+ _context.SaveChanges();
+ _context.UserAvatars.Count().Should().Be(1);
+ }
+ }
+}
diff --git a/Timeline.Tests/Helpers/MyWebApplicationFactory.cs b/Timeline.Tests/Helpers/MyWebApplicationFactory.cs index e96d11fe..1a9fe01e 100644 --- a/Timeline.Tests/Helpers/MyWebApplicationFactory.cs +++ b/Timeline.Tests/Helpers/MyWebApplicationFactory.cs @@ -46,9 +46,7 @@ namespace Timeline.Tests.Helpers using (var context = new DatabaseContext(options))
{
- context.Database.EnsureCreated();
- context.Users.AddRange(MockUsers.Users);
- context.SaveChanges();
+ TestDatabase.InitDatabase(context);
};
}
diff --git a/Timeline.Tests/IntegratedTests/UserAvatarTests.cs b/Timeline.Tests/IntegratedTests/UserAvatarTests.cs index efe63346..794f251b 100644 --- a/Timeline.Tests/IntegratedTests/UserAvatarTests.cs +++ b/Timeline.Tests/IntegratedTests/UserAvatarTests.cs @@ -6,6 +6,7 @@ using SixLabors.ImageSharp.Formats.Png; using System;
using System.IO;
using System.Net;
+using System.Net.Http;
using System.Threading.Tasks;
using Timeline.Controllers;
using Timeline.Services;
@@ -64,6 +65,17 @@ namespace Timeline.Tests.IntegratedTests await GetReturnDefault("admin");
{
+ var request = new HttpRequestMessage()
+ {
+ RequestUri = new Uri(client.BaseAddress, "users/user/avatar"),
+ Method = HttpMethod.Get,
+ };
+ request.Headers.Add("If-Modified-Since", DateTime.Now.ToString("r"));
+ var res = await client.SendAsync(request);
+ res.Should().HaveStatusCode(HttpStatusCode.NotModified);
+ }
+
+ {
var res = await client.PutByteArrayAsync("users/user/avatar", new[] { (byte)0x00 }, "image/notaccept");
res.Should().HaveStatusCode(HttpStatusCode.UnsupportedMediaType);
}
diff --git a/Timeline.Tests/Mock/Data/TestDatabase.cs b/Timeline.Tests/Mock/Data/TestDatabase.cs index 09c77dce..7b4bc65e 100644 --- a/Timeline.Tests/Mock/Data/TestDatabase.cs +++ b/Timeline.Tests/Mock/Data/TestDatabase.cs @@ -8,6 +8,13 @@ namespace Timeline.Tests.Mock.Data {
public class TestDatabase : IDisposable
{
+ public static void InitDatabase(DatabaseContext context)
+ {
+ context.Database.EnsureCreated();
+ context.Users.AddRange(MockUsers.CreateMockUsers());
+ context.SaveChanges();
+ }
+
private readonly SqliteConnection _databaseConnection;
private readonly DatabaseContext _databaseContext;
@@ -26,10 +33,7 @@ namespace Timeline.Tests.Mock.Data _databaseContext = new DatabaseContext(options);
- // init with mock data
- _databaseContext.Database.EnsureCreated();
- _databaseContext.Users.AddRange(MockUsers.Users);
- _databaseContext.SaveChanges();
+ InitDatabase(_databaseContext);
}
public void Dispose()
diff --git a/Timeline.Tests/Mock/Data/TestUsers.cs b/Timeline.Tests/Mock/Data/TestUsers.cs index f34f62c5..378fc280 100644 --- a/Timeline.Tests/Mock/Data/TestUsers.cs +++ b/Timeline.Tests/Mock/Data/TestUsers.cs @@ -1,3 +1,4 @@ +using System;
using System.Collections.Generic;
using System.Linq;
using Timeline.Entities;
@@ -10,38 +11,39 @@ namespace Timeline.Tests.Mock.Data {
static MockUsers()
{
- var mockUsers = new List<User>();
- var passwordService = new PasswordService();
+ var mockUserInfos = CreateMockUsers().Select(u => UserUtility.CreateUserInfo(u)).ToList();
+ UserUserInfo = mockUserInfos[0];
+ AdminUserInfo = mockUserInfos[1];
+ UserInfos = mockUserInfos;
+ }
- mockUsers.Add(new User
+ public const string UserUsername = "user";
+ public const string AdminUsername = "admin";
+ public const string UserPassword = "user";
+ public const string AdminPassword = "admin";
+
+ // emmmmmmm. Never reuse the user instances because EF Core uses them which will cause strange things.
+ internal static IEnumerable<User> CreateMockUsers()
+ {
+ var users = new List<User>();
+ var passwordService = new PasswordService();
+ users.Add(new User
{
Name = UserUsername,
EncryptedPassword = passwordService.HashPassword(UserPassword),
RoleString = UserUtility.IsAdminToRoleString(false),
- Version = 0,
+ Avatar = UserAvatar.Create(DateTime.Now)
});
- mockUsers.Add(new User
+ users.Add(new User
{
Name = AdminUsername,
EncryptedPassword = passwordService.HashPassword(AdminPassword),
RoleString = UserUtility.IsAdminToRoleString(true),
- Version = 0,
+ Avatar = UserAvatar.Create(DateTime.Now)
});
-
- Users = mockUsers;
-
- var mockUserInfos = mockUsers.Select(u => UserUtility.CreateUserInfo(u)).ToList();
- UserUserInfo = mockUserInfos[0];
- AdminUserInfo = mockUserInfos[1];
- UserInfos = mockUserInfos;
+ return users;
}
- public const string UserUsername = "user";
- public const string AdminUsername = "admin";
- public const string UserPassword = "user";
- public const string AdminPassword = "admin";
-
- internal static IReadOnlyList<User> Users { get; }
public static IReadOnlyList<UserInfo> UserInfos { get; }
public static UserInfo AdminUserInfo { get; }
diff --git a/Timeline.Tests/UserAvatarServiceTest.cs b/Timeline.Tests/UserAvatarServiceTest.cs index 03b64a6b..f11da4f0 100644 --- a/Timeline.Tests/UserAvatarServiceTest.cs +++ b/Timeline.Tests/UserAvatarServiceTest.cs @@ -17,11 +17,15 @@ namespace Timeline.Tests {
public class MockDefaultUserAvatarProvider : IDefaultUserAvatarProvider
{
- public static Avatar Avatar { get; } = new Avatar { Type = "image/test", Data = Encoding.ASCII.GetBytes("test") };
+ public static AvatarInfo AvatarInfo { get; } = new AvatarInfo
+ {
+ Avatar = new Avatar { Type = "image/test", Data = Encoding.ASCII.GetBytes("test") },
+ LastModified = DateTime.Now
+ };
- public Task<Avatar> GetDefaultAvatar()
+ public Task<AvatarInfo> GetDefaultAvatar()
{
- return Task.FromResult(Avatar);
+ return Task.FromResult(AvatarInfo);
}
}
@@ -153,7 +157,7 @@ namespace Timeline.Tests public async Task GetAvatar_ShouldReturn_Default()
{
const string username = MockUsers.UserUsername;
- (await _service.GetAvatar(username)).Should().BeEquivalentTo(await _mockDefaultUserAvatarProvider.GetDefaultAvatar());
+ (await _service.GetAvatar(username)).Avatar.Should().BeEquivalentTo((await _mockDefaultUserAvatarProvider.GetDefaultAvatar()).Avatar);
}
[Fact]
@@ -173,7 +177,7 @@ namespace Timeline.Tests await context.SaveChangesAsync();
}
- (await _service.GetAvatar(username)).Should().BeEquivalentTo(MockAvatar);
+ (await _service.GetAvatar(username)).Avatar.Should().BeEquivalentTo(MockAvatar);
}
[Fact]
@@ -223,7 +227,8 @@ namespace Timeline.Tests // delete
await _service.SetAvatar(username, null);
- user.Avatar.Should().BeNull();
+ user.Avatar.Type.Should().BeNull();
+ user.Avatar.Data.Should().BeNull();
}
}
}
|