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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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!"));
        }
Ejemplo n.º 4
0
        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"));
        }
Ejemplo n.º 5
0
        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"));
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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"));
        }
Ejemplo n.º 9
0
        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);
        }