public async Task WorkItemManager_CreateTemplate_WithDefaultValues()
        {
            // arrange
            var workItemManager = new WorkItemManager(new InMemoryDataProvider(), new InMemoryDescriptorProvider(
                                                          WorkItemDescriptor.Create("BAR", new PropertyDescriptor[] {
                PropertyDescriptor.Create("A", "String", initialValue: "a"),
                PropertyDescriptor.Create("B", "String"),
            })
                                                          ));

            // act
            var template = await workItemManager.CreateTemplateAsync("FOO", "BAR");

            // assert
            Assert.NotNull(template);
            Assert.Equal("BAR", template.WorkItemType);
            Assert.Collection(template.Properties,
                              p =>
            {
                Assert.Equal("A", p.Name);
                Assert.Equal("a", p.Value);
            },
                              p =>
            {
                Assert.Equal("B", p.Name);
                Assert.Equal("", p.Value);
            }
                              );
        }
示例#2
0
        public void PropertiesSetOnObjectDescriptor()
        {
            const int    Id   = 1;
            const string Name = "name";

            var idGeneratorMock = new Mock <IIdGenerator>();

            idGeneratorMock.Setup(_ => _.GetNextId()).Returns(Id);
            var propertyAnalyzer            = Mock.Of <IPropertyAnalyzer>();
            var propertyAnalyzerMock        = Mock.Get(propertyAnalyzer);
            List <PropertyDescriptor> value = new List <PropertyDescriptor>()
            {
                PropertyDescriptor.Create().WithId(1).Get()
            };

            propertyAnalyzerMock.Setup(_ => _.AnalyzeProperties(typeof(SimpleClassWithPrimitiveProperties),
                                                                It.IsAny <SimpleClassWithPrimitiveProperties>(), true)).Returns(value);

            var objectAnalyzer = new ObjectAnalyzer(idGeneratorMock.Object, propertyAnalyzer, Mock.Of <IMethodAnalyzer>());
            var descriptor     = objectAnalyzer.AnalyzeObject(new SimpleClassWithPrimitiveProperties("str"), new AnalyzeOptions()
            {
                Name = "name",
                AnalyzeProperties     = true,
                ExtractPropertyValues = true
            });

            Assert.Collection(descriptor.Properties, m => Assert.True(m.Key == 1 && m.Value.Id == 1));
        }
        public async Task WorkItemManager_ExecuteCommand_Invoke()
        {
            // arrange
            var manager = new WorkItemManager(new InMemoryDataProvider(), new InMemoryDescriptorProvider(
                                                  WorkItemDescriptor.Create("BAR", new PropertyDescriptor[] {
                PropertyDescriptor.Create("A", "String", initialValue: "a"),
                PropertyDescriptor.Create("B", "String"),
            },
                                                                            stages: new StageDescriptor[] {
                new StageDescriptor("stage-aa", new PropertyValueConditionDescriptor("A", "aa"),
                                    Array.Empty <StagePropertyDescriptor>(),
                                    new CommandDescriptor[] {
                    new ChangePropertyValueCommandDescriptor("make-bb", "MakeBBC", "B", "bbc")
                }),
            })
                                                  ));

            var issue = await manager.CreateAsync("FOO", "BAR", new Property[] {
                new Property("A", "String", "aa"),
                new Property("B", "String", "bb"),
            });

            // act
            var result = await manager.ExecuteCommandAsync("FOO", issue.Id, "make-bb");

            // assert
            Assert.True(result.Success);
            Assert.Collection(result.UpdatedWorkItem.Properties,
                              p => { Assert.Equal("aa", p.Value); Assert.Equal("A", p.Name); },
                              p => { Assert.Equal("bbc", p.Value); Assert.Equal("B", p.Name); }
                              );
        }
