x-lab-lbq-technical-test/backend/LeedsBeerQuest.API/LeedsBeerQuest.API.Tests/Data/Services/VenueServiceTests.cs

80 lines
2.3 KiB
C#

using System;
using System.Linq;
using System.Threading.Tasks;
using LeedsBeerQuest.API.Data.Contexts;
using LeedsBeerQuest.API.Data.Models;
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 = await seedVenueTestData();
var result = await _venueService.GetAllVenues();
var resultArray = result.ToArray();
Assert.AreEqual(venueTestData.Length, 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());
}
[Test]
public async Task GetVenue_ReturnsVenue_WhenRequestedVenueExists()
{
var venueTestData = await seedVenueTestData();
var expectedVenueId = venueTestData[0].Id;
var expectedVenueName = venueTestData[0].Name;
var result = await _venueService.GetVenue(expectedVenueId);;
Assert.NotNull(result);
Assert.AreEqual(expectedVenueId, result.Id);
Assert.AreEqual(expectedVenueName, result.Name);
}
[Test]
public async Task GetVenue_ReturnsNull_WhenRequestedVenueDoesNotExist()
{
var result = await _venueService.GetVenue(1);
Assert.Null(result);
}
private async Task<Venue[]> seedVenueTestData()
{
var venueTestData = TestData.VenueTestData;
_context.Venues.AddRange(venueTestData);
await _context.SaveChangesAsync();
return venueTestData;
}
}