Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 59 additions & 2 deletions TickAPI/TickAPI.Tests/Events/Controllers/EventsControllerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public async Task CreateEvent_WhenDataIsValid_ShouldReturnSuccess()
uint? minimumAge = 18;
const string email = "123@mail.com";
const EventStatus eventStatus = EventStatus.TicketsAvailable;
Guid id = Guid.NewGuid();
Guid id = Guid.Parse("c5aa4979-af8c-4cf9-a827-b273317fbc70");
List<CreateEventCategoryDto> categories =
[
new CreateEventCategoryDto("concert"),
Expand Down Expand Up @@ -576,5 +576,62 @@ public async Task GetEventsPaginationDetails_WhenOperationFails_ShouldReturnErro
var objectResult = Assert.IsType<ObjectResult>(result.Result);
Assert.Equal(statusCode, objectResult.StatusCode);
Assert.Equal(errorMessage, objectResult.Value);
}
}

[Fact]
public async Task GetEventDetails_WhenAllOperationsSucceed_ShouldReturnOkWithEventDetails()
{
// Arrange
var id = Guid.Parse("c5aa4979-af8c-4cf9-a827-b273317fbc70");
var eventDetails = Utils.CreateSampleEventDetailsDto("Event");

var eventServiceMock = new Mock<IEventService>();
var claimsServiceMock = new Mock<IClaimsService>();
var organizerServiceMock = new Mock<IOrganizerService>();

eventServiceMock
.Setup(m => m.GetEventDetailsAsync(id))
.ReturnsAsync(Result<GetEventDetailsResponseDto>.Success(eventDetails));

var sut = new EventsController(eventServiceMock.Object, claimsServiceMock.Object, organizerServiceMock.Object);

// Act
var response = await sut.GetEventDetails(id);

// Assert
var result = Assert.IsType<ActionResult<GetEventDetailsResponseDto>>(response);
var okResult = Assert.IsType<OkObjectResult>(result.Result);
Assert.Equal(StatusCodes.Status200OK, okResult.StatusCode);

var returnedEventDetails = Assert.IsType<GetEventDetailsResponseDto>(okResult.Value);
Assert.Equal(eventDetails, returnedEventDetails);
}

[Fact]
public async Task GetEventDetails_WhenOperationFails_ShouldReturnErrorWithCorrectStatusCode()
{
// Arrange
var id = Guid.Parse("c5aa4979-af8c-4cf9-a827-b273317fbc70");
const string errorMessage = "Failed to retrieve event details";
const int statusCode = StatusCodes.Status500InternalServerError;

var eventServiceMock = new Mock<IEventService>();
var claimsServiceMock = new Mock<IClaimsService>();
var organizerServiceMock = new Mock<IOrganizerService>();

eventServiceMock
.Setup(m => m.GetEventDetailsAsync(id))
.ReturnsAsync(Result<GetEventDetailsResponseDto>.Failure(statusCode, errorMessage));

var sut = new EventsController(eventServiceMock.Object, claimsServiceMock.Object, organizerServiceMock.Object);

// Act
var response = await sut.GetEventDetails(id);

// Assert
var result = Assert.IsType<ActionResult<GetEventDetailsResponseDto>>(response);
var objectResult = Assert.IsType<ObjectResult>(result.Result);
Assert.Equal(statusCode, objectResult.StatusCode);
Assert.Equal(errorMessage, objectResult.Value);
}
}
119 changes: 104 additions & 15 deletions TickAPI/TickAPI.Tests/Events/Services/EventServiceTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
using TickAPI.Common.Time.Abstractions;
using TickAPI.Events.DTOs.Response;
using TickAPI.Events.Services;
using TickAPI.Tickets.Abstractions;
using TickAPI.TicketTypes.DTOs.Request;
using TickAPI.TicketTypes.Models;

