예제 #1
0
        public void AllowReturnsBadReuqestForFailingLifecycleManagerOperation()
        {
            Mock.Arrange(() => CurrentUserDataProvider.GetIdentity(TENANT_ID))
            .Returns(new Identity
            {
                Permissions = new List <String> {
                    LIFE_CYCLE_ALLOW_PERMISSION
                },
                Username = CURRENT_USER_ID
            })
            .MustBeCalled();

            Mock.Arrange(() => _coreService.Jobs)
            .IgnoreInstance()
            .ReturnsCollection(new List <Job>(new List <CumulusCoreService.Job> {
                CreateSampleJob()
            }))
            .MustBeCalled();

            var mockedLifeCycleManager = Mock.Create <LifeCycleManager>();

            Mock.Arrange(() => mockedLifeCycleManager.OnAllowCallback(Arg.IsAny <Job>()))
            .IgnoreInstance()
            .Throws <InvalidOperationException>()
            .MustBeCalled();

            var actionResult = _lifeCyclesController.Allow(SAMPLE_TOKEN, null)
                               .Result;

            Assert.IsTrue(actionResult.GetType() == typeof(BadRequestErrorMessageResult));

            Mock.Assert(() => CurrentUserDataProvider.GetIdentity(TENANT_ID));
            Mock.Assert(mockedLifeCycleManager);
            Mock.Assert(_coreService);
        }
예제 #2
0
        public void DeleteStateChangeLockForAuthorizedUserWithDeletePermissionDeletesStateChangeLock()
        {
            Mock.Arrange(() => CurrentUserDataProvider.GetIdentity(TENANT_ID))
            .Returns(new Identity
            {
                Permissions = new List <String> {
                    STATE_CHANGE_LOCK_DELETE_PERMISSION
                },
                Username = CURRENT_USER_ID,
                Tid      = TENANT_ID
            })
            .MustBeCalled();
            Mock.Arrange(() => CurrentUserDataProvider.IsEntityOfUser(CURRENT_USER_ID, TENANT_ID, Arg.IsAny <StateChangeLock>()))
            .Returns(true)
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.StateChangeLocks.Find(1))
            .IgnoreInstance()
            .Returns(CreateSampleStateChangeLockDbSet()[0])
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.StateChangeLocks.Remove(Arg.IsAny <StateChangeLock>()))
            .IgnoreInstance()
            .MustBeCalled();
            var actionResult = _stateChangeLocksController.Delete(1).Result;

            AssertStatusCodeResult(actionResult, HttpStatusCode.NoContent);

            Mock.Assert(() => CurrentUserDataProvider.GetIdentity(TENANT_ID));
            Mock.Assert(() => CurrentUserDataProvider.IsEntityOfUser(CURRENT_USER_ID, TENANT_ID, Arg.IsAny <StateChangeLock>()));
            Mock.Assert(_lifeCycleContext);
        }
예제 #3
0
        public void CancelWithValidKeyCreatesLifecycleManagerAndExecutesCancelMethod()
        {
            Mock.Arrange(() => CurrentUserDataProvider.GetIdentity(TENANT_ID))
            .Returns(new Identity
            {
                Permissions = new List <String> {
                    LIFE_CYCLE_CANCEL_PERMISSION
                },
                Username = CURRENT_USER_ID,
                Tid      = TENANT_ID
            })
            .MustBeCalled();

            var mockedEntityController = Mock.Create <EntityController>();

            Mock.Arrange(() => mockedEntityController.LoadEntity(Arg.IsAny <Uri>()))
            .IgnoreInstance()
            .Returns(ENTITY)
            .MustBeCalled();

            var mockedLifeCycleManager = Mock.Create <LifeCycleManager>();

            Mock.Arrange(() => mockedLifeCycleManager.Cancel(new Uri(ENTITY_ID), ENTITY, TENANT_ID))
            .IgnoreInstance()
            .MustBeCalled();

            var actionResult = _lifeCyclesController.Cancel(ENTITY_ID, null)
                               .Result;

            Assert.IsTrue(actionResult.GetType() == typeof(OkResult));

            Mock.Assert(() => CurrentUserDataProvider.GetIdentity(TENANT_ID));
            Mock.Assert(mockedEntityController);
            Mock.Assert(mockedLifeCycleManager);
        }
예제 #4
0
        public void AllowWithValidTokenCreatesLifecycleManagerAndExecutesOnAllowCallbackMethod()
        {
            Mock.Arrange(() => CurrentUserDataProvider.GetIdentity(TENANT_ID))
            .Returns(new Identity
            {
                Permissions = new List <String> {
                    LIFE_CYCLE_ALLOW_PERMISSION
                },
                Username = CURRENT_USER_ID
            })
            .MustBeCalled();

            Mock.Arrange(() => _coreService.Jobs)
            .IgnoreInstance()
            .ReturnsCollection(new List <Job>(new List <CumulusCoreService.Job> {
                CreateSampleJob()
            }))
            .MustBeCalled();

            var mockedLifeCycleManager = Mock.Create <LifeCycleManager>();

            Mock.Arrange(() => mockedLifeCycleManager.OnAllowCallback(Arg.IsAny <Job>()))
            .IgnoreInstance()
            .MustBeCalled();

            var actionResult = _lifeCyclesController.Allow(SAMPLE_TOKEN, null)
                               .Result;

            Assert.IsTrue(actionResult.GetType() == typeof(OkResult));

            Mock.Assert(() => CurrentUserDataProvider.GetIdentity(TENANT_ID));
            Mock.Assert(mockedLifeCycleManager);
            Mock.Assert(_coreService);
        }
