public void Init()
        {
            _mapper = new Mock <IMapper>();
            _costStageRevisionServiceMock = new Mock <ICostStageRevisionService>();
            _moduleServiceMock            = new Mock <IModuleService>();
            _elasticSearchServiceMock     = new Mock <IElasticSearchService>();
            _efContext = EFContextFactory.CreateInMemoryEFContext();

            _appsettings = new Mock <IOptions <AppSettings> >();
            _appsettings.Setup(a => a.Value).Returns(new AppSettings {
                AdminUser = "******", CostsAdminUserId = "dcc8c610-5eb5-473f-a5f7-b7d5d3ee9b55"
            });

            _logger = new Mock <ILogger>();
            _permissionServiceMock  = new Mock <IPermissionService>();
            _activityLogServiceMock = new Mock <IActivityLogService>();
            _eventServiceMock       = new Mock <IEventService>();
            _agencyServiceMock      = new Mock <IAgencyService>();
            _pgAgencyServiceMock    = new Mock <IPgAgencyService>();
            _gdamClientMock         = new Mock <IGdamClient>();

            _pgUserService = new PgUserService(
                _efContext,
                _mapper.Object,
                _permissionServiceMock.Object,
                _logger.Object,
                _costStageRevisionServiceMock.Object,
                _activityLogServiceMock.Object,
                _eventServiceMock.Object,
                _pgAgencyServiceMock.Object
                );
            _userService = new UserService(
                _mapper.Object,
                _permissionServiceMock.Object,
                _logger.Object,
                _appsettings.Object,
                _efContext,
                _elasticSearchServiceMock.Object,
                new[]
            {
                new Lazy <IPgUserService, PluginMetadata>(
                    () => _pgUserService, new PluginMetadata {
                    BuType = BuType.Pg
                })
            },
                _activityLogServiceMock.Object,
                _agencyServiceMock.Object,
                _gdamClientMock.Object
                );
        }