Expand All @@ -24,7 +25,6 @@ namespace TickAPI.Tests.Events.Services;
public class EventServiceTests
{
[Fact]

public async Task CreateNewEventAsync_WhenEventDataIsValid_ShouldReturnNewEvent()
{
// Arrange
Expand Down Expand Up @@ -109,7 +109,9 @@ public async Task CreateNewEventAsync_WhenEventDataIsValid_ShouldReturnNewEvent(

var paginationServiceMock = new Mock<IPaginationService>();

var sut = new EventService(eventRepositoryMock.Object, organizerServiceMock.Object, addressServiceMock.Object, dateTimeServiceMock.Object, paginationServiceMock.Object, categoryServiceMock.Object);
var ticketServiceMock = new Mock<ITicketService>();

var sut = new EventService(eventRepositoryMock.Object, organizerServiceMock.Object, addressServiceMock.Object, dateTimeServiceMock.Object, paginationServiceMock.Object, categoryServiceMock.Object, ticketServiceMock.Object);
// Act
var result = await sut.CreateNewEventAsync(name, description, startDate, endDate, minimumAge, createAddress, categories, ticketTypes, eventStatus, organizerEmail);

Expand Down Expand Up @@ -176,12 +178,14 @@ public async Task CreateNewEventAsync_WhenEndDateIsBeforeStartDate_ShouldReturnB
var dateTimeServiceMock = new Mock<IDateTimeService>();

var categoryServiceMock = new Mock<ICategoryService>();

var paginationServiceMock = new Mock<IPaginationService>();

var ticketServiceMock = new Mock<ITicketService>();

// Act
var paginationServiceMock = new Mock<IPaginationService>();
var sut = new EventService(eventRepositoryMock.Object, organizerServiceMock.Object, addressServiceMock.Object, dateTimeServiceMock.Object, paginationServiceMock.Object, categoryServiceMock.Object, ticketServiceMock.Object);

var sut = new EventService(eventRepositoryMock.Object, organizerServiceMock.Object, addressServiceMock.Object, dateTimeServiceMock.Object, paginationServiceMock.Object, categoryServiceMock.Object);
// Act

var res = await sut.CreateNewEventAsync(name, description, startDate, endDate, minimumAge, createAddress, categories, ticketTypes, eventStatus, organizerEmail);

Expand Down Expand Up @@ -229,11 +233,14 @@ public async Task CreateNewEventAsync_WhenTicketTypeAvailabilityIsAfterEventsEnd

var categoryServiceMock = new Mock<ICategoryService>();

// Act

var paginationServiceMock = new Mock<IPaginationService>();

var sut = new EventService(eventRepositoryMock.Object, organizerServiceMock.Object, addressServiceMock.Object, dateTimeServiceMock.Object, paginationServiceMock.Object, categoryServiceMock.Object);
var ticketServiceMock = new Mock<ITicketService>();

var sut = new EventService(eventRepositoryMock.Object, organizerServiceMock.Object, addressServiceMock.Object, dateTimeServiceMock.Object, paginationServiceMock.Object, categoryServiceMock.Object, ticketServiceMock.Object);

// Act
var res = await sut.CreateNewEventAsync(name, description, startDate, endDate, minimumAge, createAddress, categories, ticketTypes, eventStatus, organizerEmail);

// Assert
Expand Down Expand Up @@ -280,11 +287,13 @@ public async Task CreateNewEventAsync_WhenStartDateIsBeforeNow_ShouldReturnBadRe

var categoryServiceMock = new Mock<ICategoryService>();

// Act
var paginationServiceMock = new Mock<IPaginationService>();

var sut = new EventService(eventRepositoryMock.Object, organizerServiceMock.Object, addressServiceMock.Object, dateTimeServiceMock.Object, paginationServiceMock.Object, categoryServiceMock.Object);
var ticketServiceMock = new Mock<ITicketService>();

var sut = new EventService(eventRepositoryMock.Object, organizerServiceMock.Object, addressServiceMock.Object, dateTimeServiceMock.Object, paginationServiceMock.Object, categoryServiceMock.Object, ticketServiceMock.Object);

// Act
var res = await sut.CreateNewEventAsync(name, description, startDate, endDate, minimumAge, createAddress, categories, ticketTypes, eventStatus, organizerEmail);

// Assert
Expand Down Expand Up @@ -317,6 +326,7 @@ public async Task GetOrganizerEvents_WhenPaginationSucceeds_ShouldReturnPaginate
var dateTimeServiceMock = new Mock<IDateTimeService>();
var paginationServiceMock = new Mock<IPaginationService>();
var categoryServiceMock = new Mock<ICategoryService>();
var ticketServiceMock = new Mock<ITicketService>();

var paginatedEvents = new PaginatedData<Event>(
organizer.Events.Take(pageSize).ToList(),
Expand Down Expand Up @@ -350,7 +360,7 @@ public async Task GetOrganizerEvents_WhenPaginationSucceeds_ShouldReturnPaginate
));

var sut = new EventService(eventRepositoryMock.Object, organizerServiceMock.Object, addressServiceMock.Object,
dateTimeServiceMock.Object, paginationServiceMock.Object, categoryServiceMock.Object);
dateTimeServiceMock.Object, paginationServiceMock.Object, categoryServiceMock.Object, ticketServiceMock.Object);

// Act
var result = await sut.GetOrganizerEventsAsync(organizer, page, pageSize);
Expand Down Expand Up @@ -391,6 +401,7 @@ public async Task GetOrganizerEvents_WhenPaginationFails_ShouldPropagateError()
var dateTimeServiceMock = new Mock<IDateTimeService>();
var paginationServiceMock = new Mock<IPaginationService>();
var categoryServiceMock = new Mock<ICategoryService>();
var ticketServiceMock = new Mock<ITicketService>();

var organizerEvents = organizer.Events.AsQueryable();
eventRepositoryMock.Setup(p => p.GetEventsByOranizer(organizer)).Returns(organizerEvents);
Expand All @@ -400,7 +411,7 @@ public async Task GetOrganizerEvents_WhenPaginationFails_ShouldPropagateError()
.ReturnsAsync(Result<PaginatedData<Event>>.Failure(StatusCodes.Status400BadRequest, "Invalid page number"));

var sut = new EventService(eventRepositoryMock.Object, organizerServiceMock.Object, addressServiceMock.Object,
dateTimeServiceMock.Object, paginationServiceMock.Object, categoryServiceMock.Object);
dateTimeServiceMock.Object, paginationServiceMock.Object, categoryServiceMock.Object, ticketServiceMock.Object);

