public void ListContainsThreeFragments() { MethodToTest(() => service.Split(A <TextFragmentResource> .Ignored, A <MembershipRuleTermDefinition> .Ignored)); var fragment = new TextFragmentResource { Text = "some rule or other for a term and another one", IsPlainText = true }; var term = new MembershipRuleTermDefinition { Term = "A Term", Id = 687 }; var result = service.Split(fragment, term); Assert.AreEqual(3, result.Count); Assert.AreEqual("some rule or other for ", result.First().Text); Assert.IsTrue(result[0].IsPlainText); Assert.AreEqual(term.Term, result[1].Text); Assert.AreEqual(term.Id, result[1].TermId); Assert.IsFalse(result[1].IsPlainText); Assert.AreEqual(" and another one", result[2].Text); Assert.IsTrue(result[2].IsPlainText); }
public virtual CreateTermDefinitionResponse CreateTermDefinition(IPrincipal principal, CreateTermDefinitionRequest request) { var user = _dependencies.UserService.GetGuaranteedAuthenticatedUser(principal); var organisation = _dependencies.OrganisationService.GetOrganisation(request.OrganisationId); _dependencies.OrganisationService.GuaranteeUserHasPermission(user, organisation, ShurahOrganisationPermission.EditMembershipRules); if (organisation.Terms.Any(t => t.Term == request.Term)) { return(new CreateTermDefinitionResponse { HasError = true, Error = "This term already exists" }); } var defn = new MembershipRuleTermDefinition(); defn.Term = request.Term; defn.Definition = request.Definition; defn.Organisation = organisation; defn.OrganisationId = request.OrganisationId; _dependencies.StorageService.SetOf <MembershipRuleTermDefinition>().Add(defn); _dependencies.StorageService.SaveChanges(); return(new CreateTermDefinitionResponse { Id = defn.Id, Term = defn.Term }); }
public void BuildsAFragmentListBySplittingWithTheTerm() { MethodToTest(() => service.ApplyTerm(A <List <TextFragmentResource> > .Ignored, A <MembershipRuleTermDefinition> .Ignored)); var fragments = new List <TextFragmentResource>(); var term = new MembershipRuleTermDefinition(); var exampleFragment = new TextFragmentResource(); var exampleReturnedFragmentList = new List <TextFragmentResource>(); A.CallTo(() => service.Split(exampleFragment, term)).Returns(exampleReturnedFragmentList); var fragmentsAfterSplit = new List <TextFragmentResource>(); A.CallTo(() => dependencies.LinqService.SelectMany(fragments, A <Func <TextFragmentResource, IEnumerable <TextFragmentResource> > > .That.Matches(x => x.Invoke(exampleFragment) == exampleReturnedFragmentList ))).Returns(fragmentsAfterSplit); var fragmentsAfterSplitList = new List <TextFragmentResource>(); A.CallTo(() => dependencies.LinqService.EnumerableToList(fragmentsAfterSplit)) .Returns(fragmentsAfterSplitList); var result = service.ApplyTerm(fragments, term); Assert.AreSame(fragmentsAfterSplitList, result); }
public virtual TermResource BuildTermResource(MembershipRuleTermDefinition termDefinition) { return(new TermResource { Term = termDefinition.Term, TermId = termDefinition.Id, }); }
public void ListContainsTheOriginalFragmentOnly() { MethodToTest(() => service.Split(A <TextFragmentResource> .Ignored, A <MembershipRuleTermDefinition> .Ignored)); var fragment = new TextFragmentResource { IsPlainText = false }; var term = new MembershipRuleTermDefinition(); var result = service.Split(fragment, term); Assert.AreEqual(1, result.Count); Assert.AreSame(fragment, result.First()); }
public virtual List <TextFragmentResource> Split(TextFragmentResource fragment, MembershipRuleTermDefinition term) { if (!fragment.IsPlainText) { return(new List <TextFragmentResource> { fragment }); } var indexOfMatch = fragment.Text.ToLower().IndexOf(term.Term.ToLower(), StringComparison.Ordinal); if (indexOfMatch == -1) { return(new List <TextFragmentResource> { fragment }); } var results = new List <TextFragmentResource>(); var textBefore = fragment.Text.Substring(0, indexOfMatch); if (textBefore != string.Empty) { results.Add(new TextFragmentResource { IsPlainText = true, Text = textBefore }); } results.Add(new TextFragmentResource { IsPlainText = false, IsTerm = true, Text = term.Term, TermSlug = _dependencies.UrlSlugService.GetSlug(term.Term), TermId = term.Id }); var textAfter = fragment.Text.Substring(indexOfMatch + term.Term.Length); if (textAfter != string.Empty) { results.Add(new TextFragmentResource { IsPlainText = true, Text = textAfter }); } return(results); }
public virtual List <TextFragmentResource> ApplyTerm(List <TextFragmentResource> fragments, MembershipRuleTermDefinition term) { return(_dependencies.LinqService.EnumerableToList( _dependencies.LinqService.SelectMany(fragments, f => Split(f, term)))); }