public void should_apply_if_has_changed()
        {
            // given
            var contextService = new Mock <IContextService>();
            var controller     = new ModifierController(contextService.Object);

            // when
            var objectId = Guid.NewGuid();
            var change   = new Change();

            contextService.Setup(hs => hs.GetTokenActor(It.IsAny <HttpContext>())).Returns("sedov");
            var api      = new Mock <IServerApiService>();
            var modifier = new Mock <IModifier>();
            var builder  = new Mock <IObjectChangeBuilder>();

            modifier.Setup(m => m.EditObject(objectId)).Returns(builder.Object);
            modifier.Setup(b => b.AnyChanges()).Returns(true);
            api.Setup(a => a.NewModifier()).Returns(modifier.Object);
            contextService.Setup(cs => cs.GetServerApi("sedov")).Returns(api.Object);

            controller.Change(new[] { change });

            // then
            modifier.Verify(m => m.Apply(null), Times.Once);
        }
        public void should_not_apply_changes_if_object_id_not_set()
        {
            // given
            var contextService = new Mock <IContextService>();
            var controller     = new ModifierController(contextService.Object);

            // when
            var objectId = Guid.NewGuid();
            var change   = new Change();

            contextService.Setup(hs => hs.GetTokenActor(It.IsAny <HttpContext>())).Returns("sedov");
            var api      = new Mock <IServerApiService>();
            var modifier = new Mock <IModifier>();
            var builder  = new Mock <IObjectChangeBuilder>();

            modifier.Setup(m => m.EditObject(objectId)).Returns(builder.Object);
            api.Setup(a => a.NewModifier()).Returns(modifier.Object);
            contextService.Setup(cs => cs.GetServerApi("sedov")).Returns(api.Object);

            controller.Change(new[] { change });

            // then
            builder.Verify(b => b.RemoveAttribute(It.IsAny <string>()), Times.Never);
            builder.Verify(b => b.SetAttribute(It.IsAny <string>(), It.IsAny <DValue>()), Times.Never);
        }
        public void should_remove_attribute()
        {
            // given
            var contextService = new Mock <IContextService>();
            var controller     = new ModifierController(contextService.Object);

            // when
            var objectId = Guid.NewGuid();
            var change   = new Change
            {
                ObjectId   = objectId.ToString(),
                Attributes = new ChangesResult <AttributeChangeValue>
                {
                    Removed = new List <AttributeChangeValue>
                    {
                        new AttributeChangeValue
                        {
                            Value = "New value",
                            Name  = "AttributeName"
                        }
                    }
                }
            };

            contextService.Setup(hs => hs.GetTokenActor(It.IsAny <HttpContext>())).Returns("sedov");
            var api      = new Mock <IServerApiService>();
            var modifier = new Mock <IModifier>();
            var builder  = new Mock <IObjectChangeBuilder>();

            modifier.Setup(m => m.EditObject(objectId)).Returns(builder.Object);
            api.Setup(a => a.NewModifier()).Returns(modifier.Object);
            contextService.Setup(cs => cs.GetServerApi("sedov")).Returns(api.Object);

            controller.Change(new[] { change });

            // then
            builder.Verify(b => b.RemoveAttribute("AttributeName"), Times.Once);
        }
        public void should_return_ok()
        {
            // given
            var contextService = new Mock <IContextService>();
            var controller     = new ModifierController(contextService.Object);

            // when
            var objectId = Guid.NewGuid();
            var change   = new Change();

            contextService.Setup(hs => hs.GetTokenActor(It.IsAny <HttpContext>())).Returns("sedov");
            var api      = new Mock <IServerApiService>();
            var modifier = new Mock <IModifier>();
            var builder  = new Mock <IObjectChangeBuilder>();

            modifier.Setup(m => m.EditObject(objectId)).Returns(builder.Object);
            api.Setup(a => a.NewModifier()).Returns(modifier.Object);
            contextService.Setup(cs => cs.GetServerApi("sedov")).Returns(api.Object);

            var result = controller.Change(new[] { change }) as OkResult;

            // then
            Assert.AreEqual(200, result.StatusCode);
        }