예제 #5
0
        public void PatchReturnsBadRequestIfEntityCouldNotBeLoaded()
        {
            Mock.Arrange(() => CurrentUserDataProvider.GetIdentity(TENANT_ID))
            .Returns(new Identity
            {
                Permissions = new List <String> {
                    LIFE_CYCLE_UPDATE_PERMISSION
                },
                Username = CURRENT_USER_ID
            })
            .MustBeCalled();

            var mockedEntityController = Mock.Create <EntityController>();

            Mock.Arrange(() => mockedEntityController.LoadEntity(Arg.IsAny <Uri>()))
            .IgnoreInstance()
            .Throws <HttpRequestException>();

            var delta = new Delta <LifeCycle>(typeof(LifeCycle));

            delta.TrySetPropertyValue("Condition", CONTINUE_CONDITION);
            var actionResult = _lifeCyclesController.Patch(ENTITY_ID, delta)
                               .Result;

            Assert.IsTrue(actionResult.GetType() == typeof(BadRequestErrorMessageResult));

            Mock.Assert(() => CurrentUserDataProvider.GetIdentity(TENANT_ID));
        }
예제 #6
0
        public void CancelReturnsBadRequestIfEntityCouldNotBeLoaded()
        {
            Mock.Arrange(() => CurrentUserDataProvider.GetIdentity(TENANT_ID))
            .Returns(new Identity
            {
                Permissions = new List <String> {
                    LIFE_CYCLE_CANCEL_PERMISSION
                },
                Username = CURRENT_USER_ID
            })
            .MustBeCalled();

            var mockedEntityController = Mock.Create <EntityController>();

            Mock.Arrange(() => mockedEntityController.LoadEntity(Arg.IsAny <Uri>()))
            .IgnoreInstance()
            .Throws <HttpRequestException>();

            var actionResult = _lifeCyclesController.Cancel(ENTITY_ID, null)
                               .Result;

            Assert.IsTrue(actionResult.GetType() == typeof(BadRequestErrorMessageResult));

            Mock.Assert(() => CurrentUserDataProvider.GetIdentity(TENANT_ID));
        }
        public void GetCalloutDefinitionByIdForNonExistingCalloutDefinitionIdReturnsNotFound()
        {
            Mock.Arrange(() => CurrentUserDataProvider.GetIdentity(TENANT_ID))
            .Returns(new Identity
            {
                Permissions = new List <String> {
                    CALLOUT_DEFINITION_READ_PERMISSION
                },
                Username = CURRENT_USER_ID
            })
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.CalloutDefinitions.Find(1))
            .IgnoreInstance()
            .Returns((CalloutDefinition)null)
            .MustBeCalled();

            var actionResult = _calloutDefinitionsController.GetCalloutDefinition(1,
                                                                                  CreateODataQueryOptions("http://localhost/api/Core.svc/CalloutDefinitions(1)"))
                               .Result;

            AssertStatusCodeResult(actionResult, HttpStatusCode.NotFound);

            Mock.Assert(() => CurrentUserDataProvider.GetIdentity(TENANT_ID));
            Mock.Assert(_lifeCycleContext);
        }
        public void RunForUnauthorizedUserReturnsForbidden()
        {
            Mock.Arrange(() => CurrentUserDataProvider.GetIdentity(TENANT_ID))
            .Returns(new Identity
            {
                Permissions = new List <String> {
                    JOB_RUN_PERMISSION
                },
                Username = CURRENT_USER_ID,
                Tid      = TENANT_ID
            })
            .MustBeCalled();
            Mock.Arrange(() => CurrentUserDataProvider.IsEntityOfUser(CURRENT_USER_ID, TENANT_ID, Arg.IsAny <Job>()))
            .Returns(false)
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.Jobs.Find(1))
            .IgnoreInstance()
            .Returns(CreateSampleJobDbSet()[0])
            .MustBeCalled();

            var actionResult = _jobsController.Run(1, null).Result;

            AssertStatusCodeResult(actionResult, HttpStatusCode.Forbidden);

            Mock.Assert(() => CurrentUserDataProvider.GetIdentity(TENANT_ID));
            Mock.Assert(() => CurrentUserDataProvider.IsEntityOfUser(CURRENT_USER_ID, TENANT_ID, Arg.IsAny <Job>()));
            Mock.Assert(_lifeCycleContext);
        }
        public void PutCalloutDefinitionForNonExistingCalloutDefinitionIdReturnsNotFound()
        {
            Mock.Arrange(() => CurrentUserDataProvider.GetIdentity(TENANT_ID))
            .Returns(new Identity
            {
                Permissions = new List <String> {
                    CALLOUT_DEFINITION_UPDATE_PERMISSION
                },
                Username = CURRENT_USER_ID
            })
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.CalloutDefinitions.Find(1))
            .IgnoreInstance()
            .Returns((CalloutDefinition)null)
            .MustBeCalled();

            var actionResult = _calloutDefinitionsController.Put(1,
                                                                 new CalloutDefinition
            {
                Id         = 1,
                EntityType = SAMPLE_ENTITY_TYPE,
                EntityId   = ENTITY_ID_1,
                TenantId   = TENANT_ID,
                Parameters = "testparameters",
            }).Result;

            AssertStatusCodeResult(actionResult, HttpStatusCode.NotFound);

            Mock.Assert(() => CurrentUserDataProvider.GetIdentity(TENANT_ID));
            Mock.Assert(_lifeCycleContext);
        }
        public void PutJobForNonExistingJobIdReturnsNotFound()
        {
            Mock.Arrange(() => CurrentUserDataProvider.GetIdentity(TENANT_ID))
            .Returns(new Identity
            {
                Permissions = new List <String> {
                    JOB_UPDATE_PERMISSION
                },
                Username = CURRENT_USER_ID
            })
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.Jobs.Find(1))
            .IgnoreInstance()
            .Returns((Job)null)
            .MustBeCalled();

            var actionResult = _jobsController.Put(1,
                                                   new Job
            {
                Id         = 1,
                Type       = "Test",
                State      = JobStateEnum.Canceled.ToString(),
                Parameters = SAMPLE_PARAMETERS,
            }).Result;

            AssertStatusCodeResult(actionResult, HttpStatusCode.NotFound);

            Mock.Assert(() => CurrentUserDataProvider.GetIdentity(TENANT_ID));
            Mock.Assert(_lifeCycleContext);
        }
        public void GetCalloutDefinitionsForUserWithReadPermissionReturnsCalloutDefinitionsTheUserIsAuthorizedFor()
        {
            Mock.Arrange(() => CurrentUserDataProvider.GetIdentity(TENANT_ID))
            .Returns(new Identity
            {
                Permissions = new List <String> {
                    CALLOUT_DEFINITION_READ_PERMISSION
                },
                Username = CURRENT_USER_ID,
                Tid      = TENANT_ID
            })
            .MustBeCalled();
            Mock.Arrange(() => CurrentUserDataProvider.GetEntitiesForUser(Arg.IsAny <DbSet <CalloutDefinition> >(), CURRENT_USER_ID, TENANT_ID))
            .ReturnsCollection(CreateSampleCalloutDefinitionDbSet().ToList())
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.CalloutDefinitions)
            .IgnoreInstance()
            .ReturnsCollection(CreateSampleCalloutDefinitionDbSet())
            .MustBeCalled();

            var actionResult = _calloutDefinitionsController.GetCalloutDefinitions(
                CreateODataQueryOptions("http://localhost/api/Core.svc/CalloutDefinitions"))
                               .Result;

            Assert.IsTrue(actionResult.GetType() == typeof(OkNegotiatedContentResult <IEnumerable <CalloutDefinition> >));

            var response = actionResult as OkNegotiatedContentResult <IEnumerable <CalloutDefinition> >;

            Assert.IsNotNull(response);
            Assert.AreEqual(2, response.Content.Count());

            Mock.Assert(() => CurrentUserDataProvider.GetIdentity(TENANT_ID));
            Mock.Assert(() => CurrentUserDataProvider.GetEntitiesForUser(Arg.IsAny <DbSet <CalloutDefinition> >(), CURRENT_USER_ID, TENANT_ID));
            Mock.Assert(_lifeCycleContext);
        }
