aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-11-27 01:26:23 +0800
committercrupest <crupest@outlook.com>2020-11-27 01:26:23 +0800
commit5e4cdbbfa75ce021dfbfd8e1f2d38370a702285e (patch)
treee0c263bd7a3827c0f6ddbee123362f7f79757a0c
parent7883590a7a0c5c5c4e5cff6290e26c64e1258a25 (diff)
downloadtimeline-5e4cdbbfa75ce021dfbfd8e1f2d38370a702285e.tar.gz
timeline-5e4cdbbfa75ce021dfbfd8e1f2d38370a702285e.tar.bz2
timeline-5e4cdbbfa75ce021dfbfd8e1f2d38370a702285e.zip
...
-rw-r--r--BackEnd/Timeline.Tests/Helpers/TestDatabase.cs2
-rw-r--r--BackEnd/Timeline.Tests/Services/HighlightTimelineServiceTest.cs35
-rw-r--r--BackEnd/Timeline.Tests/Services/TimelinePostServiceTest.cs2
-rw-r--r--BackEnd/Timeline.Tests/Services/TimelineServiceTest.cs2
-rw-r--r--BackEnd/Timeline/Entities/HighlightTimelineEntity.cs8
-rw-r--r--BackEnd/Timeline/Models/TimelineInfo.cs4
-rw-r--r--BackEnd/Timeline/Models/UserInfo.cs2
-rw-r--r--BackEnd/Timeline/Services/HighlightTimelineService.cs6
-rw-r--r--BackEnd/Timeline/Services/UserPermissionService.cs33
-rw-r--r--BackEnd/Timeline/Services/UserService.cs6
10 files changed, 79 insertions, 21 deletions
diff --git a/BackEnd/Timeline.Tests/Helpers/TestDatabase.cs b/BackEnd/Timeline.Tests/Helpers/TestDatabase.cs
index 74db74aa..a71c2208 100644
--- a/BackEnd/Timeline.Tests/Helpers/TestDatabase.cs
+++ b/BackEnd/Timeline.Tests/Helpers/TestDatabase.cs
@@ -35,7 +35,7 @@ namespace Timeline.Tests.Helpers
if (_createUser)
{
var passwordService = new PasswordService();
- var userService = new UserService(NullLogger<UserService>.Instance, context, passwordService, new Clock(), new UserPermissionService(context));
+ var userService = new UserService(NullLogger<UserService>.Instance, context, passwordService, new UserPermissionService(context), new Clock());
var admin = await userService.CreateUser("admin", "adminpw");
await userService.ModifyUser(admin.Id, new ModifyUserParams() { Nickname = "administrator" });
diff --git a/BackEnd/Timeline.Tests/Services/HighlightTimelineServiceTest.cs b/BackEnd/Timeline.Tests/Services/HighlightTimelineServiceTest.cs
index a4cd983d..8ba26613 100644
--- a/BackEnd/Timeline.Tests/Services/HighlightTimelineServiceTest.cs
+++ b/BackEnd/Timeline.Tests/Services/HighlightTimelineServiceTest.cs
@@ -1,18 +1,43 @@
-using Timeline.Services;
+using FluentAssertions;
+using Microsoft.Extensions.Logging.Abstractions;
+using System.Threading.Tasks;
+using Timeline.Services;
+using Timeline.Tests.Helpers;
+using Xunit;
namespace Timeline.Tests.Services
{
public class HighlightTimelineServiceTest : DatabaseBasedTest
{
- private UserService _userService;
- private TimelineService _timelineService;
+ private readonly TestClock _clock = new TestClock();
+ private UserService _userService = default!;
+ private TimelineService _timelineService = default!;
- private HighlightTimelineService _service;
+ private HighlightTimelineService _service = default!;
protected override void OnDatabaseCreated()
{
-
+ _userService = new UserService(NullLogger<UserService>.Instance, Database, new PasswordService(), new UserPermissionService(Database), _clock);
+ _timelineService = new TimelineService(Database, _userService, _clock);
+ _service = new HighlightTimelineService(Database, _userService, _timelineService, _clock);
}
+ [Fact]
+ public async Task Should_Work()
+ {
+ {
+ var ht = await _service.GetHighlightTimelines();
+ ht.Should().BeEmpty();
+ }
+
+ var userId = await _userService.GetUserIdByUsername("user");
+ await _timelineService.CreateTimeline("tl", userId);
+ await _service.AddHighlightTimeline("tl", userId);
+
+ {
+ var ht = await _service.GetHighlightTimelines();
+ ht.Should().HaveCount(1).And.BeEquivalentTo(await _timelineService.GetTimeline("tl"));
+ }
+ }
}
}
diff --git a/BackEnd/Timeline.Tests/Services/TimelinePostServiceTest.cs b/BackEnd/Timeline.Tests/Services/TimelinePostServiceTest.cs
index 97512be5..7771ae0b 100644
--- a/BackEnd/Timeline.Tests/Services/TimelinePostServiceTest.cs
+++ b/BackEnd/Timeline.Tests/Services/TimelinePostServiceTest.cs
@@ -36,7 +36,7 @@ namespace Timeline.Tests.Services
{
_dataManager = new DataManager(Database, _eTagGenerator);
_userPermissionService = new UserPermissionService(Database);
- _userService = new UserService(NullLogger<UserService>.Instance, Database, _passwordService, _clock, _userPermissionService);
+ _userService = new UserService(NullLogger<UserService>.Instance, Database, _passwordService, _userPermissionService, _clock);
_timelineService = new TimelineService(Database, _userService, _clock);
_timelinePostService = new TimelinePostService(NullLogger<TimelinePostService>.Instance, Database, _timelineService, _userService, _dataManager, _imageValidator, _clock);
_userDeleteService = new UserDeleteService(NullLogger<UserDeleteService>.Instance, Database, _timelinePostService);
diff --git a/BackEnd/Timeline.Tests/Services/TimelineServiceTest.cs b/BackEnd/Timeline.Tests/Services/TimelineServiceTest.cs
index 98f03066..70f54ede 100644
--- a/BackEnd/Timeline.Tests/Services/TimelineServiceTest.cs
+++ b/BackEnd/Timeline.Tests/Services/TimelineServiceTest.cs
@@ -26,7 +26,7 @@ namespace Timeline.Tests.Services
protected override void OnDatabaseCreated()
{
_userPermissionService = new UserPermissionService(Database);
- _userService = new UserService(NullLogger<UserService>.Instance, Database, _passwordService, _clock, _userPermissionService);
+ _userService = new UserService(NullLogger<UserService>.Instance, Database, _passwordService, _userPermissionService, _clock);
_timelineService = new TimelineService(Database, _userService, _clock);
}
diff --git a/BackEnd/Timeline/Entities/HighlightTimelineEntity.cs b/BackEnd/Timeline/Entities/HighlightTimelineEntity.cs
index 0a38c8a6..3378a175 100644
--- a/BackEnd/Timeline/Entities/HighlightTimelineEntity.cs
+++ b/BackEnd/Timeline/Entities/HighlightTimelineEntity.cs
@@ -1,10 +1,11 @@
-using System.ComponentModel.DataAnnotations;
+using System;
+using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Timeline.Entities
{
[Table("highlight_timelines")]
- public record HighlightTimelineEntity
+ public class HighlightTimelineEntity
{
[Key, Column("id"), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
@@ -20,5 +21,8 @@ namespace Timeline.Entities
[ForeignKey(nameof(OperatorId))]
public UserEntity? Operator { get; set; }
+
+ [Column("add_time")]
+ public DateTime AddTime { get; set; }
}
}
diff --git a/BackEnd/Timeline/Models/TimelineInfo.cs b/BackEnd/Timeline/Models/TimelineInfo.cs
index 440f6b81..649af274 100644
--- a/BackEnd/Timeline/Models/TimelineInfo.cs
+++ b/BackEnd/Timeline/Models/TimelineInfo.cs
@@ -50,7 +50,7 @@ namespace Timeline.Models
public string DataTag { get; set; }
}
- public record TimelinePostInfo
+ public class TimelinePostInfo
{
public TimelinePostInfo()
{
@@ -76,7 +76,7 @@ namespace Timeline.Models
public string TimelineName { get; set; } = default!;
}
- public record TimelineInfo
+ public class TimelineInfo
{
public TimelineInfo()
{
diff --git a/BackEnd/Timeline/Models/UserInfo.cs b/BackEnd/Timeline/Models/UserInfo.cs
index 058cc590..e8d57def 100644
--- a/BackEnd/Timeline/Models/UserInfo.cs
+++ b/BackEnd/Timeline/Models/UserInfo.cs
@@ -3,7 +3,7 @@ using Timeline.Services;
namespace Timeline.Models
{
- public record UserInfo
+ public class UserInfo
{
public UserInfo()
{
diff --git a/BackEnd/Timeline/Services/HighlightTimelineService.cs b/BackEnd/Timeline/Services/HighlightTimelineService.cs
index 619bc33e..0f4e5488 100644
--- a/BackEnd/Timeline/Services/HighlightTimelineService.cs
+++ b/BackEnd/Timeline/Services/HighlightTimelineService.cs
@@ -46,12 +46,14 @@ namespace Timeline.Services
private readonly DatabaseContext _database;
private readonly IBasicUserService _userService;
private readonly ITimelineService _timelineService;
+ private readonly IClock _clock;
- public HighlightTimelineService(DatabaseContext database, IBasicUserService userService, ITimelineService timelineService)
+ public HighlightTimelineService(DatabaseContext database, IBasicUserService userService, ITimelineService timelineService, IClock clock)
{
_database = database;
_userService = userService;
_timelineService = timelineService;
+ _clock = clock;
}
public async Task AddHighlightTimeline(string timelineName, long? operatorId)
@@ -70,7 +72,7 @@ namespace Timeline.Services
if (alreadyIs) return;
- _database.HighlightTimelines.Add(new HighlightTimelineEntity { TimelineId = timelineId, OperatorId = operatorId });
+ _database.HighlightTimelines.Add(new HighlightTimelineEntity { TimelineId = timelineId, OperatorId = operatorId, AddTime = _clock.GetCurrentTime() });
await _database.SaveChangesAsync();
}
diff --git a/BackEnd/Timeline/Services/UserPermissionService.cs b/BackEnd/Timeline/Services/UserPermissionService.cs
index 9683000a..bd7cd6aa 100644
--- a/BackEnd/Timeline/Services/UserPermissionService.cs
+++ b/BackEnd/Timeline/Services/UserPermissionService.cs
@@ -28,7 +28,7 @@ namespace Timeline.Services
/// <summary>
/// Represents a user's permissions.
/// </summary>
- public class UserPermissions : IEnumerable<UserPermission>
+ public class UserPermissions : IEnumerable<UserPermission>, IEquatable<UserPermissions>
{
public static UserPermissions AllPermissions { get; } = new UserPermissions(Enum.GetValues<UserPermission>());
@@ -49,10 +49,10 @@ namespace Timeline.Services
public UserPermissions(IEnumerable<UserPermission> permissions)
{
if (permissions == null) throw new ArgumentNullException(nameof(permissions));
- _permissions = new HashSet<UserPermission>(permissions);
+ _permissions = new SortedSet<UserPermission>(permissions);
}
- private readonly HashSet<UserPermission> _permissions = new();
+ private readonly SortedSet<UserPermission> _permissions = new();
/// <summary>
/// Check if a permission is contained in the list.
@@ -108,6 +108,33 @@ namespace Timeline.Services
{
return ((IEnumerable)_permissions).GetEnumerator();
}
+
+ public bool Equals(UserPermissions? other)
+ {
+ if (other == null)
+ return false;
+
+ return _permissions.SequenceEqual(other._permissions);
+ }
+
+ public override bool Equals(object? obj)
+ {
+ return Equals(obj as UserPermissions);
+ }
+
+ public override int GetHashCode()
+ {
+ int result = 0;
+ foreach (var permission in Enum.GetValues<UserPermission>())
+ {
+ if (_permissions.Contains(permission))
+ {
+ result += 1;
+ }
+ result <<= 1;
+ }
+ return result;
+ }
}
public interface IUserPermissionService
diff --git a/BackEnd/Timeline/Services/UserService.cs b/BackEnd/Timeline/Services/UserService.cs
index 96068e44..c99e86b0 100644
--- a/BackEnd/Timeline/Services/UserService.cs
+++ b/BackEnd/Timeline/Services/UserService.cs
@@ -17,7 +17,7 @@ namespace Timeline.Services
/// <summary>
/// Null means not change.
/// </summary>
- public record ModifyUserParams
+ public class ModifyUserParams
{
public string? Username { get; set; }
public string? Password { get; set; }
@@ -78,13 +78,13 @@ namespace Timeline.Services
private readonly UsernameValidator _usernameValidator = new UsernameValidator();
private readonly NicknameValidator _nicknameValidator = new NicknameValidator();
- public UserService(ILogger<UserService> logger, DatabaseContext databaseContext, IPasswordService passwordService, IClock clock, IUserPermissionService userPermissionService) : base(databaseContext)
+ public UserService(ILogger<UserService> logger, DatabaseContext databaseContext, IPasswordService passwordService, IUserPermissionService userPermissionService, IClock clock) : base(databaseContext)
{
_logger = logger;
- _clock = clock;
_databaseContext = databaseContext;
_passwordService = passwordService;
_userPermissionService = userPermissionService;
+ _clock = clock;
}
private void CheckUsernameFormat(string username, string? paramName)