Browse Source

Compatible with PhysicalFileProvider in the TextTemplating.

Resolve #6523
Related https://github.com/dotnet/extensions/issues/757
pull/6532/head
maliming 6 years ago
parent
commit
d495686fd2
  1. 11
      framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory.cs
  2. 12
      framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/VirtualFiles/VirtualFolderLocalizedTemplateContentReader.cs
  3. 5
      framework/test/Volo.Abp.TextTemplating.Tests/Volo.Abp.TextTemplating.Tests.csproj
  4. 59
      framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory_Tests.cs
  5. 72
      framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/VirtualFiles/VirtualFileTemplateContributor_Tests.cs

11
framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory.cs

@ -1,4 +1,5 @@
using System.Collections.Concurrent; using System;
using System.Collections.Concurrent;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
@ -52,7 +53,13 @@ namespace Volo.Abp.TextTemplating.VirtualFiles
var fileInfo = VirtualFileProvider.GetFileInfo(virtualPath); var fileInfo = VirtualFileProvider.GetFileInfo(virtualPath);
if (!fileInfo.Exists) if (!fileInfo.Exists)
{ {
throw new AbpException("Could not find a file/folder at the location: " + virtualPath); var directoryContents = VirtualFileProvider.GetDirectoryContents(virtualPath);
if (!directoryContents.Exists)
{
throw new AbpException("Could not find a file/folder at the location: " + virtualPath);
}
fileInfo = new VirtualDirectoryFileInfo(virtualPath, virtualPath, DateTimeOffset.UtcNow);
} }
if (fileInfo.IsDirectory) if (fileInfo.IsDirectory)

12
framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/VirtualFiles/VirtualFolderLocalizedTemplateContentReader.cs

@ -11,18 +11,18 @@ namespace Volo.Abp.TextTemplating.VirtualFiles
private Dictionary<string, string> _dictionary; private Dictionary<string, string> _dictionary;
public async Task ReadContentsAsync( public async Task ReadContentsAsync(
IVirtualFileProvider virtualFileProvider, IVirtualFileProvider virtualFileProvider,
string virtualPath) string virtualPath)
{ {
_dictionary = new Dictionary<string, string>(); _dictionary = new Dictionary<string, string>();
var directoryInfo = virtualFileProvider.GetFileInfo(virtualPath); var directoryContents = virtualFileProvider.GetDirectoryContents(virtualPath);
if (!directoryInfo.IsDirectory) if (!directoryContents.Exists)
{ {
throw new AbpException("Given virtual path is not a folder: " + virtualPath); throw new AbpException("Could not find a folder at the location: " + virtualPath);
} }
foreach (var file in virtualFileProvider.GetDirectoryContents(virtualPath)) foreach (var file in directoryContents)
{ {
if (file.IsDirectory) if (file.IsDirectory)
{ {
@ -43,4 +43,4 @@ namespace Volo.Abp.TextTemplating.VirtualFiles
return _dictionary.GetOrDefault(cultureName); return _dictionary.GetOrDefault(cultureName);
} }
} }
} }

5
framework/test/Volo.Abp.TextTemplating.Tests/Volo.Abp.TextTemplating.Tests.csproj

@ -10,8 +10,9 @@
<ItemGroup> <ItemGroup>
<EmbeddedResource Include="Volo\Abp\TextTemplating\Localization\**\*.json" /> <EmbeddedResource Include="Volo\Abp\TextTemplating\Localization\**\*.json" />
<None Remove="Volo\Abp\TextTemplating\Localization\**\*.json" /> <None Remove="Volo\Abp\TextTemplating\Localization\**\*.json" />
<EmbeddedResource Include="Volo\Abp\TextTemplating\SampleTemplates\**\*.tpl" /> <EmbeddedResource Include="Volo\Abp\TextTemplating\SampleTemplates\**\*.tpl">
<None Remove="Volo\Abp\TextTemplating\SampleTemplates\**\*.tpl" /> <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

59
framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory_Tests.cs

