Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
2d440eb
Create `EventFilter` service
kTrzcinskii Apr 10, 2025
94c590a
Remove unnecessary import
kTrzcinskii Apr 10, 2025
5697084
Add functions for filtering by event's address
kTrzcinskii Apr 10, 2025
d6930a6
Add function for filtering by event's categories
kTrzcinskii Apr 10, 2025
8d77bbe
Store events inside `EventFilter`
kTrzcinskii Apr 13, 2025
9ebc5d3
removed the empty line
kubapoke Apr 13, 2025
88b2aba
added min/max start/end date filtration methods
kubapoke Apr 13, 2025
282c995
resolve merge conflicts
staszkiet Apr 14, 2025
5658a19
changed endpoint names
kubapoke Apr 14, 2025
446bae3
Fixes after code review
kTrzcinskii Apr 14, 2025
027aec0
Check if categories exist
staszkiet Apr 15, 2025
e55616b
Handle non existing categories
staszkiet Apr 15, 2025
842d001
Merge pull request #73 from Resellio/feat/event-filtration
kTrzcinskii Apr 15, 2025
c1a6b99
Add ticket types to created events and tests
staszkiet Apr 17, 2025
c6e4cd6
Add or update the Azure App Service build and deployment workflow config
staszkiet Apr 17, 2025
49cf8dd
Add or update the Azure App Service build and deployment workflow config
staszkiet Apr 17, 2025
15ae96a
Update feat-createeventwithcategoriesandtickettyped_resellio.yml
staszkiet Apr 17, 2025
27ed684
Update feat-createeventwithcategoriesandtickettyped_resellio.yml
staszkiet Apr 17, 2025
ea3546a
Update feat-createeventwithcategoriesandtickettyped_resellio.yml
staszkiet Apr 17, 2025
bc1ba00
Update feat-createeventwithcategoriesandtickettyped_resellio.yml
staszkiet Apr 17, 2025
125d691
Delete .github/workflows/feat-createeventwithcategoriesandtickettyped…
staszkiet Apr 17, 2025
8fa7d7e
Add or update the Azure App Service build and deployment workflow config
staszkiet Apr 17, 2025
18b9dc0
Update feat-createeventwithcategoriesandtickettyped_resellio.yml
staszkiet Apr 17, 2025
23087d1
Delete .github/workflows/feat-createeventwithcategoriesandtickettyped…
staszkiet Apr 17, 2025
f5e5477
Merge branch 'develop' into fix/endpoint-names
kubapoke Apr 18, 2025
02723bb
updated controller/endpoint names
kubapoke Apr 18, 2025
d7ba66e
Changed EventFilter into a non-service class
kubapoke Apr 18, 2025
7ab3547
Resolve comments
staszkiet Apr 19, 2025
99c3f6b
Merge branch 'feat/CreateEventWithCategoriesAndTicketTyped' of https:…
staszkiet Apr 19, 2025
84a38b0
Merge pull request #74 from Resellio/feat/CreateEventWithCategoriesAn…
kTrzcinskii Apr 19, 2025
c2f1a0b
Merge pull request #75 from Resellio/fix/remove-event-filter-as-a-ser…
kTrzcinskii Apr 19, 2025
6f2ae9b
Merge branch 'refs/heads/develop' into fix/endpoint-names
kubapoke Apr 19, 2025
4324066
Merge pull request #76 from Resellio/fix/endpoint-names
kTrzcinskii Apr 19, 2025
2515dff
Add deploy yml
staszkiet Apr 19, 2025
0c743b0
Trigger action
staszkiet Apr 19, 2025
9332cf6
Test yml on fest/actions
staszkiet Apr 19, 2025
accd4fb
Deploy form main
staszkiet Apr 19, 2025
b9c82cc
Merge branch 'develop' of https://github.com/Resellio/api into feat/a…
staszkiet Apr 19, 2025
3568f60
Update CustomersControllerTests.cs
staszkiet Apr 19, 2025
6cf62c8
Delete app configuration rubbish
staszkiet Apr 19, 2025
ec29307
Merge branch 'feat/actions' of https://github.com/Resellio/api into f…
staszkiet Apr 19, 2025
129936e
Update TickAPI.csproj
staszkiet Apr 19, 2025
96a022c
Merge pull request #78 from Resellio/feat/actions
staszkiet Apr 19, 2025
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
67 changes: 67 additions & 0 deletions .github/workflows/deployapi.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy
# More GitHub Actions for Azure: https://github.com/Azure/actions

name: Build and deploy Resellio Backend

on:
push:
branches:
- main
workflow_dispatch:

