Add venue service and tests for it

This commit is contained in:
Stedoss 2022-10-30 02:57:37 +00:00
parent 036c18a075
commit a84e0ac03c
9 changed files with 152 additions and 21 deletions

View File

@ -0,0 +1,37 @@
using System;
using System.Collections.Generic;
using LeedsBeerQuest.API.Data.Models;
namespace LeedsBeerQuest.API.Tests.Data.Services;
public static class TestData
{
public static IEnumerable<Venue> VenueTestData = new[]
{
new Venue
{
Id = 1,
Name = "Venue 1",
CategoryId = 1,
Category = new Category
{
Id = 1,
Name = "Category 1"
},
Url = "Venue URL",
DateAttended = new DateTime(),
Excerpt = "Venue Excerpt",
Thumbnail = "Venue Thumbnail",
Latitude = 1.23456m,
Longitude = -4.27384m,
Address = "Venue 1 Address",
Phone = "07777777777",
Twitter = "Venue Twitter",
StarsBeer = 1.5m,
StarsAtmosphere = 3,
StarsAmenities = 4.5m,
StarsValue = 4,
Tags = new List<Tag>()
}
};
}

View File

@ -0,0 +1,50 @@
using System;
using System.Linq;
using System.Threading.Tasks;
using LeedsBeerQuest.API.Data.Contexts;
using LeedsBeerQuest.API.Data.Services;
using Microsoft.EntityFrameworkCore;
using NUnit.Framework;
namespace LeedsBeerQuest.API.Tests.Data.Services;
[TestFixture]
public class VenueServiceTests
{
private LeedsBeerQuestDbContext _context;
private VenueService _venueService;
[SetUp]
public void Setup()
{
var builder = new DbContextOptionsBuilder<LeedsBeerQuestDbContext>()
.UseInMemoryDatabase($"VenueServiceTests.{Guid.NewGuid().ToString()}");
_context = new LeedsBeerQuestDbContext(builder.Options);
_venueService = new VenueService(_context);
}
[Test]
public async Task GetAllVenues_ReturnsAllVenues_WhenAllVenuesArePresentInDatabase()
{
var venueTestData = TestData.VenueTestData.ToArray();
_context.Venues.AddRange(venueTestData);
await _context.SaveChangesAsync();
var result = await _venueService.GetAllVenues();
var resultArray = result.ToArray();
Assert.AreEqual(1, resultArray.Length);
Assert.AreEqual(venueTestData[0].Id, resultArray[0].Id);
Assert.AreEqual(venueTestData[0].Name, resultArray[0].Name);
}
[Test]
public async Task GetAllVenues_ReturnsNoVenues_WhenNoVenuesArePresentInDatabase()
{
var result = await _venueService.GetAllVenues();
Assert.AreEqual(0, result.Count());
}
}

View File

@ -8,10 +8,16 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="6.0.10" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
<PackageReference Include="NSubstitute" Version="4.4.0" />
<PackageReference Include="NUnit" Version="3.13.2" /> <PackageReference Include="NUnit" Version="3.13.2" />
<PackageReference Include="NUnit3TestAdapter" Version="4.0.0" /> <PackageReference Include="NUnit3TestAdapter" Version="4.0.0" />
<PackageReference Include="coverlet.collector" Version="3.1.0" /> <PackageReference Include="coverlet.collector" Version="3.1.0" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LeedsBeerQuest.API\LeedsBeerQuest.API.csproj" />
</ItemGroup>
</Project> </Project>

View File

@ -1,5 +1,6 @@
using LeedsBeerQuest.API.Data.Contexts; using LeedsBeerQuest.API.Data.Contexts;
using LeedsBeerQuest.API.Data.Models; using LeedsBeerQuest.API.Data.Models;
using LeedsBeerQuest.API.Data.Services.Interfaces;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
@ -7,20 +8,19 @@ namespace LeedsBeerQuest.API.Controllers;
[ApiController] [ApiController]
[Route("[controller]")] [Route("[controller]")]
public class VenueController public class VenueController : ControllerBase
{ {
private readonly LeedsBeerQuestDbContext _lbqContext; private readonly IVenueService _venueService;
public VenueController(LeedsBeerQuestDbContext lbqContext) public VenueController(IVenueService venueService)
{ {
_lbqContext = lbqContext; _venueService = venueService;
} }
[HttpGet] [HttpGet]
public async Task<IEnumerable<Venue>> Get() public async Task<IActionResult> Get()
{ {
return await _lbqContext.Venues var venues = await _venueService.GetAllVenues();
.Include(v => v.Category) return Ok(venues);
.ToListAsync();
} }
} }

