public static GolfClubMembershipAggregate GetCreatedGolfClubMembershipAggregateWithMultipleMembershipRequested() { GolfClubMembershipAggregate aggregate = GolfClubMembershipAggregate.Create(AggregateId); aggregate.RequestMembership(PlayerId, PlayerFullName, PlayerDateOfBirth, PlayerGender, RequestDateAndTime); aggregate.RequestMembership(PlayerId2, PlayerFullName2, PlayerDateOfBirth2, PlayerGender2, RequestDateAndTime); return(aggregate); }
/// <summary> /// Requests the club membership. /// </summary> /// <param name="playerId">The player identifier.</param> /// <param name="golfClubId">The golf club identifier.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns></returns> /// <exception cref="InvalidDataException"> /// Unable to request club membership for a player that has not been registered /// or /// Unable to request club membership for a club that has not been created /// </exception> public async Task RequestClubMembership(Guid playerId, Guid golfClubId, CancellationToken cancellationToken) { // Rehydrate the golf club membership aggregate GolfClubMembershipAggregate golfClubMembershipAggregate = await this.GolfClubMembershipRepository.GetLatestVersion(golfClubId, cancellationToken); // Validate the player id firstly PlayerAggregate playerAggregate = await this.PlayerRepository.GetLatestVersion(playerId, cancellationToken); if (!playerAggregate.HasBeenRegistered) { throw new InvalidDataException("Unable to request club membership for a player that has not been registered"); } // Now validate the club GolfClubAggregate golfClubAggregate = await this.GolfClubRepository.GetLatestVersion(golfClubId, cancellationToken); if (!golfClubAggregate.HasBeenCreated) { throw new InvalidDataException("Unable to request club membership for a club that has not been created"); } // Ok all the data has been validated, now run through the aggregate rules golfClubMembershipAggregate.RequestMembership(playerId, playerAggregate.FullName, playerAggregate.DateOfBirth, playerAggregate.Gender, DateTime.Now); // Save any pending changes await this.GolfClubMembershipRepository.SaveChanges(golfClubMembershipAggregate, cancellationToken); }
public void GolfClubMembershipAggregate_RequestMembership_PlayerToYoung_RequestRejected() { GolfClubMembershipAggregate aggregate = GolfClubMembershipTestData.GetCreatedGolfClubMembershipAggregate(); // Get the lowest valid age DateTime dateOfBirth = DateTime.Now.AddYears(-13); // Now add a day to make it invalid dateOfBirth = dateOfBirth.AddDays(1); aggregate.RequestMembership(GolfClubMembershipTestData.PlayerId, GolfClubMembershipTestData.PlayerFullName, dateOfBirth, GolfClubMembershipTestData.PlayerGender, GolfClubMembershipTestData.RequestDateAndTime); MembershipDataTransferObject membership = aggregate.GetMembership(GolfClubMembershipTestData.PlayerId, dateOfBirth, GolfClubMembershipTestData.PlayerGender); membership.MembershipId.ShouldNotBe(Guid.Empty); membership.PlayerId.ShouldBe(GolfClubMembershipTestData.PlayerId); membership.PlayerFullName.ShouldBe(GolfClubMembershipTestData.PlayerFullName); membership.PlayerDateOfBirth.ShouldBe(dateOfBirth); membership.PlayerGender.ShouldBe(GolfClubMembershipTestData.PlayerGender); membership.RejectedDateAndTime.ShouldBe(GolfClubMembershipTestData.RequestDateAndTime); membership.AcceptedDateAndTime.ShouldBe(DateTime.MinValue); membership.RejectionReason.ShouldBe($"Player Id {GolfClubMembershipTestData.PlayerId} is too young."); membership.Status.ShouldBe(2); }
public static GolfClubMembershipAggregate GetCreatedGolfClubMembershipAggregateWithNumberOfAcceptedMembershipRequests(Int32 memberCount) { GolfClubMembershipAggregate aggregate = GolfClubMembershipAggregate.Create(AggregateId); for (Int32 i = 0; i < memberCount; i++) { aggregate.RequestMembership(Guid.NewGuid(), $"Player {i}", PlayerDateOfBirth, PlayerGender, RequestDateAndTime); } return(aggregate); }
public void GolfClubMembershipAggregate_RequestMembership_DuplicatePlayerMembershipRequest_RequestRejected() { GolfClubMembershipAggregate aggregate = GolfClubMembershipTestData.GetCreatedGolfClubMembershipAggregateWithMembershipRequested(); Should.Throw <InvalidOperationException>(() => { aggregate.RequestMembership(GolfClubMembershipTestData.PlayerId, GolfClubMembershipTestData.PlayerFullName, GolfClubMembershipTestData.PlayerDateOfBirth, GolfClubMembershipTestData.PlayerGender, GolfClubMembershipTestData.RequestDateAndTime); }); }
public void GolfClubMembershipAggregate_RequestMembership_InvalidData_ErrorThrown(Boolean validPlayerId, String playerFullName, Boolean validDateOfBirth, String playerGender, Type exceptionType) { Guid playerId = validPlayerId ? GolfClubMembershipTestData.PlayerId : Guid.Empty; DateTime dateOfBirth = validDateOfBirth ? GolfClubMembershipTestData.PlayerDateOfBirth : DateTime.MinValue; GolfClubMembershipAggregate aggregate = GolfClubMembershipTestData.GetCreatedGolfClubMembershipAggregate(); Should.Throw(() => { aggregate.RequestMembership(playerId, playerFullName, dateOfBirth, playerGender, GolfClubMembershipTestData.RequestDateAndTime); }, exceptionType); }
public void GolfClubMembershipAggregate_RequestMembership_NoSpaceForNewMembers_RequestRejected() { GolfClubMembershipAggregate aggregate = GolfClubMembershipTestData.GetCreatedGolfClubMembershipAggregateWithNumberOfAcceptedMembershipRequests(500); aggregate.RequestMembership(GolfClubMembershipTestData.PlayerId, GolfClubMembershipTestData.PlayerFullName, GolfClubMembershipTestData.PlayerDateOfBirth, GolfClubMembershipTestData.PlayerGender, GolfClubMembershipTestData.RequestDateAndTime); MembershipDataTransferObject membership = aggregate.GetMembership(GolfClubMembershipTestData.PlayerId, GolfClubMembershipTestData.PlayerDateOfBirth, GolfClubMembershipTestData.PlayerGender); membership.MembershipId.ShouldNotBe(Guid.Empty); membership.PlayerId.ShouldBe(GolfClubMembershipTestData.PlayerId); membership.PlayerFullName.ShouldBe(GolfClubMembershipTestData.PlayerFullName); membership.PlayerDateOfBirth.ShouldBe(GolfClubMembershipTestData.PlayerDateOfBirth); membership.PlayerGender.ShouldBe(GolfClubMembershipTestData.PlayerGender); membership.RejectedDateAndTime.ShouldBe(GolfClubMembershipTestData.RequestDateAndTime); membership.AcceptedDateAndTime.ShouldBe(DateTime.MinValue); membership.RejectionReason.ShouldBe($"No more space at club for Player Id {GolfClubMembershipTestData.PlayerId}"); membership.Status.ShouldBe(2); }
public void GolfClubMembershipAggregate_RequestMembership_MembershipRequested() { GolfClubMembershipAggregate aggregate = GolfClubMembershipTestData.GetCreatedGolfClubMembershipAggregate(); aggregate.RequestMembership(GolfClubMembershipTestData.PlayerId, GolfClubMembershipTestData.PlayerFullName, GolfClubMembershipTestData.PlayerDateOfBirth, GolfClubMembershipTestData.PlayerGender, GolfClubMembershipTestData.RequestDateAndTime); MembershipDataTransferObject membership = aggregate.GetMembership(GolfClubMembershipTestData.PlayerId, GolfClubMembershipTestData.PlayerDateOfBirth, GolfClubMembershipTestData.PlayerGender); membership.MembershipId.ShouldNotBe(Guid.Empty); membership.PlayerId.ShouldBe(GolfClubMembershipTestData.PlayerId); membership.PlayerFullName.ShouldBe(GolfClubMembershipTestData.PlayerFullName); membership.PlayerDateOfBirth.ShouldBe(GolfClubMembershipTestData.PlayerDateOfBirth); membership.PlayerGender.ShouldBe(GolfClubMembershipTestData.PlayerGender); membership.AcceptedDateAndTime.ShouldBe(GolfClubMembershipTestData.RequestDateAndTime); membership.AcceptedDateAndTime.ShouldNotBe(DateTime.MinValue); membership.MembershipNumber.ShouldBe("000001"); membership.Status.ShouldBe(1); }