public RelativityObjectFieldAttribute(string fieldGuid, RdoFieldType fieldType, int length) : this(fieldGuid, fieldType) { this.Length = length; }
public RelativityObjectFieldAttribute(string fieldGuid, RdoFieldType fieldType) { this.FieldGuid = new Guid(fieldGuid); this.FieldType = fieldType; }
//need object fields, could get a little more difficult public void Valid_Gravity_RelativityObject_Create_Field_Type <T>(string objectPropertyName, T sampleData) { void Inner() { //Arrange LogStart($"for property{objectPropertyName}"); GravityLevelOne testObject = new GravityLevelOne() { Name = $"TestObjectCreate_{objectPropertyName}{Guid.NewGuid()}" }; var testFieldAttribute = testObject.GetCustomAttribute <RelativityObjectFieldAttribute>(objectPropertyName); Guid testFieldGuid = testFieldAttribute.FieldGuid; RdoFieldType fieldType = testFieldAttribute.FieldType; //need this mess because when passing in tests for decimal and currency System wants to use double and causes problems switch (fieldType) { case RdoFieldType.Currency: case RdoFieldType.Decimal: testObject.SetValueByPropertyName(objectPropertyName, Convert.ToDecimal(sampleData)); break; default: testObject.SetValueByPropertyName(objectPropertyName, sampleData); break; } _client.APIOptions.WorkspaceID = _workspaceId; LogEnd("Arrangement"); //Act LogStart("Act"); var newRdoArtifactId = _testObjectHelper.CreateTestObjectWithGravity <GravityLevelOne>(testObject); //read artifactID from RSAPI RDO newObject = _client.Repositories.RDO.ReadSingle(newRdoArtifactId); FieldValue field = newObject.Fields.Get(testFieldGuid); object newObjectValue = null; object expectedData = sampleData; switch (fieldType) { case RdoFieldType.LongText: newObjectValue = field.ValueAsLongText; break; case RdoFieldType.FixedLengthText: newObjectValue = field.ValueAsFixedLengthText; break; case RdoFieldType.WholeNumber: newObjectValue = field.ValueAsWholeNumber; break; case RdoFieldType.YesNo: newObjectValue = field.ValueAsYesNo; break; case RdoFieldType.Currency: newObjectValue = field.ValueAsCurrency; break; case RdoFieldType.Decimal: newObjectValue = field.ValueAsDecimal; break; case RdoFieldType.SingleChoice: int choiceArtifactId = field.ValueAsSingleChoice.ArtifactID; if (choiceArtifactId > 0) { Choice choice = _client.Repositories.Choice.ReadSingle(choiceArtifactId); Enum singleChoice = (Enum)Enum.ToObject(sampleData.GetType(), sampleData); Guid singleChoiceGuid = singleChoice.GetRelativityObjectAttributeGuidValue(); newObjectValue = choice.Guids.SingleOrDefault(x => x == singleChoiceGuid); expectedData = singleChoiceGuid; } break; case RdoFieldType.SingleObject: newObjectValue = field.ValueAsSingleObject.ArtifactID; expectedData = testObject.GravityLevel2Obj.ArtifactId > 0 ? (object)testObject.GravityLevel2Obj.ArtifactId : null; break; case RdoFieldType.MultipleObject: var rawNewObjectValue = field.GetValueAsMultipleObject <Artifact>(); var resultData = new List <GravityLevel2>(); Guid childFieldNameGuid = new GravityLevel2().GetCustomAttribute <RelativityObjectFieldAttribute>("Name").FieldGuid; foreach (Artifact child in rawNewObjectValue) { //'Read' - need to get name. RDO childRdo = new RDO() { Fields = new List <FieldValue>() { new FieldValue(childFieldNameGuid) } }; childRdo = _client.Repositories.RDO.ReadSingle(child.ArtifactID); string childNameValue = childRdo.Fields.Where(x => x.Guids.Contains(childFieldNameGuid)).FirstOrDefault().ToString(); resultData.Add(new GravityLevel2() { ArtifactId = child.ArtifactID, Name = childNameValue }); } newObjectValue = resultData.ToDictionary(x => x.ArtifactId, x => x.Name); expectedData = ((IEnumerable <GravityLevel2>)expectedData).ToDictionary(x => x.ArtifactId, x => x.Name); break; } LogEnd("Act"); //Assert LogStart("Assertion"); //Assert Assert.AreEqual(expectedData, newObjectValue); LogEnd("Assertion"); } TestWrapper(Inner); }
public void Valid_Gravity_RelativityObject_Read_Field_Type <T>(string objectPropertyName, T sampleData) { void Inner() { //Arrange LogStart($"Arrangement for property {objectPropertyName}"); GravityLevelOne testObject = new GravityLevelOne() { Name = $"TestObjectRead_{objectPropertyName}{Guid.NewGuid()}" }; Guid testObjectTypeGuid = testObject.GetObjectLevelCustomAttribute <RelativityObjectAttribute>().ObjectTypeGuid; Guid nameFieldGuid = testObject.GetCustomAttribute <RelativityObjectFieldAttribute>("Name").FieldGuid; var testFieldAttribute = testObject.GetCustomAttribute <RelativityObjectFieldAttribute>(objectPropertyName); Guid testFieldGuid = testFieldAttribute.FieldGuid; RdoFieldType fieldType = testObject.GetCustomAttribute <RelativityObjectFieldAttribute>(objectPropertyName).FieldType; _client.APIOptions.WorkspaceID = _workspaceId; object expectedData = sampleData; var dto = new RDO() { ArtifactTypeGuids = new List <Guid> { testObjectTypeGuid } }; int newArtifactId = -1; dto.Fields.Add(new FieldValue(nameFieldGuid, testObject.Name)); int objectToAttachID; //need this mess because when passing in tests for decimal and currency System wants to use double and causes problems switch (fieldType) { case RdoFieldType.SingleChoice: Enum singleChoice = (Enum)Enum.ToObject(sampleData.GetType(), sampleData); Guid singleChoiceGuid = singleChoice.GetRelativityObjectAttributeGuidValue(); Choice singleChoiceToAdd = new Choice(singleChoiceGuid); dto.Fields.Add(new FieldValue(testFieldGuid, singleChoiceToAdd)); break; case RdoFieldType.SingleObject: int objectToAttach = _testObjectHelper.CreateTestObjectWithGravity <GravityLevel2>(sampleData as GravityLevel2); dto.Fields.Add(new FieldValue(testFieldGuid, objectToAttach)); expectedData = (sampleData as GravityLevel2).Name; break; case RdoFieldType.MultipleObject: IList <GravityLevel2> gravityLevel2s = (IList <GravityLevel2>)sampleData; FieldValueList <Artifact> objects = new FieldValueList <Artifact>(); expectedData = new Dictionary <int, string>(); foreach (GravityLevel2 child in gravityLevel2s) { objectToAttachID = _testObjectHelper.CreateTestObjectWithGravity <GravityLevel2>(child); objects.Add(new Artifact(objectToAttachID)); (expectedData as Dictionary <int, string>).Add(objectToAttachID, child.Name); } dto.Fields.Add(new FieldValue(testFieldGuid, objects)); break; default: dto.Fields.Add(new FieldValue(testFieldGuid, sampleData)); break; } WriteResultSet <RDO> writeResults = _client.Repositories.RDO.Create(dto); if (writeResults.Success) { newArtifactId = writeResults.Results[0].Artifact.ArtifactID; Console.WriteLine($"Object was created with Artifact ID {newArtifactId}."); } else { Console.WriteLine($"An error occurred creating object: {writeResults.Message}"); foreach (var result in writeResults.Results .Select((item, index) => new { rdoResult = item, itemNumber = index }) .Where(x => x.rdoResult.Success == false)) { Console.WriteLine($"An error occurred in create request {result.itemNumber}: {result.rdoResult.Message}"); } } LogEnd("Arrangement"); //Act LogStart("Act"); object gravityFieldValue = null; if (newArtifactId > 0) { GravityLevelOne testGravityObject = _testObjectHelper.ReturnTestObjectWithGravity <GravityLevelOne>(newArtifactId); gravityFieldValue = testGravityObject.GetPropertyValue(objectPropertyName); if (gravityFieldValue != null) { switch (fieldType) { case RdoFieldType.SingleObject: gravityFieldValue = ((GravityLevel2)gravityFieldValue).Name; break; case RdoFieldType.MultipleObject: gravityFieldValue = ((List <GravityLevel2>)gravityFieldValue).ToDictionary(x => x.ArtifactId, x => x.Name); break; } } } LogEnd("Act"); //Assert LogStart("Assertion"); if (newArtifactId > 0) { Assert.AreEqual(expectedData, gravityFieldValue); } else { Assert.Fail("Could not create object to test with through RSAPI. This is not a Gravity failure."); } LogEnd("Assertion"); } TestWrapper(Inner); }
private static object ConvertPropertyValue(PropertyInfo property, RdoFieldType fieldType, object propertyValue) { switch (fieldType) { case RdoFieldType.Currency: case RdoFieldType.Date: case RdoFieldType.Decimal: case RdoFieldType.Empty: case RdoFieldType.LongText: case RdoFieldType.WholeNumber: case RdoFieldType.YesNo: case RdoFieldType.User: { return(propertyValue); } //truncate fixed-length text case RdoFieldType.FixedLengthText: { int stringLength = property.GetCustomAttribute <RelativityObjectFieldAttribute>().Length ?? 3000; string theString = propertyValue as string; if (string.IsNullOrEmpty(theString) == false && theString.Length > stringLength) { theString = theString.Substring(0, (stringLength - 3)) + "..."; } return(theString); } case RdoFieldType.MultipleChoice: { var choiceList = ((IEnumerable)propertyValue) .Cast <Enum>() .Select(x => x.GetRelativityObjectAttributeGuidValue()) .Select(choiceGuid => new Choice(choiceGuid)) .ToList(); return(choiceList.Any() ? (MultiChoiceFieldValueList)choiceList : null); } case RdoFieldType.MultipleObject: { return(new FieldValueList <Artifact>( ((IEnumerable <object>)propertyValue).Select(x => new Artifact((x as BaseDto).ArtifactId)))); } case RdoFieldType.SingleChoice: { if (Enum.IsDefined(propertyValue.GetType(), propertyValue)) { var choiceGuid = ((Enum)propertyValue).GetRelativityObjectAttributeGuidValue(); return(new Choice(choiceGuid)); } break; } case RdoFieldType.SingleObject: { int artifactId = (propertyValue as BaseDto).ArtifactId; if (artifactId > 0) { return(new Artifact(artifactId)); } break; } } return(null); }