예제 #12
0
        public void GetStateChangeLocksForUserWithoutStateChangeLocksReturnsEmptyList()
        {
            Mock.Arrange(() => CurrentUserDataProvider.GetIdentity(TENANT_ID))
            .Returns(new Identity
            {
                Permissions = new List <String> {
                    STATE_CHANGE_LOCK_READ_PERMISSION
                },
                Username = CURRENT_USER_ID,
                Tid      = TENANT_ID
            })
            .MustBeCalled();
            Mock.Arrange(() => CurrentUserDataProvider.GetEntitiesForUser(Arg.IsAny <DbSet <StateChangeLock> >(), CURRENT_USER_ID, TENANT_ID))
            .ReturnsCollection(new List <StateChangeLock>())
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.StateChangeLocks)
            .IgnoreInstance()
            .ReturnsCollection(CreateSampleStateChangeLockDbSet())
            .MustBeCalled();

            var actionResult = _stateChangeLocksController.GetStateChangeLocks(
                CreateODataQueryOptions("http://localhost/api/Core.svc/StateChangeLocks"))
                               .Result;

            Assert.IsTrue(actionResult.GetType() == typeof(OkNegotiatedContentResult <IEnumerable <StateChangeLock> >));

            var response = actionResult as OkNegotiatedContentResult <IEnumerable <StateChangeLock> >;

            Assert.IsNotNull(response);
            Assert.AreEqual(0, response.Content.Count());

            Mock.Assert(() => CurrentUserDataProvider.GetIdentity(TENANT_ID));
            Mock.Assert(() => CurrentUserDataProvider.GetEntitiesForUser(Arg.IsAny <DbSet <StateChangeLock> >(), CURRENT_USER_ID, TENANT_ID));
            Mock.Assert(_lifeCycleContext);
        }
        public void DeleteCalloutDefinitionForUnauthorizedUserReturnsForbidden()
        {
            Mock.Arrange(() => CurrentUserDataProvider.GetIdentity(TENANT_ID))
            .Returns(new Identity
            {
                Permissions = new List <String> {
                    CALLOUT_DEFINITION_DELETE_PERMISSION
                },
                Username = CURRENT_USER_ID,
                Tid      = TENANT_ID
            })
            .MustBeCalled();
            Mock.Arrange(() => CurrentUserDataProvider.IsEntityOfUser(CURRENT_USER_ID, TENANT_ID, Arg.IsAny <CalloutDefinition>()))
            .Returns(false)
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.CalloutDefinitions.Find(1))
            .IgnoreInstance()
            .Returns(CreateSampleCalloutDefinitionDbSet()[0])
            .MustBeCalled();
            var actionResult = _calloutDefinitionsController.Delete(1).Result;

            AssertStatusCodeResult(actionResult, HttpStatusCode.Forbidden);

            Mock.Assert(() => CurrentUserDataProvider.GetIdentity(TENANT_ID));
            Mock.Assert(() => CurrentUserDataProvider.IsEntityOfUser(CURRENT_USER_ID, TENANT_ID, Arg.IsAny <CalloutDefinition>()));
            Mock.Assert(_lifeCycleContext);
        }
