mirror of
https://github.com/dotnet/skills.git
synced 2026-09-20 09:49:54 +08:00
9f531203ec
Move assertion-quality, test-gap-analysis, test-smell-detection, and test-tagging from dotnet-experimental to dotnet-test. These skills have demonstrated sufficient eval coverage, unique value beyond baseline model capabilities, and are already integrated into the test-quality-auditor agent pipeline. Changes: - Move skills and tests, dropping the exp- prefix - Update all cross-references in skill descriptions and routing tables - Update test-quality-auditor agent and eval scenarios - Update CODEOWNERS for the moved paths - Delete duplicate exp-dotnet-test-frameworks (identical to dotnet-test-frameworks) - Fix stale exp-dotnet-test-frameworks reference in exp-test-maintainability Skills held back for further iteration: - exp-mock-usage-analysis: baseline model scores 5/5 on key scenarios - exp-test-maintainability: quality gains offset by token overhead
160 lines
5.0 KiB
C#
160 lines
5.0 KiB
C#
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
|
|
namespace UserService.Tests;
|
|
|
|
[TestClass]
|
|
public sealed class UserManagerTests
|
|
{
|
|
[TestMethod]
|
|
public void CreateUser_ValidInput_ReturnsUserWithCorrectProperties()
|
|
{
|
|
var manager = new UserManager(new InMemoryUserStore());
|
|
|
|
var user = manager.CreateUser("alice@example.com", "Alice", Role.Admin);
|
|
|
|
Assert.IsNotNull(user);
|
|
Assert.AreEqual("alice@example.com", user.Email);
|
|
Assert.AreEqual("Alice", user.Name);
|
|
Assert.AreEqual(Role.Admin, user.Role);
|
|
Assert.IsTrue(user.Id > 0);
|
|
Assert.IsTrue(user.CreatedAt <= DateTime.UtcNow);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void CreateUser_DuplicateEmail_ThrowsInvalidOperationException()
|
|
{
|
|
var manager = new UserManager(new InMemoryUserStore());
|
|
manager.CreateUser("alice@example.com", "Alice", Role.User);
|
|
|
|
Assert.ThrowsException<InvalidOperationException>(
|
|
() => manager.CreateUser("alice@example.com", "Bob", Role.User));
|
|
}
|
|
|
|
[TestMethod]
|
|
public void CreateUser_NullEmail_ThrowsArgumentNullException()
|
|
{
|
|
var manager = new UserManager(new InMemoryUserStore());
|
|
|
|
var ex = Assert.ThrowsException<ArgumentNullException>(
|
|
() => manager.CreateUser(null!, "Alice", Role.User));
|
|
|
|
Assert.AreEqual("email", ex.ParamName);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void GetUser_ExistingUser_ReturnsCorrectUser()
|
|
{
|
|
var manager = new UserManager(new InMemoryUserStore());
|
|
var created = manager.CreateUser("alice@example.com", "Alice", Role.User);
|
|
|
|
var found = manager.GetUser(created.Id);
|
|
|
|
Assert.IsNotNull(found);
|
|
Assert.AreEqual(created.Id, found.Id);
|
|
Assert.AreEqual(created.Email, found.Email);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void GetUser_NonExistent_ReturnsNull()
|
|
{
|
|
var manager = new UserManager(new InMemoryUserStore());
|
|
|
|
var found = manager.GetUser(999);
|
|
|
|
Assert.IsNull(found);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void UpdateRole_ChangesUserRole()
|
|
{
|
|
var manager = new UserManager(new InMemoryUserStore());
|
|
var user = manager.CreateUser("alice@example.com", "Alice", Role.User);
|
|
|
|
manager.UpdateRole(user.Id, Role.Admin);
|
|
|
|
var updated = manager.GetUser(user.Id);
|
|
Assert.IsNotNull(updated);
|
|
Assert.AreEqual(Role.Admin, updated.Role);
|
|
Assert.AreNotEqual(user.Role, updated.Role);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void DeleteUser_RemovesUser()
|
|
{
|
|
var manager = new UserManager(new InMemoryUserStore());
|
|
var user = manager.CreateUser("alice@example.com", "Alice", Role.User);
|
|
|
|
var deleted = manager.DeleteUser(user.Id);
|
|
|
|
Assert.IsTrue(deleted);
|
|
Assert.IsNull(manager.GetUser(user.Id));
|
|
}
|
|
|
|
[TestMethod]
|
|
public void DeleteUser_NonExistent_ReturnsFalse()
|
|
{
|
|
var manager = new UserManager(new InMemoryUserStore());
|
|
|
|
var deleted = manager.DeleteUser(999);
|
|
|
|
Assert.IsFalse(deleted);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ListUsers_ReturnsAllUsers()
|
|
{
|
|
var manager = new UserManager(new InMemoryUserStore());
|
|
manager.CreateUser("alice@example.com", "Alice", Role.Admin);
|
|
manager.CreateUser("bob@example.com", "Bob", Role.User);
|
|
manager.CreateUser("carol@example.com", "Carol", Role.User);
|
|
|
|
var users = manager.ListUsers();
|
|
|
|
Assert.AreEqual(3, users.Count);
|
|
CollectionAssert.AllItemsAreNotNull(users);
|
|
Assert.IsTrue(users.Any(u => u.Email == "alice@example.com"));
|
|
Assert.IsTrue(users.Any(u => u.Email == "bob@example.com"));
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ListUsers_FilterByRole_ReturnsMatchingUsers()
|
|
{
|
|
var manager = new UserManager(new InMemoryUserStore());
|
|
manager.CreateUser("alice@example.com", "Alice", Role.Admin);
|
|
manager.CreateUser("bob@example.com", "Bob", Role.User);
|
|
manager.CreateUser("carol@example.com", "Carol", Role.User);
|
|
|
|
var admins = manager.ListUsers(Role.Admin);
|
|
|
|
Assert.AreEqual(1, admins.Count);
|
|
Assert.AreEqual("alice@example.com", admins[0].Email);
|
|
Assert.AreEqual(Role.Admin, admins[0].Role);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void SearchUsers_ByName_ReturnsMatches()
|
|
{
|
|
var manager = new UserManager(new InMemoryUserStore());
|
|
manager.CreateUser("alice@example.com", "Alice Johnson", Role.User);
|
|
manager.CreateUser("bob@example.com", "Bob Smith", Role.User);
|
|
manager.CreateUser("alicia@example.com", "Alicia Keys", Role.User);
|
|
|
|
var results = manager.SearchUsers("ali");
|
|
|
|
Assert.AreEqual(2, results.Count);
|
|
Assert.IsTrue(results.All(u => u.Name.Contains("Ali", StringComparison.OrdinalIgnoreCase)));
|
|
}
|
|
|
|
[TestMethod]
|
|
public void SearchUsers_NoMatch_ReturnsEmptyList()
|
|
{
|
|
var manager = new UserManager(new InMemoryUserStore());
|
|
manager.CreateUser("alice@example.com", "Alice", Role.User);
|
|
|
|
var results = manager.SearchUsers("xyz");
|
|
|
|
Assert.IsNotNull(results);
|
|
Assert.AreEqual(0, results.Count);
|
|
}
|
|
}
|