Move models into dedicated project

This commit is contained in:
Chris Cheetham 2020-06-10 09:12:18 -04:00
Родитель 16c9960783
Коммит ebd6f1b0ce
16 изменённых файлов: 55 добавлений и 28 удалений

Просмотреть файл

@ -7,6 +7,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Steeltoe.Initializr.WebApi"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Steeltoe.Initializr.WebApi.Test", "test\Steeltoe.Initializr.WebApi.Test\Steeltoe.Initializr.WebApi.Test.csproj", "{EA849C8F-7118-45DB-BBF2-D36CE1FD43B4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Steeltoe.Initializr.WebApi.Models", "src\Steeltoe.Initializr.WebApi.Models\Steeltoe.Initializr.WebApi.Models.csproj", "{ACE6FEE1-9CEA-4A95-9D76-C62A41947C8F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -44,5 +46,17 @@ Global
{EA849C8F-7118-45DB-BBF2-D36CE1FD43B4}.Release|x64.Build.0 = Release|Any CPU
{EA849C8F-7118-45DB-BBF2-D36CE1FD43B4}.Release|x86.ActiveCfg = Release|Any CPU
{EA849C8F-7118-45DB-BBF2-D36CE1FD43B4}.Release|x86.Build.0 = Release|Any CPU
{ACE6FEE1-9CEA-4A95-9D76-C62A41947C8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ACE6FEE1-9CEA-4A95-9D76-C62A41947C8F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ACE6FEE1-9CEA-4A95-9D76-C62A41947C8F}.Debug|x64.ActiveCfg = Debug|Any CPU
{ACE6FEE1-9CEA-4A95-9D76-C62A41947C8F}.Debug|x64.Build.0 = Debug|Any CPU
{ACE6FEE1-9CEA-4A95-9D76-C62A41947C8F}.Debug|x86.ActiveCfg = Debug|Any CPU
{ACE6FEE1-9CEA-4A95-9D76-C62A41947C8F}.Debug|x86.Build.0 = Debug|Any CPU
{ACE6FEE1-9CEA-4A95-9D76-C62A41947C8F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ACE6FEE1-9CEA-4A95-9D76-C62A41947C8F}.Release|Any CPU.Build.0 = Release|Any CPU
{ACE6FEE1-9CEA-4A95-9D76-C62A41947C8F}.Release|x64.ActiveCfg = Release|Any CPU
{ACE6FEE1-9CEA-4A95-9D76-C62A41947C8F}.Release|x64.Build.0 = Release|Any CPU
{ACE6FEE1-9CEA-4A95-9D76-C62A41947C8F}.Release|x86.ActiveCfg = Release|Any CPU
{ACE6FEE1-9CEA-4A95-9D76-C62A41947C8F}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

2
src/Steeltoe.Initializr.WebApi.Models/.gitignore поставляемый Normal file
Просмотреть файл

@ -0,0 +1,2 @@
/bin/
/obj/

Просмотреть файл

