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>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="6.0.10" />
|
||||
<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="NUnit3TestAdapter" Version="4.0.0" />
|
||||
<PackageReference Include="coverlet.collector" Version="3.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\LeedsBeerQuest.API\LeedsBeerQuest.API.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
@ -1,5 +1,6 @@
|
||||
using LeedsBeerQuest.API.Data.Contexts;
|
||||
using LeedsBeerQuest.API.Data.Models;
|
||||
using LeedsBeerQuest.API.Data.Services.Interfaces;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
@ -7,20 +8,19 @@ namespace LeedsBeerQuest.API.Controllers;
|
||||
|
||||
[ApiController]
|
||||
[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]
|
||||
public async Task<IEnumerable<Venue>> Get()
|
||||
public async Task<IActionResult> Get()
|
||||
{
|
||||
return await _lbqContext.Venues
|
||||
.Include(v => v.Category)
|
||||
.ToListAsync();
|
||||
var venues = await _venueService.GetAllVenues();
|
||||
return Ok(venues);
|
||||
}
|
||||
}
|
@ -6,7 +6,7 @@ namespace LeedsBeerQuest.API.Data.Contexts;
|
||||
|
||||
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<Tag> Tags { get; set; }
|
||||
|
||||
protected override void OnConfiguring(DbContextOptionsBuilder options)
|
||||
=> options.UseSqlite("Data Source=lbq.db");
|
||||
// protected override void OnConfiguring(DbContextOptionsBuilder options)
|
||||
// => options.UseSqlite("Data Source=lbq.db");
|
||||
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
{
|
||||
var seeder = new LeedsBeerQuestSeeder(modelBuilder, "");
|
||||
seeder.Seed();
|
||||
}
|
||||
// protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
// {
|
||||
// var seeder = new LeedsBeerQuestSeeder(modelBuilder, "");
|
||||
// seeder.Seed();
|
||||
// }
|
||||
}
|
@ -1,6 +1,8 @@
|
||||
using LeedsBeerQuest.API.Data.Models;
|
||||
|
||||
namespace LeedsBeerQuest.API.Data.Services.Interfaces;
|
||||
|
||||
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;
|
||||
|
||||
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);
|
||||
|
||||
@ -10,7 +10,7 @@ builder.Services.AddEndpointsApiExplorer();
|
||||
builder.Services.AddSwaggerGen();
|
||||
|
||||
// App services
|
||||
builder.Services.AddScoped<LeedsBeerQuestDbContext>();
|
||||
builder.Services.AddServiceDependencies();
|
||||
|
||||
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