Skip to content

Commit

Permalink
Убрать пустые слоты из списка кандидатов к перемещению joinrpg#2686
Browse files Browse the repository at this point in the history
  • Loading branch information
leotsarev committed Oct 11, 2024
1 parent 5f2f53c commit 2fc11a9
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 13 deletions.
35 changes: 25 additions & 10 deletions src/JoinRpg.DataModel.Mocks/MockedProject.cs
Original file line number Diff line number Diff line change
Expand Up @@ -103,25 +103,24 @@ public MockedProject()
ParentCharacterGroupIds = Array.Empty<int>(),
};


Project = new Project()
{
Active = true,
IsAcceptingClaims = true,
ProjectAcls = new List<ProjectAcl>
{
ProjectAcls =
[
ProjectAcl.CreateRootAcl(Master.UserId, isOwner: true),
},
ProjectFields = new List<ProjectField>()
{
],
ProjectFields =
[
MasterOnlyField,
CharacterField,
HideForUnApprovedClaim,
PublicField,
},
Characters = new List<Character>() { Character, CharacterWithoutGroup },
CharacterGroups = new List<CharacterGroup>(),
Claims = new List<Claim>(),
],
Characters = [Character, CharacterWithoutGroup],
CharacterGroups = [],
Claims = [],
Details = new ProjectDetails(),
PaymentTypes = [],
};
Expand Down Expand Up @@ -162,6 +161,22 @@ public CharacterGroup CreateCharacterGroup(CharacterGroup? characterGroup = null
return characterGroup;
}

public Character CreateCharacter(string name)
{
var character = new Character
{
IsActive = true,
IsAcceptingClaims = true,
ParentCharacterGroupIds = [],
CharacterId = Project.Characters.GetNextId(),
Project = Project,
};

Project.Characters.Add(character);

return character;
}

public ProjectFieldInfo CreateConditionalField(Action<ProjectField> setup, CharacterGroup conditionGroup)
{
return AddField(f => { f.AvailableForCharacterGroupIds = new[] { conditionGroup.CharacterGroupId }; setup(f); });
Expand Down
13 changes: 12 additions & 1 deletion src/JoinRpg.Domain.Test/AddClaim/MoveClaimValidationRulesTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,16 @@ public void AllowMoveClaimFromCharacterToGroup()
ShouldAllowMove(claim, Mock.Group);
}

[Fact]
public void DisallowMoveClaimFromCharacterToEmptySlot()
{
var claim = Mock.CreateClaim(Mock.Character, Mock.Player);
var slot = Mock.CreateCharacter("slot");
slot.CharacterType = PrimitiveTypes.CharacterType.Slot;
slot.CharacterSlotLimit = 0;
ShouldDisAllowMove(claim, slot, AddClaimForbideReason.SlotsExhausted);
}

[Fact]
public void AllowMoveClaimFromCharacterToCharacter()
{
Expand Down Expand Up @@ -55,5 +65,6 @@ public void AllowMoveApprovedClaimFromCharacterToCharacter()

private void ShouldAllowMove(Claim claim, IClaimSource characterGroup) => characterGroup.ValidateIfCanMoveClaim(claim).ShouldBeEmpty();

private void ShouldDisAllowMove(Claim claim, IClaimSource characterGroup, AddClaimForbideReason reason) => characterGroup.ValidateIfCanMoveClaim(claim).ShouldBe(new[] { reason });
private static void ShouldDisAllowMove(Claim claim, IClaimSource characterGroup, AddClaimForbideReason reason)
=> characterGroup.ValidateIfCanMoveClaim(claim).ShouldBe([reason]);
}
3 changes: 2 additions & 1 deletion src/JoinRpg.Domain/ClaimSourceExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,8 @@ public static IReadOnlyCollection<AddClaimForbideReason> ValidateIfCanAddClaim<T
where T : IClaimSource => ValidateImpl(claimSource, playerUserId, existingClaim: null).ToList();


public static IReadOnlyCollection<AddClaimForbideReason> ValidateIfCanMoveClaim(this IClaimSource claimSource, Claim claim) => ValidateImpl(claimSource, claim.PlayerUserId, claim).ToList();
public static IReadOnlyCollection<AddClaimForbideReason> ValidateIfCanMoveClaim(this IClaimSource claimSource, Claim claim)
=> ValidateImpl(claimSource, claim.PlayerUserId, claim).ToList();

public static void EnsureCanAddClaim<T>([NotNull] this T? claimSource, int currentUserId)
where T : IClaimSource
Expand Down
3 changes: 2 additions & 1 deletion src/JoinRpg.WebPortal.Models/Claims/ClaimViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,8 @@ public ClaimViewModel(User currentUser,
HasOtherApprovedClaim = claim.Character?.ApprovedClaim is not null && claim.Character.ApprovedClaim != claim;
PotentialCharactersToMove = claim.Project.Characters
.Where(x => x.IsAvailable && x.IsActive)
.Where(x => !claim.IsApproved || x.CharacterType != CharacterType.Slot)
.Where(x => !claim.IsApproved || x.CharacterType != CharacterType.Slot) // Принятые заявки не могут быть перемещены в слот
.Where(x => x.CharacterSlotLimit != 0) // Если слот кончился, в него нельзя перемещать
.OrderBy(x => x.CharacterName)
.Select(ToJoinSelectListItem)
.ToList();
Expand Down

0 comments on commit 2fc11a9

Please sign in to comment.