Skip to content

Commit 85ed604

Browse files
authored
Merge pull request #22 from Geta/feature/enumerable-extensions
Add content ref enumerable extensions from categories package
2 parents cfbbe31 + b55b699 commit 85ed604

File tree

3 files changed

+287
-0
lines changed

3 files changed

+287
-0
lines changed

README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,17 @@ If you need to check if the CategoryList has that category you can use the Conta
138138

139139
bool hasBikes = CurrentPage.Category.Contains("bikes");
140140

141+
### Enumerable extensions
142+
143+
You can easily check if content references are part of a list using `MemberOf`, `MemberOfAny` or `MemberOfAll`, for example to check if a page has any of the supplied categories:
144+
145+
```
146+
IEnumerable<ContentReference> categories = ...;
147+
var pagesWithCat = _contentLoader
148+
.GetChildren<ICategorizableContent>(contentLink, loaderOptions)
149+
.Where(x => x.Categories.MemberOfAny(categories));
150+
```
151+
141152
### External/friendly URL
142153

143154
This can be useful when used together with sharing widgets.
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
using EPiServer.Core;
4+
5+
namespace Geta.Optimizely.Extensions
6+
{
7+
public static class EnumerableExtensions
8+
{
9+
public static bool MemberOf(this IEnumerable<ContentReference> contentLinks, ContentReference contentReference)
10+
{
11+
if (contentLinks == null)
12+
{
13+
return false;
14+
}
15+
16+
return contentLinks.Any(x => x.CompareToIgnoreWorkID(contentReference));
17+
}
18+
19+
public static bool MemberOfAny(this IEnumerable<ContentReference> contentLinks, IEnumerable<ContentReference> otherContentLinks)
20+
{
21+
if (otherContentLinks == null || !otherContentLinks.Any())
22+
{
23+
return true;
24+
}
25+
26+
if (contentLinks == null)
27+
{
28+
return false;
29+
}
30+
31+
return otherContentLinks.Any(x => contentLinks.Any(y => y.CompareToIgnoreWorkID(x)));
32+
}
33+
34+
public static bool MemberOfAll(this IEnumerable<ContentReference> contentLinks, IEnumerable<ContentReference> otherContentLinks)
35+
{
36+
if (otherContentLinks == null || !otherContentLinks.Any())
37+
{
38+
return true;
39+
}
40+
41+
if (contentLinks == null)
42+
{
43+
return false;
44+
}
45+
46+
return otherContentLinks.All(x => contentLinks.Any(y => y.CompareToIgnoreWorkID(x)));
47+
}
48+
}
49+
}
Lines changed: 227 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,227 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using EPiServer.Core;
5+
using Xunit;
6+
7+
namespace Geta.Optimizely.Extensions.Tests.Extensions
8+
{
9+
public class EnumerableExtensionsTests
10+
{
11+
[Fact]
12+
public void MemberOf_SourceListIsNull_ThenReturnFalse()
13+
{
14+
IEnumerable<ContentReference> sourceList = null;
15+
16+
var result = sourceList.MemberOf(new ContentReference(1));
17+
18+
Assert.False(result);
19+
}
20+
21+
[Fact]
22+
public void MemberOf_SourceListDoesNotContainRef_ThenReturnFalse()
23+
{
24+
IEnumerable<ContentReference> sourceList = new List<ContentReference>() {
25+
new ContentReference(1),
26+
new ContentReference(2)
27+
};
28+
29+
var result = sourceList.MemberOf(new ContentReference(3));
30+
31+
Assert.False(result);
32+
}
33+
34+
[Fact]
35+
public void MemberOf_SourceListContainsRef_ThenReturnTrue()
36+
{
37+
IEnumerable<ContentReference> sourceList = new List<ContentReference>() {
38+
new ContentReference(1),
39+
new ContentReference(2)
40+
};
41+
42+
var result = sourceList.MemberOf(new ContentReference(2));
43+
44+
Assert.True(result);
45+
}
46+
47+
[Fact]
48+
public void MemberOf_SourceListContainsRefWithDifferentWorkingVersion_ThenReturnTrue()
49+
{
50+
IEnumerable<ContentReference> sourceList = new List<ContentReference>() {
51+
new ContentReference(1),
52+
new ContentReference(2, 3)
53+
};
54+
55+
var result = sourceList.MemberOf(new ContentReference(2, 2));
56+
57+
Assert.True(result);
58+
}
59+
60+
[Fact]
61+
public void MemberOfAny_TargetListIsNull_ThenReturnTrue()
62+
{
63+
IEnumerable<ContentReference> sourceList = new List<ContentReference>() {
64+
new ContentReference(1),
65+
new ContentReference(2)
66+
};
67+
IEnumerable<ContentReference> targetList = null;
68+
69+
var result = sourceList.MemberOfAny(targetList);
70+
71+
Assert.True(result);
72+
}
73+
74+
[Fact]
75+
public void MemberOfAny_TargetListIsEmpty_ThenReturnTrue()
76+
{
77+
IEnumerable<ContentReference> sourceList = new List<ContentReference>() {
78+
new ContentReference(1),
79+
new ContentReference(2)
80+
};
81+
IEnumerable<ContentReference> targetList = new List<ContentReference>() {};
82+
83+
var result = sourceList.MemberOfAny(targetList);
84+
85+
Assert.True(result);
86+
}
87+
88+
[Fact]
89+
public void MemberOfAny_SourceListIsNull_ThenReturnFalse()
90+
{
91+
IEnumerable<ContentReference> sourceList = null;
92+
IEnumerable<ContentReference> targetList = new List<ContentReference>() { new ContentReference(2) };
93+
94+
var result = sourceList.MemberOfAny(targetList);
95+
96+
Assert.False(result);
97+
}
98+
99+
[Fact]
100+
public void MemberOfAny_SourceListContainsRefWithDifferentWorkingVersion_ThenReturnTrue()
101+
{
102+
IEnumerable<ContentReference> sourceList = new List<ContentReference>() {
103+
new ContentReference(1),
104+
new ContentReference(2, 3)
105+
};
106+
IEnumerable<ContentReference> targetList = new List<ContentReference>() { new ContentReference(2) };
107+
108+
var result = sourceList.MemberOfAny(targetList);
109+
110+
Assert.True(result);
111+
}
112+
113+
[Fact]
114+
public void MemberOfAny_SourceListContainsAnyMatches_ThenReturnTrue()
115+
{
116+
IEnumerable<ContentReference> sourceList = new List<ContentReference>() {
117+
new ContentReference(1),
118+
new ContentReference(2)
119+
};
120+
IEnumerable<ContentReference> targetList = new List<ContentReference>() {
121+
new ContentReference(2),
122+
new ContentReference(3)
123+
};
124+
125+
var result = sourceList.MemberOfAny(targetList);
126+
127+
Assert.True(result);
128+
}
129+
130+
[Fact]
131+
public void MemberOfAny_SourceListDoesNotContainAnyMatches_ThenReturnFalse()
132+
{
133+
IEnumerable<ContentReference> sourceList = new List<ContentReference>() {
134+
new ContentReference(1),
135+
new ContentReference(2)
136+
};
137+
IEnumerable<ContentReference> targetList = new List<ContentReference>() {
138+
new ContentReference(3),
139+
new ContentReference(4)
140+
};
141+
142+
var result = sourceList.MemberOfAny(targetList);
143+
144+
Assert.False(result);
145+
}
146+
147+
[Fact]
148+
public void MemberOfAll_TargetListIsNull_ThenReturnTrue()
149+
{
150+
IEnumerable<ContentReference> sourceList = new List<ContentReference>() {
151+
new ContentReference(1),
152+
new ContentReference(2)
153+
};
154+
IEnumerable<ContentReference> targetList = null;
155+
156+
var result = sourceList.MemberOfAll(targetList);
157+
158+
Assert.True(result);
159+
}
160+
161+
[Fact]
162+
public void MemberOfAll_TargetListIsEmpty_ThenReturnTrue()
163+
{
164+
IEnumerable<ContentReference> sourceList = new List<ContentReference>() {
165+
new ContentReference(1),
166+
new ContentReference(2)
167+
};
168+
IEnumerable<ContentReference> targetList = new List<ContentReference>() { };
169+
170+
var result = sourceList.MemberOfAll(targetList);
171+
172+
Assert.True(result);
173+
}
174+
175+
[Fact]
176+
public void MemberOfAll_SourceListIsNull_ThenReturnFalse()
177+
{
178+
IEnumerable<ContentReference> sourceList = null;
179+
IEnumerable<ContentReference> targetList = new List<ContentReference>() { new ContentReference(2) };
180+
181+
var result = sourceList.MemberOfAll(targetList);
182+
183+
Assert.False(result);
184+
}
185+
186+
[Fact]
187+
public void MemberOfAll_SourceListContainsRefWithDifferentWorkingVersion_ThenReturnTrue()
188+
{
189+
IEnumerable<ContentReference> sourceList = new List<ContentReference>() {
190+
new ContentReference(1),
191+
new ContentReference(2, 3)
192+
};
193+
IEnumerable<ContentReference> targetList = new List<ContentReference>() { new ContentReference(2) };
194+
195+
var result = sourceList.MemberOfAll(targetList);
196+
197+
Assert.True(result);
198+
}
199+
200+
[Theory]
201+
[InlineData(new[] { 1, 2 }, new[] { 3 })]
202+
[InlineData(new[] { 1, 2 }, new[] { 1, 2, 3 })]
203+
public void xMemberOfAll_SourceListDoesNotContainAllTargets_ThenReturnFalse(int[] source, int[] target)
204+
{
205+
var sourceList = source.Select(x => new ContentReference(x));
206+
var targetList = target.Select(x => new ContentReference(x));
207+
208+
var result = sourceList.MemberOfAll(targetList);
209+
210+
Assert.False(result);
211+
}
212+
213+
[Theory]
214+
[InlineData(new[] { 1 }, new[] { 1 })]
215+
[InlineData(new[] { 1, 2 }, new[] { 1, 2 })]
216+
[InlineData(new[] { 1, 2 }, new[] { 1 })]
217+
public void xMemberOfAll_SourceListIsNull_ThenReturnTrue(int[] source, int[] target)
218+
{
219+
var sourceList = source.Select(x => new ContentReference(x));
220+
var targetList = target.Select(x => new ContentReference(x));
221+
222+
var result = sourceList.MemberOfAll(targetList);
223+
224+
Assert.True(result);
225+
}
226+
}
227+
}

0 commit comments

Comments
 (0)