public void VerifySucceedsForApiKeysCreatedByCreateFromV1V2ApiKey(string v1v2ApiKey)
        {
            // Arrange
            var createdApiKeyV3 = ApiKeyV3.CreateFromV1V2ApiKey(v1v2ApiKey);

            ApiKeyV3.TryParse(v1v2ApiKey, out var parsedApiKeyV3);

            // Act & Assert
            Assert.True(parsedApiKeyV3.Verify(createdApiKeyV3.HashedApiKey));
        }
        public void CreatesAValidApiKeyFromV1V2ApiKey(string plaintextApiKey, string expectedIdPart, string expectedPasswordPart)
        {
            // Act
            var apiKeyV3 = ApiKeyV3.CreateFromV1V2ApiKey(plaintextApiKey);

            // Assert
            Assert.Equal(plaintextApiKey.ToLower(), apiKeyV3.PlaintextApiKey);
            Assert.Equal(expectedIdPart, apiKeyV3.IdPart);
            Assert.Equal(expectedPasswordPart, apiKeyV3.PasswordPart);
            Assert.Equal(ApiKeyV3.IdAndPasswordHashedLength, apiKeyV3.HashedApiKey.Length);
        }
 public void WhenCreateFromV1V2ApiKeyIsCalledWithInvalidPlaintextApiKeyItThrows(string input)
 {
     Assert.Throws <ArgumentException>(() => ApiKeyV3.CreateFromV1V2ApiKey(input));
 }