public void VerifyThatIfNonCategorizableThingsAreRelatedViolationsAreReturned() { var rule = new MultiRelationshipRule(Guid.NewGuid(), this.cache, this.uri) { RelationshipCategory = this.lithiumBatteryCategory }; rule.RelatedCategory.Add(this.lithiumBatteryCategory); var alias = new Alias(Guid.NewGuid(), this.cache, this.uri); var definition = new Definition(Guid.NewGuid(), this.cache, this.uri); var multiRelationship = new MultiRelationship(Guid.NewGuid(), this.cache, this.uri); multiRelationship.Category.Add(this.lithiumBatteryCategory); multiRelationship.RelatedThing.Add(alias); multiRelationship.RelatedThing.Add(definition); this.iteration.Relationship.Add(multiRelationship); var violations = rule.Verify(this.iteration); Assert.AreEqual(2, violations.Count()); var aliasViolation = violations.Single(v => v.ViolatingThing.Contains(alias.Iid)); Assert.IsTrue(aliasViolation.Description.Contains("is not a CategorizableThing")); var definitionViolation = violations.Single(v => v.ViolatingThing.Contains(definition.Iid)); Assert.IsTrue(definitionViolation.Description.Contains("is not a CategorizableThing")); }
public void VerifyDialogValidation() { var rule = new MultiRelationshipRule(Guid.NewGuid(), null, this.uri); var vm = new MultiRelationshipRuleDialogViewModel(rule, this.transaction, this.session.Object, true, ThingDialogKind.Inspect, this.dialogService.Object); Assert.IsFalse(vm.OkCanExecute); }
public void VerifyThatCategoriesFromExistingRdlsAreLoaded() { var siterefenceDataLibrary = new SiteReferenceDataLibrary(Guid.NewGuid(), null, null); var rule1 = new BinaryRelationshipRule(Guid.NewGuid(), null, null); var rule2 = new MultiRelationshipRule(Guid.NewGuid(), null, null); siterefenceDataLibrary.Rule.Add(rule1); siterefenceDataLibrary.Rule.Add(rule2); this.siteDir.SiteReferenceDataLibrary.Add(siterefenceDataLibrary); var engineeringModelSetup = new EngineeringModelSetup(Guid.NewGuid(), null, null); var modelReferenceDataLibrary = new ModelReferenceDataLibrary(Guid.NewGuid(), null, null); var rule3 = new BinaryRelationshipRule(Guid.NewGuid(), null, null); var rule4 = new MultiRelationshipRule(Guid.NewGuid(), null, null); modelReferenceDataLibrary.Rule.Add(rule3); modelReferenceDataLibrary.Rule.Add(rule4); engineeringModelSetup.RequiredRdl.Add(modelReferenceDataLibrary); this.siteDir.Model.Add(engineeringModelSetup); this.session.Setup(x => x.OpenReferenceDataLibraries).Returns(new HashSet <ReferenceDataLibrary>(this.siteDir.SiteReferenceDataLibrary) { modelReferenceDataLibrary }); var browser = new RulesBrowserViewModel(this.session.Object, this.siteDir, null, null, null, null); Assert.AreEqual(4, browser.Rules.Count); }
public void VerifyThatIfNoMultiRelationshipsAreContainedByIterationNoViolationsAreReturned() { var rule = new MultiRelationshipRule(Guid.NewGuid(), this.cache, this.uri); var violations = rule.Verify(this.iteration); Assert.IsEmpty(violations); }
public void VerifyThatContainerIsSetForRuleUpdate() { var rule = new MultiRelationshipRule(Guid.NewGuid(), null, this.uri); var vm = new MultiRelationshipRuleDialogViewModel(rule, this.transaction, this.session.Object, true, ThingDialogKind.Create, this.dialogService.Object); Assert.AreEqual(2, vm.PossibleContainer.Count); }
/// <summary> /// Initializes a new instance of the <see cref="MultiRelationshipRuleDialogViewModel"/> class. /// </summary> /// <param name="multiRelationshipRule"> /// The <see cref="CDP4Common.SiteDirectoryData.MultiRelationshipRule"/> that is the subject of the current view-model. This is the object /// that will be either created, or edited. /// </param> /// <param name="transaction"> /// The <see cref="ThingTransaction"/> that contains the log of recorded changes. /// </param> /// <param name="session"> /// The <see cref="ISession"/> in which the current <see cref="CDP4Common.CommonData.Thing"/> is to be added or updated /// </param> /// <param name="isRoot"> /// Assert if this <see cref="MultiRelationshipRuleDialogViewModel"/> is the root of all <see cref="IThingDialogViewModel"/> /// </param> /// <param name="dialogKind"> /// The kind of operation this <see cref="MultiRelationshipRuleDialogViewModel"/> performs /// </param> /// <param name="thingDialogNavigationService"> /// The <see cref="IThingDialogNavigationService"/> that is used to navigate to a dialog of a specific <see cref="Thing"/>. /// </param> /// <param name="container"> /// The Container <see cref="CDP4Common.CommonData.Thing"/> of the created <see cref="CDP4Common.SiteDirectoryData.MultiRelationshipRule"/> /// </param> /// <param name="chainOfContainers"> /// The optional chain of containers that contains the <paramref name="container"/> argument /// </param> public MultiRelationshipRuleDialogViewModel(MultiRelationshipRule multiRelationshipRule, IThingTransaction transaction, ISession session, bool isRoot, ThingDialogKind dialogKind, IThingDialogNavigationService thingDialogNavigationService, Thing container = null, IEnumerable <Thing> chainOfContainers = null) : base(multiRelationshipRule, transaction, session, isRoot, dialogKind, thingDialogNavigationService, container, chainOfContainers) { this.WhenAnyValue(vm => vm.Container).Subscribe(_ => this.RepopulatePossibleCategories()); this.WhenAnyValue(vm => vm.Container).Subscribe(_ => this.UpdateOkCanExecute()); this.WhenAnyValue(vm => vm.SelectedRelationshipCategory).Subscribe(_ => this.UpdateOkCanExecute()); this.WhenAnyValue(vm => vm.RelatedCategory).Subscribe(_ => this.UpdateOkCanExecute()); }
public void SetUp() { this.multiRelationshipRule = new MultiRelationshipRule { Iid = Guid.Parse("3b9f431a-7a7c-4763-9818-7e3154c70910"), ShortName = "MULTIRULE" }; this.siteReferenceDataLibrary = new SiteReferenceDataLibrary(); this.siteReferenceDataLibrary.Rule.Add(this.multiRelationshipRule); this.multiRelationshipRuleRuleChecker = new MultiRelationshipRuleRuleChecker(); }
public void VerifyThatContainerIsSetForRuleInspect() { var expectedContainers = new List <ReferenceDataLibrary>(); expectedContainers.Add(this.siteRdl); var rule = new MultiRelationshipRule(Guid.NewGuid(), null, this.uri); this.siteRdl.Rule.Add(rule); var vm = new MultiRelationshipRuleDialogViewModel(rule, this.transaction, this.session.Object, true, ThingDialogKind.Inspect, this.dialogService.Object, null); CollectionAssert.AreEquivalent(expectedContainers, vm.PossibleContainer); }
public void VerifyThatIfRelationshipIsNotMemberOfCategoryNoViolationIsReturned() { var rule = new MultiRelationshipRule(); rule.RelationshipCategory = this.equipmentCategory; var multiRelationship = new MultiRelationship(Guid.NewGuid(), this.cache, this.uri); this.iteration.Relationship.Add(multiRelationship); var violations = rule.Verify(this.iteration); Assert.IsEmpty(violations); }
public void VerifyThatIfRelationshipCategoryIsNullNoViolationsAreReturned() { var rule = new MultiRelationshipRule(); rule.RelationshipCategory = null; var binaryRelationship = new BinaryRelationship(Guid.NewGuid(), this.cache, this.uri); this.iteration.Relationship.Add(binaryRelationship); var violations = rule.Verify(this.iteration); Assert.IsEmpty(violations); }
public void VerifyThatIfRuleIsNotViolatedNoViolationsAreReturned() { var rule = new MultiRelationshipRule(Guid.NewGuid(), this.cache, this.uri) { RelationshipCategory = this.productCategory }; rule.RelatedCategory.Add(this.productCategory); var battery = new ElementDefinition(Guid.NewGuid(), this.cache, this.uri); battery.Category.Add(this.batteryCategory); this.iteration.Element.Add(battery); var cell = new ElementDefinition(Guid.NewGuid(), this.cache, this.uri); cell.Category.Add(this.equipmentCategory); this.iteration.Element.Add(cell); var cellElementUsage = new ElementUsage(Guid.NewGuid(), this.cache, this.uri); cellElementUsage.ElementDefinition = cell; battery.ContainedElement.Add(cellElementUsage); var pcdu = new ElementDefinition(Guid.NewGuid(), this.cache, this.uri); pcdu.Category.Add(this.equipmentCategory); this.iteration.Element.Add(pcdu); var multiRelationship = new MultiRelationship(Guid.NewGuid(), this.cache, this.uri); multiRelationship.Category.Add(this.productCategory); this.iteration.Relationship.Add(multiRelationship); multiRelationship.RelatedThing.Add(battery); multiRelationship.RelatedThing.Add(cellElementUsage); multiRelationship.RelatedThing.Add(pcdu); var violations = rule.Verify(this.iteration); CollectionAssert.IsEmpty(violations); }
public void VerifyThatSubscriptionsWork() { var viewmodel = new RelationshipEditorViewModel(this.iteration, this.participant, this.session.Object, this.thingDialogNavigationService.Object, this.panelNavigationService.Object, null, null); Assert.AreEqual(0, viewmodel.RelationshipRules.Count); var newBinaryRule = new BinaryRelationshipRule(Guid.NewGuid(), this.cache, this.uri); var newMultiRule = new MultiRelationshipRule(Guid.NewGuid(), this.cache, this.uri); CDPMessageBus.Current.SendObjectChangeEvent(newBinaryRule, EventKind.Added); Assert.AreEqual(1, viewmodel.RelationshipRules.Count); CDPMessageBus.Current.SendObjectChangeEvent(newMultiRule, EventKind.Added); Assert.AreEqual(2, viewmodel.RelationshipRules.Count); CDPMessageBus.Current.SendObjectChangeEvent(newBinaryRule, EventKind.Removed); Assert.AreEqual(1, viewmodel.RelationshipRules.Count); CDPMessageBus.Current.SendObjectChangeEvent(newMultiRule, EventKind.Removed); Assert.AreEqual(0, viewmodel.RelationshipRules.Count); }
public void VerifyThatAllPropertiesArePopulated() { var shortname = "shortname"; var name = "name"; var minRelated = 2; var maxRelated = 3; var expectedCategories = this.siteRdl.DefinedCategory.Concat(this.genericSiteReferenceDataLibrary.DefinedCategory).ToList(); var expectedRelatedCategories = new List <Category>(); expectedRelatedCategories.Add(this.cat1); expectedRelatedCategories.Add(this.cat2); var rule = new MultiRelationshipRule(Guid.NewGuid(), null, this.uri); rule.ShortName = shortname; rule.Name = name; this.siteRdl.Rule.Add(rule); rule.MinRelated = minRelated; rule.MaxRelated = maxRelated; rule.RelationshipCategory = this.cat; rule.RelatedCategory.Add(this.cat1); rule.RelatedCategory.Add(this.cat2); var vm = new MultiRelationshipRuleDialogViewModel(rule, this.transaction, this.session.Object, true, ThingDialogKind.Inspect, this.dialogService.Object); Assert.AreEqual(shortname, vm.ShortName); Assert.AreEqual(name, vm.Name); Assert.AreEqual(minRelated, vm.MinRelated); Assert.AreEqual(maxRelated, vm.MaxRelated); Assert.AreEqual(this.cat, vm.SelectedRelationshipCategory); CollectionAssert.AreEquivalent(expectedCategories, vm.PossibleRelatedCategory); CollectionAssert.AreEquivalent(expectedCategories, vm.PossibleRelationshipCategory); CollectionAssert.AreEquivalent(expectedRelatedCategories, vm.RelatedCategory); Assert.IsTrue(vm.OkCanExecute); }
public void VerifyThatIfRelationshipViolatesRuleViolationIsReturned() { var rule = new MultiRelationshipRule(Guid.NewGuid(), this.cache, this.uri) { RelationshipCategory = this.lithiumBatteryCategory }; rule.RelatedCategory.Add(this.lithiumBatteryCategory); var battery = new ElementDefinition(Guid.NewGuid(), this.cache, this.uri) { ShortName = "BAT", Name = "Battery" }; battery.Category.Add(this.batteryCategory); this.iteration.Element.Add(battery); var lithiumBattery = new ElementDefinition(Guid.NewGuid(), this.cache, this.uri) { ShortName = "LITBAT", Name = "Lithium Battery" }; lithiumBattery.Category.Add(this.lithiumBatteryCategory); this.iteration.Element.Add(lithiumBattery); var multiRelationship = new MultiRelationship(Guid.NewGuid(), this.cache, this.uri); multiRelationship.Category.Add(this.lithiumBatteryCategory); multiRelationship.RelatedThing.Add(battery); multiRelationship.RelatedThing.Add(lithiumBattery); this.iteration.Relationship.Add(multiRelationship); var violations = rule.Verify(this.iteration); var violation = violations.Single(); CollectionAssert.Contains(violation.ViolatingThing, multiRelationship.Iid); }
/// <summary> /// Serialize the <see cref="MultiRelationshipRule"/> /// </summary> /// <param name="multiRelationshipRule">The <see cref="MultiRelationshipRule"/> to serialize</param> /// <returns>The <see cref="JObject"/></returns> private JObject Serialize(MultiRelationshipRule multiRelationshipRule) { var jsonObject = new JObject(); jsonObject.Add("alias", this.PropertySerializerMap["alias"](multiRelationshipRule.Alias.OrderBy(x => x, this.guidComparer))); jsonObject.Add("classKind", this.PropertySerializerMap["classKind"](Enum.GetName(typeof(CDP4Common.CommonData.ClassKind), multiRelationshipRule.ClassKind))); jsonObject.Add("definition", this.PropertySerializerMap["definition"](multiRelationshipRule.Definition.OrderBy(x => x, this.guidComparer))); jsonObject.Add("excludedDomain", this.PropertySerializerMap["excludedDomain"](multiRelationshipRule.ExcludedDomain.OrderBy(x => x, this.guidComparer))); jsonObject.Add("excludedPerson", this.PropertySerializerMap["excludedPerson"](multiRelationshipRule.ExcludedPerson.OrderBy(x => x, this.guidComparer))); jsonObject.Add("hyperLink", this.PropertySerializerMap["hyperLink"](multiRelationshipRule.HyperLink.OrderBy(x => x, this.guidComparer))); jsonObject.Add("iid", this.PropertySerializerMap["iid"](multiRelationshipRule.Iid)); jsonObject.Add("isDeprecated", this.PropertySerializerMap["isDeprecated"](multiRelationshipRule.IsDeprecated)); jsonObject.Add("maxRelated", this.PropertySerializerMap["maxRelated"](multiRelationshipRule.MaxRelated)); jsonObject.Add("minRelated", this.PropertySerializerMap["minRelated"](multiRelationshipRule.MinRelated)); jsonObject.Add("modifiedOn", this.PropertySerializerMap["modifiedOn"](multiRelationshipRule.ModifiedOn)); jsonObject.Add("name", this.PropertySerializerMap["name"](multiRelationshipRule.Name)); jsonObject.Add("relatedCategory", this.PropertySerializerMap["relatedCategory"](multiRelationshipRule.RelatedCategory.OrderBy(x => x, this.guidComparer))); jsonObject.Add("relationshipCategory", this.PropertySerializerMap["relationshipCategory"](multiRelationshipRule.RelationshipCategory)); jsonObject.Add("revisionNumber", this.PropertySerializerMap["revisionNumber"](multiRelationshipRule.RevisionNumber)); jsonObject.Add("shortName", this.PropertySerializerMap["shortName"](multiRelationshipRule.ShortName)); jsonObject.Add("thingPreference", this.PropertySerializerMap["thingPreference"](multiRelationshipRule.ThingPreference)); return(jsonObject); }
/// <summary> /// Creates a <see cref="MultiRelationship"/> /// </summary> /// <param name="relatableThings">The list of <see cref="Thing"/> that this relationship will apply to.</param> /// <param name="rule">The <see cref="MultiRelationshipRule"/> that defines this relationship.</param> private async void CreateMultiRelationship(IEnumerable <Thing> relatableThings, MultiRelationshipRule rule) { // send off the relationship Tuple <DomainOfExpertise, Participant> tuple; this.Session.OpenIterations.TryGetValue(this.Thing, out tuple); var multiRelationship = new MultiRelationship(Guid.NewGuid(), null, null) { Owner = tuple.Item1 }; if (rule != null) { multiRelationship.Category.Add(rule.RelationshipCategory); } var iteration = this.Thing.Clone(false); iteration.Relationship.Add(multiRelationship); multiRelationship.Container = iteration; multiRelationship.RelatedThing = relatableThings.ToList(); var transactionContext = TransactionContextResolver.ResolveContext(this.Thing); var containerTransaction = new ThingTransaction(transactionContext, iteration); containerTransaction.CreateOrUpdate(multiRelationship); try { var operationContainer = containerTransaction.FinalizeTransaction(); await this.Session.Write(operationContainer); // at this point relationship has gone through. var returedRelationship = this.Thing.Relationship.FirstOrDefault(r => r.Iid == multiRelationship.Iid) as MultiRelationship; if (returedRelationship != null) { this.CreateMultiRelationshipDiagramConnector(returedRelationship); } } catch (Exception ex) { MessageBox.Show(string.Format("Creation of Binary Relationship failed: {0}", ex.Message), "Binary Relationship Failed", MessageBoxButton.OK, MessageBoxImage.Error); } }
public void VerifyThatInvalidContainerThrowsException() { var rule = new MultiRelationshipRule(Guid.NewGuid(), null, this.uri); Assert.Throws <ArgumentException>(() => new MultiRelationshipRuleDialogViewModel(rule, this.transaction, this.session.Object, true, ThingDialogKind.Inspect, this.dialogService.Object, this.siteDir)); }
/// <summary> /// Persist the DTO composition to the ORM layer. /// </summary> /// <param name="transaction"> /// The transaction object. /// </param> /// <param name="partition"> /// The database partition (schema) where the requested resource will be stored. /// </param> /// <param name="multiRelationshipRule"> /// The multiRelationshipRule instance to persist. /// </param> /// <returns> /// True if the persistence was successful. /// </returns> private bool CreateContainment(NpgsqlTransaction transaction, string partition, MultiRelationshipRule multiRelationshipRule) { var results = new List <bool>(); foreach (var alias in this.ResolveFromRequestCache(multiRelationshipRule.Alias)) { results.Add(this.AliasService.CreateConcept(transaction, partition, alias, multiRelationshipRule)); } foreach (var definition in this.ResolveFromRequestCache(multiRelationshipRule.Definition)) { results.Add(this.DefinitionService.CreateConcept(transaction, partition, definition, multiRelationshipRule)); } foreach (var hyperLink in this.ResolveFromRequestCache(multiRelationshipRule.HyperLink)) { results.Add(this.HyperLinkService.CreateConcept(transaction, partition, hyperLink, multiRelationshipRule)); } return(results.All(x => x)); }
public void VerifyThatNullIterationThrowsArgumentException() { var rule = new MultiRelationshipRule(Guid.NewGuid(), this.cache, this.uri); Assert.Throws <ArgumentNullException>(() => rule.Verify(null)); }
/// <summary> /// Creates a <see cref="MultiRelationship"/> /// </summary> /// <param name="rule"> /// The rule this relationship is based on. /// </param> public void CreateMultiRelationshipCommandExecute(MultiRelationshipRule rule = null) { var relatableThings = this.SelectedItems.Select(i => ((NamedThingDiagramContentItem)i).Thing); this.CreateMultiRelationship(relatableThings, rule); }