test(db): add validation stored procedure tests
This commit is contained in:
+111
@@ -0,0 +1,111 @@
|
||||
using Dapper;
|
||||
using FluentAssertions;
|
||||
using JdeScoping.Core.Models.Search;
|
||||
using JdeScoping.Database.Tests.Infrastructure;
|
||||
using Microsoft.Data.SqlClient;
|
||||
|
||||
namespace JdeScoping.Database.Tests.Procedures;
|
||||
|
||||
/// <summary>
|
||||
/// Tests for usp_ValidateSearchCriteria stored procedure.
|
||||
/// Validates that the procedure throws appropriate errors for invalid search criteria.
|
||||
/// </summary>
|
||||
[Collection("DatabaseTests")]
|
||||
public class ValidateSearchCriteriaProcedureTests : DatabaseTestBase
|
||||
{
|
||||
[Fact]
|
||||
public async Task usp_ValidateSearchCriteria_ValidSearch_Succeeds()
|
||||
{
|
||||
// Arrange
|
||||
var criteria = new SearchCriteria { WorkOrderNumbers = [12345] };
|
||||
var searchId = await InsertTestSearchAsync(criteria);
|
||||
|
||||
// Act
|
||||
var act = async () => await Connection.ExecuteAsync(
|
||||
"EXEC dbo.usp_ValidateSearchCriteria @SearchId",
|
||||
new { SearchId = searchId });
|
||||
|
||||
// Assert
|
||||
await act.Should().NotThrowAsync();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task usp_ValidateSearchCriteria_SearchNotFound_ThrowsError50001()
|
||||
{
|
||||
// Act
|
||||
var act = async () => await Connection.ExecuteAsync(
|
||||
"EXEC dbo.usp_ValidateSearchCriteria @SearchId",
|
||||
new { SearchId = 99999 });
|
||||
|
||||
// Assert
|
||||
var ex = await act.Should().ThrowAsync<SqlException>();
|
||||
ex.Which.Number.Should().Be(50001);
|
||||
ex.Which.Message.Should().Contain("Search ID 99999 not found");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task usp_ValidateSearchCriteria_NullCriteria_ThrowsError50002()
|
||||
{
|
||||
// Arrange
|
||||
var searchId = await InsertTestSearchWithRawCriteriaAsync(null);
|
||||
|
||||
// Act
|
||||
var act = async () => await Connection.ExecuteAsync(
|
||||
"EXEC dbo.usp_ValidateSearchCriteria @SearchId",
|
||||
new { SearchId = searchId });
|
||||
|
||||
// Assert
|
||||
var ex = await act.Should().ThrowAsync<SqlException>();
|
||||
ex.Which.Number.Should().Be(50002);
|
||||
ex.Which.Message.Should().Contain("has no criteria");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task usp_ValidateSearchCriteria_EmptyCriteria_ThrowsError50002()
|
||||
{
|
||||
// Arrange
|
||||
var searchId = await InsertTestSearchWithRawCriteriaAsync("");
|
||||
|
||||
// Act
|
||||
var act = async () => await Connection.ExecuteAsync(
|
||||
"EXEC dbo.usp_ValidateSearchCriteria @SearchId",
|
||||
new { SearchId = searchId });
|
||||
|
||||
// Assert
|
||||
var ex = await act.Should().ThrowAsync<SqlException>();
|
||||
ex.Which.Number.Should().Be(50002);
|
||||
ex.Which.Message.Should().Contain("has no criteria");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task usp_ValidateSearchCriteria_InvalidJson_ThrowsError50003()
|
||||
{
|
||||
// Arrange
|
||||
var searchId = await InsertTestSearchWithRawCriteriaAsync("not valid json {{{");
|
||||
|
||||
// Act
|
||||
var act = async () => await Connection.ExecuteAsync(
|
||||
"EXEC dbo.usp_ValidateSearchCriteria @SearchId",
|
||||
new { SearchId = searchId });
|
||||
|
||||
// Assert
|
||||
var ex = await act.Should().ThrowAsync<SqlException>();
|
||||
ex.Which.Number.Should().Be(50003);
|
||||
ex.Which.Message.Should().Contain("has invalid JSON");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task usp_ValidateSearchCriteria_EmptyJsonObject_Succeeds()
|
||||
{
|
||||
// Arrange - empty JSON object is valid
|
||||
var searchId = await InsertTestSearchWithRawCriteriaAsync("{}");
|
||||
|
||||
// Act
|
||||
var act = async () => await Connection.ExecuteAsync(
|
||||
"EXEC dbo.usp_ValidateSearchCriteria @SearchId",
|
||||
new { SearchId = searchId });
|
||||
|
||||
// Assert
|
||||
await act.Should().NotThrowAsync();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user