yavsc/src/test/Mandatory/BatchTests.cs

207 lines
7.3 KiB
C#
Raw Normal View History

using System;
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Builder.Internal;
using Microsoft.AspNet.Razor;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Localization;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.PlatformAbstractions;
using Xunit;
using Yavsc;
using Yavsc.Models;
using Yavsc.Services;
using System.Runtime.Versioning;
using Microsoft.AspNet.Mvc.Razor;
using System.Diagnostics;
using Microsoft.Dnx.Compilation.CSharp;
using Microsoft.Extensions.OptionsModel;
using Yavsc.Helpers;
using Microsoft.Data.Entity;
using Xunit.Abstractions;
using System.IO;
2018-07-25 02:12:13 +02:00
using System.Linq;
2018-09-07 16:19:30 +02:00
using Yavsc.Server.Models.IT.SourceCode;
2018-07-20 02:27:53 +02:00
namespace test
{
[Collection("Yavsc mandatory success story")]
2018-08-01 06:12:42 +02:00
[Trait("regres", "no")]
public class BatchTests: BaseTestContext, IClassFixture<ServerSideFixture>, IDisposable
{
2020-09-09 16:44:17 +01:00
readonly ApplicationDbContext _dbContext;
2019-05-24 20:14:38 +01:00
ServerSideFixture _fixture;
2019-01-05 13:28:17 +00:00
public BatchTests(ITestOutputHelper output, ServerSideFixture fixture) : base (output, fixture)
{
2019-01-05 13:28:17 +00:00
_dbContext = fixture.DbContext;
2019-05-24 20:14:38 +01:00
_fixture = fixture;
if (!_fixture.DbCreated)
_fixture.CreateTestDb();
2018-08-01 06:12:42 +02:00
}
2019-01-05 13:28:17 +00:00
[Fact]
2018-07-25 02:12:13 +02:00
public void GitClone()
{
2019-05-08 01:35:10 +01:00
var firstProject = _dbContext.Project.Include(p=>p.Repository).FirstOrDefault();
2018-07-25 02:12:13 +02:00
Assert.NotNull (firstProject);
2019-01-05 13:28:17 +00:00
var di = new DirectoryInfo(_serverFixture.SiteSetup.GitRepository);
if (!di.Exists) di.Create();
2018-07-25 02:12:13 +02:00
2019-05-24 20:14:38 +01:00
2018-09-04 16:40:02 +02:00
var clone = new GitClone(_serverFixture.SiteSetup.GitRepository);
2018-07-25 02:12:13 +02:00
clone.Launch(firstProject);
2019-05-24 20:14:38 +01:00
gitRepo = di.FullName;
}
2019-05-24 20:14:38 +01:00
string gitRepo=null;
[Fact]
void AnsiToHtml()
{
var procStart = new ProcessStartInfo("ls", "-l --color=always");
procStart.UseShellExecute = false;
procStart.RedirectStandardInput = false;
procStart.RedirectStandardOutput = true;
var proc = Process.Start(procStart);
var encoded = AnsiToHtmlEncoder.GetStream(proc.StandardOutput);
using (var reader = new StreamReader(encoded))
{
var txt = reader.ReadToEnd();
2018-07-25 02:12:13 +02:00
_output.WriteLine(txt);
}
}
[Fact]
public void MvcRazorHostAndParser()
{
string cache = System.IO.Directory.GetCurrentDirectory();
MvcRazorHost host = new MvcRazorHost(cache);
var parser = host.CreateMarkupParser();
}
[Fact]
void HaveHost()
{
beforeCompileContext = CreateYavscCompilationContext();
2019-05-24 20:14:38 +01:00
}
[Fact]
public void AConfigurationRoot()
{
var builder = new ConfigurationBuilder();
2018-07-25 02:12:13 +02:00
builder.AddJsonFile( "appsettings.json", false);
builder.AddJsonFile( "appsettings.Development.json", true);
configurationRoot = builder.Build();
}
internal static BeforeCompileContext CreateYavscCompilationContext()
{
var projectContext = new ProjectContext();
projectContext.Name = "Yavsc";
2019-01-05 16:04:56 +00:00
projectContext.ProjectDirectory = "../Yavsc";
projectContext.ProjectFilePath = "../Yavsc/project.json";
projectContext.TargetFramework = new FrameworkName("DNX", new Version(4, 5, 1));
2019-01-05 16:04:56 +00:00
projectContext.Configuration = Environment.GetEnvironmentVariable("ASPNET_ENV");
return new BeforeCompileContext(
null, projectContext, () => null, () => null, () => null);
}
internal static IConfigurationRoot CreateConfiguration(string prjDir)
{
var builder = new ConfigurationBuilder();
2019-01-05 16:04:56 +00:00
builder.AddJsonFile(Path.Combine(prjDir, "appsettings.json"), false);
builder.AddJsonFile(Path.Combine(prjDir, "appsettings.Development.json"), true);
return builder.Build();
}
internal static void ConfigureServices
(ServiceCollection serviceCollection,
string prjDir,
out IConfigurationRoot configuration,
out IServiceProvider provider)
{
configuration = CreateConfiguration(prjDir);
serviceCollection.AddOptions();
var siteSettingsconf = configuration.GetSection("Site");
serviceCollection.Configure<SiteSettings>(siteSettingsconf);
var smtpSettingsconf = configuration.GetSection("Smtp");
serviceCollection.Configure<SmtpSettings>(smtpSettingsconf);
var locOptions = configuration.GetSection("Localization");
serviceCollection.Configure<LocalizationOptions>(locOptions);
serviceCollection.AddSingleton(typeof(ILoggerFactory), typeof(LoggerFactory));
serviceCollection.AddTransient(typeof(IEmailSender), typeof(MailSender));
serviceCollection.AddTransient(typeof(RazorEngineHost));
serviceCollection.AddTransient((s) => new RazorTemplateEngine(s.GetService<RazorEngineHost>()));
serviceCollection.AddLogging();
serviceCollection.AddMvcCore();
serviceCollection.AddLocalization(options =>
{
options.ResourcesPath = "Resources";
});
2019-01-05 13:28:17 +00:00
var connectionString = configuration["ConnectionStrings:Default"];
AppDomain.CurrentDomain.SetData("YAVSC_DB_CONNECTION", connectionString);
serviceCollection.AddEntityFramework()
.AddNpgsql()
.AddDbContext<ApplicationDbContext>(
db => db.UseNpgsql(connectionString)
);
provider = serviceCollection.BuildServiceProvider();
}
[Fact]
public void ARequestAppDelegate()
{
var services = new ServiceCollection();
services.AddTransient<IRuntimeEnvironment>(
svs => PlatformServices.Default.Runtime
);
HaveHost();
var prjDir = this.beforeCompileContext.ProjectContext.ProjectDirectory;
ConfigureServices(services, prjDir, out configurationRoot, out serviceProvider);
IApplicationBuilder app = new ApplicationBuilder(serviceProvider);
var rtd = app.Build();
}
[Fact]
public void InitApplicationBuilder()
{
var services = new ServiceCollection();
services.AddTransient<IRuntimeEnvironment>(
svs => PlatformServices.Default.Runtime
);
2019-01-05 16:04:56 +00:00
beforeCompileContext = CreateYavscCompilationContext();
var prjDir = beforeCompileContext.ProjectContext.ProjectDirectory;
2019-01-05 16:04:56 +00:00
ConfigureServices(services, prjDir, out configuration, out provider);
IApplicationBuilder app = new ApplicationBuilder(provider);
app.UseMvc();
var rtd = app.Build();
IOptions<LocalizationOptions> localOptions = ActivatorUtilities.GetServiceOrCreateInstance<IOptions<LocalizationOptions>>(provider); ;
}
2019-05-24 20:14:38 +01:00
public void Dispose()
{
if (gitRepo!=null)
{
Directory.Delete(Path.Combine(gitRepo,"yavsc"), true);
}
if (_fixture.DbCreated)
_fixture.DropTestDb();
}
}
}