2009-12-10 01:32:26 +00:00
|
|
|
|
using System.Collections.Generic;
|
2009-11-10 06:15:21 +00:00
|
|
|
|
using System.Linq;
|
|
|
|
|
using Autofac;
|
|
|
|
|
using NUnit.Framework;
|
2009-12-10 01:32:26 +00:00
|
|
|
|
using Orchard.Extensions;
|
2009-11-10 06:15:21 +00:00
|
|
|
|
using Yaml.Grammar;
|
|
|
|
|
|
2009-12-10 01:32:26 +00:00
|
|
|
|
namespace Orchard.Tests.Extensions {
|
2009-11-10 06:15:21 +00:00
|
|
|
|
[TestFixture]
|
2009-12-10 01:32:26 +00:00
|
|
|
|
public class ExtensionManagerTests {
|
2009-11-10 06:15:21 +00:00
|
|
|
|
private IContainer _container;
|
2009-12-10 01:32:26 +00:00
|
|
|
|
private IExtensionManager _manager;
|
2009-11-10 06:15:21 +00:00
|
|
|
|
private StubFolders _folders;
|
|
|
|
|
|
|
|
|
|
[SetUp]
|
|
|
|
|
public void Init() {
|
|
|
|
|
var builder = new ContainerBuilder();
|
|
|
|
|
_folders = new StubFolders();
|
2010-04-02 15:17:13 -07:00
|
|
|
|
//builder.RegisterModule(new ImplicitCollectionSupportModule());
|
|
|
|
|
builder.RegisterInstance(_folders).As<IExtensionFolders>();
|
|
|
|
|
builder.RegisterType<ExtensionManager>().As<IExtensionManager>();
|
2009-11-10 06:15:21 +00:00
|
|
|
|
_container = builder.Build();
|
2009-12-10 01:32:26 +00:00
|
|
|
|
_manager = _container.Resolve<IExtensionManager>();
|
2009-11-10 06:15:21 +00:00
|
|
|
|
}
|
|
|
|
|
|
2009-12-10 01:32:26 +00:00
|
|
|
|
public class StubFolders : IExtensionFolders {
|
2009-11-10 06:15:21 +00:00
|
|
|
|
public StubFolders() {
|
|
|
|
|
Manifests = new Dictionary<string, string>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public IDictionary<string, string> Manifests { get; set; }
|
|
|
|
|
|
|
|
|
|
public IEnumerable<string> ListNames() {
|
|
|
|
|
return Manifests.Keys;
|
|
|
|
|
}
|
|
|
|
|
|
2009-11-18 05:36:09 +00:00
|
|
|
|
public ParseResult ParseManifest(string name) {
|
2009-11-10 06:15:21 +00:00
|
|
|
|
var parser = new YamlParser();
|
|
|
|
|
bool success;
|
|
|
|
|
var stream = parser.ParseYamlStream(new TextInput(Manifests[name]), out success);
|
2009-11-18 05:36:09 +00:00
|
|
|
|
if (success) {
|
|
|
|
|
return new ParseResult {
|
|
|
|
|
Location = "~/InMemory",
|
|
|
|
|
Name = name,
|
|
|
|
|
YamlDocument = stream.Documents.Single()
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
return null;
|
2009-11-10 06:15:21 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2009-11-18 05:36:09 +00:00
|
|
|
|
|
2009-11-10 06:15:21 +00:00
|
|
|
|
[Test]
|
2009-12-10 01:32:26 +00:00
|
|
|
|
public void AvailableExtensionsShouldFollowCatalogLocations() {
|
2009-11-10 06:15:21 +00:00
|
|
|
|
_folders.Manifests.Add("foo", "name: Foo");
|
|
|
|
|
_folders.Manifests.Add("bar", "name: Bar");
|
|
|
|
|
_folders.Manifests.Add("frap", "name: Frap");
|
|
|
|
|
_folders.Manifests.Add("quad", "name: Quad");
|
|
|
|
|
|
2009-12-10 01:32:26 +00:00
|
|
|
|
var available = _manager.AvailableExtensions();
|
2009-11-10 06:15:21 +00:00
|
|
|
|
|
|
|
|
|
Assert.That(available.Count(), Is.EqualTo(4));
|
|
|
|
|
Assert.That(available, Has.Some.Property("Name").EqualTo("foo"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
2010-04-06 15:46:12 -07:00
|
|
|
|
public void ExtensionDescriptorsShouldHaveNameAndVersion() {
|
2009-11-10 06:15:21 +00:00
|
|
|
|
|
|
|
|
|
_folders.Manifests.Add("Sample", @"
|
2009-12-10 01:32:26 +00:00
|
|
|
|
name: Sample Extension
|
2009-11-10 06:15:21 +00:00
|
|
|
|
version: 2.x
|
|
|
|
|
");
|
|
|
|
|
|
2009-12-10 01:32:26 +00:00
|
|
|
|
var descriptor = _manager.AvailableExtensions().Single();
|
2009-11-10 06:15:21 +00:00
|
|
|
|
Assert.That(descriptor.Name, Is.EqualTo("Sample"));
|
2009-12-10 01:32:26 +00:00
|
|
|
|
Assert.That(descriptor.DisplayName, Is.EqualTo("Sample Extension"));
|
2009-11-10 06:15:21 +00:00
|
|
|
|
Assert.That(descriptor.Version, Is.EqualTo("2.x"));
|
|
|
|
|
}
|
2009-11-10 07:39:09 +00:00
|
|
|
|
|
2010-04-06 15:46:12 -07:00
|
|
|
|
[Test]
|
|
|
|
|
public void ExtensionDescriptorsShouldBeParsedForMinimalModuleTxt() {
|
|
|
|
|
|
|
|
|
|
_folders.Manifests.Add("SuperWiki", @"
|
|
|
|
|
name: SuperWiki
|
|
|
|
|
version: 1.0.3
|
|
|
|
|
orchardversion: 1
|
|
|
|
|
features:
|
|
|
|
|
SuperWiki:
|
|
|
|
|
Description: My super wiki module for Orchard.
|
|
|
|
|
");
|
|
|
|
|
|
|
|
|
|
var descriptor = _manager.AvailableExtensions().Single();
|
|
|
|
|
Assert.That(descriptor.Name, Is.EqualTo("SuperWiki"));
|
|
|
|
|
Assert.That(descriptor.Version, Is.EqualTo("1.0.3"));
|
|
|
|
|
Assert.That(descriptor.OrchardVersion, Is.EqualTo("1"));
|
|
|
|
|
Assert.That(descriptor.Features.Count(), Is.EqualTo(1));
|
|
|
|
|
Assert.That(descriptor.Features.First().Name, Is.EqualTo("SuperWiki"));
|
|
|
|
|
Assert.That(descriptor.Features.First().ExtensionName, Is.EqualTo("SuperWiki"));
|
|
|
|
|
Assert.That(descriptor.Features.First().Description, Is.EqualTo("My super wiki module for Orchard."));
|
|
|
|
|
}
|
|
|
|
|
|
2010-04-06 16:40:57 -07:00
|
|
|
|
[Test]
|
|
|
|
|
public void ExtensionDescriptorsShouldBeParsedForCompleteModuleTxt() {
|
|
|
|
|
|
|
|
|
|
_folders.Manifests.Add("AnotherWiki", @"
|
|
|
|
|
name: AnotherWiki
|
|
|
|
|
author: Coder Notaprogrammer
|
|
|
|
|
website: http://anotherwiki.codeplex.com
|
|
|
|
|
version: 1.2.3
|
|
|
|
|
orchardversion: 1
|
|
|
|
|
features:
|
|
|
|
|
AnotherWiki:
|
|
|
|
|
Description: My super wiki module for Orchard.
|
|
|
|
|
Dependencies: Versioning, Search
|
|
|
|
|
Category: Content types
|
|
|
|
|
AnotherWiki Editor:
|
|
|
|
|
Description: A rich editor for wiki contents.
|
|
|
|
|
Dependencies: TinyMCE, AnotherWiki
|
|
|
|
|
Category: Input methods
|
|
|
|
|
AnotherWiki DistributionList:
|
|
|
|
|
Description: Sends e-mail alerts when wiki contents gets published.
|
|
|
|
|
Dependencies: AnotherWiki, Email Subscriptions
|
|
|
|
|
Category: Email
|
|
|
|
|
AnotherWiki Captcha:
|
|
|
|
|
Description: Kills spam. Or makes it zombie-like.
|
|
|
|
|
Dependencies: AnotherWiki, reCaptcha
|
|
|
|
|
Category: Spam
|
|
|
|
|
");
|
|
|
|
|
|
|
|
|
|
var descriptor = _manager.AvailableExtensions().Single();
|
|
|
|
|
Assert.That(descriptor.Name, Is.EqualTo("AnotherWiki"));
|
|
|
|
|
Assert.That(descriptor.Author, Is.EqualTo("Coder Notaprogrammer"));
|
|
|
|
|
Assert.That(descriptor.WebSite, Is.EqualTo("http://anotherwiki.codeplex.com"));
|
|
|
|
|
Assert.That(descriptor.Version, Is.EqualTo("1.2.3"));
|
|
|
|
|
Assert.That(descriptor.OrchardVersion, Is.EqualTo("1"));
|
|
|
|
|
Assert.That(descriptor.Features.Count(), Is.EqualTo(4));
|
|
|
|
|
foreach (var featureDescriptor in descriptor.Features) {
|
|
|
|
|
switch (featureDescriptor.Name) {
|
|
|
|
|
case "AnotherWiki":
|
|
|
|
|
Assert.That(featureDescriptor.ExtensionName, Is.EqualTo("AnotherWiki"));
|
|
|
|
|
Assert.That(featureDescriptor.Description, Is.EqualTo("My super wiki module for Orchard."));
|
|
|
|
|
Assert.That(featureDescriptor.Category, Is.EqualTo("Content types"));
|
|
|
|
|
Assert.That(featureDescriptor.Dependencies.Count(), Is.EqualTo(2));
|
|
|
|
|
Assert.That(featureDescriptor.Dependencies.Contains("Versioning"));
|
|
|
|
|
Assert.That(featureDescriptor.Dependencies.Contains("Search"));
|
|
|
|
|
break;
|
|
|
|
|
case "AnotherWiki Editor":
|
|
|
|
|
Assert.That(featureDescriptor.ExtensionName, Is.EqualTo("AnotherWiki"));
|
|
|
|
|
Assert.That(featureDescriptor.Description, Is.EqualTo("A rich editor for wiki contents."));
|
|
|
|
|
Assert.That(featureDescriptor.Category, Is.EqualTo("Input methods"));
|
|
|
|
|
Assert.That(featureDescriptor.Dependencies.Count(), Is.EqualTo(2));
|
|
|
|
|
Assert.That(featureDescriptor.Dependencies.Contains("TinyMCE"));
|
|
|
|
|
Assert.That(featureDescriptor.Dependencies.Contains("AnotherWiki"));
|
|
|
|
|
break;
|
|
|
|
|
case "AnotherWiki DistributionList":
|
|
|
|
|
Assert.That(featureDescriptor.ExtensionName, Is.EqualTo("AnotherWiki"));
|
|
|
|
|
Assert.That(featureDescriptor.Description, Is.EqualTo("Sends e-mail alerts when wiki contents gets published."));
|
|
|
|
|
Assert.That(featureDescriptor.Category, Is.EqualTo("Email"));
|
|
|
|
|
Assert.That(featureDescriptor.Dependencies.Count(), Is.EqualTo(2));
|
|
|
|
|
Assert.That(featureDescriptor.Dependencies.Contains("AnotherWiki"));
|
|
|
|
|
Assert.That(featureDescriptor.Dependencies.Contains("Email Subscriptions"));
|
|
|
|
|
break;
|
|
|
|
|
case "AnotherWiki Captcha":
|
|
|
|
|
Assert.That(featureDescriptor.ExtensionName, Is.EqualTo("AnotherWiki"));
|
|
|
|
|
Assert.That(featureDescriptor.Description, Is.EqualTo("Kills spam. Or makes it zombie-like."));
|
|
|
|
|
Assert.That(featureDescriptor.Category, Is.EqualTo("Spam"));
|
|
|
|
|
Assert.That(featureDescriptor.Dependencies.Count(), Is.EqualTo(2));
|
|
|
|
|
Assert.That(featureDescriptor.Dependencies.Contains("AnotherWiki"));
|
|
|
|
|
Assert.That(featureDescriptor.Dependencies.Contains("reCaptcha"));
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
Assert.Fail("Features not parsed correctly");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2009-11-10 06:15:21 +00:00
|
|
|
|
}
|
|
|
|
|
}
|