Bogus icon indicating copy to clipboard operation
Bogus copied to clipboard

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

Open mpickers opened this issue 1 year ago • 1 comments

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

mpickers avatar Aug 28 '24 06:08 mpickers