// Act
var result = await sut.GetOrganizerEventsAsync(organizer, page, pageSize);
Expand Down Expand Up @@ -430,6 +441,7 @@ public async Task GetEventsAsync_WhenPaginationSucceeds_ShouldReturnPaginatedEve
var dateTimeServiceMock = new Mock<IDateTimeService>();
var paginationServiceMock = new Mock<IPaginationService>();
var categoryServiceMock = new Mock<ICategoryService>();
var ticketServiceMock = new Mock<ITicketService>();

var paginatedEvents = new PaginatedData<Event>(
events.Take(pageSize).ToList(),
Expand Down Expand Up @@ -463,7 +475,7 @@ public async Task GetEventsAsync_WhenPaginationSucceeds_ShouldReturnPaginatedEve
));

var sut = new EventService(eventRepositoryMock.Object, organizerServiceMock.Object, addressServiceMock.Object,
dateTimeServiceMock.Object, paginationServiceMock.Object, categoryServiceMock.Object);
dateTimeServiceMock.Object, paginationServiceMock.Object, categoryServiceMock.Object, ticketServiceMock.Object);

// Act
var result = await sut.GetEventsAsync(page, pageSize);
Expand Down Expand Up @@ -499,6 +511,7 @@ public async Task GetEventsAsync_WhenPaginationFails_ShouldPropagateError()
var dateTimeServiceMock = new Mock<IDateTimeService>();
var paginationServiceMock = new Mock<IPaginationService>();
var categoryServiceMock = new Mock<ICategoryService>();
var ticketServiceMock = new Mock<ITicketService>();

var eventsQueryable = events.AsQueryable();
eventRepositoryMock.Setup(p => p.GetEvents()).Returns(eventsQueryable);
Expand All @@ -508,7 +521,7 @@ public async Task GetEventsAsync_WhenPaginationFails_ShouldPropagateError()
.ReturnsAsync(Result<PaginatedData<Event>>.Failure(StatusCodes.Status400BadRequest, "Invalid page number"));

var sut = new EventService(eventRepositoryMock.Object, organizerServiceMock.Object, addressServiceMock.Object,
dateTimeServiceMock.Object, paginationServiceMock.Object, categoryServiceMock.Object);
dateTimeServiceMock.Object, paginationServiceMock.Object, categoryServiceMock.Object, ticketServiceMock.Object);

// Act
var result = await sut.GetEventsAsync(page, pageSize);
Expand Down Expand Up @@ -537,6 +550,7 @@ public async Task GetEventsPaginationDetailsAsync_WhenSuccessful_ShouldReturnPag
var dateTimeServiceMock = new Mock<IDateTimeService>();
var paginationServiceMock = new Mock<IPaginationService>();
var categoryServiceMock = new Mock<ICategoryService>();
var ticketServiceMock = new Mock<ITicketService>();

var eventsQueryable = events.AsQueryable();
eventRepositoryMock.Setup(p => p.GetEvents()).Returns(eventsQueryable);
Expand All @@ -547,7 +561,7 @@ public async Task GetEventsPaginationDetailsAsync_WhenSuccessful_ShouldReturnPag
.ReturnsAsync(Result<PaginationDetails>.Success(paginationDetails));

var sut = new EventService(eventRepositoryMock.Object, organizerServiceMock.Object, addressServiceMock.Object,
dateTimeServiceMock.Object, paginationServiceMock.Object, categoryServiceMock.Object);
dateTimeServiceMock.Object, paginationServiceMock.Object, categoryServiceMock.Object, ticketServiceMock.Object);

// Act
var result = await sut.GetEventsPaginationDetailsAsync(pageSize);
Expand Down Expand Up @@ -575,6 +589,7 @@ public async Task GetEventsPaginationDetailsAsync_WhenFails_ShouldReturnError()
var dateTimeServiceMock = new Mock<IDateTimeService>();
var paginationServiceMock = new Mock<IPaginationService>();
var categoryServiceMock = new Mock<ICategoryService>();
var ticketServiceMock = new Mock<ITicketService>();