View File

@ -6,7 +6,7 @@ namespace LeedsBeerQuest.API.Data.Contexts;
public class LeedsBeerQuestDbContext : DbContext public class LeedsBeerQuestDbContext : DbContext
{ {
public LeedsBeerQuestDbContext() public LeedsBeerQuestDbContext(DbContextOptions<LeedsBeerQuestDbContext> options) : base(options)
{ {
} }
@ -16,12 +16,12 @@ public class LeedsBeerQuestDbContext : DbContext
public DbSet<Category> Categories { get; set; } public DbSet<Category> Categories { get; set; }
public DbSet<Tag> Tags { get; set; } public DbSet<Tag> Tags { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder options) // protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlite("Data Source=lbq.db"); // => options.UseSqlite("Data Source=lbq.db");
protected override void OnModelCreating(ModelBuilder modelBuilder) // protected override void OnModelCreating(ModelBuilder modelBuilder)
{ // {
var seeder = new LeedsBeerQuestSeeder(modelBuilder, ""); // var seeder = new LeedsBeerQuestSeeder(modelBuilder, "");
seeder.Seed(); // seeder.Seed();
} // }
} }

View File

@ -1,6 +1,8 @@
using LeedsBeerQuest.API.Data.Models;
namespace LeedsBeerQuest.API.Data.Services.Interfaces; namespace LeedsBeerQuest.API.Data.Services.Interfaces;
public interface IVenueService public interface IVenueService
{ {
public Task<IEnumerable<Venue>> GetAllVenues();
} }

View File

@ -1,6 +1,24 @@
using LeedsBeerQuest.API.Data.Contexts;
using LeedsBeerQuest.API.Data.Models;
using LeedsBeerQuest.API.Data.Services.Interfaces;
using Microsoft.EntityFrameworkCore;
namespace LeedsBeerQuest.API.Data.Services; namespace LeedsBeerQuest.API.Data.Services;
public class VenueService public class VenueService : IVenueService
{ {
private readonly LeedsBeerQuestDbContext _context;
public VenueService(LeedsBeerQuestDbContext context)
{
_context = context;
}
public async Task<IEnumerable<Venue>> GetAllVenues()
{
return await _context.Venues
.Include(v => v.Category)
.Include(v => v.Tags)
.ToListAsync();
}
} }

View File

@ -1,4 +1,4 @@
using LeedsBeerQuest.API.Data.Contexts; using LeedsBeerQuest.API;
var builder = WebApplication.CreateBuilder(args); var builder = WebApplication.CreateBuilder(args);
@ -10,7 +10,7 @@ builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(); builder.Services.AddSwaggerGen();
// App services // App services
builder.Services.AddScoped<LeedsBeerQuestDbContext>(); builder.Services.AddServiceDependencies();
var app = builder.Build(); var app = builder.Build();

View File

@ -0,0 +1,18 @@
using LeedsBeerQuest.API.Data.Contexts;
using LeedsBeerQuest.API.Data.Services;
using LeedsBeerQuest.API.Data.Services.Interfaces;
using Microsoft.EntityFrameworkCore;
namespace LeedsBeerQuest.API;
public static class ServiceDependencies
{
public static void AddServiceDependencies(this IServiceCollection serviceCollection)
{
var dbOptions = new DbContextOptionsBuilder<LeedsBeerQuestDbContext>();
dbOptions.UseSqlite("Data Source=lbq.db");
serviceCollection.AddScoped(_ => new LeedsBeerQuestDbContext(dbOptions.Options));
serviceCollection.AddScoped<IVenueService, VenueService>();
}
}