예제 #14
0
 public void IsEntityOfUserForMatchingTidAndCreatedByReturnsTrue()
 {
     Assert.IsTrue(CurrentUserDataProvider.IsEntityOfUser(USERNAME, TENANT_ID, new BaseEntity
     {
         CreatedBy = USERNAME,
         Tid       = TENANT_ID
     }));
 }
        public void PostJobForUserWithCreatePermissionCreatesJobAndReturnsCreated()
        {
            Job createdJob = null;

            Mock.Arrange(() => ODataControllerHelper.ResponseCreated(
                             Arg.IsAny <ODataController>(), Arg.IsAny <Job>(),
                             Arg.IsAny <String>())).Returns(new HttpResponseMessage(HttpStatusCode.Created));
            Mock.Arrange(() => CurrentUserDataProvider.GetIdentity(TENANT_ID))
            .Returns(new Identity
            {
                Permissions = new List <String> {
                    JOB_CREATE_PERMISSION
                },
                Username = CURRENT_USER_ID,
                Tid      = TENANT_ID
            })
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.Jobs.Add(Arg.IsAny <Job>()))
            .IgnoreInstance()
            .DoInstead((Job j) => createdJob = j)
            .Returns((Job j) => j)
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.SaveChanges())
            .IgnoreInstance()
            .MustBeCalled();

            var actionResult = _jobsController.Post(
                new Job
            {
                Id         = 1,
                CreatedBy  = ANOTHER_USER_ID,
                Modified   = DateTimeOffset.Now,
                ModifiedBy = CURRENT_USER_ID,
                Tid        = TENANT_ID,
                Type       = "Test",
                State      = JobStateEnum.Running.ToString(),
                Parameters = SAMPLE_PARAMETERS,
                Token      = SAMPLE_TOKEN,
                TenantId   = ANOTHER_TENANT_ID
            }).Result;

            Assert.AreEqual(CURRENT_USER_ID, createdJob.CreatedBy);
            Assert.AreEqual(DateTimeOffset.Now.Date, createdJob.Created.Date);
            Assert.IsNull(createdJob.ModifiedBy);
            Assert.AreEqual(TENANT_ID, createdJob.Tid);
            Assert.AreEqual(JobStateEnum.Running.ToString(), createdJob.State);
            Assert.AreEqual("Test", createdJob.Type);
            Assert.AreEqual(SAMPLE_PARAMETERS, createdJob.Parameters);
            Assert.AreEqual(ANOTHER_TENANT_ID, createdJob.TenantId);

            Assert.IsTrue(actionResult.GetType() == typeof(ResponseMessageResult));
            var response = actionResult as ResponseMessageResult;

            Assert.AreEqual(HttpStatusCode.Created, response.Response.StatusCode);

            Mock.Assert(() => CurrentUserDataProvider.GetIdentity(TENANT_ID));
            Mock.Assert(_lifeCycleContext);
        }
        public void PatchCalloutDefinitionForAuthorizedUserWithUpdatePermissionUpdatesDeliveredFields()
        {
            Mock.Arrange(() => CurrentUserDataProvider.GetIdentity(TENANT_ID))
            .Returns(new Identity
            {
                Permissions = new List <String> {
                    CALLOUT_DEFINITION_UPDATE_PERMISSION
                },
                Username = CURRENT_USER_ID,
                Tid      = TENANT_ID
            })
            .MustBeCalled();
            Mock.Arrange(() => CurrentUserDataProvider.IsEntityOfUser(CURRENT_USER_ID, TENANT_ID, Arg.IsAny <CalloutDefinition>()))
            .Returns(true)
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.CalloutDefinitions.Find(1))
            .IgnoreInstance()
            .Returns(CreateSampleCalloutDefinitionDbSet()[0])
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.CalloutDefinitions.Attach(Arg.IsAny <CalloutDefinition>()))
            .IgnoreInstance()
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.Entry(Arg.IsAny <CalloutDefinition>()))
            .IgnoreInstance()
            .Returns(Mock.Create <DbEntityEntry <CalloutDefinition> >())
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.SaveChanges())
            .IgnoreInstance()
            .MustBeCalled();

            var delta = new Delta <CalloutDefinition>(typeof(CalloutDefinition));

            delta.TrySetPropertyValue("Id", "3");
            delta.TrySetPropertyValue("CreatedBy", ANOTHER_USER_ID);
            delta.TrySetPropertyValue("ModifiedBy", ANOTHER_USER_ID);
            delta.TrySetPropertyValue("Tid", ANOTHER_TENANT_ID);
            delta.TrySetPropertyValue("Parameters", "testparameters");
            delta.TrySetPropertyValue("EntityType", SAMPLE_ENTITY_TYPE);

            var actionResult = _calloutDefinitionsController.Patch(1, delta).Result;

            Assert.IsTrue(actionResult.GetType() == typeof(OkNegotiatedContentResult <CalloutDefinition>));

            var response          = actionResult as OkNegotiatedContentResult <CalloutDefinition>;
            var calloutDefinition = response.Content;

            Assert.AreEqual(1, calloutDefinition.Id);
            Assert.AreEqual(DateTimeOffset.Now.Date, calloutDefinition.Modified.Date);
            Assert.AreEqual(CURRENT_USER_ID, calloutDefinition.CreatedBy);
            Assert.AreEqual(CURRENT_USER_ID, calloutDefinition.ModifiedBy);
            Assert.AreEqual(TENANT_ID, calloutDefinition.Tid);
            Assert.AreEqual("testparameters", calloutDefinition.Parameters);
            Assert.AreEqual(SAMPLE_ENTITY_TYPE, calloutDefinition.EntityType);

            Mock.Assert(() => CurrentUserDataProvider.GetIdentity(TENANT_ID));
            Mock.Assert(() => CurrentUserDataProvider.IsEntityOfUser(CURRENT_USER_ID, TENANT_ID, Arg.IsAny <CalloutDefinition>()));
            Mock.Assert(_lifeCycleContext);
        }
        public void PostCalloutDefinitionForUserWithCreatePermissionCreatesCalloutDefinitionAndReturnsCreated()
        {
            CalloutDefinition createdCalloutDefinition = null;

            Mock.Arrange(() => ODataControllerHelper.ResponseCreated(
                             Arg.IsAny <ODataController>(), Arg.IsAny <CalloutDefinition>(),
                             Arg.IsAny <String>())).Returns(new HttpResponseMessage(HttpStatusCode.Created));
            Mock.Arrange(() => CurrentUserDataProvider.GetIdentity(TENANT_ID))
            .Returns(new Identity
            {
                Permissions = new List <String> {
                    CALLOUT_DEFINITION_CREATE_PERMISSION
                },
                Username = CURRENT_USER_ID,
                Tid      = TENANT_ID
            })
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.CalloutDefinitions.Add(Arg.IsAny <CalloutDefinition>()))
            .IgnoreInstance()
            .DoInstead((CalloutDefinition j) => createdCalloutDefinition = j)
            .Returns((CalloutDefinition j) => j)
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.SaveChanges())
            .IgnoreInstance()
            .MustBeCalled();

            var actionResult = _calloutDefinitionsController.Post(
                new CalloutDefinition
            {
                Id         = 1,
                CreatedBy  = ANOTHER_USER_ID,
                Modified   = DateTimeOffset.Now,
                Tid        = ANOTHER_TENANT_ID,
                ModifiedBy = CURRENT_USER_ID,
                EntityType = SAMPLE_ENTITY_TYPE,
                EntityId   = ENTITY_ID_1,
                TenantId   = TENANT_ID,
                Parameters = "testparameters"
            }).Result;

            Assert.AreEqual(CURRENT_USER_ID, createdCalloutDefinition.CreatedBy);
            Assert.AreEqual(DateTimeOffset.Now.Date, createdCalloutDefinition.Created.Date);
            Assert.IsNull(createdCalloutDefinition.ModifiedBy);
            Assert.AreEqual(TENANT_ID, createdCalloutDefinition.Tid);
            Assert.AreEqual(SAMPLE_ENTITY_TYPE, createdCalloutDefinition.EntityType);
            Assert.AreEqual(ENTITY_ID_1, createdCalloutDefinition.EntityId);
            Assert.AreEqual(TENANT_ID, createdCalloutDefinition.TenantId);
            Assert.AreEqual("testparameters", createdCalloutDefinition.Parameters);

            Assert.IsTrue(actionResult.GetType() == typeof(ResponseMessageResult));
            var response = actionResult as ResponseMessageResult;

            Assert.AreEqual(HttpStatusCode.Created, response.Response.StatusCode);

            Mock.Assert(() => CurrentUserDataProvider.GetIdentity(TENANT_ID));
            Mock.Assert(_lifeCycleContext);
        }
        public void PutCalloutDefinitionForAuthorizedUserSetsUpdatedDate()
        {
            Mock.Arrange(() => CurrentUserDataProvider.GetIdentity(TENANT_ID))
            .Returns(new Identity
            {
                Permissions = new List <String> {
                    CALLOUT_DEFINITION_UPDATE_PERMISSION
                },
                Username = CURRENT_USER_ID,
                Tid      = TENANT_ID
            })
            .MustBeCalled();
            Mock.Arrange(() => CurrentUserDataProvider.IsEntityOfUser(CURRENT_USER_ID, TENANT_ID, Arg.IsAny <CalloutDefinition>()))
            .Returns(true)
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.CalloutDefinitions.Find(1))
            .IgnoreInstance()
            .Returns(CreateSampleCalloutDefinitionDbSet()[0])
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.CalloutDefinitions.Attach(Arg.IsAny <CalloutDefinition>()))
            .IgnoreInstance()
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.Entry(Arg.IsAny <CalloutDefinition>()))
            .IgnoreInstance()
            .Returns(Mock.Create <DbEntityEntry <CalloutDefinition> >())
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.SaveChanges())
            .IgnoreInstance()
            .MustBeCalled();

            var actionResult = _calloutDefinitionsController.Put(1,
                                                                 new CalloutDefinition
            {
                Id         = 1,
                EntityType = SAMPLE_ENTITY_TYPE,
                EntityId   = ENTITY_ID_1,
                TenantId   = TENANT_ID,
                Parameters = "testparameters",
            }).Result;

            Assert.IsTrue(actionResult.GetType() == typeof(OkNegotiatedContentResult <CalloutDefinition>));

            var response          = actionResult as OkNegotiatedContentResult <CalloutDefinition>;
            var calloutDefinition = response.Content;

            Assert.AreEqual(1, calloutDefinition.Id);
            Assert.AreEqual(CURRENT_USER_ID, calloutDefinition.CreatedBy);
            Assert.AreEqual(DateTimeOffset.Now.Date, calloutDefinition.Modified.Date);
            Assert.AreEqual(CURRENT_USER_ID, calloutDefinition.ModifiedBy);
            Assert.AreEqual(SAMPLE_ENTITY_TYPE, calloutDefinition.EntityType);
            Assert.AreEqual(ENTITY_ID_1, calloutDefinition.EntityId);
            Assert.AreEqual(TENANT_ID, calloutDefinition.TenantId);

            Mock.Assert(() => CurrentUserDataProvider.GetIdentity(TENANT_ID));
            Mock.Assert(() => CurrentUserDataProvider.IsEntityOfUser(CURRENT_USER_ID, TENANT_ID, Arg.IsAny <CalloutDefinition>()));
            Mock.Assert(_lifeCycleContext);
        }
