Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bogus.Tools.Analyzer generates 'default' RuleFor() for nullable system types rather than using the randomizer and .OrNull() #561

Open
mpickers opened this issue Aug 28, 2024 · 1 comment

Comments

@mpickers
Copy link

Bogus NuGet Package

35.6.0

.NET Version

net 6

Visual Studio Version

17.10.3

What operating system are you using?

Windows

What locale are you using with Bogus?

en_US

Problem Description

When a nullable system type is specified, the output RuleFor() is 'default'.

Perhaps this is by design, but it seems one would generally want to have the full spectrum of possible results for a nullable system type.

LINQPad Example or Reproduction Steps

      public class NullableProperties
      {
         public string FirstName { get; set; } = string.Empty;
         public decimal? NullableDecimal { get; set; }
         public int? NullableInt { get; set; }
         public int JustInt { get; set; }
      }
      
      static void BogusAnalyzer()
      {
         var g = new Faker<NullableProperties>()
            .RuleFor(n => n.FirstName, f => f.Lorem.Word())
            .RuleFor(n => n.NullableDecimal, f => default)   // <-- Would expect this to be f.Random.Decimal().OrNull(f)
            .RuleFor(n => n.NullableInt, f => default)        // <-- Would expect this to be f.Random.Int().OrNull(f)
            .RuleFor(n => n.JustInt, f => f.Random.Int());

         var o = g.Generate();
      }

Expected Behavior

I'd expect that the generated RuleFor would have the underlying type and use the OrNull() from Bogus, such as:

         var g = new Faker<NullableProperties>()
            .RuleFor(n => n.FirstName, f => f.Lorem.Word())
            .RuleFor(n => n.NullableDecimal, f => f.Random.Decimal().OrNull(f))
            .RuleFor(n => n.NullableInt, f => f.Random.Int().OrNull(f))
            .RuleFor(n => n.JustInt, f => f.Random.Int());

Actual Behavior

default is output in the RuleFor()

Known Workarounds

No response

Could you help with a pull-request?

No

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants
@mpickers and others