public static FeaturifyOptions BuildOptions(this FeaturifyOptions options)
 {
     return(options ??
            new FeaturifyOptions
     {
         AnyUserVerifier = FeaturifyConstants.DefaultAnyUserVerifier,
         UseStrict = false
     });
 }
 public void CanIdentifyFeatureStatusWithOptionsNonExistentUserStrict()
 {
     var currentUserId = "afefebe0-9478-4ba0-90eb-35d6ac5b9d4e";
     var metadata      = new ToggleMetadata
     {
         Name   = "Featurify.ImportFeature",
         Value  = true,
         UserId = "afefebe0-9478-4ba0-90eb-35d6ac5b9d4f"
     };
     var options = new FeaturifyOptions
     {
         AnyUserVerifier = "?",
         UseStrict       = true
     };
     var result = metadata.IsFeatureEnabled(currentUserId, options);
 }
        public void CanIdentifyFeatureStatusWithOptionsSpecificUserNotStrict()
        {
            var currentUserId = "afefebe0-9478-4ba0-90eb-35d6ac5b9d4f";
            var metadata      = new ToggleMetadata
            {
                Name   = "Featurify.ImportFeature",
                Value  = true,
                UserId = "afefebe0-9478-4ba0-90eb-35d6ac5b9d4f"
            };
            var options = new FeaturifyOptions
            {
                AnyUserVerifier = "?",
                UseStrict       = false
            };
            var result = metadata.IsFeatureEnabled(currentUserId, options);

            Assert.AreEqual(true, result);
        }
        public static bool IsFeatureEnabled(this IToggleMetadata metadata, string userId, FeaturifyOptions options = null)
        {
            var validationOptions = BuildOptions(options);

            if (metadata.UserId == validationOptions.AnyUserVerifier)
            {
                return(metadata.Value);
            }
            if (metadata.UserId == userId)
            {
                return(metadata.Value);
            }
            if (validationOptions.UseStrict)
            {
                throw new FeatureNotEnabledException($"This feature has not been enabled.");
            }
            return(false);
        }