jobs:
build:
runs-on: windows-latest
permissions:
contents: read #This is required for actions/checkout

steps:
- uses: actions/checkout@v4

- name: Set up .NET Core
uses: actions/setup-dotnet@v4
with:
dotnet-version: '9.x'

- name: Build with dotnet
run: dotnet build TickAPI/TickAPI/TickAPI.csproj --configuration Release

- name: dotnet publish
run: dotnet publish TickAPI/TickAPI/TickAPI.csproj -c Release -o "${{env.DOTNET_ROOT}}/myapp"

- name: Upload artifact for deployment job
uses: actions/upload-artifact@v4
with:
name: .net-app
path: ${{env.DOTNET_ROOT}}/myapp

deploy:
runs-on: windows-latest
needs: build
environment:
name: 'Production'
url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}
permissions:
id-token: write #This is required for requesting the JWT
contents: read #This is required for actions/checkout

steps:
- name: Download artifact from build job
uses: actions/download-artifact@v4
with:
name: .net-app

- name: Login to Azure
uses: azure/login@v2
with:
client-id: ${{ secrets.AZUREAPPSERVICE_CLIENTID_F22C931708554F8B83EE4F83C4FED407 }}
tenant-id: ${{ secrets.AZUREAPPSERVICE_TENANTID_6CDAC678ACD94858BF3421F606456B8B }}
subscription-id: ${{ secrets.AZUREAPPSERVICE_SUBSCRIPTIONID_CA368EC8EA37446E96D5DF5F42B650EA }}

- name: Deploy to Azure Web App
id: deploy-to-webapp
uses: azure/webapps-deploy@v3
with:
app-name: 'resellio'
slot-name: 'Production'
package: .
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

namespace TickAPI.Tests.Categories.Controllers;

public class CategoryControllerTests
public class CategoriesControllerTests
{
[Fact]
public async Task GetCategories_WhenDataIsValid_ShouldReturnOk()
Expand All @@ -25,7 +25,7 @@ public async Task GetCategories_WhenDataIsValid_ShouldReturnOk()
Result<PaginatedData<GetCategoryResponseDto>>.Success(new PaginatedData<GetCategoryResponseDto>(new List<GetCategoryResponseDto>(), pageNumber, pageSize, true, true,
new PaginationDetails(0, 0))));

var sut = new CategoryController(categoryServiceMock.Object);
var sut = new CategoriesController(categoryServiceMock.Object);

// Act
var res = await sut.GetCategories(pageSize, pageNumber);
Expand All @@ -49,7 +49,7 @@ public async Task CreateCategory_WhenDataIsValid_ShouldReturnSuccess()
.Setup(m => m.CreateNewCategoryAsync(categoryName))
.ReturnsAsync(Result<Category>.Success(new Category()));

var sut = new CategoryController(categoryServiceMock.Object);
var sut = new CategoriesController(categoryServiceMock.Object);

// Act
var res = await sut.CreateCategory(createCategoryDto);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

namespace TickAPI.Tests.Customers.Controllers;