var eventsQueryable = events.AsQueryable();
eventRepositoryMock.Setup(p => p.GetEvents()).Returns(eventsQueryable);
Expand All @@ -584,7 +599,7 @@ public async Task GetEventsPaginationDetailsAsync_WhenFails_ShouldReturnError()
.ReturnsAsync(Result<PaginationDetails>.Failure(StatusCodes.Status400BadRequest, "Invalid page size"));

var sut = new EventService(eventRepositoryMock.Object, organizerServiceMock.Object, addressServiceMock.Object,
dateTimeServiceMock.Object, paginationServiceMock.Object, categoryServiceMock.Object);
dateTimeServiceMock.Object, paginationServiceMock.Object, categoryServiceMock.Object, ticketServiceMock.Object);

// Act
var result = await sut.GetEventsPaginationDetailsAsync(pageSize);
Expand All @@ -594,4 +609,78 @@ public async Task GetEventsPaginationDetailsAsync_WhenFails_ShouldReturnError()
Assert.Equal(StatusCodes.Status400BadRequest, result.StatusCode);
Assert.Equal("Invalid page size", result.ErrorMsg);
}

[Fact]
public async Task GetEventDetailsAsync_WhenSuccessful_ShouldReturnEventDetails()
{
// Arrange
var @event = Utils.CreateSampleEvent("Event");
var expectedDetails = Utils.CreateSampleEventDetailsDto("Event");

var eventRepositoryMock = new Mock<IEventRepository>();
var organizerServiceMock = new Mock<IOrganizerService>();
var addressServiceMock = new Mock<IAddressService>();
var dateTimeServiceMock = new Mock<IDateTimeService>();
var paginationServiceMock = new Mock<IPaginationService>();
var categoryServiceMock = new Mock<ICategoryService>();
var ticketServiceMock = new Mock<ITicketService>();

eventRepositoryMock
.Setup(m => m.GetEventById(@event.Id))
.Returns(Result<Event>.Success(@event));

ticketServiceMock
.Setup(m => m.GetNumberOfAvailableTicketsByType(It.IsAny<TicketType>()))
.Returns((TicketType input) =>
Result<uint>.Success((uint)(input.Price / 10))
);

var sut = new EventService(eventRepositoryMock.Object, organizerServiceMock.Object, addressServiceMock.Object,
dateTimeServiceMock.Object, paginationServiceMock.Object, categoryServiceMock.Object, ticketServiceMock.Object);

// Act
var result = await sut.GetEventDetailsAsync(@event.Id);

// Assert
Assert.True(result.IsSuccess);
Assert.Equal(expectedDetails.Id, result.Value!.Id);
Assert.Equal(expectedDetails.Description, result.Value!.Description);
Assert.Equal(expectedDetails.StartDate, result.Value!.StartDate);
Assert.Equal(expectedDetails.EndDate, result.Value!.EndDate);
Assert.Equal(expectedDetails.MinimumAge, result.Value!.MinimumAge);
Assert.True(expectedDetails.Categories.SequenceEqual(result.Value!.Categories));
Assert.True(expectedDetails.TicketTypes.SequenceEqual(result.Value!.TicketTypes));
Assert.Equal(expectedDetails.Status, result.Value!.Status);
Assert.Equal(expectedDetails.Address, result.Value!.Address);
}

[Fact]
public async Task GetEventDetailsAsync_WhenFails_ShouldReturnEventError()
{
// Arrange
var @event = Utils.CreateSampleEvent("Event");

var eventRepositoryMock = new Mock<IEventRepository>();
var organizerServiceMock = new Mock<IOrganizerService>();
var addressServiceMock = new Mock<IAddressService>();
var dateTimeServiceMock = new Mock<IDateTimeService>();
var paginationServiceMock = new Mock<IPaginationService>();
var categoryServiceMock = new Mock<ICategoryService>();
var ticketServiceMock = new Mock<ITicketService>();

eventRepositoryMock
.Setup(m => m.GetEventById(@event.Id))
.Returns(Result<Event>.Failure(StatusCodes.Status404NotFound, $"event with id {@event.Id} not found"));

var sut = new EventService(eventRepositoryMock.Object, organizerServiceMock.Object, addressServiceMock.Object,
dateTimeServiceMock.Object, paginationServiceMock.Object, categoryServiceMock.Object, ticketServiceMock.Object);

// Act
var result = await sut.GetEventDetailsAsync(@event.Id);

// Assert
Assert.True(result.IsError);
Assert.Equal(StatusCodes.Status404NotFound, result.StatusCode);
Assert.Equal($"event with id {@event.Id} not found", result.ErrorMsg);
}
}
Loading
Loading