Beispiel #1
0
        public void RelationTypes_IfRelationExists_SetTypesOfTheGeneralType()
        {
            var serviceUnderTest = CreateServiceUnderTest();
            var session          = CreateSession();
            var expert           = FromExpertRepositoryReturnFakeExpert("expertName", session);
            var generalType      = Substitute.For <RelationType>();

            FakeRelationTypeRepository.GetGeneralType().Returns(generalType);
            var relationTuple = new RelationTupleDto
            {
                StraightRelationId = GeneratedGuids.First,
                ReverseRelationId  = GeneratedGuids.Second,
                DoesRelationExist  = true
            };

            serviceUnderTest.RelationTypes(relationTuple, "expertName", session);

            expert.Received(1)
            .SetTypesForRelation(
                Arg.Is(relationTuple.StraightRelationId),
                Arg.Is <IReadOnlyCollection <RelationType> >(x => x.Contains(generalType)),
                Arg.Is((string)null));
            expert.Received(1)
            .SetTypesForRelation(
                Arg.Is(relationTuple.ReverseRelationId),
                Arg.Is <IReadOnlyCollection <RelationType> >(x => x.Contains(generalType)),
                Arg.Is((string)null));
        }
Beispiel #2
0
        public void RelationTypes_IfRelationDoesNotExist_SetTypesWithEmptyCollectionOfTypes()
        {
            var serviceUnderTest = CreateServiceUnderTest();
            var session          = CreateSession();
            var expert           = FromExpertRepositoryReturnFakeExpert("expertName", session);
            var relationTuple    = new RelationTupleDto
            {
                StraightRelationId = GeneratedGuids.First,
                ReverseRelationId  = GeneratedGuids.Second,
                DoesRelationExist  = false
            };

            serviceUnderTest.RelationTypes(relationTuple, "expertName", session);

            expert.Received(1)
            .SetTypesForRelation(
                Arg.Is(relationTuple.StraightRelationId),
                Arg.Is <IReadOnlyCollection <RelationType> >(x => x.Count == 0),
                Arg.Is((string)null));
            expert.Received(1)
            .SetTypesForRelation(
                Arg.Is(relationTuple.ReverseRelationId),
                Arg.Is <IReadOnlyCollection <RelationType> >(x => x.Count == 0),
                Arg.Is((string)null));
        }
Beispiel #3
0
        /// <summary>
        /// Sets types for relations of expert.
        /// </summary>
        /// <param name="relationTuple">Plain object, that contains id of relation and flags of existence any relations.</param>
        /// <param name="expertName">Expert name.</param>
        /// <param name="sessionOfExperts">Session of experts.</param>
        public virtual void RelationTypes(
            [NotNull] RelationTupleDto relationTuple,
            [NotNull] string expertName,
            [NotNull] SessionOfExperts sessionOfExperts)
        {
            if (relationTuple == null)
            {
                throw new ArgumentNullException(nameof(relationTuple));
            }
            if (expertName == null)
            {
                throw new ArgumentNullException(nameof(expertName));
            }
            if (sessionOfExperts == null)
            {
                throw new ArgumentNullException(nameof(sessionOfExperts));
            }

            var expert = GetExpertByNameAndSession(expertName, sessionOfExperts, ExpertFetch.Relations);

            IfExpertDoesNotExistThrow(expert, expertName, sessionOfExperts);

            var straightRelationTypes = new List <RelationType>();
            var reverseRelationTypes  = new List <RelationType>();

            if (relationTuple.DoesRelationExist)
            {
                var generalType  = _relationTypeRepository.GetGeneralType();
                var taxonomyType = _relationTypeRepository.GetTaxonomyType();
                var meronomyType = _relationTypeRepository.GetMeronomyType();

                straightRelationTypes.Add(generalType);
                reverseRelationTypes.Add(generalType);

                if (relationTuple.IsStraightTaxonym)
                {
                    straightRelationTypes.Add(taxonomyType);
                }
                if (relationTuple.IsStraightMeronym)
                {
                    straightRelationTypes.Add(meronomyType);
                }
                if (relationTuple.IsReverseTaxonym)
                {
                    reverseRelationTypes.Add(taxonomyType);
                }
                if (relationTuple.IsReverseMeronym)
                {
                    reverseRelationTypes.Add(meronomyType);
                }
            }

            // ReSharper disable once PossibleNullReferenceException
            expert.SetTypesForRelation(relationTuple.StraightRelationId, straightRelationTypes, null);
            expert.SetTypesForRelation(relationTuple.ReverseRelationId, reverseRelationTypes, null);
            _expertRepository.AddOrUpdate(expert);
        }
        public void Relation_SessionExistAndIsInAssociationPhase_CallExpertServiceRelation()
        {
            var serviceUnderTest = CreateServiceUnderTest();
            var session          = SetFakeSession(SessionPhase.SelectingAndSpecifyingRelations);
            var expertName       = "expertTest";
            var relation         = new RelationTupleDto();

            serviceUnderTest.Relations(relation, expertName);

            _fakeExpertService.Received(1).RelationTypes(Arg.Is(relation), Arg.Is(expertName), Arg.Is(session));
        }
        /// <summary>
        /// Sets types for generated relations of the expert.
        /// </summary>
        /// <param name="relationTupleDto">Pair of relations of expert for setting.</param>
        /// <param name="expertName">Expert name.</param>
        public void Relations([NotNull] RelationTupleDto relationTupleDto, [NotNull] string expertName)
        {
            if (relationTupleDto == null)
            {
                throw new ArgumentNullException(nameof(relationTupleDto));
            }
            if (expertName == null)
            {
                throw new ArgumentNullException(nameof(expertName));
            }

            IfCurrentSessionIsNotInPhaseThrow(SessionPhase.SelectingAndSpecifyingRelations);

            // ReSharper disable once AssignNullToNotNullAttribute
            _expertService.RelationTypes(relationTupleDto, expertName, CurrentSession);
        }