Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Original file line number Diff line number Diff line change
Expand Up @@ -127,5 +127,186 @@ public async Task GetAllActivities_ShouldUseDefaultPageNumber_WhenOnlyPageSizePr
_cosmosRepositoryMock.Verify(x => x.GetAllActivitySummaries(
It.Is<PaginationRequest>(r => r.PageNumber == 1 && r.PageSize == 50)), Times.Once);
}

[Fact]
public async Task GetActivitiesByDateRange_ShouldReturnOk_WhenValidDateRangeProvided()
{
// Arrange
var startDate = "2023-01-01";
var endDate = "2023-01-31";
var fixture = new Fixture();
var activityDocuments = fixture.CreateMany<ActivityDocument>(5).ToList();
var paginatedResponse = new PaginationResponse<ActivityDocument>
{
Items = activityDocuments,
PageNumber = 1,
PageSize = 20,
TotalCount = 5
};

_cosmosRepositoryMock.Setup(x => x.GetActivitiesByDateRange(startDate, endDate, It.IsAny<PaginationRequest>()))
.ReturnsAsync(paginatedResponse);

// Act
var result = await ActivityHandlers.GetActivitiesByDateRange(_cosmosRepositoryMock.Object, startDate, endDate);

// Assert
result.Result.Should().BeOfType<Ok<PaginationResponse<ActivityDocument>>>();
var okResult = result.Result as Ok<PaginationResponse<ActivityDocument>>;
okResult.Value.Should().BeEquivalentTo(paginatedResponse);
}

[Fact]
public async Task GetActivitiesByDateRange_ShouldReturnBadRequest_WhenStartDateIsInvalid()
{
// Arrange
var invalidStartDate = "invalid-date";
var endDate = "2023-01-31";

// Act
var result = await ActivityHandlers.GetActivitiesByDateRange(_cosmosRepositoryMock.Object, invalidStartDate, endDate);

// Assert
result.Result.Should().BeOfType<BadRequest>();
_cosmosRepositoryMock.Verify(x => x.GetActivitiesByDateRange(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<PaginationRequest>()), Times.Never);
}

[Fact]
public async Task GetActivitiesByDateRange_ShouldReturnBadRequest_WhenEndDateIsInvalid()
{
// Arrange
var startDate = "2023-01-01";
var invalidEndDate = "invalid-date";

// Act
var result = await ActivityHandlers.GetActivitiesByDateRange(_cosmosRepositoryMock.Object, startDate, invalidEndDate);

// Assert
result.Result.Should().BeOfType<BadRequest>();
_cosmosRepositoryMock.Verify(x => x.GetActivitiesByDateRange(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<PaginationRequest>()), Times.Never);
}

[Fact]
public async Task GetActivitiesByDateRange_ShouldReturnBadRequest_WhenStartDateIsAfterEndDate()
{
// Arrange
var startDate = "2023-01-31";
var endDate = "2023-01-01";

// Act
var result = await ActivityHandlers.GetActivitiesByDateRange(_cosmosRepositoryMock.Object, startDate, endDate);

// Assert
result.Result.Should().BeOfType<BadRequest>();
_cosmosRepositoryMock.Verify(x => x.GetActivitiesByDateRange(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<PaginationRequest>()), Times.Never);
}

[Fact]
public async Task GetActivitiesByDateRange_ShouldUseDefaultPagination_WhenPaginationParametersNotProvided()
{
// Arrange
var startDate = "2023-01-01";
var endDate = "2023-01-31";
var fixture = new Fixture();
var paginatedResponse = new PaginationResponse<ActivityDocument>
{
Items = fixture.CreateMany<ActivityDocument>(20).ToList(),
PageNumber = 1,
PageSize = 20,
TotalCount = 20
};

_cosmosRepositoryMock.Setup(x => x.GetActivitiesByDateRange(startDate, endDate,
It.Is<PaginationRequest>(r => r.PageNumber == 1 && r.PageSize == 20)))
.ReturnsAsync(paginatedResponse);

// Act
var result = await ActivityHandlers.GetActivitiesByDateRange(_cosmosRepositoryMock.Object, startDate, endDate);

// Assert
result.Result.Should().BeOfType<Ok<PaginationResponse<ActivityDocument>>>();
_cosmosRepositoryMock.Verify(x => x.GetActivitiesByDateRange(startDate, endDate,
It.Is<PaginationRequest>(r => r.PageNumber == 1 && r.PageSize == 20)), Times.Once);
}

