mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-14 10:54:50 +08:00
Groundwork for rss support by container id
--HG-- extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4045452
This commit is contained in:
189
src/Orchard.Core.Tests/Feeds/Controllers/FeedControllerTests.cs
Normal file
189
src/Orchard.Core.Tests/Feeds/Controllers/FeedControllerTests.cs
Normal file
@@ -0,0 +1,189 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Web.Mvc;
|
||||
using System.Xml.Linq;
|
||||
using Autofac.Builder;
|
||||
using Autofac.Modules;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using Orchard.ContentManagement;
|
||||
using Orchard.ContentManagement.Handlers;
|
||||
using Orchard.Core.Common.Models;
|
||||
using Orchard.Core.Common.Records;
|
||||
using Orchard.Core.Feeds;
|
||||
using Orchard.Core.Feeds.Controllers;
|
||||
using Orchard.Core.Feeds.Models;
|
||||
using Orchard.Core.Feeds.Rss;
|
||||
using Orchard.Core.Feeds.Services;
|
||||
using Orchard.Mvc.Results;
|
||||
using Orchard.Tests.Packages;
|
||||
using Orchard.Tests.Stubs;
|
||||
|
||||
namespace Orchard.Core.Tests.Feeds.Controllers {
|
||||
[TestFixture]
|
||||
public class FeedControllerTests {
|
||||
[Test]
|
||||
public void InvalidFormatShpuldReturnNotFoundResult() {
|
||||
var controller = new FeedController(
|
||||
Enumerable.Empty<IFeedQueryProvider>(),
|
||||
Enumerable.Empty<IFeedFormatterProvider>(),
|
||||
Enumerable.Empty<IFeedItemBuilder>()) {
|
||||
ValueProvider = Values.From(new { })
|
||||
};
|
||||
|
||||
var result = controller.Index("no-such-format");
|
||||
Assert.That(result, Is.Not.Null);
|
||||
Assert.That(result, Is.TypeOf<NotFoundResult>());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ControllerShouldReturnAnActionResult() {
|
||||
var formatProvider = new Mock<IFeedFormatterProvider>();
|
||||
var format = new Mock<IFeedFormatter>();
|
||||
formatProvider.Setup(x => x.Match(It.IsAny<FeedContext>()))
|
||||
.Returns(new FeedFormatterMatch { FeedFormatter = format.Object, Priority = 10 });
|
||||
|
||||
var queryProvider = new Mock<IFeedQueryProvider>();
|
||||
var query = new Mock<IFeedQuery>();
|
||||
queryProvider.Setup(x => x.Match(It.IsAny<FeedContext>()))
|
||||
.Returns(new FeedQueryMatch { FeedQuery = query.Object, Priority = 10 });
|
||||
|
||||
|
||||
format.Setup(x => x.Process(It.IsAny<FeedContext>(), It.IsAny<Action>())).Returns(new ContentResult());
|
||||
|
||||
var controller = new FeedController(
|
||||
new[] { queryProvider.Object },
|
||||
new[] { formatProvider.Object },
|
||||
Enumerable.Empty<IFeedItemBuilder>()) {
|
||||
ValueProvider = Values.From(new { })
|
||||
};
|
||||
|
||||
var result = controller.Index("test-format");
|
||||
Assert.That(result, Is.Not.Null);
|
||||
Assert.That(result, Is.InstanceOf<ActionResult>());
|
||||
|
||||
formatProvider.Verify();
|
||||
queryProvider.Verify();
|
||||
format.Verify();
|
||||
}
|
||||
|
||||
|
||||
class StubQuery : IFeedQueryProvider, IFeedQuery {
|
||||
private readonly IEnumerable<ContentItem> _items;
|
||||
|
||||
public StubQuery(IEnumerable<ContentItem> items) {
|
||||
_items = items;
|
||||
}
|
||||
|
||||
public FeedQueryMatch Match(FeedContext context) {
|
||||
return new FeedQueryMatch { FeedQuery = this, Priority = 10 };
|
||||
}
|
||||
|
||||
public void Execute(FeedContext context) {
|
||||
foreach (var item in _items) {
|
||||
context.FeedFormatter.AddItem(context, item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void RssFeedShouldBeStructuredAppropriately() {
|
||||
var query = new StubQuery(Enumerable.Empty<ContentItem>());
|
||||
|
||||
var builder = new ContainerBuilder();
|
||||
builder.RegisterModule(new ImplicitCollectionSupportModule());
|
||||
builder.Register<FeedController>();
|
||||
builder.Register<RssFeedFormatProvider>().As<IFeedFormatterProvider>();
|
||||
builder.Register(query).As<IFeedQueryProvider>();
|
||||
var container = builder.Build();
|
||||
|
||||
var controller = container.Resolve<FeedController>();
|
||||
controller.ValueProvider = Values.From(new { });
|
||||
|
||||
var result = controller.Index("rss");
|
||||
Assert.That(result, Is.Not.Null);
|
||||
Assert.That(result, Is.InstanceOf<RssResult>());
|
||||
|
||||
var doc = ((RssResult)result).Document;
|
||||
Assert.That(doc.Root.Name, Is.EqualTo(XName.Get("rss")));
|
||||
Assert.That(doc.Root.Elements().Single().Name, Is.EqualTo(XName.Get("channel")));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void OneItemPerContentItemShouldBeCreated() {
|
||||
var query = new StubQuery(new[] {
|
||||
new ContentItem(),
|
||||
new ContentItem(),
|
||||
});
|
||||
|
||||
var builder = new ContainerBuilder();
|
||||
builder.RegisterModule(new ImplicitCollectionSupportModule());
|
||||
builder.Register<FeedController>();
|
||||
builder.Register<RssFeedFormatProvider>().As<IFeedFormatterProvider>();
|
||||
builder.Register(query).As<IFeedQueryProvider>();
|
||||
var container = builder.Build();
|
||||
|
||||
var controller = container.Resolve<FeedController>();
|
||||
controller.ValueProvider = Values.From(new { });
|
||||
|
||||
var result = controller.Index("rss");
|
||||
Assert.That(result, Is.Not.Null);
|
||||
Assert.That(result, Is.InstanceOf<RssResult>());
|
||||
|
||||
var doc = ((RssResult)result).Document;
|
||||
var items = doc.Elements("rss").Elements("channel").Elements("item");
|
||||
Assert.That(items.Count(), Is.EqualTo(2));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CorePartValuesAreExtracted() {
|
||||
var clock = new StubClock();
|
||||
var hello = new ContentItemBuilder("hello")
|
||||
.Weld<CommonAspect>()
|
||||
.Weld<RoutableAspect>()
|
||||
.Weld<BodyAspect>()
|
||||
.Build();
|
||||
hello.As<CommonAspect>().Record = new CommonRecord();
|
||||
hello.As<RoutableAspect>().Record = new RoutableRecord();
|
||||
hello.As<BodyAspect>().Record = new BodyRecord();
|
||||
|
||||
hello.As<CommonAspect>().PublishedUtc = clock.UtcNow;
|
||||
hello.As<RoutableAspect>().Title = "alpha";
|
||||
hello.As<RoutableAspect>().Slug = "beta";
|
||||
hello.As<BodyAspect>().Text = "gamma";
|
||||
|
||||
var query = new StubQuery(new[] {
|
||||
hello,
|
||||
});
|
||||
|
||||
var mockContentManager = new Mock<IContentManager>();
|
||||
mockContentManager.Setup(x => x.GetItemMetadata(It.IsAny<IContent>()))
|
||||
.Returns(new ContentItemMetadata { DisplayText = "foo" });
|
||||
|
||||
var builder = new ContainerBuilder();
|
||||
builder.RegisterModule(new ImplicitCollectionSupportModule());
|
||||
builder.Register<FeedController>();
|
||||
builder.Register(mockContentManager.Object).As<IContentManager>();
|
||||
builder.Register<RssFeedFormatProvider>().As<IFeedFormatterProvider>();
|
||||
builder.Register<CorePartsFeedItemBuilder>().As<IFeedItemBuilder>();
|
||||
builder.Register(query).As<IFeedQueryProvider>();
|
||||
var container = builder.Build();
|
||||
|
||||
var controller = container.Resolve<FeedController>();
|
||||
controller.ValueProvider = Values.From(new { });
|
||||
|
||||
var result = controller.Index("rss");
|
||||
Assert.That(result, Is.Not.Null);
|
||||
Assert.That(result, Is.InstanceOf<RssResult>());
|
||||
|
||||
var doc = ((RssResult)result).Document;
|
||||
var item = doc.Elements("rss").Elements("channel").Elements("item").Single();
|
||||
Assert.That(item.Element("title").Value, Is.EqualTo("foo"));
|
||||
Assert.That(item.Element("description").Value, Is.EqualTo("gamma"));
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -60,6 +60,10 @@
|
||||
<HintPath>..\..\lib\sqlite\System.Data.SQLite.DLL</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\lib\aspnetmvc\System.Web.Mvc.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Xml.Linq">
|
||||
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
||||
</Reference>
|
||||
@@ -71,6 +75,7 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Common\Providers\CommonAspectProviderTests.cs" />
|
||||
<Compile Include="Feeds\Controllers\FeedControllerTests.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Scheduling\ScheduledTaskManagerTests.cs" />
|
||||
<Compile Include="Scheduling\ScheduledTaskExecutorTests.cs" />
|
||||
|
Reference in New Issue
Block a user