public void Constructor_SetsProperties() { var dut = new EditInvitationCommand( 1, Title, Description, Location, new DateTime(2020, 9, 1, 12, 0, 0, DateTimeKind.Utc), new DateTime(2020, 9, 1, 13, 0, 0, DateTimeKind.Utc), Type, _participants, _mcPkgScope, null, RowVersion); Assert.AreEqual(1, dut.InvitationId); Assert.AreEqual(Title, dut.Title); Assert.AreEqual(Description, dut.Description); Assert.AreEqual(Location, dut.Location); Assert.AreEqual(new DateTime(2020, 9, 1, 12, 0, 0, DateTimeKind.Utc), dut.StartTime); Assert.AreEqual(new DateTime(2020, 9, 1, 13, 0, 0, DateTimeKind.Utc), dut.EndTime); Assert.IsNotNull(dut.UpdatedParticipants); Assert.AreEqual(2, dut.UpdatedParticipants.Count); Assert.IsNotNull(dut.UpdatedMcPkgScope); Assert.AreEqual(2, dut.UpdatedMcPkgScope.Count); }
public void Setup_OkState() { _participants = _editParticipants.Cast <ParticipantsForCommand>().ToList(); _invitationValidatorMock = new Mock <IInvitationValidator>(); _rowVersionValidatorMock = new Mock <IRowVersionValidator>(); _rowVersionValidatorMock.Setup(r => r.IsValid(_rowVersion)).Returns(true); _invitationValidatorMock.Setup(inv => inv.IsValidScope(_type, new List <string>(), _commPkgScope)).Returns(true); _invitationValidatorMock.Setup(inv => inv.IpoExistsAsync(_id, default)).Returns(Task.FromResult(true)); _invitationValidatorMock.Setup(inv => inv.IpoIsInStageAsync(_id, IpoStatus.Planned, default)).Returns(Task.FromResult(true)); _invitationValidatorMock.Setup(inv => inv.IsValidParticipantList(_participants)).Returns(true); _invitationValidatorMock.Setup(inv => inv.RequiredParticipantsMustBeInvited(_participants)).Returns(true); _invitationValidatorMock.Setup(inv => inv.ParticipantWithIdExistsAsync(_editParticipants[0], _id, default)).Returns(Task.FromResult(true)); _invitationValidatorMock.Setup(inv => inv.ParticipantWithIdExistsAsync(_editParticipants[1], _id, default)).Returns(Task.FromResult(true)); _invitationValidatorMock.Setup(inv => inv.OnlyRequiredParticipantsHaveLowestSortKeys(_participants)).Returns(true); _command = new EditInvitationCommand( _id, _title, _description, _location, new DateTime(2020, 9, 1, 12, 0, 0, DateTimeKind.Utc), new DateTime(2020, 9, 1, 13, 0, 0, DateTimeKind.Utc), _type, _editParticipants, null, _commPkgScope, _rowVersion); _dut = new EditInvitationCommandValidator(_invitationValidatorMock.Object, _rowVersionValidatorMock.Object); }
public void Validate_ShouldFail_WhenFunctinalRoleIsInvalid() { var editParticipants = new List <ParticipantsForEditCommand> { new ParticipantsForEditCommand( Organization.Contractor, null, null, new InvitedFunctionalRoleForEditCommand(1, "F", null, _rowVersion), 0), new ParticipantsForEditCommand( Organization.ConstructionCompany, null, new InvitedPersonForEditCommand(2, null, "*****@*****.**", true, _rowVersion), null, 1), new ParticipantsForEditCommand( Organization.External, new InvitedExternalEmailForEditCommand(null, "*****@*****.**", null), null, null, -3) }; var participants = editParticipants.Cast <ParticipantsForCommand>().ToList(); _invitationValidatorMock.Setup(inv => inv.IsValidParticipantList(participants)).Returns(true); _invitationValidatorMock.Setup(inv => inv.RequiredParticipantsMustBeInvited(participants)).Returns(true); _invitationValidatorMock.Setup(inv => inv.ParticipantWithIdExistsAsync(editParticipants[0], _id, default)).Returns(Task.FromResult(true)); _invitationValidatorMock.Setup(inv => inv.ParticipantWithIdExistsAsync(editParticipants[1], _id, default)).Returns(Task.FromResult(true)); _invitationValidatorMock.Setup(inv => inv.ParticipantWithIdExistsAsync(editParticipants[2], _id, default)).Returns(Task.FromResult(true)); _invitationValidatorMock.Setup(inv => inv.OnlyRequiredParticipantsHaveLowestSortKeys(participants)).Returns(true); var command = new EditInvitationCommand( _id, _title, _description, _location, new DateTime(2020, 9, 1, 12, 0, 0, DateTimeKind.Utc), new DateTime(2020, 9, 1, 13, 0, 0, DateTimeKind.Utc), _type, editParticipants, null, _commPkgScope, _rowVersion); var result = _dut.Validate(command); Assert.IsFalse(result.IsValid); Assert.AreEqual(1, result.Errors.Count); Assert.IsTrue(result.Errors[0].ErrorMessage.StartsWith($"Functional role code must be between 3 and {Participant.FunctionalRoleCodeMaxLength} characters!")); }
public async Task HandlingUpdateIpoCommand_ShouldThrowErrorIfMcScopeIsAcrossSystems() { var mcPkgDetails1 = new ProCoSysMcPkg { CommPkgNo = _commPkgNo, Description = "D1", Id = 1, McPkgNo = _mcPkgNo1, System = _system }; var mcPkgDetails2 = new ProCoSysMcPkg { CommPkgNo = _commPkgNo2, Description = "D2", Id = 2, McPkgNo = _mcPkgNo2, System = _system }; var mcPkgDetails3 = new ProCoSysMcPkg { CommPkgNo = "CommPkgNo3", Description = "D2", Id = 2, McPkgNo = _mcPkgNo3, System = _system2 }; IList <ProCoSysMcPkg> mcPkgDetails = new List <ProCoSysMcPkg> { mcPkgDetails1, mcPkgDetails2, mcPkgDetails3 }; var addedScope = new List <string> { _mcPkgNo1, _mcPkgNo2, _mcPkgNo3 }; _mcPkgApiServiceMock .Setup(x => x.GetMcPkgsByMcPkgNosAsync(_plant, _projectName, addedScope)) .Returns(Task.FromResult(mcPkgDetails)); var command = new EditInvitationCommand( _dpInvitationId, _newTitle, _newDescription, null, new DateTime(2020, 9, 1, 12, 0, 0, DateTimeKind.Utc), new DateTime(2020, 9, 1, 13, 0, 0, DateTimeKind.Utc), _typeDp, _updatedParticipants, addedScope, null, _rowVersion); var result = await Assert.ThrowsExceptionAsync <IpoValidationException>(() => _dut.Handle(command, default)); Assert.IsTrue(result.Message.StartsWith("Mc pkg scope must be within a system")); }
public async Task HandlingUpdateIpoCommand_ShouldThrowErrorIfClearingScopeOnMDP() { var command = new EditInvitationCommand( _mdpInvitationId, _newTitle, _newDescription, null, new DateTime(2020, 9, 1, 12, 0, 0, DateTimeKind.Utc), new DateTime(2020, 9, 1, 13, 0, 0, DateTimeKind.Utc), _typeMdp, _updatedParticipants, null, null, _rowVersion); var result = await Assert.ThrowsExceptionAsync <ArgumentException>(() => _dut.Handle(command, default)); Assert.IsTrue(result.Message.StartsWith("MDP must have comm pkg scope and comm pkg scope only")); }
public async Task HandlingUpdateInvitationCommand_ShouldNotFailWhenAFunctionalRoleHasMultipleEmailsInInformationEmailField() { // Setup var newParticipants = new List <ParticipantsForEditCommand> { new ParticipantsForEditCommand( Organization.Contractor, null, null, new InvitedFunctionalRoleForEditCommand(null, _functionalRoleWithMultipleInformationEmailsCode, null, _participantRowVersion), 0), new ParticipantsForEditCommand( Organization.ConstructionCompany, null, new InvitedPersonForEditCommand(null, _azureOid, "*****@*****.**", true, null), null, 1) }; var command = new EditInvitationCommand( _dpInvitationId, _newTitle, _newDescription, null, new DateTime(2020, 9, 1, 12, 0, 0, DateTimeKind.Utc), new DateTime(2020, 9, 1, 13, 0, 0, DateTimeKind.Utc), _typeMdp, newParticipants, null, _commPkgScope, _rowVersion); await _dut.Handle(command, default); // Assert _unitOfWorkMock.Verify(t => t.SaveChangesAsync(It.IsAny <CancellationToken>()), Times.Once); _meetingClientMock.Verify(x => x.UpdateMeetingAsync(_meetingId, It.IsAny <Action <GeneralMeetingPatcher> >()), Times.Once); Assert.AreEqual(_functionalRoleWithMultipleInformationEmailsCode, _dpInvitation.Participants.ToList()[0].FunctionalRoleCode); }
public async Task ValidateAsync_OnEditInvitationCommand_ShouldReturnFalse_WhenNoAccessToProject() { // Arrange var command = new EditInvitationCommand( _invitationIdWithoutAccessToProject, null, null, null, new DateTime(2020, 9, 1, 12, 0, 0, DateTimeKind.Utc), new DateTime(2020, 9, 1, 13, 0, 0, DateTimeKind.Utc), DisciplineType.DP, null, null, null, null); // act var result = await _dut.ValidateAsync(command); // Assert Assert.IsFalse(result); }
public async Task HandlingUpdateIpoCommand_ShouldThrowErrorIfCommPkgScopeIsNotFoundInMain() { var commPkg = new ProCoSysCommPkg { CommPkgNo = _commPkgNo, Description = "D1", Id = 1, System = _system }; IList <ProCoSysCommPkg> commPkgDetails = new List <ProCoSysCommPkg> { commPkg }; var newScope = new List <string> { _commPkgNo, _commPkgNo2 }; _commPkgApiServiceMock .Setup(x => x.GetCommPkgsByCommPkgNosAsync(_plant, _projectName, newScope)) .Returns(Task.FromResult(commPkgDetails)); var command = new EditInvitationCommand( _dpInvitationId, _newTitle, _newDescription, null, new DateTime(2020, 9, 1, 12, 0, 0, DateTimeKind.Utc), new DateTime(2020, 9, 1, 13, 0, 0, DateTimeKind.Utc), _typeDp, _updatedParticipants, null, newScope, _rowVersion); var result = await Assert.ThrowsExceptionAsync <IpoValidationException>(() => _dut.Handle(command, default)); Assert.IsTrue(result.Message.StartsWith("Could not find all comm pkgs in scope")); }
public void Setup() { _plantProviderMock = new Mock <IPlantProvider>(); _plantProviderMock .Setup(x => x.Plant) .Returns(_plant); _personRepositoryMock = new Mock <IPersonRepository>(); _meetingClientMock = new Mock <IFusionMeetingClient>(); _meetingClientMock .Setup(x => x.UpdateMeetingAsync(_meetingId, It.IsAny <Action <GeneralMeetingPatcher> >())) .Returns(Task.FromResult( new GeneralMeeting( new ApiGeneralMeeting { Classification = string.Empty, Contract = null, Convention = string.Empty, DateCreatedUtc = DateTime.MinValue, DateEnd = new ApiDateTimeTimeZoneModel(), DateStart = new ApiDateTimeTimeZoneModel(), ExternalId = null, Id = _meetingId, InviteBodyHtml = string.Empty, IsDisabled = false, IsOnlineMeeting = false, Location = string.Empty, Organizer = new ApiPersonDetailsV1(), OutlookMode = string.Empty, Participants = new List <ApiMeetingParticipant>(), Project = null, ResponsiblePersons = new List <ApiPersonDetailsV1>(), Series = null, Title = string.Empty }))); _unitOfWorkMock = new Mock <IUnitOfWork>(); //mock comm pkg response from main API var commPkgDetails = new ProCoSysCommPkg { CommPkgNo = _commPkgNo, Description = "D1", Id = 1, CommStatus = "OK", System = _system }; IList <ProCoSysCommPkg> pcsCommPkgDetails = new List <ProCoSysCommPkg> { commPkgDetails }; _commPkgApiServiceMock = new Mock <ICommPkgApiService>(); _commPkgApiServiceMock .Setup(x => x.GetCommPkgsByCommPkgNosAsync(_plant, _projectName, _commPkgScope)) .Returns(Task.FromResult(pcsCommPkgDetails)); //mock mc pkg response from main API var mcPkgDetails1 = new ProCoSysMcPkg { CommPkgNo = _commPkgNo, Description = "D1", Id = 1, McPkgNo = _mcPkgNo1, System = _system }; var mcPkgDetails2 = new ProCoSysMcPkg { CommPkgNo = _commPkgNo2, Description = "D2", Id = 2, McPkgNo = _mcPkgNo2, System = _system }; IList <ProCoSysMcPkg> mcPkgDetails = new List <ProCoSysMcPkg> { mcPkgDetails1, mcPkgDetails2 }; _mcPkgApiServiceMock = new Mock <IMcPkgApiService>(); _mcPkgApiServiceMock .Setup(x => x.GetMcPkgsByMcPkgNosAsync(_plant, _projectName, _mcPkgScope)) .Returns(Task.FromResult(mcPkgDetails)); //mock person response from main API var personDetails = new ProCoSysPerson { AzureOid = _azureOid.ToString(), FirstName = _firstName, LastName = _lastName, Email = "*****@*****.**", UserName = "******" }; var newPersonDetails = new ProCoSysPerson { AzureOid = _newAzureOid.ToString(), FirstName = "Kari", LastName = "Nordman", Email = "*****@*****.**", UserName = "******" }; _personApiServiceMock = new Mock <IPersonApiService>(); _personApiServiceMock .Setup(x => x.GetPersonByOidWithPrivilegesAsync(_plant, _azureOid.ToString(), "IPO", new List <string> { "SIGN" })) .Returns(Task.FromResult(personDetails)); _personApiServiceMock .Setup(x => x.GetPersonByOidWithPrivilegesAsync(_plant, _newAzureOid.ToString(), "IPO", new List <string> { "SIGN" })) .Returns(Task.FromResult(newPersonDetails)); //mock functional role response from main API var frDetails = new ProCoSysFunctionalRole { Code = _functionalRoleCode, Description = "FR description", Email = "*****@*****.**", InformationEmail = null, Persons = null, UsePersonalEmail = false }; var newFrDetails = new ProCoSysFunctionalRole { Code = _newFunctionalRoleCode, Description = "FR description2", Email = "*****@*****.**", InformationEmail = null, Persons = null, UsePersonalEmail = false }; var frMultipleEmailsDetails = new ProCoSysFunctionalRole { Code = _functionalRoleWithMultipleEmailsCode, Description = "FR description", Email = "[email protected];[email protected]", InformationEmail = null, Persons = null, UsePersonalEmail = false }; var frMultipleInformationEmailsDetails = new ProCoSysFunctionalRole { Code = _functionalRoleWithMultipleInformationEmailsCode, Description = "FR description", Email = "*****@*****.**", InformationEmail = "[email protected];[email protected]", Persons = null, UsePersonalEmail = false }; IList <ProCoSysFunctionalRole> pcsFrDetails = new List <ProCoSysFunctionalRole> { frDetails }; IList <ProCoSysFunctionalRole> newPcsFrDetails = new List <ProCoSysFunctionalRole> { newFrDetails }; IList <ProCoSysFunctionalRole> pcsFrMultipleEmailsDetails = new List <ProCoSysFunctionalRole> { frMultipleEmailsDetails }; IList <ProCoSysFunctionalRole> pcsFrMultipleInformationEmailsDetails = new List <ProCoSysFunctionalRole> { frMultipleInformationEmailsDetails }; _functionalRoleApiServiceMock = new Mock <IFunctionalRoleApiService>(); _functionalRoleApiServiceMock .Setup(x => x.GetFunctionalRolesByCodeAsync(_plant, new List <string> { _functionalRoleCode })) .Returns(Task.FromResult(pcsFrDetails)); _functionalRoleApiServiceMock .Setup(x => x.GetFunctionalRolesByCodeAsync(_plant, new List <string> { _newFunctionalRoleCode })) .Returns(Task.FromResult(newPcsFrDetails)); _functionalRoleApiServiceMock .Setup(x => x.GetFunctionalRolesByCodeAsync(_plant, new List <string> { _functionalRoleWithMultipleEmailsCode })) .Returns(Task.FromResult(pcsFrMultipleEmailsDetails)); _functionalRoleApiServiceMock .Setup(x => x.GetFunctionalRolesByCodeAsync(_plant, new List <string> { _functionalRoleWithMultipleInformationEmailsCode })) .Returns(Task.FromResult(pcsFrMultipleInformationEmailsDetails)); var mcPkgs = new List <McPkg> { new McPkg(_plant, _projectName, _commPkgNo, _mcPkgNo1, "d", _system), new McPkg(_plant, _projectName, _commPkgNo, _mcPkgNo2, "d2", _system) }; //create invitation _dpInvitation = new Invitation( _plant, _projectName, _title, _description, _typeDp, new DateTime(), new DateTime(), null, mcPkgs, null) { MeetingId = _meetingId }; var commPkgs = new List <CommPkg> { new CommPkg(_plant, _projectName, _commPkgNo, "d", "ok", _system), new CommPkg(_plant, _projectName, _commPkgNo, "d2", "ok", _system) }; //create invitation _mdpInvitation = new Invitation( _plant, _projectName, _title, _description, _typeMdp, new DateTime(), new DateTime(), null, new List <McPkg>(), commPkgs) { MeetingId = _meetingId }; _mdpInvitation.SetProtectedIdForTesting(_mdpInvitationId); var participant = new Participant( _plant, Organization.Contractor, IpoParticipantType.FunctionalRole, _functionalRoleCode, null, null, null, null, null, 0); participant.SetProtectedIdForTesting(_participantId); _dpInvitation.AddParticipant(participant); _dpInvitation.AddParticipant(new Participant( _plant, Organization.ConstructionCompany, IpoParticipantType.Person, null, _firstName, _lastName, null, "*****@*****.**", _azureOid, 1)); _dpInvitation.SetProtectedIdForTesting(_dpInvitationId); _invitationRepositoryMock = new Mock <IInvitationRepository>(); _invitationRepositoryMock .Setup(x => x.GetByIdAsync(_dpInvitationId)) .Returns(Task.FromResult(_dpInvitation)); _invitationRepositoryMock .Setup(x => x.GetByIdAsync(_mdpInvitationId)) .Returns(Task.FromResult(_mdpInvitation)); _meetingOptionsMock = new Mock <IOptionsMonitor <MeetingOptions> >(); _meetingOptionsMock.Setup(x => x.CurrentValue) .Returns(new MeetingOptions { PcsBaseUrl = _plant }); //command _command = new EditInvitationCommand( _dpInvitationId, _newTitle, _newDescription, null, new DateTime(2020, 9, 1, 12, 0, 0, DateTimeKind.Utc), new DateTime(2020, 9, 1, 13, 0, 0, DateTimeKind.Utc), _typeMdp, _updatedParticipants, null, _commPkgScope, _rowVersion); _dut = new EditInvitationCommandHandler( _invitationRepositoryMock.Object, _meetingClientMock.Object, _plantProviderMock.Object, _unitOfWorkMock.Object, _mcPkgApiServiceMock.Object, _commPkgApiServiceMock.Object, _personApiServiceMock.Object, _functionalRoleApiServiceMock.Object, _meetingOptionsMock.Object, _personRepositoryMock.Object); }