示例#4
0
        public IEnumerable <PropertyDescriptor> AnalyzeProperties(Type type, object obj, bool extractValue)
        {
            var propertyInfos = type.GetProperties(BindingFlags.Instance | BindingFlags.Public)
                                .Where(p => !p.IsSpecialName &&
                                       !p.IsDefined(typeof(BindingIgnoreAttribute)) &&
                                       p.GetIndexParameters().Length <= 0);

            foreach (var propertyInfo in propertyInfos)
            {
                Func <object, object> getter = o => propertyInfo.GetValue(o);
                var builder = PropertyDescriptor.Create()
                              .WithId(idGenerator.GetNextId())
                              .WithName(propertyNameGenerator.GetBoundPropertyName(propertyInfo.Name))
                              .WithReadOnly(IsReadOnly(propertyInfo))
                              .WithGetter(getter)
                              .WithSetter((o, v) => propertyInfo.SetValue(o, v))
                              .WithType(propertyInfo.PropertyType);

                if (extractValue && obj != null)
                {
                    builder.WithValue(getter(obj));
                }

                yield return(builder
                             .Get());
            }
        }
 private static WorkItemManager BuildManager()
 {
     return(new WorkItemManager(new InMemoryDataProvider(), new InMemoryDescriptorProvider(
                                    WorkItemDescriptor.Create("BAR", new PropertyDescriptor[] {
         PropertyDescriptor.Create("A", "String"),
         PropertyDescriptor.Create("B", "String"),
     })
                                    )));
 }
 private static WorkItemManager BuildManager()
 {
     return(new WorkItemManager(new InMemoryDataProvider(), new InMemoryDescriptorProvider(
                                    WorkItemDescriptor.Create("BAR", new PropertyDescriptor[] {
         PropertyDescriptor.Create("A", "String", validators: new ValidatorDescriptor[] {
             new StringLengthValidatorDescriptor(3, 5),
         }),
         PropertyDescriptor.Create("B", "String"),
     })
                                    )));
 }
        public void GetExecptionPassedAlong()
        {
            const string message = "message";

            var propertyExecutor = new PropertyExecutor <object>(
                new ReadOnlyDictionary <long, ObjectDescriptor>(
                    new Dictionary <long, ObjectDescriptor>()
            {
                { 1, ObjectDescriptor.Create().WithProperties(new List <PropertyDescriptor>()
                    {
                        PropertyDescriptor.Create().WithId(2).WithGetter(o => throw new Exception(message)).Get()
                    }).WithId(1).Get() }
示例#8
0
        private static WorkItemManager BuildManager()
        {
            return(new WorkItemManager(new InMemoryDataProvider(), new InMemoryDescriptorProvider(
                                           WorkItemDescriptor.Create("BAR", new PropertyDescriptor[] {
                PropertyDescriptor.Create("A", "String", validators: new ValidatorDescriptor[] {
                    new MandatoryValidatorDescriptor(),
                }),
                PropertyDescriptor.Create("B", "String", valueProvider: new EnumValueProviderDescriptor(new EnumValue("d", "D"), new EnumValue("c", "C"))),

                PropertyDescriptor.Create("C", "String", propertyType: PropertyType.MultipleValueFromProvider, valueProvider: new EnumValueProviderDescriptor(new EnumValue("d", "D"), new EnumValue("c", "C"))),
            })
                                           )));
        }
 private static WorkItemManager BuildManager()
 {
     return(new WorkItemManager(new InMemoryDataProvider(), new InMemoryDescriptorProvider(
                                    WorkItemDescriptor.Create("BAR", new PropertyDescriptor[] {
         PropertyDescriptor.Create("A", "String"),
         PropertyDescriptor.Create("B", "String", isEditable: false),
     }, stages: new StageDescriptor[] {
         new StageDescriptor("default", new PropertyValueConditionDescriptor("A", "aa"),
                             Array.Empty <StagePropertyDescriptor>(),
                             new CommandDescriptor[] {
             new ChangePropertyValueCommandDescriptor("set", "SET B to a", "B", "a")
         })
     })
                                    )));
 }
示例#10
0
        public async Task WorkItemManager_ExecuteCommand_NotFound()
        {
            // arrange
            var manager = new WorkItemManager(new InMemoryDataProvider(), new InMemoryDescriptorProvider(
                                                  WorkItemDescriptor.Create("BAR", new PropertyDescriptor[] {
                PropertyDescriptor.Create("A", "String", initialValue: "a"),
                PropertyDescriptor.Create("B", "String"),
            })
                                                  ));

            var issue = await manager.CreateAsync("FOO", "BAR", new Property[] {
                new Property("A", "String", "aa"),
                new Property("B", "String", "bb"),
            });

            // act
            var result = await manager.ExecuteCommandAsync("FOO", issue.Id, "Close");

            // assert
            Assert.False(result.Success);
        }