예제 #19
0
        public async Task <IHttpActionResult> Patch([FromODataUri] int key, Delta <Job> delta)
        {
            var declaringType = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType;
            var fn            = String.Format("{0}:{1}",
                                              declaringType.Namespace,
                                              declaringType.Name);

            if (!ModelState.IsValid)
            {
                Debug.WriteLine("Job to be created has invalid ModelState.");
                return(BadRequest(ModelState));
            }

            try
            {
                Debug.WriteLine(fn);

                var identity = CurrentUserDataProvider.GetIdentity(TenantId);

                var permissionId = CreatePermissionId("CanUpdate");
                if (!identity.Permissions.Contains(permissionId))
                {
                    return(StatusCode(HttpStatusCode.Forbidden));
                }
                var job = db.Jobs.Find(key);
                if (null == job)
                {
                    return(StatusCode(HttpStatusCode.NotFound));
                }
                if (!CurrentUserDataProvider.IsEntityOfUser(identity.Username, identity.Tid, job))
                {
                    return(StatusCode(HttpStatusCode.Forbidden));
                }
                Debug.WriteLine("Patching Job with id '{0}'", key);
                var id        = job.Id;
                var created   = job.Created;
                var createdBy = job.CreatedBy;
                var tId       = job.Tid;
                delta.Patch(job);
                job.Id         = id;
                job.Created    = created;
                job.CreatedBy  = createdBy;
                job.Modified   = DateTimeOffset.Now;
                job.ModifiedBy = identity.Username;
                job.Tid        = tId;
                db.Jobs.Attach(job);
                db.Entry(job).State = EntityState.Modified;
                db.SaveChanges();
                Debug.WriteLine("Job with id '{0}' patched", key);
                return(Ok <Job>(job));
            }
            catch (Exception e)
            {
                Debug.WriteLine(String.Format("{0}: {1}\r\n{2}", e.Source, e.Message, e.StackTrace));
                throw;
            }
        }
