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); } ); }
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); } ); }
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() }
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") }) }) ))); }
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); }