@ -1,9 +1,9 @@
namespace Steeltoe.Initializr.WebApi.Models
namespace Steeltoe.Initializr.WebApi.Models.Project
{
/// <summary>
/// A model ofi the configuration used to generate a project.
/// </summary>
public class ProjectConfiguration
public class Configuration
{
/// <summary>
/// Compares the specified object to this object.

Просмотреть файл

@ -0,0 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
</Project>

Просмотреть файл

@ -9,17 +9,17 @@ namespace Steeltoe.Initializr.WebApi.Controllers
/// </summary>
[ApiController]
[Route("api/[controller]")]
public class ConfigurationController : ControllerBase
public class MetadataController : ControllerBase
{
private readonly IConfigurationRepository _configurationRepository;
private readonly IMetadataRepository _metadataRepository;
/// <summary>
/// Create a new ConfigurationController.
/// </summary>
/// <param name="configurationRepository">configuration repository</param>
public ConfigurationController(IConfigurationRepository configurationRepository)
/// <param name="metadataRepository">configuration repository</param>
public MetadataController(IMetadataRepository metadataRepository)
{
_configurationRepository = configurationRepository;
_metadataRepository = metadataRepository;
}
/// <summary>
@ -29,7 +29,7 @@ namespace Steeltoe.Initializr.WebApi.Controllers
[HttpGet]
public async Task<IActionResult> Get()
{
var config = await _configurationRepository.GetConfiguration();
var config = await _metadataRepository.GetConfiguration();
return Ok(config);
}
}

Просмотреть файл

@ -1,7 +1,7 @@
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Steeltoe.Initializr.WebApi.Models;
using Steeltoe.Initializr.WebApi.Models.Project;
using Steeltoe.Initializr.WebApi.Services;
namespace Steeltoe.Initializr.WebApi.Controllers
@ -32,7 +32,7 @@ namespace Steeltoe.Initializr.WebApi.Controllers
[HttpGet]
public async Task<ActionResult> Get()
{
var config = new ProjectConfiguration();
var config = new Configuration();
var stream = await _projectGenerator.GenerateProject(config);
var buf = new MemoryStream();
await stream.CopyToAsync(buf);

Просмотреть файл

@ -1,7 +1,7 @@
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Steeltoe.Initializr.WebApi.Models;
using Steeltoe.Initializr.WebApi.Models.Project;
namespace Steeltoe.Initializr.WebApi.Services
{
@ -10,7 +10,7 @@ namespace Steeltoe.Initializr.WebApi.Services
/// </summary>
public class DummyProjectGenerator : IProjectGenerator
{
public Task<Stream> GenerateProject(ProjectConfiguration projectConfiguration)
public Task<Stream> GenerateProject(Configuration configuration)
{
var bytes = new UnicodeEncoding().GetBytes("DummyProject");
var stream = new MemoryStream(bytes.Length);

Просмотреть файл

@ -6,7 +6,7 @@ namespace Steeltoe.Initializr.WebApi.Services
/// <summary>
/// Contract for configuration repository implementations.
/// </summary>
public interface IConfigurationRepository
public interface IMetadataRepository
{
/// <summary>
/// Gets the project generation configuration.

Просмотреть файл

@ -1,6 +1,6 @@
using System.IO;
using System.Threading.Tasks;
using Steeltoe.Initializr.WebApi.Models;
using Steeltoe.Initializr.WebApi.Models.Project;
namespace Steeltoe.Initializr.WebApi.Services
{
@ -12,8 +12,8 @@ namespace Steeltoe.Initializr.WebApi.Services
/// <summary>
/// Generates a project as a byte stream.
/// </summary>
/// <param name="projectConfiguration">Project configuration</param>
/// <param name="configuration">Project configuration</param>
/// <returns>project bundle byte stream</returns>
public Task<Stream> GenerateProject(ProjectConfiguration projectConfiguration);
public Task<Stream> GenerateProject(Configuration configuration);
}
}

Просмотреть файл

@ -10,7 +10,7 @@ namespace Steeltoe.Initializr.WebApi.Services
/// <summary>
/// A configuration repository that loads configuration from a local JSON file.
/// </summary>
public class LocalConfigurationRepository : IConfigurationRepository
public class LocalMetadataRepository : IMetadataRepository
{
private const string ConfigurationFile = "initializr-configuration.json";
@ -28,9 +28,9 @@ namespace Steeltoe.Initializr.WebApi.Services
/// <summary>
/// Create a new LocalConfigurationRepository.
/// </summary>
public LocalConfigurationRepository(ILoggerFactory loggerFactory)
public LocalMetadataRepository(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger<LocalConfigurationRepository>();
_logger = loggerFactory.CreateLogger<LocalMetadataRepository>();
}
/// <summary>

Просмотреть файл

@ -19,7 +19,7 @@ namespace Steeltoe.Initializr.WebApi
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<IConfigurationRepository, LocalConfigurationRepository>();
services.AddScoped<IMetadataRepository, LocalMetadataRepository>();
services.AddScoped<IProjectGenerator, DummyProjectGenerator>();
services.AddControllers();
}

Просмотреть файл

@ -21,5 +21,9 @@
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Steeltoe.Initializr.WebApi.Models\Steeltoe.Initializr.WebApi.Models.csproj" />
</ItemGroup>
</Project>

Просмотреть файл

@ -11,13 +11,13 @@ using Xunit;
namespace Steeltoe.Initializr.WebApi.Test.Controllers
{
public class ConfigurationControllerTest
public class MetadataControllerTest
{
[Fact]
public async Task EndpointExists()
{
var client = new HttpClientBuilder().Build();
var response = await client.GetAsync("/api/configuration");
var response = await client.GetAsync("/api/metadata");
response.StatusCode.Should().Be(HttpStatusCode.OK);
}
@ -25,9 +25,9 @@ namespace Steeltoe.Initializr.WebApi.Test.Controllers
public async Task EndpointReturnsAConfiguration()
{
// Arrange
var mockRepo = new Mock<IConfigurationRepository>();
var mockRepo = new Mock<IMetadataRepository>();
mockRepo.Setup(repo => repo.GetConfiguration()).ReturnsAsync(new Configuration());
var controller = new ConfigurationController(mockRepo.Object);
var controller = new MetadataController(mockRepo.Object);
// Act
var result = await controller.Get();

Просмотреть файл

@ -5,7 +5,7 @@ using FluentAssertions;
using Microsoft.AspNetCore.Mvc;
using Moq;
using Steeltoe.Initializr.WebApi.Controllers;
using Steeltoe.Initializr.WebApi.Models;
using Steeltoe.Initializr.WebApi.Models.Project;
using Steeltoe.Initializr.WebApi.Services;
using Steeltoe.Initializr.WebApi.Test.Utils;
using Xunit;
@ -32,7 +32,7 @@ namespace Steeltoe.Initializr.WebApi.Test.Controllers
{
// Arrange
var mockGenerator = new Mock<IProjectGenerator>();
mockGenerator.Setup(g => g.GenerateProject(new ProjectConfiguration())).ReturnsAsync(new MemoryStream());
mockGenerator.Setup(g => g.GenerateProject(new Configuration())).ReturnsAsync(new MemoryStream());
var controller = new ProjectController(mockGenerator.Object);
// Act

Просмотреть файл

@ -6,12 +6,12 @@ using Xunit;
namespace Steeltoe.Initializr.WebApi.Test.Services
{
public class LocalConfigurationRepositoryTest
public class LocalMetadataRepositoryTest
{
[Fact]
public async Task ConfigurationShouldNotBeNull()
{
var configRepo = new LocalConfigurationRepository(new NullLoggerFactory());
var configRepo = new LocalMetadataRepository(new NullLoggerFactory());
var config = await configRepo.GetConfiguration();
config.Should().NotBeNull();
}