예제 #20
0
        public void GetCurrentUsernameGetsUsernameFromHttpContext()
        {
            Mock.Arrange(() => HttpContext.Current.User.Identity.Name)
            .Returns(USERNAME)
            .OccursOnce();

            CurrentUserDataProvider.GetCurrentUsername();

            Mock.Assert(() => HttpContext.Current.User.Identity.Name);
        }
예제 #21
0
        // PUT: api/Core.svc/CalloutDefinitions(5)
        public async Task <IHttpActionResult> Put([FromODataUri] int key, CalloutDefinition calloutDefinition)
        {
            var declaringType = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType;
            var fn            = String.Format("{0}:{1}",
                                              declaringType.Namespace,
                                              declaringType.Name);

            if (!ModelState.IsValid)
            {
                Debug.WriteLine("CalloutDefinition to be updated with id '{0}' has invalid ModelState.", key);
                return(BadRequest(ModelState));
            }

            if (key != calloutDefinition.Id)
            {
                return(BadRequest());
            }

            try
            {
                Debug.WriteLine(fn);

                var identity = CurrentUserDataProvider.GetIdentity(TenantId);

                var permissionId = CreatePermissionId("CanUpdate");
                if (!identity.Permissions.Contains(permissionId))
                {
                    return(StatusCode(HttpStatusCode.Forbidden));
                }
                var original = db.CalloutDefinitions.Find(calloutDefinition.Id);
                if (null == original)
                {
                    return(StatusCode(HttpStatusCode.NotFound));
                }
                if (!CurrentUserDataProvider.IsEntityOfUser(identity.Username, identity.Tid, calloutDefinition))
                {
                    return(StatusCode(HttpStatusCode.Forbidden));
                }
                calloutDefinition.Created    = original.Created;
                calloutDefinition.CreatedBy  = original.CreatedBy;
                calloutDefinition.Modified   = DateTimeOffset.Now;
                calloutDefinition.ModifiedBy = identity.Username;
                calloutDefinition.Tid        = original.Tid;
                db.CalloutDefinitions.Attach(calloutDefinition);
                db.Entry(calloutDefinition).State = EntityState.Modified;
                db.SaveChanges();
                Debug.WriteLine("CalloutDefinition with id '{0}' updated", key);
                return(Ok <CalloutDefinition>(calloutDefinition));
            }
            catch (Exception e)
            {
                Debug.WriteLine(String.Format("{0}: {1}\r\n{2}", e.Source, e.Message, e.StackTrace));
                throw;
            }
        }
        public void PutJobForAuthorizedUserSetsUpdatedDate()
        {
            Mock.Arrange(() => CurrentUserDataProvider.GetIdentity(TENANT_ID))
            .Returns(new Identity
            {
                Permissions = new List <String> {
                    JOB_UPDATE_PERMISSION
                },
                Username = CURRENT_USER_ID,
                Tid      = TENANT_ID
            })
            .MustBeCalled();
            Mock.Arrange(() => CurrentUserDataProvider.IsEntityOfUser(CURRENT_USER_ID, TENANT_ID, Arg.IsAny <Job>()))
            .Returns(true)
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.Jobs.Find(1))
            .IgnoreInstance()
            .Returns(CreateSampleJobDbSet()[0])
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.Jobs.Attach(Arg.IsAny <Job>()))
            .IgnoreInstance()
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.Entry(Arg.IsAny <Job>()))
            .IgnoreInstance()
            .Returns(Mock.Create <DbEntityEntry <Job> >())
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.SaveChanges())
            .IgnoreInstance()
            .MustBeCalled();

            var actionResult = _jobsController.Put(1,
                                                   new Job
            {
                Id         = 1,
                Type       = "Test",
                State      = JobStateEnum.Canceled.ToString(),
                Parameters = SAMPLE_PARAMETERS,
            }).Result;

            Assert.IsTrue(actionResult.GetType() == typeof(OkNegotiatedContentResult <Job>));

            var response = actionResult as OkNegotiatedContentResult <Job>;
            var job      = response.Content;

            Assert.AreEqual(1, job.Id);
            Assert.AreEqual(CURRENT_USER_ID, job.CreatedBy);
            Assert.AreEqual(DateTimeOffset.Now.Date, job.Modified.Date);
            Assert.AreEqual(CURRENT_USER_ID, job.ModifiedBy);
            Assert.AreEqual(JobStateEnum.Canceled.ToString(), job.State);
            Assert.AreEqual("Test", job.Type);

            Mock.Assert(() => CurrentUserDataProvider.GetIdentity(TENANT_ID));
            Mock.Assert(() => CurrentUserDataProvider.IsEntityOfUser(CURRENT_USER_ID, TENANT_ID, Arg.IsAny <Job>()));
            Mock.Assert(_lifeCycleContext);
        }
