1

In the example below, we have:

  • Type: Either<RangedNumberValueFailuresAbstract<int>, int>
  • If No Error: right(number)
  • If Error: left(RangedNumberValueFailuresAbstract.invalidNumber(failedNumberValue: number))

If we need to access the failedNumberValue in (failedNumberValue: number), how would we do it?

Example:

    @immutable
    class RangedNumberValueObjectLibrary extends ValueObjectAbstract {
      factory RangedNumberValueObjectLibrary({@required int number}) {
        var validatedNumber = RangedNumberValueValidationLibrary.validate(number: number);

        return RangedNumberValueObjectLibrary._(value: validatedNumber);
      }

      @protected
      RangedNumberValueObjectLibrary._({@required value}) : super.private(value: value);
    }
    @immutable
    class RangedNumberValueValidationLibrary extends ValueValidationAbstract {
      @protected
      static const _minimum = 2;
      @protected
      static const _maximum = 4;

      static Either<RangedNumberValueFailuresAbstract<int>, int> validate({@required int number}) => _minimum <= number && number <= _maximum ? right(number) : left(RangedNumberValueFailuresAbstract.invalidNumber(failedNumberValue: number));
    }

The above uses the following abstract class that uses the Freezed package.

    @freezed
    @immutable
    abstract class RangedNumberValueFailuresAbstract<T> extends ValueFailuresAbstract with _$RangedNumberValueFailuresAbstract<T> {
      const factory RangedNumberValueFailuresAbstract.invalidNumber({@required T failedNumberValue}) = InvalidNumber<T>;
    }
Erezahr
  • 21
  • 4

1 Answers1

1

The full example with Unit Tests can be found here.

If you delve into the Unit Tests, they are performed in 2 separate ways:

Either Unit Test using the Test Cases Framework using Left and Right results

Either Unit Test using the Test Cases Framework using failedNumberValue for Left results

In the latter, the failedNumberValue is accessed as follows:

    final actual = testClass.getValue.fold(
      (l) => (l as RangedNumberValueFailuresAbstract).failedNumberValue,
      (r) => r,
    );
Erezahr
  • 21
  • 4