mirror of
https://github.com/LBPUnion/ProjectLighthouse.git
synced 2025-10-04 07:09:58 +00:00
318 lines
No EOL
12 KiB
C#
318 lines
No EOL
12 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using LBPUnion.ProjectLighthouse.Database;
|
|
using LBPUnion.ProjectLighthouse.Extensions;
|
|
using LBPUnion.ProjectLighthouse.Tests.Helpers;
|
|
using LBPUnion.ProjectLighthouse.Types.Activity;
|
|
using LBPUnion.ProjectLighthouse.Types.Entities.Activity;
|
|
using LBPUnion.ProjectLighthouse.Types.Entities.Level;
|
|
using LBPUnion.ProjectLighthouse.Types.Entities.Profile;
|
|
using LBPUnion.ProjectLighthouse.Types.Entities.Website;
|
|
using LBPUnion.ProjectLighthouse.Types.Users;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Xunit;
|
|
|
|
namespace ProjectLighthouse.Tests.GameApiTests.Unit.Activity;
|
|
|
|
[Trait("Category", "Unit")]
|
|
public class ActivityGroupingTests
|
|
{
|
|
[Fact]
|
|
public void ToOuterActivityGroups_ShouldCreateGroupPerObject_WhenGroupedBy_ObjectThenActor()
|
|
{
|
|
List<ActivityEntity> activities = [
|
|
new LevelActivityEntity
|
|
{
|
|
UserId = 1,
|
|
SlotId = 1,
|
|
Slot = new SlotEntity
|
|
{
|
|
GameVersion = GameVersion.LittleBigPlanet2,
|
|
},
|
|
Timestamp = DateTime.Now,
|
|
Type = EventType.PlayLevel,
|
|
},
|
|
new LevelActivityEntity
|
|
{
|
|
UserId = 1,
|
|
SlotId = 1,
|
|
Slot = new SlotEntity
|
|
{
|
|
GameVersion = GameVersion.LittleBigPlanet2,
|
|
},
|
|
Timestamp = DateTime.Now,
|
|
Type = EventType.ReviewLevel,
|
|
},
|
|
new LevelActivityEntity
|
|
{
|
|
UserId = 2,
|
|
SlotId = 1,
|
|
Slot = new SlotEntity
|
|
{
|
|
GameVersion = GameVersion.LittleBigPlanet2,
|
|
},
|
|
Timestamp = DateTime.Now,
|
|
Type = EventType.PlayLevel,
|
|
},
|
|
new UserActivityEntity
|
|
{
|
|
TargetUserId = 2,
|
|
UserId = 1,
|
|
Type = EventType.HeartUser,
|
|
Timestamp = DateTime.Now,
|
|
},
|
|
new UserActivityEntity
|
|
{
|
|
TargetUserId = 2,
|
|
UserId = 1,
|
|
Type = EventType.CommentOnUser,
|
|
Timestamp = DateTime.Now,
|
|
},
|
|
new UserActivityEntity
|
|
{
|
|
TargetUserId = 1,
|
|
UserId = 2,
|
|
Type = EventType.HeartUser,
|
|
Timestamp = DateTime.Now,
|
|
},
|
|
new UserActivityEntity
|
|
{
|
|
TargetUserId = 1,
|
|
UserId = 2,
|
|
Type = EventType.CommentOnUser,
|
|
Timestamp = DateTime.Now,
|
|
},
|
|
];
|
|
|
|
List<OuterActivityGroup> groups = activities.ToActivityDto().AsQueryable().ToActivityGroups().ToList().ToOuterActivityGroups();
|
|
Assert.NotNull(groups);
|
|
Assert.Equal(3, groups.Count);
|
|
|
|
Assert.Equal(ActivityGroupType.User, groups.ElementAt(0).Key.GroupType);
|
|
Assert.Equal(ActivityGroupType.User, groups.ElementAt(1).Key.GroupType);
|
|
Assert.Equal(ActivityGroupType.Level, groups.ElementAt(2).Key.GroupType);
|
|
|
|
Assert.Equal(1, groups.ElementAt(0).Key.TargetUserId);
|
|
Assert.Equal(2, groups.ElementAt(1).Key.TargetUserId);
|
|
Assert.Equal(1, groups.ElementAt(2).Key.TargetSlotId);
|
|
|
|
Assert.Single(groups.ElementAt(0).Groups);
|
|
Assert.Single(groups.ElementAt(1).Groups);
|
|
Assert.Equal(2, groups.ElementAt(2).Groups.Count);
|
|
}
|
|
|
|
[Fact]
|
|
public void ToOuterActivityGroups_ShouldCreateGroupPerObject_WhenGroupedBy_ActorThenObject()
|
|
{
|
|
List<ActivityEntity> activities = [
|
|
new LevelActivityEntity
|
|
{
|
|
UserId = 1,
|
|
SlotId = 1,
|
|
Slot = new SlotEntity
|
|
{
|
|
GameVersion = GameVersion.LittleBigPlanet2,
|
|
},
|
|
Timestamp = DateTime.Now,
|
|
Type = EventType.PlayLevel,
|
|
},
|
|
new LevelActivityEntity
|
|
{
|
|
UserId = 1,
|
|
SlotId = 1,
|
|
Slot = new SlotEntity
|
|
{
|
|
GameVersion = GameVersion.LittleBigPlanet2,
|
|
},
|
|
Timestamp = DateTime.Now,
|
|
Type = EventType.ReviewLevel,
|
|
},
|
|
new LevelActivityEntity
|
|
{
|
|
UserId = 2,
|
|
SlotId = 1,
|
|
Slot = new SlotEntity
|
|
{
|
|
GameVersion = GameVersion.LittleBigPlanet2,
|
|
},
|
|
Timestamp = DateTime.Now,
|
|
Type = EventType.PlayLevel,
|
|
},
|
|
new UserActivityEntity
|
|
{
|
|
TargetUserId = 2,
|
|
UserId = 1,
|
|
Type = EventType.HeartUser,
|
|
Timestamp = DateTime.Now,
|
|
},
|
|
new UserActivityEntity
|
|
{
|
|
TargetUserId = 2,
|
|
UserId = 1,
|
|
Type = EventType.CommentOnUser,
|
|
Timestamp = DateTime.Now,
|
|
},
|
|
new UserActivityEntity
|
|
{
|
|
TargetUserId = 1,
|
|
UserId = 2,
|
|
Type = EventType.HeartUser,
|
|
Timestamp = DateTime.Now,
|
|
},
|
|
new UserActivityEntity
|
|
{
|
|
TargetUserId = 1,
|
|
UserId = 2,
|
|
Type = EventType.CommentOnUser,
|
|
Timestamp = DateTime.Now,
|
|
},
|
|
];
|
|
List<OuterActivityGroup> groups = activities.ToActivityDto()
|
|
.AsQueryable()
|
|
.ToActivityGroups(true)
|
|
.ToList()
|
|
.ToOuterActivityGroups(true);
|
|
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.NotNull(groups);
|
|
Assert.Equal(2, groups.Count);
|
|
Assert.Equal(1, groups.Count(g => g.Key.UserId == 1));
|
|
Assert.Equal(1, groups.Count(g => g.Key.UserId == 2));
|
|
OuterActivityGroup firstUserGroup = groups.FirstOrDefault(g => g.Key.UserId == 1);
|
|
OuterActivityGroup secondUserGroup = groups.FirstOrDefault(g => g.Key.UserId == 2);
|
|
Assert.NotNull(firstUserGroup.Groups);
|
|
Assert.NotNull(secondUserGroup.Groups);
|
|
|
|
Assert.Equal(ActivityGroupType.User, firstUserGroup.Key.GroupType);
|
|
Assert.Equal(ActivityGroupType.User, secondUserGroup.Key.GroupType);
|
|
|
|
Assert.True(firstUserGroup.Groups.All(g => g.Key.UserId == 1));
|
|
Assert.True(secondUserGroup.Groups.All(g => g.Key.UserId == 2));
|
|
});
|
|
}
|
|
|
|
[Fact]
|
|
public async Task ToActivityDtoTest()
|
|
{
|
|
DatabaseContext db = await MockHelper.GetTestDatabase();
|
|
db.Slots.Add(new SlotEntity
|
|
{
|
|
SlotId = 1,
|
|
CreatorId = 1,
|
|
GameVersion = GameVersion.LittleBigPlanet2,
|
|
});
|
|
db.Slots.Add(new SlotEntity
|
|
{
|
|
SlotId = 2,
|
|
CreatorId = 1,
|
|
GameVersion = GameVersion.LittleBigPlanet2,
|
|
TeamPickTime = 1,
|
|
});
|
|
db.Reviews.Add(new ReviewEntity
|
|
{
|
|
Timestamp = DateTime.Now.ToUnixTimeMilliseconds(),
|
|
SlotId = 1,
|
|
ReviewerId = 1,
|
|
ReviewId = 1,
|
|
});
|
|
db.Comments.Add(new CommentEntity
|
|
{
|
|
TargetSlotId = 1,
|
|
PosterUserId = 1,
|
|
Message = "comment on level test",
|
|
CommentId = 1,
|
|
});
|
|
db.Comments.Add(new CommentEntity
|
|
{
|
|
TargetUserId = 1,
|
|
PosterUserId = 1,
|
|
Message = "comment on user test",
|
|
CommentId = 2,
|
|
});
|
|
db.WebsiteAnnouncements.Add(new WebsiteAnnouncementEntity
|
|
{
|
|
PublisherId = 1,
|
|
AnnouncementId = 1,
|
|
});
|
|
db.Playlists.Add(new PlaylistEntity
|
|
{
|
|
PlaylistId = 1,
|
|
CreatorId = 1,
|
|
});
|
|
db.Activities.Add(new LevelActivityEntity
|
|
{
|
|
Timestamp = DateTime.Now,
|
|
SlotId = 1,
|
|
Type = EventType.PlayLevel,
|
|
UserId = 1,
|
|
});
|
|
db.Activities.Add(new ReviewActivityEntity
|
|
{
|
|
Timestamp = DateTime.Now,
|
|
SlotId = 1,
|
|
Type = EventType.ReviewLevel,
|
|
ReviewId = 1,
|
|
UserId = 1,
|
|
});
|
|
db.Activities.Add(new UserCommentActivityEntity
|
|
{
|
|
Timestamp = DateTime.Now,
|
|
Type = EventType.CommentOnUser,
|
|
UserId = 1,
|
|
TargetUserId = 1,
|
|
CommentId = 2,
|
|
});
|
|
db.Activities.Add(new LevelCommentActivityEntity
|
|
{
|
|
Timestamp = DateTime.Now,
|
|
Type = EventType.CommentOnLevel,
|
|
UserId = 1,
|
|
SlotId = 1,
|
|
CommentId = 1,
|
|
});
|
|
db.Activities.Add(new NewsActivityEntity
|
|
{
|
|
Type = EventType.NewsPost,
|
|
NewsId = 1,
|
|
UserId = 1,
|
|
});
|
|
db.Activities.Add(new PlaylistActivityEntity
|
|
{
|
|
Type = EventType.CreatePlaylist,
|
|
PlaylistId = 1,
|
|
UserId = 1,
|
|
});
|
|
db.Activities.Add(new LevelActivityEntity
|
|
{
|
|
Type = EventType.MMPickLevel,
|
|
SlotId = 2,
|
|
UserId = 1,
|
|
});
|
|
await db.SaveChangesAsync();
|
|
|
|
List<ActivityDto> resultDto = await db.Activities.ToActivityDto(includeSlotCreator: true, includeTeamPick: true).ToListAsync();
|
|
|
|
Assert.Equal(2, resultDto.FirstOrDefault(a => a.Activity.Type == EventType.MMPickLevel)?.TargetTeamPickId);
|
|
Assert.Equal(2, resultDto.FirstOrDefault(a => a.Activity.Type == EventType.MMPickLevel)?.TargetSlotId);
|
|
Assert.Equal(1, resultDto.FirstOrDefault(a => a.Activity.Type == EventType.MMPickLevel)?.TargetSlotCreatorId);
|
|
|
|
Assert.Equal(1, resultDto.FirstOrDefault(a => a.Activity.Type == EventType.CreatePlaylist)?.TargetPlaylistId);
|
|
|
|
Assert.Equal(1, resultDto.FirstOrDefault(a => a.Activity.Type == EventType.NewsPost)?.TargetNewsId);
|
|
|
|
Assert.Equal(1, resultDto.FirstOrDefault(a => a.Activity.Type == EventType.CommentOnUser)?.TargetUserId);
|
|
|
|
Assert.Null(resultDto.FirstOrDefault(a => a.Activity.Type == EventType.CommentOnLevel)?.TargetTeamPickId);
|
|
Assert.Equal(1, resultDto.FirstOrDefault(a => a.Activity.Type == EventType.CommentOnLevel)?.TargetSlotId);
|
|
Assert.Equal(1, resultDto.FirstOrDefault(a => a.Activity.Type == EventType.CommentOnLevel)?.TargetSlotCreatorId);
|
|
|
|
Assert.Equal(1, resultDto.FirstOrDefault(a => a.Activity.Type == EventType.ReviewLevel)?.TargetSlotId);
|
|
Assert.Equal(1, resultDto.FirstOrDefault(a => a.Activity.Type == EventType.ReviewLevel)?.TargetSlotCreatorId);
|
|
|
|
Assert.Equal(1, resultDto.FirstOrDefault(a => a.Activity.Type == EventType.PlayLevel)?.TargetSlotId);
|
|
Assert.Equal(1, resultDto.FirstOrDefault(a => a.Activity.Type == EventType.PlayLevel)?.TargetSlotCreatorId);
|
|
}
|
|
} |