diff options
author | crupest <crupest@outlook.com> | 2019-11-19 23:18:45 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2019-11-19 23:18:45 +0800 |
commit | f3c7912caec2e9eee8a685d8751894f357528a71 (patch) | |
tree | 66e1bcfe602877e4f72ea1b68cbf33e06557c222 /Timeline.Tests/Mock/Data/TestDatabase.cs | |
parent | 2238568fdfc891d69e8174060e54845c7a3d5e95 (diff) | |
download | timeline-f3c7912caec2e9eee8a685d8751894f357528a71.tar.gz timeline-f3c7912caec2e9eee8a685d8751894f357528a71.tar.bz2 timeline-f3c7912caec2e9eee8a685d8751894f357528a71.zip |
Complete integrated tests??? Fix bugs.
Diffstat (limited to 'Timeline.Tests/Mock/Data/TestDatabase.cs')
-rw-r--r-- | Timeline.Tests/Mock/Data/TestDatabase.cs | 70 |
1 files changed, 58 insertions, 12 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; }
}
}
|