예제 #23
0
        // PUT: api/Utilities.svc/LifeCycles(5)
        public async Task <IHttpActionResult> Put([FromODataUri] String key, LifeCycle lifeCycle)
        {
            var declaringType = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType;
            var fn            = String.Format("{0}:{1}",
                                              declaringType.Namespace,
                                              declaringType.Name);

            if (!ModelState.IsValid)
            {
                Debug.WriteLine("Entity to be changed by LifeCycleManager with id '{0}' has invalid ModelState.", key);
                return(BadRequest(ModelState));
            }

            if (key != lifeCycle.Id)
            {
                return(BadRequest());
            }

            try
            {
                Debug.WriteLine(fn);

                var identity = CurrentUserDataProvider.GetIdentity(TenantId);

                var permissionId = CreatePermissionId("CanUpdate");
                if (!identity.Permissions.Contains(permissionId))
                {
                    return(StatusCode(HttpStatusCode.Forbidden));
                }

                var entityUri        = new Uri(key);
                var entity           = LoadEntity(new DefaultAuthenticationProvider(), entityUri);
                var lifeCycleManager = new LifeCycleManager(new DefaultAuthenticationProvider(), ExtractTypeFromUriString(key));
                lifeCycleManager.RequestStateChange(entityUri, entity, lifeCycle.Condition, identity.Tid);

                return(Ok());
            }
            catch (UriFormatException e)
            {
                return(BadRequest("Invalid Id - Id has to be a valid URI"));
            }
            catch (HttpRequestException e)
            {
                return(BadRequest("Loading entity from passed Uri failed (Either not found or not authorized)"));
            }
            catch (InvalidOperationException e)
            {
                return(BadRequest(String.Format("Changing state with provided condition: '{0}' not possible", lifeCycle.Condition)));
            }
            catch (Exception e)
            {
                Debug.WriteLine(String.Format("{0}: {1}\r\n{2}", e.Source, e.Message, e.StackTrace));
                throw;
            }
        }
        public void PatchJobForAuthorizedUserWithUpdatePermissionUpdatesDeliveredFields2()
        {
            Mock.Arrange(() => CurrentUserDataProvider.GetIdentity(TENANT_ID))
            .Returns(new Identity
            {
                Permissions = new List <String> {
                    JOB_UPDATE_PERMISSION
                },
                Username = CURRENT_USER_ID,
                Tid      = TENANT_ID
            })
            .MustBeCalled();
            Mock.Arrange(() => CurrentUserDataProvider.IsEntityOfUser(CURRENT_USER_ID, TENANT_ID, Arg.IsAny <Job>()))
            .Returns(true)
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.Jobs.Find(1))
            .IgnoreInstance()
            .Returns(CreateSampleJobDbSet()[0])
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.Jobs.Attach(Arg.IsAny <Job>()))
            .IgnoreInstance()
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.Entry(Arg.IsAny <Job>()))
            .IgnoreInstance()
            .Returns(Mock.Create <DbEntityEntry <Job> >())
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.SaveChanges())
            .IgnoreInstance()
            .MustBeCalled();

            var delta = new Delta <Job>(typeof(Job));

            delta.TrySetPropertyValue("Id", "3");
            delta.TrySetPropertyValue("CreatedBy", ANOTHER_USER_ID);
            delta.TrySetPropertyValue("ModifiedBy", ANOTHER_USER_ID);
            delta.TrySetPropertyValue("Parameters", SAMPLE_PARAMETERS);
            var actionResult = _jobsController.Patch(1, delta).Result;

            Assert.IsTrue(actionResult.GetType() == typeof(OkNegotiatedContentResult <Job>));

            var response = actionResult as OkNegotiatedContentResult <Job>;
            var job      = response.Content;

            Assert.AreEqual(1, job.Id);
            Assert.AreEqual(DateTimeOffset.Now.Date, job.Modified.Date);
            Assert.AreEqual(CURRENT_USER_ID, job.CreatedBy);
            Assert.AreEqual(CURRENT_USER_ID, job.ModifiedBy);
            Assert.AreEqual(SAMPLE_PARAMETERS, job.Parameters);
            Assert.AreEqual(JobStateEnum.Running.ToString(), job.State);

            Mock.Assert(() => CurrentUserDataProvider.GetIdentity(TENANT_ID));
            Mock.Assert(() => CurrentUserDataProvider.IsEntityOfUser(CURRENT_USER_ID, TENANT_ID, Arg.IsAny <Job>()));
            Mock.Assert(_lifeCycleContext);
        }
예제 #25
0
        // POST: api/Core.svc/Jobs
        public async Task <IHttpActionResult> Post(Job job)
        {
            var declaringType = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType;
            var fn            = String.Format("{0}:{1}",
                                              declaringType.Namespace,
                                              declaringType.Name);

            if (!ModelState.IsValid)
            {
                Debug.WriteLine("Job to be created has invalid ModelState.");
                return(BadRequest(ModelState));
            }
            try
            {
                Debug.WriteLine(fn);

                var identity = CurrentUserDataProvider.GetIdentity(TenantId);

                var permissionId = CreatePermissionId("CanCreate");
                if (!identity.Permissions.Contains(permissionId))
                {
                    return(StatusCode(HttpStatusCode.Forbidden));
                }
                if (null == job)
                {
                    var errorMsg = "Job to be created contains invalid data.";
                    Debug.WriteLine(errorMsg);
                    return(BadRequest(errorMsg));
                }
                Debug.WriteLine("Saving new job...");

                var jobEntity = new Job()
                {
                    Created          = DateTimeOffset.Now,
                    CreatedBy        = identity.Username,
                    Tid              = identity.Tid,
                    Type             = null == job.Type ? "Default" : job.Type,
                    State            = job.State,
                    Parameters       = job.Parameters,
                    ReferencedItemId = job.ReferencedItemId,
                    Token            = job.Token,
                    TenantId         = job.TenantId
                };
                jobEntity = db.Jobs.Add(jobEntity);
                db.SaveChanges();
                Debug.WriteLine("Saved job with id '{0}'", jobEntity.Id);
                return(ResponseMessage(ODataControllerHelper.ResponseCreated(this, jobEntity)));
            }
            catch (Exception e)
            {
                Debug.WriteLine(String.Format("{0}: {1}\r\n{2}", e.Source, e.Message, e.StackTrace));
                throw;
            }
        }