@ -0,0 +1,59 @@
using System.IO;
using System.Threading.Tasks;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Primitives;
using Shouldly;
using Volo.Abp.VirtualFileSystem;
using Xunit;
namespace Volo.Abp.TextTemplating.VirtualFiles
{
public class LocalizedTemplateContentReaderFactory_Tests: AbpTextTemplatingTestBase
{
private readonly ITemplateDefinitionManager _templateDefinitionManager;
public LocalizedTemplateContentReaderFactory_Tests()
{
_templateDefinitionManager = GetRequiredService<ITemplateDefinitionManager>();
}
[Fact]
public async Task Create_Should_Work_With_PhysicalFileProvider()
{
var localizedTemplateContentReaderFactory = new LocalizedTemplateContentReaderFactory(
new PhysicalFileVirtualFileProvider(
new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(),
@"Volo\Abp\TextTemplating\"))));
var reader = await localizedTemplateContentReaderFactory.CreateAsync(_templateDefinitionManager.Get(TestTemplates.WelcomeEmail));
reader.GetContentOrNull("en").ShouldBe("Welcome {{model.name}} to the abp.io!");
reader.GetContentOrNull("tr").ShouldBe("Merhaba {{model.name}}, abp.io'ya hoşgeldiniz!");
}
class PhysicalFileVirtualFileProvider : IVirtualFileProvider
{
private readonly PhysicalFileProvider _physicalFileProvider;
public PhysicalFileVirtualFileProvider(PhysicalFileProvider physicalFileProvider)
{
_physicalFileProvider = physicalFileProvider;
}
public IFileInfo GetFileInfo(string subpath)
{
return _physicalFileProvider.GetFileInfo(subpath);
}
public IDirectoryContents GetDirectoryContents(string subpath)
{
return _physicalFileProvider.GetDirectoryContents(subpath);
}
public IChangeToken Watch(string filter)
{
return _physicalFileProvider.Watch(filter);
}
}
}
}

72
framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/VirtualFiles/VirtualFileTemplateContributor_Tests.cs

@ -4,46 +4,42 @@ using Xunit;
namespace Volo.Abp.TextTemplating.VirtualFiles namespace Volo.Abp.TextTemplating.VirtualFiles
{ {
//TODO: Make tests running again! public class VirtualFileTemplateContributor_Tests : AbpTextTemplatingTestBase
//public class VirtualFileTemplateContributor_Tests : AbpTextTemplatingTestBase {
//{ private readonly ITemplateDefinitionManager _templateDefinitionManager;
// [Fact] private readonly VirtualFileTemplateContentContributor _virtualFileTemplateContentContributor;
// public async Task Should_Get_Localized_Content_By_Culture()
// {
// var contributor = new VirtualFileTemplateContentContributor(
// "/SampleTemplates/WelcomeEmail"
// );
// contributor.Initialize( public VirtualFileTemplateContributor_Tests()
// new TemplateContentContributorInitializationContext( {
// new TemplateDefinition("Test"), _templateDefinitionManager = GetRequiredService<ITemplateDefinitionManager>();
// ServiceProvider _virtualFileTemplateContentContributor = GetRequiredService<VirtualFileTemplateContentContributor>();
// ) }
// );
// (await contributor [Fact]
// .GetOrNullAsync("en")).ShouldBe("Welcome {{model.name}} to the abp.io!"); public async Task Should_Get_Localized_Content_By_Culture()
{
(await _virtualFileTemplateContentContributor.GetOrNullAsync(
new TemplateContentContributorContext(_templateDefinitionManager.Get(TestTemplates.WelcomeEmail),
ServiceProvider,
"en")))
.ShouldBe("Welcome {{model.name}} to the abp.io!");
// (await contributor (await _virtualFileTemplateContentContributor.GetOrNullAsync(
// .GetOrNullAsync("tr")).ShouldBe("Merhaba {{model.name}}, abp.io'ya hoşgeldiniz!"); new TemplateContentContributorContext(_templateDefinitionManager.Get(TestTemplates.WelcomeEmail),
// } ServiceProvider,
"tr")))
.ShouldBe("Merhaba {{model.name}}, abp.io'ya hoşgeldiniz!");
}
// [Fact] [Fact]
// public async Task Should_Get_Non_Localized_Template_Content() public async Task Should_Get_Non_Localized_Template_Content()
// { {
// var contributor = new VirtualFileTemplateContentContributor( (await _virtualFileTemplateContentContributor.GetOrNullAsync(
// "/SampleTemplates/ForgotPasswordEmail.tpl" new TemplateContentContributorContext(
// ); _templateDefinitionManager.Get(TestTemplates.ForgotPasswordEmail),
ServiceProvider,
// contributor.Initialize( null)))
// new TemplateContentContributorInitializationContext( .ShouldBe("{{L \"HelloText\" model.name}}, {{L \"HowAreYou\" }}. Please click to the following link to get an email to reset your password!");
// new TemplateDefinition("Test"), }
// ServiceProvider }
// )
// );
// (await contributor
// .GetOrNullAsync()).ShouldBe("{{l \"HelloText\"}}. Please click to the following link to get an email to reset your password!");
// }
//}
} }

Loading…
Cancel
Save