Add venue service and tests for it
This commit is contained in:
parent
036c18a075
commit
a84e0ac03c
@ -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>()
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
@ -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());
|
||||||
|
}
|
||||||
|
}
|
@ -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>
|
||||||
|
@ -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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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();
|
||||||
}
|
// }
|
||||||
}
|
}
|
@ -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();
|
||||||
}
|
}
|
@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
@ -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();
|
||||||
|
|
||||||
|
@ -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>();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user