public void VerifyCreateWithContainerUpdateInUpdatesValidation() { var modelReferenceDataLibraryMetaInfo = new ModelReferenceDataLibraryMetaInfo(); this.mockedMetaInfoProvider.Setup(x => x.GetMetaInfo(It.IsAny <SimpleQuantityKind>())).Returns(this.simpleQuantityKindMetaInfo); this.mockedMetaInfoProvider.Setup(x => x.GetMetaInfo(It.IsAny <ModelReferenceDataLibrary>())).Returns(modelReferenceDataLibraryMetaInfo); this.mockedMetaInfoProvider.Setup(x => x.GetMetaInfo(It.Is <string>(y => y == SimpleQuantityKindTypeString))).Returns(this.simpleQuantityKindMetaInfo); this.mockedMetaInfoProvider.Setup(x => x.GetMetaInfo(It.Is <string>(y => y == "ModelReferenceDataLibrary"))).Returns(modelReferenceDataLibraryMetaInfo); var newSimpleQuantityKind = new SimpleQuantityKind(Guid.NewGuid(), 0) { Alias = new List <Guid>(), Definition = new List <Guid>(), HyperLink = new List <Guid>(), PossibleScale = new List <Guid>(), Name = TestName, ShortName = TestShortName, Symbol = "testSymbol" }; // simpleQuantityKind container update var modelReferenceDataLibrary = new ClasslessDTO() { { IidKey, Guid.NewGuid() }, { ClasskindKey, ClassKind.ModelReferenceDataLibrary }, { "ParameterType", new[] { newSimpleQuantityKind.Iid } } }; var postOperation = new CdpPostOperation(); postOperation.Create.Add(newSimpleQuantityKind); postOperation.Update.Add(modelReferenceDataLibrary); Assert.DoesNotThrow(() => this.operationProcessor.ValidateCreateOperations(postOperation, this.fileStore)); }
public void VerifyScalarPropertiesOnDeleteOperationValidation() { this.mockedMetaInfoProvider.Setup(x => x.GetMetaInfo(It.IsAny <SimpleQuantityKind>())).Returns(this.simpleQuantityKindMetaInfo); this.mockedMetaInfoProvider.Setup(x => x.GetMetaInfo(It.Is <string>(y => y == SimpleQuantityKindTypeString))).Returns(this.simpleQuantityKindMetaInfo); var deleteObjectWithScalarPropertySet = new ClasslessDTO() { { IidKey, Guid.NewGuid() }, { ClasskindKey, SimpleQuantityKindTypeString }, { "Name", TestName } }; var postOperation = new CdpPostOperation(); postOperation.Delete.Add(deleteObjectWithScalarPropertySet); Assert.Throws( typeof(InvalidOperationException), () => this.operationProcessor.ValidateDeleteOperations(postOperation, null, "")); var deleteObjectWithListProperty = new ClasslessDTO() { { IidKey, Guid.NewGuid() }, { ClasskindKey, SimpleQuantityKindTypeString }, { "PossibleScale", new[] { Guid.NewGuid() } } }; postOperation.Delete.Clear(); postOperation.Delete.Add(deleteObjectWithListProperty); Assert.DoesNotThrow(() => this.operationProcessor.ValidateDeleteOperations(postOperation, null, "")); }
public void VerifyCreateWithoutContainerUpdateValidation() { this.mockedMetaInfoProvider.Setup(x => x.GetMetaInfo(It.IsAny <SimpleQuantityKind>())).Returns(this.simpleQuantityKindMetaInfo); this.mockedMetaInfoProvider.Setup(x => x.GetMetaInfo(It.IsAny <string>())).Returns(this.thingMetaInfo); this.mockedMetaInfoProvider.Setup(x => x.GetMetaInfo(It.Is <string>(y => y == SimpleQuantityKindTypeString))).Returns(this.simpleQuantityKindMetaInfo); var newSimpleQuantityKind = new SimpleQuantityKind(Guid.NewGuid(), 0) { Alias = new List <Guid>(), Definition = new List <Guid>(), HyperLink = new List <Guid>(), PossibleScale = new List <Guid>(), Name = TestName, ShortName = TestShortName, Symbol = "testSymbol" }; var postOperation = new CdpPostOperation(); postOperation.Create.Add(newSimpleQuantityKind); Assert.Throws( typeof(InvalidOperationException), () => this.operationProcessor.ValidateCreateOperations(postOperation, this.fileStore)); }
public void VerifyIncompleteDeleteOperationValidation() { this.mockedMetaInfoProvider.Setup(x => x.GetMetaInfo(It.IsAny <SimpleQuantityKind>())).Returns(this.simpleQuantityKindMetaInfo); this.mockedMetaInfoProvider.Setup(x => x.GetMetaInfo(It.Is <string>(y => y == SimpleQuantityKindTypeString))).Returns(this.simpleQuantityKindMetaInfo); var deleteObjectWithoutIid = new ClasslessDTO() { { ClasskindKey, SimpleQuantityKindTypeString } }; var deleteObjectWithoutClassKind = new ClasslessDTO() { { IidKey, Guid.NewGuid() } }; var postOperation = new CdpPostOperation(); postOperation.Delete.Add(deleteObjectWithoutIid); Assert.Throws( typeof(InvalidOperationException), () => this.operationProcessor.ValidateDeleteOperations(postOperation, null, "")); postOperation.Delete.Clear(); postOperation.Delete.Add(deleteObjectWithoutClassKind); Assert.Throws( typeof(InvalidOperationException), () => this.operationProcessor.ValidateDeleteOperations(postOperation, null, "")); var completeDeleteObject = new ClasslessDTO() { { IidKey, Guid.NewGuid() }, { ClasskindKey, SimpleQuantityKindTypeString } }; postOperation.Delete.Clear(); postOperation.Delete.Add(completeDeleteObject); Assert.DoesNotThrow(() => this.operationProcessor.ValidateDeleteOperations(postOperation, null, "")); }
public void VerifyTopContainerCreationNotAllowedValidation() { this.mockedMetaInfoProvider.Setup(x => x.GetMetaInfo(It.IsAny <EngineeringModel>())).Returns(this.engineeringModelMetaInfo); this.mockedMetaInfoProvider.Setup(x => x.GetMetaInfo(It.Is <string>(y => y == "EngineeringModel"))).Returns(this.engineeringModelMetaInfo); var newEngineeringModel = new EngineeringModel(Guid.NewGuid(), 0) { Book = new List <OrderedItem>(), CommonFileStore = new List <Guid>(), Iteration = new List <Guid> { Guid.NewGuid() }, LogEntry = new List <Guid>() }; var postOperation = new CdpPostOperation(); postOperation.Create.Add(newEngineeringModel); Assert.Throws( typeof(InvalidOperationException), () => this.operationProcessor.ValidateCreateOperations(postOperation, this.fileStore)); }
public void VerifyIncompleteUpdateOperationValidation() { var updateObjectWithoutIid = new ClasslessDTO() { { ClasskindKey, SimpleQuantityKindTypeString } }; var updateObjectWithoutClassKind = new ClasslessDTO() { { IidKey, Guid.NewGuid() } }; var postOperation = new CdpPostOperation(); postOperation.Update.Add(updateObjectWithoutIid); Assert.Throws( typeof(InvalidOperationException), () => this.operationProcessor.ValidateUpdateOperations(postOperation)); postOperation.Update.Clear(); postOperation.Update.Add(updateObjectWithoutClassKind); Assert.Throws( typeof(InvalidOperationException), () => this.operationProcessor.ValidateUpdateOperations(postOperation)); var completeUpdateObject = new ClasslessDTO() { { IidKey, Guid.NewGuid() }, { ClasskindKey, Guid.NewGuid() } }; postOperation.Update.Clear(); postOperation.Update.Add(completeUpdateObject); Assert.DoesNotThrow(() => this.operationProcessor.ValidateUpdateOperations(postOperation)); }
public void VerifyCopyElementDefWorks() { var modelSetupService = new Mock <IEngineeringModelSetupService>(); var modelSetup = new EngineeringModelSetup(Guid.NewGuid(), 0); modelSetupService.Setup(x => x.GetEngineeringModelSetup(It.IsAny <NpgsqlTransaction>(), It.IsAny <Guid>())).Returns(modelSetup); this.copySourceDtos = new List <Thing>(); var boolParamTypeId = Guid.NewGuid(); var mrdl = new ModelReferenceDataLibrary(Guid.NewGuid(), 1); mrdl.ParameterType.Add(boolParamTypeId); var sourceIteration = new Iteration(Guid.NewGuid(), 1); var sourceElementDef1 = new ElementDefinition(Guid.NewGuid(), 1); var sourceElementDef2 = new ElementDefinition(Guid.NewGuid(), 1); var sourceUsage1 = new ElementUsage(Guid.NewGuid(), 1) { ElementDefinition = sourceElementDef2.Iid }; sourceElementDef1.ContainedElement.Add(sourceUsage1.Iid); sourceIteration.Element.Add(sourceElementDef1.Iid); sourceIteration.Element.Add(sourceElementDef2.Iid); var parameter1 = new Parameter(Guid.NewGuid(), 1) { ParameterType = boolParamTypeId }; var pvs1 = new ParameterValueSet(Guid.NewGuid(), 1) { Manual = new ValueArray <string>(new[] { "true" }), Computed = new ValueArray <string>(new[] { "-" }), Reference = new ValueArray <string>(new[] { "-" }), Published = new ValueArray <string>(new[] { "-" }), ValueSwitch = ParameterSwitchKind.MANUAL }; var parameter2 = new Parameter(Guid.NewGuid(), 1) { ParameterType = boolParamTypeId }; var pvs2 = new ParameterValueSet(Guid.NewGuid(), 1) { Manual = new ValueArray <string>(new[] { "true" }), Computed = new ValueArray <string>(new[] { "-" }), Reference = new ValueArray <string>(new[] { "-" }), Published = new ValueArray <string>(new[] { "-" }), ValueSwitch = ParameterSwitchKind.MANUAL }; parameter1.ValueSet.Add(pvs1.Iid); sourceElementDef1.Parameter.Add(parameter1.Iid); parameter2.ValueSet.Add(pvs2.Iid); sourceElementDef2.Parameter.Add(parameter2.Iid); var override2 = new ParameterOverride(Guid.NewGuid(), 1); override2.Parameter = parameter2.Iid; var ovs = new ParameterOverrideValueSet(Guid.NewGuid(), 1) { ParameterValueSet = pvs2.Iid }; override2.ValueSet.Add(ovs.Iid); sourceUsage1.ParameterOverride.Add(override2.Iid); this.copySourceDtos.Add(sourceIteration); this.copySourceDtos.Add(sourceElementDef1); this.copySourceDtos.Add(sourceElementDef2); this.copySourceDtos.Add(sourceUsage1); this.copySourceDtos.Add(parameter1); this.copySourceDtos.Add(pvs1); this.copySourceDtos.Add(parameter2); this.copySourceDtos.Add(pvs2); this.copySourceDtos.Add(override2); this.copySourceDtos.Add(ovs); var targetIteration = new Iteration(Guid.NewGuid(), 1); this.serviceProvider.Setup(x => x.MapToReadService(It.IsAny <string>())).Returns <string>(x => new TestSourceService(this.copySourceDtos, x)); this.serviceProvider.Setup(x => x.MapToReadService(It.Is <string>(t => t == ClassKind.ModelReferenceDataLibrary.ToString()))) .Returns <string>(x => new TestSourceService(new List <Thing> { mrdl }, x)); this.serviceProvider.Setup(x => x.MapToReadService(It.Is <string>(t => t == ClassKind.Iteration.ToString()))) .Returns <string>(x => new TestSourceService(new List <Thing> { sourceIteration, targetIteration }, x)); var customOperationSideEffectProcessor = new Mock <IOperationSideEffectProcessor>(); customOperationSideEffectProcessor.Setup(x => x.BeforeCreate(It.IsAny <Thing>(), It.IsAny <Thing>(), It.IsAny <NpgsqlTransaction>(), It.IsAny <string>(), It.IsAny <ISecurityContext>())). Returns(true); var paramSubscriptionService = new ParameterSubscriptionService { ParameterSubscriptionDao = new Mock <IParameterSubscriptionDao>().Object, PermissionService = this.permissionService.Object, }; var parameterContextProvider = new OldParameterContextProvider { ParameterValueSetService = new TestSourceService(this.copySourceDtos, ClassKind.ParameterValueSet.ToString()) }; var paramGroupService = new ParameterGroupService { PermissionService = this.permissionService.Object, TransactionManager = this.transactionManager.Object, ParameterGroupDao = new Mock <IParameterGroupDao>().Object }; var valueSetService = new Mock <IParameterValueSetService>(); valueSetService.Setup(x => x.GetShallow(It.IsAny <NpgsqlTransaction>(), It.IsAny <string>(), It.IsAny <IEnumerable <Guid> >(), It.IsAny <ISecurityContext>())) .Returns <NpgsqlTransaction, string, IEnumerable <Guid>, ISecurityContext>((a, b, c, d) => { var list = new List <ParameterValueSet>(); foreach (var guid in c) { var vs = new ParameterValueSet(guid, 1) { Manual = new ValueArray <string>(new [] { "-" }), Computed = new ValueArray <string>(new [] { "-" }), Reference = new ValueArray <string>(new [] { "-" }), Published = new ValueArray <string>(new [] { "-" }) }; list.Add(vs); } return(list); }); var overrideValueSetService = new Mock <IParameterOverrideValueSetService>(); overrideValueSetService.Setup(x => x.GetShallow(It.IsAny <NpgsqlTransaction>(), It.IsAny <string>(), It.IsAny <IEnumerable <Guid> >(), It.IsAny <ISecurityContext>())) .Returns <NpgsqlTransaction, string, IEnumerable <Guid>, ISecurityContext>((a, b, c, d) => { var list = new List <ParameterOverrideValueSet>(); foreach (var guid in c) { var vs = new ParameterOverrideValueSet(guid, 1) { Manual = new ValueArray <string>(new[] { "-" }), Computed = new ValueArray <string>(new[] { "-" }), Reference = new ValueArray <string>(new[] { "-" }), Published = new ValueArray <string>(new[] { "-" }) }; list.Add(vs); } return(list); }); var paramDao = new TestParameterDao(); var paramService = new ParameterService { PermissionService = this.permissionService.Object, ParameterDao = paramDao, OperationSideEffectProcessor = customOperationSideEffectProcessor.Object, TransactionManager = this.transactionManager.Object, OldParameterContextProvider = parameterContextProvider, ParameterSubscriptionService = paramSubscriptionService, ParameterValueSetService = valueSetService.Object }; var paramOverrideDao = new TestParameterOverrideDao(); var paramOverrideService = new ParameterOverrideService { PermissionService = this.permissionService.Object, ParameterOverrideDao = paramOverrideDao, TransactionManager = this.transactionManager.Object, OperationSideEffectProcessor = customOperationSideEffectProcessor.Object, ParameterSubscriptionService = paramSubscriptionService, ParameterOverrideValueSetService = overrideValueSetService.Object }; var usageDao = new Mock <IElementUsageDao>(); var usageService = new ElementUsageService { PermissionService = this.permissionService.Object, ParameterOverrideService = paramOverrideService, ElementUsageDao = usageDao.Object, TransactionManager = this.transactionManager.Object, OperationSideEffectProcessor = customOperationSideEffectProcessor.Object }; var edDao = new TestElementDefinitionDao(); var edService = new ElementDefinitionService { PermissionService = this.permissionService.Object, ElementDefinitionDao = edDao, ElementUsageService = usageService, ParameterService = paramService, TransactionManager = this.transactionManager.Object, OperationSideEffectProcessor = customOperationSideEffectProcessor.Object, ParameterGroupService = paramGroupService }; this.serviceProvider.Setup(x => x.MapToPersitableService(ClassKind.ElementDefinition.ToString())).Returns(edService); this.serviceProvider.Setup(x => x.MapToPersitableService(ClassKind.ElementUsage.ToString())).Returns(usageService); this.serviceProvider.Setup(x => x.MapToPersitableService(ClassKind.Parameter.ToString())).Returns(paramService); this.serviceProvider.Setup(x => x.MapToPersitableService(ClassKind.ParameterOverride.ToString())).Returns(paramOverrideService); this.serviceProvider.Setup(x => x.MapToPersitableService(ClassKind.ParameterSubscription.ToString())).Returns(paramSubscriptionService); this.serviceProvider.Setup(x => x.MapToPersitableService(ClassKind.ParameterGroup.ToString())).Returns(paramGroupService); var postOperation = new CdpPostOperation(); var copyinfo = new CopyInfo { ActiveOwner = Guid.NewGuid(), Options = new CopyInfoOptions { CopyKind = CopyKind.Deep, KeepOwner = true, KeepValues = true }, Source = new CopySource { IterationId = sourceIteration.Iid, Thing = new CopyReference { Iid = sourceElementDef1.Iid, ClassKind = ClassKind.ElementDefinition }, TopContainer = new CopyReference { Iid = Guid.NewGuid(), ClassKind = ClassKind.EngineeringModel } }, Target = new CopyTarget { IterationId = targetIteration.Iid, Container = new CopyReference { Iid = targetIteration.Iid, ClassKind = ClassKind.Iteration }, TopContainer = new CopyReference { Iid = Guid.NewGuid(), ClassKind = ClassKind.EngineeringModel } } }; postOperation.Copy.Add(copyinfo); this.serviceProvider.Setup(x => x.MapToReadService(ClassKind.EngineeringModelSetup.ToString())).Returns(modelSetupService.Object); this.operationProcessor.Process(postOperation, null, $"Iteration_{targetIteration.Iid.ToString().Replace("-", "_")}", null); Assert.AreEqual(2, edDao.WrittenThingCount); Assert.AreEqual(2, paramDao.WrittenThingCount); Assert.AreEqual(1, paramOverrideDao.WrittenThingCount); usageDao.Verify(x => x.Write(It.IsAny <NpgsqlTransaction>(), It.IsAny <string>(), It.IsAny <ElementUsage>(), It.IsAny <Thing>()), Times.Once); }
public void Verify_that_serialization_of_Post_Operation_returns_expected_result() { var expected = @"{""_delete"":[],""_create"":[{""category"":[],""classKind"":""File"",""excludedDomain"":[],""excludedPerson"":[],""fileRevision"":[""cb54801a-9a08-495f-996c-6467a86ed9cc""],""iid"":""643e6154-a035-4445-a4f2-2c7ff5d2fdbd"",""lockedBy"":null,""modifiedOn"":""0001-01-01T00:00:00.000Z"",""owner"":""0e92edde-fdff-41db-9b1d-f2e484f12535"",""revisionNumber"":0},{""classKind"":""FileRevision"",""containingFolder"":null,""contentHash"":""F73747371CFD9473C19A0A7F99BCAB008474C4CA"",""createdOn"":""0001-01-01T00:00:00.000Z"",""creator"":""284334dd-e8e5-42d6-bc8a-715c507a7f02"",""excludedDomain"":[],""excludedPerson"":[],""fileType"":[{""k"":1,""v"":""b16894e4-acb5-4e81-a118-16c00eb86d8f""}],""iid"":""cb54801a-9a08-495f-996c-6467a86ed9cc"",""modifiedOn"":""0001-01-01T00:00:00.000Z"",""name"":""testfile"",""revisionNumber"":0}],""_update"":[{""classKind"":""DomainFileStore"",""iid"":""da7dddaa-02aa-4897-9935-e8d66c811a96"",""file"":[""643e6154-a035-4445-a4f2-2c7ff5d2fdbd""]}],""_copy"":[]}"; var engineeringModelIid = Guid.Parse("9ec982e4-ef72-4953-aa85-b158a95d8d56"); var iterationIid = Guid.Parse("e163c5ad-f32b-4387-b805-f4b34600bc2c"); var domainFileStoreIid = Guid.Parse("da7dddaa-02aa-4897-9935-e8d66c811a96"); var fileIid = Guid.Parse("643e6154-a035-4445-a4f2-2c7ff5d2fdbd"); var fileRevisionIid = Guid.Parse("cb54801a-9a08-495f-996c-6467a86ed9cc"); var domainOfExpertiseIid = Guid.Parse("0e92edde-fdff-41db-9b1d-f2e484f12535"); var fileTypeIid = Guid.Parse("b16894e4-acb5-4e81-a118-16c00eb86d8f"); var participantIid = Guid.Parse("284334dd-e8e5-42d6-bc8a-715c507a7f02"); var originalDomainFileStore = new DomainFileStore(domainFileStoreIid, 0); originalDomainFileStore.AddContainer(ClassKind.Iteration, iterationIid); originalDomainFileStore.AddContainer(ClassKind.EngineeringModel, engineeringModelIid); var modifiedDomainFileStore = originalDomainFileStore.DeepClone <DomainFileStore>(); modifiedDomainFileStore.File.Add(fileIid); var file = new CDP4Common.DTO.File(fileIid, 0); file.Owner = domainOfExpertiseIid; file.FileRevision.Add(fileRevisionIid); file.AddContainer(ClassKind.DomainFileStore, domainFileStoreIid); file.AddContainer(ClassKind.Iteration, iterationIid); file.AddContainer(ClassKind.EngineeringModel, engineeringModelIid); var fileRevision = new FileRevision(fileRevisionIid, 0); fileRevision.Name = "testfile"; fileRevision.ContentHash = "F73747371CFD9473C19A0A7F99BCAB008474C4CA"; fileRevision.FileType.Add(new OrderedItem() { K = 1, V = fileTypeIid }); fileRevision.Creator = participantIid; fileRevision.AddContainer(ClassKind.File, fileIid); fileRevision.AddContainer(ClassKind.DomainFileStore, domainFileStoreIid); fileRevision.AddContainer(ClassKind.Iteration, iterationIid); fileRevision.AddContainer(ClassKind.EngineeringModel, engineeringModelIid); var context = $"/EngineeringModel/{engineeringModelIid}/iteration/{iterationIid}"; var operationContainer = new OperationContainer(context, null); var updateCommonFileStoreOperation = new Operation(originalDomainFileStore, modifiedDomainFileStore, OperationKind.Update); operationContainer.AddOperation(updateCommonFileStoreOperation); var createFileOperation = new Operation(null, file, OperationKind.Create); operationContainer.AddOperation(createFileOperation); var createFileRevisionOperation = new Operation(null, fileRevision, OperationKind.Create); operationContainer.AddOperation(createFileRevisionOperation); var postOperation = new CdpPostOperation(new MetaDataProvider(), null); foreach (var operation in operationContainer.Operations) { postOperation.ConstructFromOperation(operation); } using (var stream = new MemoryStream()) using (var streamReader = new StreamReader(stream)) { this.serializer.SerializeToStream(postOperation, stream); stream.Position = 0; Assert.AreEqual(expected, streamReader.ReadToEnd()); } }