|
1 | 1 | using System;
|
| 2 | +using System.Collections.Generic; |
2 | 3 | using System.Linq;
|
3 | 4 | using System.Threading;
|
4 | 5 | using Moq;
|
|
10 | 11 | using Umbraco.Core.Models.Membership;
|
11 | 12 | using Umbraco.Core.Services;
|
12 | 13 | using Umbraco.Core.Services.Changes;
|
| 14 | +using Umbraco.Tests.TestHelpers.Entities; |
13 | 15 | using Umbraco.Tests.Testing;
|
14 | 16 | using Umbraco.Tests.Testing.Objects.Accessors;
|
15 | 17 | using Umbraco.Web;
|
@@ -168,17 +170,73 @@ public void CanHandleEvent()
|
168 | 170 | }
|
169 | 171 |
|
170 | 172 | [Test]
|
171 |
| - public void OnlyHandlesOnContentTypeEvent() |
| 173 | + public void GroupsContentTypeEvents() |
172 | 174 | {
|
173 |
| - var definitions = new IEventDefinition[] |
| 175 | + var num = 30; |
| 176 | + var contentTypes = Enumerable.Repeat(MockedContentTypes.CreateBasicContentType(), num); |
| 177 | + var mediaTypes = Enumerable.Repeat(MockedContentTypes.CreateImageMediaType(), num); |
| 178 | + var memberTypes = Enumerable.Repeat(MockedContentTypes.CreateSimpleMemberType(), num); |
| 179 | + var definitionsContent = contentTypes.SelectMany(x => new IEventDefinition[] |
174 | 180 | {
|
175 |
| - new EventDefinition<IContentTypeService, ContentTypeChange<IContentType>.EventArgs>(null, Current.Services.ContentTypeService, new ContentTypeChange<IContentType>.EventArgs(Enumerable.Empty<ContentTypeChange<IContentType>>()), "Changed"), |
176 |
| - new EventDefinition<IContentTypeService, SaveEventArgs<IContentType>>(null, Current.Services.ContentTypeService, new SaveEventArgs<IContentType>(Enumerable.Empty<IContentType>()), "Saved"), |
177 |
| - new EventDefinition<IContentTypeService, ContentTypeChange<IContentType>.EventArgs>(null, Current.Services.ContentTypeService, new ContentTypeChange<IContentType>.EventArgs(Enumerable.Empty<ContentTypeChange<IContentType>>()), "Changed"), |
178 |
| - new EventDefinition<IContentTypeService, SaveEventArgs<IContentType>>(null, Current.Services.ContentTypeService, new SaveEventArgs<IContentType>(Enumerable.Empty<IContentType>()), "Saved"), |
179 |
| - }; |
180 |
| - var result = DistributedCacheBinder.GetReducedEventList(definitions); |
181 |
| - Assert.AreEqual(1, result.Count()); |
| 181 | + new EventDefinition<IContentTypeService, ContentTypeChange<IContentType>.EventArgs>(null, Current.Services.ContentTypeService, new ContentTypeChange<IContentType>.EventArgs(new ContentTypeChange<IContentType>(x, ContentTypeChangeTypes.Create)), "Changed"), |
| 182 | + new EventDefinition<IContentTypeService, SaveEventArgs<IContentType>>(null, Current.Services.ContentTypeService, new SaveEventArgs<IContentType>(x), "Saved"), |
| 183 | + }); |
| 184 | + |
| 185 | + var definitionsMedia = mediaTypes.SelectMany(x => new IEventDefinition[] |
| 186 | + { |
| 187 | + new EventDefinition<IMediaTypeService, ContentTypeChange<IMediaType>.EventArgs>(null, Current.Services.MediaTypeService, new ContentTypeChange<IMediaType>.EventArgs(new ContentTypeChange<IMediaType>(x, ContentTypeChangeTypes.Create)), "Changed"), |
| 188 | + new EventDefinition<IMediaTypeService, SaveEventArgs<IMediaType>>(null, Current.Services.MediaTypeService, new SaveEventArgs<IMediaType>(x), "Saved"), |
| 189 | + }); |
| 190 | + var definitionsMember = memberTypes.SelectMany(x => new IEventDefinition[] |
| 191 | + { |
| 192 | + new EventDefinition<IMemberTypeService, ContentTypeChange<IMemberType>.EventArgs>(null, Current.Services.MemberTypeService, new ContentTypeChange<IMemberType>.EventArgs(new ContentTypeChange<IMemberType>(x, ContentTypeChangeTypes.Create)), "Changed"), |
| 193 | + new EventDefinition<IMemberTypeService, SaveEventArgs<IMemberType>>(null, Current.Services.MemberTypeService, new SaveEventArgs<IMemberType>(x), "Saved"), |
| 194 | + }); |
| 195 | + |
| 196 | + var definitions = new List<IEventDefinition>(); |
| 197 | + definitions.AddRange(definitionsContent); |
| 198 | + definitions.AddRange(definitionsMedia); |
| 199 | + definitions.AddRange(definitionsMember); |
| 200 | + |
| 201 | + var result = DistributedCacheBinder.GetGroupedEventList(definitions); |
| 202 | + |
| 203 | + Assert.Multiple(() => |
| 204 | + { |
| 205 | + Assert.AreEqual(num * 6, definitions.Count(), "Precondition is we have many definitions"); |
| 206 | + Assert.AreEqual(6, result.Count(), "Unexpected number of reduced definitions"); |
| 207 | + foreach (var eventDefinition in result) |
| 208 | + { |
| 209 | + if (eventDefinition.Args is SaveEventArgs<IContentType> saveContentEventArgs) |
| 210 | + { |
| 211 | + Assert.AreEqual(num, saveContentEventArgs.SavedEntities.Count()); |
| 212 | + } |
| 213 | + |
| 214 | + if (eventDefinition.Args is ContentTypeChange<IContentType>.EventArgs changeContentEventArgs) |
| 215 | + { |
| 216 | + Assert.AreEqual(num, changeContentEventArgs.Changes.Count()); |
| 217 | + } |
| 218 | + |
| 219 | + if (eventDefinition.Args is SaveEventArgs<IMediaType> saveMediaEventArgs) |
| 220 | + { |
| 221 | + Assert.AreEqual(num, saveMediaEventArgs.SavedEntities.Count()); |
| 222 | + } |
| 223 | + |
| 224 | + if (eventDefinition.Args is ContentTypeChange<IMediaType>.EventArgs changeMediaEventArgs) |
| 225 | + { |
| 226 | + Assert.AreEqual(num, changeMediaEventArgs.Changes.Count()); |
| 227 | + } |
| 228 | + |
| 229 | + if (eventDefinition.Args is SaveEventArgs<IMemberType> saveMemberEventArgs) |
| 230 | + { |
| 231 | + Assert.AreEqual(num, saveMemberEventArgs.SavedEntities.Count()); |
| 232 | + } |
| 233 | + |
| 234 | + if (eventDefinition.Args is ContentTypeChange<IMemberType>.EventArgs changeMemberEventArgs) |
| 235 | + { |
| 236 | + Assert.AreEqual(num, changeMemberEventArgs.Changes.Count()); |
| 237 | + } |
| 238 | + } |
| 239 | + }); |
182 | 240 | }
|
183 | 241 | }
|
184 | 242 | }
|
0 commit comments