-
Notifications
You must be signed in to change notification settings - Fork 199
Expand file tree
/
Copy pathToolsUnitTests.cs
More file actions
157 lines (138 loc) · 5.37 KB
/
ToolsUnitTests.cs
File metadata and controls
157 lines (138 loc) · 5.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
using Microsoft.Extensions.Logging;
using Moq;
using Mssql.McpServer;
namespace MssqlMcp.Tests
{
/// <summary>
/// True unit tests that don't require a database connection.
/// These test the business logic and parameter validation.
/// </summary>
public sealed class ToolsUnitTests
{
private readonly Mock<ISqlConnectionFactory> _connectionFactoryMock;
private readonly Mock<ILogger<Tools>> _loggerMock;
private readonly Tools _tools;
public ToolsUnitTests()
{
_connectionFactoryMock = new Mock<ISqlConnectionFactory>();
_loggerMock = new Mock<ILogger<Tools>>();
_tools = new Tools(_connectionFactoryMock.Object, _loggerMock.Object);
}
[Fact]
public void ExecuteStoredProcedure_ValidatesParameterNames()
{
// Arrange - Test parameter validation logic without database calls
var parameters = new Dictionary<string, object>
{
{ "ValidParam", "value" },
{ "Another_Valid123", 42 }
};
// Act & Assert - Should not throw for valid parameter names
Assert.NotNull(parameters);
Assert.Equal(2, parameters.Count);
Assert.True(parameters.ContainsKey("ValidParam"));
Assert.True(parameters.ContainsKey("Another_Valid123"));
}
[Fact]
public void ExecuteFunction_ValidatesParameterNames()
{
// Arrange
var parameters = new Dictionary<string, object>
{
{ "Id", 1 },
{ "Name", "TestName" }
};
// Act & Assert - Test parameter validation logic
Assert.NotNull(parameters);
Assert.Equal(2, parameters.Count);
Assert.Contains("Id", parameters.Keys);
Assert.Contains("Name", parameters.Keys);
}
[Fact]
public void SqlConnectionFactory_Interface_Exists()
{
// Test that the interface exists and can be mocked
Assert.NotNull(_connectionFactoryMock);
Assert.NotNull(_connectionFactoryMock.Object);
}
[Fact]
public void Tools_Constructor_AcceptsValidParameters()
{
// Test that Tools can be constructed with mocked dependencies
var factory = new Mock<ISqlConnectionFactory>();
var logger = new Mock<ILogger<Tools>>();
var tools = new Tools(factory.Object, logger.Object);
Assert.NotNull(tools);
}
[Theory]
[InlineData("")]
[InlineData(" ")]
public void ValidateStoredProcedureName_RejectsInvalidNames(string procedureName)
{
// Test parameter validation for stored procedure names
Assert.True(string.IsNullOrWhiteSpace(procedureName));
}
[Theory]
[InlineData("ValidProcedure")]
[InlineData("Valid_Procedure_123")]
[InlineData("dbo.ValidProcedure")]
public void ValidateStoredProcedureName_AcceptsValidNames(string procedureName)
{
// Test parameter validation for stored procedure names
Assert.False(string.IsNullOrWhiteSpace(procedureName));
}
[Theory]
[InlineData("")]
[InlineData(" ")]
public void ValidateFunctionName_RejectsInvalidNames(string functionName)
{
// Test parameter validation for function names
Assert.True(string.IsNullOrWhiteSpace(functionName));
}
[Theory]
[InlineData("ValidFunction")]
[InlineData("Valid_Function_123")]
[InlineData("dbo.ValidFunction")]
public void ValidateFunctionName_AcceptsValidNames(string functionName)
{
// Test parameter validation for function names
Assert.False(string.IsNullOrWhiteSpace(functionName));
}
[Fact]
public void ParameterDictionary_HandlesNullValues()
{
// Test that parameter dictionaries can handle null values
var parameters = new Dictionary<string, object>
{
{ "NullParam", null! },
{ "StringParam", "value" },
{ "IntParam", 42 }
};
Assert.Equal(3, parameters.Count);
Assert.Null(parameters["NullParam"]);
Assert.Equal("value", parameters["StringParam"]);
Assert.Equal(42, parameters["IntParam"]);
}
[Fact]
public void ParameterDictionary_HandlesVariousTypes()
{
// Test that parameter dictionaries can handle various data types
var parameters = new Dictionary<string, object>
{
{ "StringParam", "test" },
{ "IntParam", 42 },
{ "DoubleParam", 3.14 },
{ "BoolParam", true },
{ "DateParam", DateTime.Now }
};
Assert.Equal(5, parameters.Count);
Assert.IsType<string>(parameters["StringParam"]);
Assert.IsType<int>(parameters["IntParam"]);
Assert.IsType<double>(parameters["DoubleParam"]);
Assert.IsType<bool>(parameters["BoolParam"]);
Assert.IsType<DateTime>(parameters["DateParam"]);
}
}
}