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() .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 seedVenueTestData() { var venueTestData = TestData.VenueTestData; _context.Venues.AddRange(venueTestData); await _context.SaveChangesAsync(); return venueTestData; } }