public class CustomerControllerTests
public class CustomersControllerTests
{
[Fact]
public async Task GoogleLogin_WhenAuthSuccessAndCustomerExists_ShouldReturnToken()
Expand All @@ -38,7 +38,7 @@ public async Task GoogleLogin_WhenAuthSuccessAndCustomerExists_ShouldReturnToken

var claimsServiceMock = new Mock<IClaimsService>();

var sut = new CustomerController(
var sut = new CustomersController(
googleAuthServiceMock.Object,
jwtServiceMock.Object,
customerServiceMock.Object,
Expand Down Expand Up @@ -83,7 +83,7 @@ public async Task GoogleLogin_WhenAuthSuccessAndCustomerDoesNotExist_ShouldCreat

var claimsServiceMock = new Mock<IClaimsService>();

var sut = new CustomerController(
var sut = new CustomersController(
googleAuthServiceMock.Object,
jwtServiceMock.Object,
customerServiceMock.Object,
Expand Down Expand Up @@ -137,7 +137,7 @@ public async Task AboutMe_WithValidEmailClaim_ShouldReturnCustomerDetails()
var claimsServiceMock = new Mock<IClaimsService>();
claimsServiceMock.Setup(m => m.GetEmailFromClaims(controllerContext.HttpContext.User.Claims)).Returns(Result<string>.Success(email));

var sut = new CustomerController(
var sut = new CustomersController(
googleAuthServiceMock.Object,
jwtServiceMock.Object,
customerServiceMock.Object,
Expand Down Expand Up @@ -168,7 +168,7 @@ public async Task AboutMe_WithMissingEmailClaim_ShouldReturnBadRequest()
claimsServiceMock.Setup(m => m.GetEmailFromClaims(It.IsAny<IEnumerable<Claim>>())).Returns(Result<string>.Failure(StatusCodes.Status400BadRequest, "missing email claim"));


var sut = new CustomerController(
var sut = new CustomersController(
googleAuthServiceMock.Object,
jwtServiceMock.Object,
customerServiceMock.Object,
Expand All @@ -194,4 +194,4 @@ public async Task AboutMe_WithMissingEmailClaim_ShouldReturnBadRequest()
Assert.Equal(StatusCodes.Status400BadRequest, objectResult.StatusCode);
Assert.Equal("missing email claim", objectResult.Value);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using TickAPI.Addresses.DTOs.Request;
using TickAPI.Categories.DTOs.Request;
using TickAPI.Common.Claims.Abstractions;
using TickAPI.Common.Pagination.Responses;
using TickAPI.Events.Controllers;
Expand All @@ -13,10 +14,11 @@
using TickAPI.Events.DTOs.Response;
using TickAPI.Organizers.Abstractions;
using TickAPI.Organizers.Models;
using TickAPI.TicketTypes.DTOs.Request;

namespace TickAPI.Tests.Events.Controllers;

public class EventControllerTests
public class EventsControllerTests
{
[Fact]
public async Task CreateEvent_WhenDataIsValid_ShouldReturnSuccess()
Expand All @@ -30,12 +32,22 @@ public async Task CreateEvent_WhenDataIsValid_ShouldReturnSuccess()
const string email = "123@mail.com";
const EventStatus eventStatus = EventStatus.TicketsAvailable;
Guid id = Guid.NewGuid();
List<CreateEventCategoryDto> categories =
[
new CreateEventCategoryDto("concert"),
new CreateEventCategoryDto("bear metal")
];
List<CreateEventTicketTypeDto> ticketTypes =
[
new CreateEventTicketTypeDto("normal", 100, 50.9m, "zł", new DateTime(2025, 5, 1)),
new CreateEventTicketTypeDto("V.I.P", 10, 500.9m, "zł", new DateTime(2025, 5, 10)),
];
CreateAddressDto createAddress = new CreateAddressDto("United States", "New York", "Main st", 20, null, "00-000");
CreateEventDto eventDto = new CreateEventDto(name, description, startDate, endDate, minimumAge, eventStatus, createAddress);
CreateEventDto eventDto = new CreateEventDto(name, description, startDate, endDate, minimumAge, categories, ticketTypes, eventStatus, createAddress);

var eventServiceMock = new Mock<IEventService>();
eventServiceMock
.Setup(m => m.CreateNewEventAsync(name, description, startDate, endDate, minimumAge, createAddress, eventStatus, email))
.Setup(m => m.CreateNewEventAsync(name, description, startDate, endDate, minimumAge, createAddress, categories , ticketTypes, eventStatus, email))
.ReturnsAsync(Result<Event>.Success(new Event()));

var claims = new List<Claim>
Expand All @@ -55,7 +67,7 @@ public async Task CreateEvent_WhenDataIsValid_ShouldReturnSuccess()

var organizerServiceMock = new Mock<IOrganizerService>();

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

sut.ControllerContext = controllerContext;

Expand All @@ -79,6 +91,17 @@ public async Task CreateEvent_WhenMissingEmailClaims_ShouldReturnBadRequest()
DateTime endDate = new DateTime(2025, 6, 1);
uint? minimumAge = 18;
const EventStatus eventStatus = EventStatus.TicketsAvailable;
string email = "123@mail.com";
List<CreateEventCategoryDto> categories =
[
new CreateEventCategoryDto("concert"),
new CreateEventCategoryDto("bear metal")
];
List<CreateEventTicketTypeDto> ticketTypes =
[
new CreateEventTicketTypeDto("normal", 100, 50.9m, "zł", new DateTime(2025, 5, 1)),
new CreateEventTicketTypeDto("V.I.P", 10, 500.9m, "zł", new DateTime(2025, 5, 10)),
];
CreateAddressDto createAddress = new CreateAddressDto("United States", "New York", "Main st", 20, null, "00-000");

var eventServiceMock = new Mock<IEventService>();
Expand All @@ -87,7 +110,7 @@ public async Task CreateEvent_WhenMissingEmailClaims_ShouldReturnBadRequest()

var organizerServiceMock = new Mock<IOrganizerService>();

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

sut.ControllerContext = new ControllerContext
{
Expand All @@ -97,8 +120,8 @@ public async Task CreateEvent_WhenMissingEmailClaims_ShouldReturnBadRequest()
}
};

// Act
var res = await sut.CreateEvent(new CreateEventDto(name, description, startDate, endDate, minimumAge, eventStatus, createAddress));
// act
var res = await sut.CreateEvent(new CreateEventDto(name, description, startDate, endDate, minimumAge, categories, ticketTypes, eventStatus, createAddress));

// Assert
var result = Assert.IsType<ActionResult<CreateEventResponseDto>>(res);
Expand Down Expand Up @@ -158,7 +181,7 @@ public async Task GetOrganizerEvents_WhenAllOperationsSucceed_ShouldReturnOkWith
.Setup(m => m.GetOrganizerEventsAsync(organizer, page, pageSize))
.ReturnsAsync(Result<PaginatedData<GetEventResponseDto>>.Success(paginatedData));

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

// Act
Expand Down Expand Up @@ -195,7 +218,7 @@ public async Task GetOrganizerEvents_WhenEmailClaimIsMissing_ShouldReturnBadRequ
var eventServiceMock = new Mock<IEventService>();
var organizerServiceMock = new Mock<IOrganizerService>();

var sut = new EventController(eventServiceMock.Object, claimsServiceMock.Object, organizerServiceMock.Object);
var sut = new EventsController(eventServiceMock.Object, claimsServiceMock.Object, organizerServiceMock.Object);
sut.ControllerContext = new ControllerContext
{
HttpContext = new DefaultHttpContext
Expand Down Expand Up @@ -248,7 +271,7 @@ public async Task GetOrganizerEvents_WhenOrganizerIsNotFound_ShouldReturnNotFoun

var eventServiceMock = new Mock<IEventService>();

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

// Act
Expand Down Expand Up @@ -300,7 +323,7 @@ public async Task GetOrganizerEvents_WhenPaginationFails_ShouldReturnBadRequest(
.Setup(m => m.GetOrganizerEventsAsync(organizer, page, pageSize))
.ReturnsAsync(Result<PaginatedData<GetEventResponseDto>>.Failure(StatusCodes.Status400BadRequest, errorMessage));

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

// Act
Expand Down Expand Up @@ -352,7 +375,7 @@ public async Task GetOrganizerEventsPaginationDetails_WhenAllOperationsSucceed_S
.Setup(m => m.GetOrganizerEventsPaginationDetailsAsync(organizer, pageSize))
.ReturnsAsync(Result<PaginationDetails>.Success(paginationDetails));

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

// Act
Expand Down Expand Up @@ -406,7 +429,7 @@ public async Task GetOrganizerEventsPaginationDetails_WhenPaginationDetailsFails
.Setup(m => m.GetOrganizerEventsPaginationDetailsAsync(organizer, pageSize))
.ReturnsAsync(Result<PaginationDetails>.Failure(StatusCodes.Status400BadRequest, errorMessage));

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

// Act
Expand Down Expand Up @@ -447,7 +470,7 @@ public async Task GetEvents_WhenAllOperationsSucceed_ShouldReturnOkWithPaginated
.Setup(m => m.GetEventsAsync(page, pageSize))
.ReturnsAsync(Result<PaginatedData<GetEventResponseDto>>.Success(paginatedData));

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

// Act
var response = await sut.GetEvents(pageSize, page);
Expand Down Expand Up @@ -484,7 +507,7 @@ public async Task GetEvents_WhenOperationFails_ShouldReturnErrorWithCorrectStatu
.Setup(m => m.GetEventsAsync(page, pageSize))
.ReturnsAsync(Result<PaginatedData<GetEventResponseDto>>.Failure(statusCode, errorMessage));

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

// Act
var response = await sut.GetEvents(pageSize, page);
Expand Down Expand Up @@ -512,7 +535,7 @@ public async Task GetEventsPaginationDetails_WhenAllOperationsSucceed_ShouldRetu
.Setup(m => m.GetEventsPaginationDetailsAsync(pageSize))
.ReturnsAsync(Result<PaginationDetails>.Success(paginationDetails));

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

// Act
var response = await sut.GetEventsPaginationDetails(pageSize);
Expand Down Expand Up @@ -543,7 +566,7 @@ public async Task GetEventsPaginationDetails_WhenOperationFails_ShouldReturnErro
.Setup(m => m.GetEventsPaginationDetailsAsync(pageSize))
.ReturnsAsync(Result<PaginationDetails>.Failure(statusCode, errorMessage));

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

// Act
var response = await sut.GetEventsPaginationDetails(pageSize);
Expand Down
Loading
Loading