Exemple #2
0
        public void Setup()
        {
            User = new UserIdentity
            {
                Id = _xUserId
            };
            var clientModule = new Module
            {
                Id         = Guid.NewGuid(),
                ClientType = ClientType.Pg,
                Name       = "Procter & Gamble",
                ClientTag  = "costPG",
                Key        = "P&G"
            };
            var agencies = new List <Agency>
            {
                new Agency
                {
                    Id     = Guid.NewGuid(),
                    Name   = "SmoName1",
                    Labels = new [] { "CM_Prime_P&G" }
                },
                new Agency
                {
                    Id     = Guid.NewGuid(),
                    Name   = "SmoName2",
                    Labels = new [] { "CM_Prime_P&G" }
                }
            };

            _abstractTypes = new List <AbstractType>
            {
                new AbstractType
                {
                    Id       = Guid.NewGuid(),
                    ObjectId = clientModule.Id,
                    Module   = clientModule,
                    Type     = core.Constants.AccessObjectType.Module
                },
                new AbstractType
                {
                    Id       = Guid.NewGuid(),
                    ObjectId = agencies.First(a => a.Name == "SmoName1").Id,
                    Agency   = agencies.First(a => a.Name == "SmoName1"),
                    Type     = core.Constants.AccessObjectType.Agency
                },
                new AbstractType
                {
                    Id       = Guid.NewGuid(),
                    ObjectId = agencies.First(a => a.Name == "SmoName2").Id,
                    Agency   = agencies.First(a => a.Name == "SmoName2"),
                    Type     = core.Constants.AccessObjectType.Agency
                }
            };
            _costStageReviDetailsFormFirstCost = new PgStageDetailsForm
            {
                BudgetRegion = new AbstractTypeValue
                {
                    Id   = Guid.NewGuid(),
                    Key  = "",
                    Name = "RegionOne"
                },
                SmoName = "SmoName1",
                SmoId   = Guid.NewGuid().ToString()
            };
            _costStageReviDetailsFormSecondCost = new PgStageDetailsForm
            {
                BudgetRegion = new AbstractTypeValue
                {
                    Id   = Guid.NewGuid(),
                    Key  = "",
                    Name = "RegionTwo"
                },
                SmoName = "SmoName2",
                SmoId   = Guid.NewGuid().ToString()
            };
            _costStageReviDetailsFormThirdCost = new PgStageDetailsForm
            {
                BudgetRegion = new AbstractTypeValue
                {
                    Id   = Guid.NewGuid(),
                    Key  = "",
                    Name = "RegionThree"
                },
                SmoName = "SmoName3",
                SmoId   = Guid.NewGuid().ToString()
            };
            _costs = new List <Cost>
            {
                new Cost
                {
                    Id         = Guid.NewGuid(),
                    CostNumber = "number1",
                    ProjectId  = Guid.NewGuid(),
                    LatestCostStageRevision = new CostStageRevision
                    {
                        StageDetails = new CustomFormData
                        {
                            Data = JsonConvert.SerializeObject(_costStageReviDetailsFormFirstCost)
                        }
                    }
                },
                new Cost
                {
                    Id         = Guid.NewGuid(),
                    CostNumber = "number2",
                    ProjectId  = Guid.NewGuid(),
                    LatestCostStageRevision = new CostStageRevision
                    {
                        StageDetails = new CustomFormData
                        {
                            Data = JsonConvert.SerializeObject(_costStageReviDetailsFormSecondCost)
                        }
                    }
                },
                new Cost
                {
                    Id         = Guid.NewGuid(),
                    CostNumber = "number3",
                    ProjectId  = Guid.NewGuid(),
                    LatestCostStageRevision = new CostStageRevision
                    {
                        StageDetails = new CustomFormData
                        {
                            Data = JsonConvert.SerializeObject(_costStageReviDetailsFormThirdCost)
                        }
                    }
                }
            };

            var adminRole = new Role
            {
                Name           = Roles.ClientAdmin,
                Subtype        = "role",
                AbstractTypeId = Guid.NewGuid(),
                Id             = Guid.NewGuid()
            };

            var costCreaterRole = new Role
            {
                Name           = Roles.CostOwner,
                Subtype        = "role",
                AbstractTypeId = Guid.NewGuid(),
                Id             = Guid.NewGuid()
            };

            var costOwnerRole = new Role
            {
                Name           = Roles.CostOwner,
                Subtype        = "role",
                AbstractTypeId = Guid.NewGuid(),
                Id             = Guid.NewGuid()
            };

            var costApproverRole = new Role
            {
                Name           = Roles.CostApprover,
                Subtype        = "role",
                AbstractTypeId = Guid.NewGuid(),
                Id             = Guid.NewGuid()
            };

            var agencyAdminRole = new Role
            {
                Name           = Roles.AgencyAdmin,
                Subtype        = "role",
                AbstractTypeId = Guid.NewGuid(),
                Id             = Guid.NewGuid()
            };

            var userBeingUpdated = new CostUser
            {
                Id                = _userNoRoles,
                Email             = "*****@*****.**",
                UserUserGroups    = new List <UserUserGroup>(),
                UserBusinessRoles = new List <UserBusinessRole>(),
                Agency            = new Agency
                {
                    Id     = Guid.NewGuid(),
                    Labels = new[] { "costPG" },
                    Name   = "AgencyName_11111"
                },
                ApprovalLimit = 0m,
                UserGroups    = new string[0]
            };

            _businessRoles = new List <BusinessRole>
            {
                new BusinessRole
                {
                    Id     = Guid.NewGuid(),
                    Key    = Constants.BusinessRole.GovernanceManager,
                    Value  = Constants.BusinessRole.GovernanceManager,
                    RoleId = adminRole.Id,
                    Role   = adminRole
                },
                new BusinessRole
                {
                    Id     = Guid.NewGuid(),
                    Key    = Constants.BusinessRole.AgencyOwner,
                    Value  = Constants.BusinessRole.AgencyOwner,
                    RoleId = costCreaterRole.Id,
                    Role   = costCreaterRole
                },
                new BusinessRole
                {
                    Id     = Guid.NewGuid(),
                    Key    = Constants.BusinessRole.AgencyFinanceManager,
                    Value  = Constants.BusinessRole.AgencyFinanceManager,
                    RoleId = costCreaterRole.Id,
                    Role   = costCreaterRole
                },
                new BusinessRole
                {
                    Id     = Guid.NewGuid(),
                    Key    = Constants.BusinessRole.FinanceManager,
                    Value  = Constants.BusinessRole.FinanceManager,
                    RoleId = adminRole.Id,
                    Role   = adminRole
                },
                new BusinessRole
                {
                    Id     = Guid.NewGuid(),
                    Key    = Constants.BusinessRole.AdstreamAdmin,
                    Value  = Constants.BusinessRole.AdstreamAdmin,
                    RoleId = costCreaterRole.Id,
                    Role   = costCreaterRole
                },
                new BusinessRole
                {
                    Id     = Guid.NewGuid(),
                    Key    = Constants.BusinessRole.CostConsultant,
                    Value  = Constants.BusinessRole.CostConsultant,
                    RoleId = costApproverRole.Id,
                    Role   = costApproverRole
                },
                new BusinessRole
                {
                    Id     = Guid.NewGuid(),
                    Key    = Constants.BusinessRole.AgencyAdmin,
                    Value  = Constants.BusinessRole.AgencyAdmin,
                    RoleId = agencyAdminRole.Id,
                    Role   = agencyAdminRole
                }
            };

            var userWithOneClientRole = new CostUser
            {
                Id    = _UserWithOneRoleId,
                Email = "*****@*****.**",

                UserUserGroups = new List <UserUserGroup>
                {
                    new UserUserGroup
                    {
                        UserId    = _UserWithOneRoleId,
                        Id        = Guid.NewGuid(),
                        UserGroup = new UserGroup
                        {
                            Id       = Guid.NewGuid(),
                            ObjectId = _abstractTypes.First(a => a.Type == core.Constants.AccessObjectType.Module).Id
                        }
                    }
                },

                UserBusinessRoles = new List <UserBusinessRole>
                {
                    new UserBusinessRole
                    {
                        BusinessRole   = _businessRoles.First(a => a.Value == Constants.BusinessRole.AgencyOwner),
                        BusinessRoleId = _businessRoles.First(a => a.Value == Constants.BusinessRole.AgencyOwner).Id,
                        Id             = Guid.NewGuid(),
                        CostUserId     = _UserWithOneRoleId,
                        ObjectType     = core.Constants.AccessObjectType.Client,
                        ObjectId       = _abstractTypes.First(a => a.Type == core.Constants.AccessObjectType.Module).Id
                    }
                },
                Agency = new Agency
                {
                    Id     = Guid.NewGuid(),
                    Labels = new[] { "costPG" },
                    Name   = "AgencyName_11111"
                },
                ApprovalLimit = 0m,
                UserGroups    = new string[0]
            };

            var userWithOneRegionRole = new CostUser
            {
                Id    = _UserWithOneRegionRoleId,
                Email = "*****@*****.**",

                UserUserGroups = new List <UserUserGroup>
                {
                    new UserUserGroup
                    {
                        UserId    = _UserWithOneRoleId,
                        Id        = Guid.NewGuid(),
                        UserGroup = new UserGroup
                        {
                            Id       = Guid.NewGuid(),
                            ObjectId = _abstractTypes.First(a => a.Type == core.Constants.AccessObjectType.Module).Id,
                            Label    = "RegionOne"
                        }
                    }
                },

                UserBusinessRoles = new List <UserBusinessRole>
                {
                    new UserBusinessRole
                    {
                        BusinessRole   = _businessRoles.First(a => a.Value == Constants.BusinessRole.FinanceManager),
                        BusinessRoleId = _businessRoles.First(a => a.Value == Constants.BusinessRole.FinanceManager).Id,
                        Id             = Guid.NewGuid(),
                        CostUserId     = _UserWithOneRegionRoleId,
                        Labels         = new[] { "RegionOne" },
                        ObjectType     = core.Constants.AccessObjectType.Region,
                    }
                },
                Agency = new Agency
                {
                    Id     = Guid.NewGuid(),
                    Labels = new[] { "costPG" },
                    Name   = "AgencyName_11111"
                },
                ApprovalLimit = 0m,
                UserGroups    = new string[0]
            };

            var userWithTwoRegionRoles = new CostUser
            {
                Id    = _UserWithTwoRegionRolesId,
                Email = "*****@*****.**",

                UserUserGroups = new List <UserUserGroup>
                {
                    new UserUserGroup
                    {
                        UserId    = _UserWithTwoRegionRolesId,
                        Id        = Guid.NewGuid(),
                        UserGroup = new UserGroup
                        {
                            Id       = Guid.NewGuid(),
                            ObjectId = agencies.First(a => a.Name == "SmoName2").Id
                        }
                    }
                },

                UserBusinessRoles = new List <UserBusinessRole>
                {
                    new UserBusinessRole
                    {
                        BusinessRole   = _businessRoles.First(a => a.Value == Constants.BusinessRole.FinanceManager),
                        BusinessRoleId = _businessRoles.First(a => a.Value == Constants.BusinessRole.FinanceManager).Id,
                        Id             = Guid.NewGuid(),
                        CostUserId     = _UserWithTwoRegionRolesId,
                        Labels         = new[] { "RegionOne", "RegionTwo" },
                        ObjectType     = core.Constants.AccessObjectType.Region,
                    }
                },
                Agency = new Agency
                {
                    Id     = Guid.NewGuid(),
                    Labels = new[] { "costPG" },
                    Name   = "AgencyName_11111"
                },
                ApprovalLimit = 0m,
                UserGroups    = new string[0]
            };

            var userWithTwoRoles = new CostUser
            {
                Id    = _UserWithTwoRolesId,
                Email = "*****@*****.**",

                UserUserGroups = new List <UserUserGroup>
                {
                    new UserUserGroup
                    {
                        Id        = Guid.NewGuid(),
                        UserId    = _UserWithTwoRolesId,
                        UserGroup = new UserGroup
                        {
                            ObjectId = _abstractTypes.First(a => a.Type == core.Constants.AccessObjectType.Module).Id,
                            Name     = "Name",
                            Id       = Guid.NewGuid()
                        }
                    },
                    new UserUserGroup
                    {
                        Id        = Guid.NewGuid(),
                        UserId    = _UserWithTwoRolesId,
                        UserGroup = new UserGroup
                        {
                            Name     = "Name2",
                            Id       = Guid.NewGuid(),
                            Label    = "RegionOne",
                            ObjectId = _costs.First(a => a.CostNumber == "number1").Id
                        }
                    }
                },

                UserBusinessRoles = new List <UserBusinessRole>
                {
                    new UserBusinessRole
                    {
                        BusinessRole   = _businessRoles.First(a => a.Value == Constants.BusinessRole.AgencyFinanceManager),
                        BusinessRoleId = _businessRoles.First(a => a.Value == Constants.BusinessRole.AgencyFinanceManager).Id,
                        Id             = Guid.NewGuid(),
                        CostUserId     = _UserWithTwoRolesId,
                        Labels         = new[] { "RegionOne" },
                        ObjectType     = core.Constants.AccessObjectType.Region
                    },
                    new UserBusinessRole
                    {
                        BusinessRole   = _businessRoles.First(a => a.Value == Constants.BusinessRole.AgencyOwner),
                        BusinessRoleId = _businessRoles.First(a => a.Value == Constants.BusinessRole.AgencyOwner).Id,
                        Id             = Guid.NewGuid(),
                        CostUserId     = _UserWithTwoRolesId,
                        ObjectType     = core.Constants.AccessObjectType.Client,
                        ObjectId       = _abstractTypes.First(a => a.Type == core.Constants.AccessObjectType.Module).Id
                    }
                },
                Agency = new Agency
                {
                    Id     = Guid.NewGuid(),
                    Labels = new[] { "costPG" },
                    Name   = "AgencyName_11111"
                },
                ApprovalLimit = 0m,
                UserGroups    = new string[0]
            };

            var userWithAgencyAdminRole = new CostUser
            {
                Id    = UserWithAgencyAdminRoleId,
                Email = "*****@*****.**",

                UserUserGroups = new List <UserUserGroup>
                {
                    new UserUserGroup
                    {
                        UserId    = UserWithAgencyAdminRoleId,
                        Id        = Guid.NewGuid(),
                        UserGroup = new UserGroup
                        {
                            Id       = Guid.NewGuid(),
                            ObjectId = _abstractTypes.First(a => a.Type == core.Constants.AccessObjectType.Module).Id
                        }
                    }
                },

                UserBusinessRoles = new List <UserBusinessRole>
                {
                    new UserBusinessRole
                    {
                        Id             = Guid.NewGuid(),
                        BusinessRole   = _businessRoles.First(a => a.Key == Constants.BusinessRole.AgencyAdmin),
                        BusinessRoleId = _businessRoles.First(a => a.Key == Constants.BusinessRole.AgencyAdmin).Id,
                        CostUserId     = UserWithAgencyAdminRoleId,
                        ObjectType     = core.Constants.AccessObjectType.Client,
                        ObjectId       = _abstractTypes.First(a => a.Type == core.Constants.AccessObjectType.Module).Id
                    }
                },
                Agency = new Agency
                {
                    Id     = Guid.NewGuid(),
                    Labels = new[] { "costPG" },
                    Name   = "AgencyName_11111"
                },
                ApprovalLimit = 0m,
                UserGroups    = new string[0]
            };

            var userPerformingUpdate = new CostUser
            {
                Id                = _xUserId,
                Email             = "*****@*****.**",
                UserUserGroups    = new List <UserUserGroup>(),
                UserBusinessRoles = new List <UserBusinessRole>
                {
                    new UserBusinessRole
                    {
                        Id           = Guid.NewGuid(),
                        BusinessRole = _businessRoles.First(a => a.Value == Constants.BusinessRole.GovernanceManager)
                    }
                },
                Agency = new Agency
                {
                    Id     = Guid.NewGuid(),
                    Labels = new[] { "costPG", "CM_Prime_P&G" },
                    Name   = "P&GBU"
                },
                ApprovalLimit = 1111100m,
                UserGroups    = new string[0]
            };

            _roles = new List <Role> {
                costOwnerRole, adminRole
            };
            _users = new List <CostUser>
            {
                userBeingUpdated,
                userPerformingUpdate,
                userWithOneClientRole,
                userWithTwoRoles,
                userWithOneRegionRole,
                userWithTwoRegionRoles,
                userWithAgencyAdminRole
            };

            EfContext = EFContextFactory.CreateInMemoryEFContextTest();

            _appSettingsMock.Setup(a => a.Value).Returns(new AppSettings {
                CostsAdminUserId = Guid.NewGuid().ToString()
            });
            _aclClientMock.Setup(a => a.Access).Returns(new Access(new AccessApi(new RequestHelper("http://localhost:9999/")), new FunctionHelper()));
            _aclClientMock.Setup(a => a.Get).Returns(new Get(new GetApi(new RequestHelper("http://localhost:9999/")), new FunctionHelper()));
            _pgUserService = new PgUserService(
                EfContext,
                _mapperMock.Object,
                _permissionServiceMock.Object,
                _loggerMock.Object,
                _costStageRevisionServiceMock.Object,
                ActivityLogServiceMock.Object,
                _eventServiceMock.Object,
                _pgAgencyServiceMock.Object);
        }