aboutsummaryrefslogtreecommitdiff
path: root/Timeline.Tests/Mock/Data
diff options
context:
space:
mode:
Diffstat (limited to 'Timeline.Tests/Mock/Data')
-rw-r--r--Timeline.Tests/Mock/Data/TestDatabase.cs70
-rw-r--r--Timeline.Tests/Mock/Data/TestUsers.cs25
2 files changed, 58 insertions, 37 deletions
diff --git a/Timeline.Tests/Mock/Data/TestDatabase.cs b/Timeline.Tests/Mock/Data/TestDatabase.cs
index 1e662546..1f396177 100644
--- a/Timeline.Tests/Mock/Data/TestDatabase.cs
+++ b/Timeline.Tests/Mock/Data/TestDatabase.cs
@@ -1,42 +1,88 @@
using Microsoft.Data.Sqlite;
using Microsoft.EntityFrameworkCore;
using System;
+using System.Collections.Generic;
+using System.Linq;
using Timeline.Entities;
+using Timeline.Models;
+using Timeline.Services;
namespace Timeline.Tests.Mock.Data
{
public class TestDatabase : IDisposable
{
- public static void InitDatabase(DatabaseContext context)
+ // currently password service is thread safe, so we share a static one.
+ private static PasswordService PasswordService { get; } = new PasswordService();
+
+ private static User CreateEntityFromMock(MockUser user)
+ {
+ return new User
+ {
+ Name = user.Username,
+ EncryptedPassword = PasswordService.HashPassword(user.Password),
+ RoleString = UserRoleConvert.ToString(user.Administrator),
+ Avatar = null
+ };
+ }
+
+ private static IEnumerable<User> CreateDefaultMockEntities()
+ {
+ // emmmmmmm. Never reuse the user instances because EF Core uses them, which will cause strange things.
+ yield return CreateEntityFromMock(MockUser.User);
+ yield return CreateEntityFromMock(MockUser.Admin);
+ }
+
+ private static void InitDatabase(DatabaseContext context)
{
context.Database.EnsureCreated();
- context.Users.AddRange(MockUser.CreateMockEntities());
+ context.Users.AddRange(CreateDefaultMockEntities());
context.SaveChanges();
}
public TestDatabase()
{
- DatabaseConnection = new SqliteConnection("Data Source=:memory:;");
- DatabaseConnection.Open();
+ Connection = new SqliteConnection("Data Source=:memory:;");
+ Connection.Open();
var options = new DbContextOptionsBuilder<DatabaseContext>()
- .UseSqlite(DatabaseConnection)
+ .UseSqlite(Connection)
.Options;
- DatabaseContext = new DatabaseContext(options);
+ Context = new DatabaseContext(options);
+
+ InitDatabase(Context);
+ }
+
+ private List<MockUser> _extraMockUsers;
+
+ public IReadOnlyList<MockUser> ExtraMockUsers => _extraMockUsers;
+
+ public void CreateExtraMockUsers(int count)
+ {
+ if (count <= 0)
+ throw new ArgumentOutOfRangeException(nameof(count), count, "Additional user count must be bigger than 0.");
+ if (_extraMockUsers != null)
+ throw new InvalidOperationException("Already create mock users.");
+
+ _extraMockUsers = new List<MockUser>();
+ for (int i = 0; i < count; i++)
+ {
+ _extraMockUsers.Add(new MockUser($"user{i}", $"password", false));
+ }
- InitDatabase(DatabaseContext);
+ Context.AddRange(_extraMockUsers.Select(u => CreateEntityFromMock(u)));
+ Context.SaveChanges();
}
public void Dispose()
{
- DatabaseContext.Dispose();
+ Context.Dispose();
- DatabaseConnection.Close();
- DatabaseConnection.Dispose();
+ Connection.Close();
+ Connection.Dispose();
}
- public SqliteConnection DatabaseConnection { get; }
- public DatabaseContext DatabaseContext { get; }
+ public SqliteConnection Connection { get; }
+ public DatabaseContext Context { get; }
}
}
diff --git a/Timeline.Tests/Mock/Data/TestUsers.cs b/Timeline.Tests/Mock/Data/TestUsers.cs
index fa75236a..443d3cf9 100644
--- a/Timeline.Tests/Mock/Data/TestUsers.cs
+++ b/Timeline.Tests/Mock/Data/TestUsers.cs
@@ -1,8 +1,5 @@
-using System;
using System.Collections.Generic;
-using Timeline.Entities;
using Timeline.Models;
-using Timeline.Services;
namespace Timeline.Tests.Mock.Data
{
@@ -24,27 +21,5 @@ namespace Timeline.Tests.Mock.Data
public static MockUser Admin { get; } = new MockUser("admin", "adminpassword", true);
public static IReadOnlyList<UserInfo> UserInfoList { get; } = new List<UserInfo> { User.Info, Admin.Info };
-
- // emmmmmmm. Never reuse the user instances because EF Core uses them, which will cause strange things.
- public static IEnumerable<User> CreateMockEntities()
- {
- var passwordService = new PasswordService();
- User Create(MockUser user)
- {
- return new User
- {
- Name = user.Username,
- EncryptedPassword = passwordService.HashPassword(user.Password),
- RoleString = UserRoleConvert.ToString(user.Administrator),
- Avatar = null
- };
- }
-
- return new List<User>
- {
- Create(User),
- Create(Admin)
- };
- }
}
}