예제 #26
0
        // POST: api/Core.svc/CalloutDefinitions
        public async Task <IHttpActionResult> Post(CalloutDefinition calloutDefinition)
        {
            var declaringType = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType;
            var fn            = String.Format("{0}:{1}",
                                              declaringType.Namespace,
                                              declaringType.Name);

            if (!ModelState.IsValid)
            {
                Debug.WriteLine("CalloutDefinition to be created has invalid ModelState.");
                return(BadRequest(ModelState));
            }
            try
            {
                Debug.WriteLine(fn);

                var identity = CurrentUserDataProvider.GetIdentity(TenantId);

                var permissionId = CreatePermissionId("CanCreate");
                if (!identity.Permissions.Contains(permissionId))
                {
                    return(StatusCode(HttpStatusCode.Forbidden));
                }
                if (null == calloutDefinition)
                {
                    var errorMsg = "CalloutDefinition to be created contains invalid data.";
                    Debug.WriteLine(errorMsg);
                    return(BadRequest(errorMsg));
                }
                Debug.WriteLine("Saving new CalloutDefinition...");

                var calloutDefinitionEntity = new CalloutDefinition()
                {
                    Created     = DateTimeOffset.Now,
                    CreatedBy   = identity.Username,
                    CalloutType = calloutDefinition.CalloutType,
                    Tid         = identity.Tid,
                    TenantId    = calloutDefinition.TenantId,
                    EntityType  = calloutDefinition.EntityType,
                    EntityId    = calloutDefinition.EntityId,
                    Condition   = calloutDefinition.Condition,
                    Parameters  = calloutDefinition.Parameters
                };
                calloutDefinitionEntity = db.CalloutDefinitions.Add(calloutDefinitionEntity);
                db.SaveChanges();
                Debug.WriteLine("Saved CalloutDefinition with id '{0}'", calloutDefinitionEntity.Id);
                return(ResponseMessage(ODataControllerHelper.ResponseCreated(this, calloutDefinitionEntity)));
            }
            catch (Exception e)
            {
                Debug.WriteLine(String.Format("{0}: {1}\r\n{2}", e.Source, e.Message, e.StackTrace));
                throw;
            }
        }
예제 #27
0
        public void PostStateChangeLockForUserWithCreatePermissionCreatesEntityAndReturnsCreated()
        {
            StateChangeLock createdEntity = null;

            Mock.Arrange(() => ODataControllerHelper.ResponseCreated(
                             Arg.IsAny <ODataController>(), Arg.IsAny <StateChangeLock>(),
                             Arg.IsAny <String>())).Returns(new HttpResponseMessage(HttpStatusCode.Created));
            Mock.Arrange(() => CurrentUserDataProvider.GetIdentity(TENANT_ID))
            .Returns(new Identity
            {
                Permissions = new List <String> {
                    STATE_CHANGE_LOCK_CREATE_PERMISSION
                },
                Username = CURRENT_USER_ID,
                Tid      = TENANT_ID
            })
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.StateChangeLocks.Add(Arg.IsAny <StateChangeLock>()))
            .IgnoreInstance()
            .DoInstead((StateChangeLock j) => createdEntity = j)
            .Returns((j) => j)
            .MustBeCalled();
            Mock.Arrange(() => _lifeCycleContext.SaveChanges())
            .IgnoreInstance()
            .MustBeCalled();

            var actionResult = _stateChangeLocksController.Post(
                new StateChangeLock
            {
                Id         = 1,
                CreatedBy  = ANOTHER_USER_ID,
                Modified   = DateTimeOffset.Now,
                ModifiedBy = CURRENT_USER_ID,
                Tid        = ANOTHER_TENANT_ID,
                EntityId   = ENTITY_ID
            }).Result;

            Assert.AreEqual(CURRENT_USER_ID, createdEntity.CreatedBy);
            Assert.AreEqual(DateTimeOffset.Now.Date, createdEntity.Created.Date);
            Assert.IsNull(createdEntity.ModifiedBy);
            Assert.AreEqual(TENANT_ID, createdEntity.Tid);
            Assert.AreEqual(ENTITY_ID, createdEntity.EntityId);
            Assert.AreNotEqual(1, createdEntity.Id);

            Assert.IsTrue(actionResult.GetType() == typeof(ResponseMessageResult));
            var response = actionResult as ResponseMessageResult;

            Assert.AreEqual(HttpStatusCode.Created, response.Response.StatusCode);

            Mock.Assert(() => CurrentUserDataProvider.GetIdentity(TENANT_ID));
            Mock.Assert(_lifeCycleContext);
        }
예제 #28
0
        public void GetIdentityThrowsArgumentNullExceptionIfApplicationNameNotDefined()
        {
            Mock.Arrange(() => HttpContext.Current.User.Identity.Name)
            .Returns(USERNAME)
            .OccursOnce();

            Mock.Arrange(() => ConfigurationManager.AppSettings)
            .Returns(new NameValueCollection())
            .OccursOnce();

            ThrowsAssert.Throws <ArgumentNullException>(() => CurrentUserDataProvider.GetIdentity(TENANT_ID));

            Mock.Assert(() => HttpContext.Current.User.Identity.Name);
            Mock.Assert(() => ConfigurationManager.AppSettings);
        }
        public void DeleteCalloutDefinitionForUserWithoutDeletePermissionReturnsForbidden()
        {
            Mock.Arrange(() => CurrentUserDataProvider.GetIdentity(TENANT_ID))
            .Returns(new Identity
            {
                Permissions = new List <String>(),
                Username    = CURRENT_USER_ID
            })
            .MustBeCalled();

            var actionResult = _calloutDefinitionsController.Delete(1).Result;

            AssertStatusCodeResult(actionResult, HttpStatusCode.Forbidden);

            Mock.Assert(() => CurrentUserDataProvider.GetIdentity(TENANT_ID));
        }
예제 #30
0
        public void IsEntityOfUserForNonMatchingTidAndCreatedByReturnsFalse()
        {
            Assert.IsFalse(CurrentUserDataProvider.IsEntityOfUser(USERNAME, TENANT_ID,
                                                                  new BaseEntity
            {
                CreatedBy = "Another",
                Tid       = TENANT_ID
            }));

            Assert.IsFalse(CurrentUserDataProvider.IsEntityOfUser(USERNAME, TENANT_ID,
                                                                  new BaseEntity
            {
                CreatedBy = USERNAME,
                Tid       = Guid.NewGuid().ToString()
            }));
        }