[Fact]
public async Task GetActivitiesByDateRange_ShouldUseCustomPagination_WhenPaginationParametersProvided()
{
// Arrange
var startDate = "2023-01-01";
var endDate = "2023-01-31";
var pageNumber = 3;
var pageSize = 15;
var fixture = new Fixture();
var paginatedResponse = new PaginationResponse<ActivityDocument>
{
Items = fixture.CreateMany<ActivityDocument>(15).ToList(),
PageNumber = pageNumber,
PageSize = pageSize,
TotalCount = 45
};

_cosmosRepositoryMock.Setup(x => x.GetActivitiesByDateRange(startDate, endDate,
It.Is<PaginationRequest>(r => r.PageNumber == pageNumber && r.PageSize == pageSize)))
.ReturnsAsync(paginatedResponse);

// Act
var result = await ActivityHandlers.GetActivitiesByDateRange(_cosmosRepositoryMock.Object, startDate, endDate, pageNumber, pageSize);

// Assert
result.Result.Should().BeOfType<Ok<PaginationResponse<ActivityDocument>>>();
var okResult = result.Result as Ok<PaginationResponse<ActivityDocument>>;
okResult.Value.PageNumber.Should().Be(pageNumber);
okResult.Value.PageSize.Should().Be(pageSize);
_cosmosRepositoryMock.Verify(x => x.GetActivitiesByDateRange(startDate, endDate,
It.Is<PaginationRequest>(r => r.PageNumber == pageNumber && r.PageSize == pageSize)), Times.Once);
}

[Fact]
public async Task GetActivitiesByDateRange_ShouldHandleSameDateRange()
{
// Arrange
var sameDate = "2023-01-15";
var fixture = new Fixture();
var activityDocuments = fixture.CreateMany<ActivityDocument>(2).ToList();
var paginatedResponse = new PaginationResponse<ActivityDocument>
{
Items = activityDocuments,
PageNumber = 1,
PageSize = 20,
TotalCount = 2
};

_cosmosRepositoryMock.Setup(x => x.GetActivitiesByDateRange(sameDate, sameDate, It.IsAny<PaginationRequest>()))
.ReturnsAsync(paginatedResponse);

// Act
var result = await ActivityHandlers.GetActivitiesByDateRange(_cosmosRepositoryMock.Object, sameDate, sameDate);

// Assert
result.Result.Should().BeOfType<Ok<PaginationResponse<ActivityDocument>>>();
_cosmosRepositoryMock.Verify(x => x.GetActivitiesByDateRange(sameDate, sameDate, It.IsAny<PaginationRequest>()), Times.Once);
}

[Theory]
[InlineData("2023-02-29")] // Invalid leap year date
[InlineData("2023-13-01")] // Invalid month
[InlineData("2023-01-32")] // Invalid day
public async Task GetActivitiesByDateRange_ShouldReturnBadRequest_WhenDateFormatIsValidButDateIsInvalid(string invalidDate)
{
// Arrange
var validDate = "2023-01-01";

// Act - Test with invalid start date
var result1 = await ActivityHandlers.GetActivitiesByDateRange(_cosmosRepositoryMock.Object, invalidDate, validDate);

// Act - Test with invalid end date
var result2 = await ActivityHandlers.GetActivitiesByDateRange(_cosmosRepositoryMock.Object, validDate, invalidDate);

// Assert
result1.Result.Should().BeOfType<BadRequest>();
result2.Result.Should().BeOfType<BadRequest>();
_cosmosRepositoryMock.Verify(x => x.GetActivitiesByDateRange(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<PaginationRequest>()), Times.Never);
}
}
}
Loading
Loading