public void EntityDeletedHandler_HasNoEntityPermissions()
        {
            var expPr  = new PermissionRecord("c", "r", "u", "d");
            var userId = "uId";
            var dbUp   = new UserPermissions
            {
                UserId = userId,
            };
            var pm = new Mock <IPermissionManager>();

            pm.Setup(p => p.GetUserPermissions(It.IsAny <string>())).ReturnsAsync(dbUp);
            var sp = new Mock <IServiceProvider>();

            sp.Setup(s => s.GetService(typeof(IPermissionManager))).Returns(pm.Object);
            var data = new TestClass
            {
                Value = 123
            };

            var ed = new DomainEvent
            {
                Data = data,
                PerformedByUserId = userId
            };
            var ph = new DefaultPermissionsEventsHandler(sp.Object);

            ph.PermissionDeletedHandler(ed);
            Thread.Sleep(50);

            pm.Verify(p => p.UpdateUserPermissions(It.IsAny <UserPermissions>()), Times.Never);
        }
        public void EntityCreatedHandler_DataIsNotDominModel_DoesNothing()
        {
            var ed = new DomainEvent
            {
                Data = "some=string",
                PerformedByUserId = "uId",
            };
            var ph = new DefaultPermissionsEventsHandler(null);

            ph.PermissionCreatedHandler(ed);
        }
        public void EntityDeletedHandler_NotDomainModel()
        {
            var ed = new DomainEvent
            {
                Data = "some=string",
                PerformedByUserId = "uId"
            };
            var ph = new DefaultPermissionsEventsHandler(null);

            ph.PermissionDeletedHandler(ed);
            Thread.Sleep(50);
        }
        public void EntityCreatedHandler_UpdatesExistsUserPermissions()
        {
            var expPr = new PermissionRecord("c", "r", "u", "d");
            var ecr   = new EntityConfigRecord {
                Type = typeof(TestClass), PermissionRecord = expPr
            };
            var sp = new Mock <IServiceProvider>();

            sp.Setup(s => s.GetService(typeof(IEnumerable <EntityConfigRecord>))).Returns(new[] { ecr });

            var userId = "uId";
            var dbUp   = new UserPermissions
            {
                UserId            = userId,
                EntityPermissions = new[] {
                    new EntityPermission
                    {
                        EntityId       = "eId",
                        EntityKey      = "ek",
                        PermissionKeys = new[] { "r1", "u1", "d1", },
                    },
                }
            };
            var pm = new Mock <IPermissionManager>();

            pm.Setup(p => p.GetUserPermissions(It.IsAny <string>())).ReturnsAsync(dbUp);
            sp.Setup(s => s.GetService(typeof(IPermissionManager))).Returns(pm.Object);
            var data = new TestClass
            {
                Value = 123
            };

            var ed = new DomainEvent
            {
                Data = data,
                PerformedByUserId = userId,
                WorkContext       = new WorkContext {
                    CurrentEntityConfigRecord = ecr
                },
            };
            var ph = new DefaultPermissionsEventsHandler(sp.Object);

            ph.PermissionCreatedHandler(ed);
            Thread.Sleep(250);

            pm.Verify(p => p.UpdateUserPermissions(It.Is <UserPermissions>(
                                                       up => up.UserId == userId &&
                                                       up.EntityPermissions.Count() == 2 &&
                                                       up.EntityPermissions.ElementAt(1).PermissionKeys.Contains(expPr.ReadKey) &&
                                                       up.EntityPermissions.ElementAt(1).PermissionKeys.Contains(expPr.UpdateKey) &&
                                                       up.EntityPermissions.ElementAt(1).PermissionKeys.Contains(expPr.DeleteKey))),
                      Times.Once);
        }