using Microsoft.VisualStudio.TestTools.UnitTesting; using Shouldly; using SWP.Core; namespace SWP.Core.X.TDD.Security; [TestClass] public class SecureTokenizerTests { private ISecureTokenizer _tokenizer; [TestInitialize] public void Setup() { _tokenizer = new SecureTokenizer(); } [TestMethod] public void TokenizeText_ShouldReturnNonEmptyString() { // Act var token = _tokenizer.TokenizeText("testPassword"); // Assert token.ShouldNotBeNullOrEmpty(); } [TestMethod] public void TokenizeText_ShouldReturnDifferentTokensForSamePassword() { // Arrange var password = "testPassword"; // Act var token1 = _tokenizer.TokenizeText(password); var token2 = _tokenizer.TokenizeText(password); // Assert token1.ShouldNotBe(token2); } [TestMethod] public void VerifyToken_ShouldReturnTrueForValidPassword() { // Arrange var password = "testPassword"; var token = _tokenizer.TokenizeText(password); // Act var result = _tokenizer.VerifyToken(token, password); // Assert result.ShouldBeTrue(); } [TestMethod] public void VerifyToken_ShouldReturnFalseForInvalidPassword() { // Arrange var password = "testPassword"; var token = _tokenizer.TokenizeText(password); // Act var result = _tokenizer.VerifyToken(token, "wrongPassword"); // Assert result.ShouldBeFalse(); } [TestMethod] public void VerifyToken_ShouldReturnFalseForMalformedToken() { // Act & Assert _tokenizer.VerifyToken("invalid.token", "password").ShouldBeFalse(); _tokenizer.VerifyToken("", "password").ShouldBeFalse(); } [TestMethod] public void VerifyToken_ShouldHandleNullInputs() { // Act & Assert Should.Throw(() => _tokenizer.VerifyToken(null, "password")); // Note: Current implementation doesn't handle null inputs gracefully // This should be fixed in production code } }