@haskou/value-objects 1.1.0 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/errors/BaseError.d.ts +8 -0
- package/dist/src/errors/BaseError.d.ts.map +1 -0
- package/dist/src/errors/BaseError.js +22 -0
- package/dist/src/errors/BaseError.js.map +1 -0
- package/dist/src/errors/DomainError.d.ts +7 -0
- package/dist/src/errors/DomainError.d.ts.map +1 -0
- package/dist/src/errors/DomainError.js +15 -0
- package/dist/src/errors/DomainError.js.map +1 -0
- package/dist/src/errors/InvalidColorError.d.ts +5 -0
- package/dist/src/errors/InvalidColorError.d.ts.map +1 -0
- package/dist/src/errors/InvalidColorError.js +11 -0
- package/dist/src/errors/InvalidColorError.js.map +1 -0
- package/dist/src/errors/InvalidDayError.d.ts +5 -0
- package/dist/src/errors/InvalidDayError.d.ts.map +1 -0
- package/dist/src/errors/InvalidDayError.js +11 -0
- package/dist/src/errors/InvalidDayError.js.map +1 -0
- package/dist/src/errors/InvalidDayFormatError.d.ts +5 -0
- package/dist/src/errors/InvalidDayFormatError.d.ts.map +1 -0
- package/dist/src/errors/InvalidDayFormatError.js +11 -0
- package/dist/src/errors/InvalidDayFormatError.js.map +1 -0
- package/dist/src/errors/InvalidEmailError.d.ts +5 -0
- package/dist/src/errors/InvalidEmailError.d.ts.map +1 -0
- package/dist/src/errors/InvalidEmailError.js +11 -0
- package/dist/src/errors/InvalidEmailError.js.map +1 -0
- package/dist/src/errors/InvalidFormatError.d.ts +5 -0
- package/dist/src/errors/InvalidFormatError.d.ts.map +1 -0
- package/dist/src/errors/InvalidFormatError.js +11 -0
- package/dist/src/errors/InvalidFormatError.js.map +1 -0
- package/dist/src/errors/InvalidHashError.d.ts +5 -0
- package/dist/src/errors/InvalidHashError.d.ts.map +1 -0
- package/dist/src/errors/InvalidHashError.js +11 -0
- package/dist/src/errors/InvalidHashError.js.map +1 -0
- package/dist/src/errors/InvalidHourError.d.ts +5 -0
- package/dist/src/errors/InvalidHourError.d.ts.map +1 -0
- package/dist/src/errors/InvalidHourError.js +11 -0
- package/dist/src/errors/InvalidHourError.js.map +1 -0
- package/dist/src/errors/InvalidIntegerError.d.ts +5 -0
- package/dist/src/errors/InvalidIntegerError.d.ts.map +1 -0
- package/dist/src/errors/InvalidIntegerError.js +11 -0
- package/dist/src/errors/InvalidIntegerError.js.map +1 -0
- package/dist/src/errors/InvalidLatitudeError.d.ts +5 -0
- package/dist/src/errors/InvalidLatitudeError.d.ts.map +1 -0
- package/dist/src/errors/InvalidLatitudeError.js +11 -0
- package/dist/src/errors/InvalidLatitudeError.js.map +1 -0
- package/dist/src/errors/InvalidLengthError.d.ts +5 -0
- package/dist/src/errors/InvalidLengthError.d.ts.map +1 -0
- package/dist/src/errors/InvalidLengthError.js +11 -0
- package/dist/src/errors/InvalidLengthError.js.map +1 -0
- package/dist/src/errors/InvalidLongitudeError.d.ts +5 -0
- package/dist/src/errors/InvalidLongitudeError.d.ts.map +1 -0
- package/dist/src/errors/InvalidLongitudeError.js +11 -0
- package/dist/src/errors/InvalidLongitudeError.js.map +1 -0
- package/dist/src/errors/InvalidMinutesError.d.ts +5 -0
- package/dist/src/errors/InvalidMinutesError.d.ts.map +1 -0
- package/dist/src/errors/InvalidMinutesError.js +11 -0
- package/dist/src/errors/InvalidMinutesError.js.map +1 -0
- package/dist/src/errors/InvalidNumberError.d.ts +5 -0
- package/dist/src/errors/InvalidNumberError.d.ts.map +1 -0
- package/dist/src/errors/InvalidNumberError.js +11 -0
- package/dist/src/errors/InvalidNumberError.js.map +1 -0
- package/dist/src/errors/InvalidPositiveNumberError.d.ts +5 -0
- package/dist/src/errors/InvalidPositiveNumberError.d.ts.map +1 -0
- package/dist/src/errors/InvalidPositiveNumberError.js +11 -0
- package/dist/src/errors/InvalidPositiveNumberError.js.map +1 -0
- package/dist/src/errors/InvalidStringLengthError.d.ts +5 -0
- package/dist/src/errors/InvalidStringLengthError.d.ts.map +1 -0
- package/dist/src/errors/InvalidStringLengthError.js +11 -0
- package/dist/src/errors/InvalidStringLengthError.js.map +1 -0
- package/dist/src/errors/InvalidTimestampIntervalError.d.ts +6 -0
- package/dist/src/errors/InvalidTimestampIntervalError.d.ts.map +1 -0
- package/dist/src/errors/InvalidTimestampIntervalError.js +11 -0
- package/dist/src/errors/InvalidTimestampIntervalError.js.map +1 -0
- package/dist/src/errors/InvalidValueError.d.ts +5 -0
- package/dist/src/errors/InvalidValueError.d.ts.map +1 -0
- package/dist/src/errors/InvalidValueError.js +11 -0
- package/dist/src/errors/InvalidValueError.js.map +1 -0
- package/dist/src/errors/NullObjectError.d.ts +5 -0
- package/dist/src/errors/NullObjectError.d.ts.map +1 -0
- package/dist/src/errors/NullObjectError.js +12 -0
- package/dist/src/errors/NullObjectError.js.map +1 -0
- package/dist/src/errors/ValueNotInEnumError.d.ts +5 -0
- package/dist/src/errors/ValueNotInEnumError.d.ts.map +1 -0
- package/dist/src/errors/ValueNotInEnumError.js +11 -0
- package/dist/src/errors/ValueNotInEnumError.js.map +1 -0
- package/{src/errors/index.ts → dist/src/errors/index.d.ts} +1 -0
- package/dist/src/errors/index.d.ts.map +1 -0
- package/dist/src/errors/index.js +24 -0
- package/dist/src/errors/index.js.map +1 -0
- package/{src/index.ts → dist/src/index.d.ts} +1 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +9 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/interfaces/PrimitiveOf.d.ts +5 -0
- package/dist/src/interfaces/PrimitiveOf.d.ts.map +1 -0
- package/dist/src/interfaces/PrimitiveOf.js +3 -0
- package/dist/src/interfaces/PrimitiveOf.js.map +1 -0
- package/dist/src/interfaces/index.d.ts +2 -0
- package/dist/src/interfaces/index.d.ts.map +1 -0
- package/dist/src/interfaces/index.js +5 -0
- package/dist/src/interfaces/index.js.map +1 -0
- package/dist/src/patterns/Assert.d.ts +5 -0
- package/dist/src/patterns/Assert.d.ts.map +1 -0
- package/dist/src/patterns/Assert.js +11 -0
- package/dist/src/patterns/Assert.js.map +1 -0
- package/dist/src/patterns/index.d.ts +2 -0
- package/dist/src/patterns/index.d.ts.map +1 -0
- package/dist/src/patterns/index.js +5 -0
- package/dist/src/patterns/index.js.map +1 -0
- package/{src/types/Nullish.ts → dist/src/types/Nullish.d.ts} +1 -0
- package/dist/src/types/Nullish.d.ts.map +1 -0
- package/dist/src/types/Nullish.js +3 -0
- package/dist/src/types/Nullish.js.map +1 -0
- package/{src/types/Primitive.ts → dist/src/types/Primitive.d.ts} +1 -0
- package/dist/src/types/Primitive.d.ts.map +1 -0
- package/dist/src/types/Primitive.js +3 -0
- package/dist/src/types/Primitive.js.map +1 -0
- package/{src/types/index.ts → dist/src/types/index.d.ts} +1 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +6 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/value-objects/Color.d.ts +19 -0
- package/dist/src/value-objects/Color.d.ts.map +1 -0
- package/dist/src/value-objects/Color.js +37 -0
- package/dist/src/value-objects/Color.js.map +1 -0
- package/dist/src/value-objects/Email.d.ts +6 -0
- package/dist/src/value-objects/Email.d.ts.map +1 -0
- package/dist/src/value-objects/Email.js +21 -0
- package/dist/src/value-objects/Email.js.map +1 -0
- package/dist/src/value-objects/Enum.d.ts +9 -0
- package/dist/src/value-objects/Enum.d.ts.map +1 -0
- package/dist/src/value-objects/Enum.js +24 -0
- package/dist/src/value-objects/Enum.js.map +1 -0
- package/dist/src/value-objects/Integer.d.ts +6 -0
- package/dist/src/value-objects/Integer.d.ts.map +1 -0
- package/dist/src/value-objects/Integer.js +21 -0
- package/dist/src/value-objects/Integer.js.map +1 -0
- package/dist/src/value-objects/NullObject.d.ts +8 -0
- package/dist/src/value-objects/NullObject.d.ts.map +1 -0
- package/dist/src/value-objects/NullObject.js +43 -0
- package/dist/src/value-objects/NullObject.js.map +1 -0
- package/dist/src/value-objects/NumberValueObject.d.ts +15 -0
- package/dist/src/value-objects/NumberValueObject.d.ts.map +1 -0
- package/dist/src/value-objects/NumberValueObject.js +48 -0
- package/dist/src/value-objects/NumberValueObject.js.map +1 -0
- package/dist/src/value-objects/PositiveNumber.d.ts +6 -0
- package/dist/src/value-objects/PositiveNumber.d.ts.map +1 -0
- package/dist/src/value-objects/PositiveNumber.js +21 -0
- package/dist/src/value-objects/PositiveNumber.js.map +1 -0
- package/dist/src/value-objects/StringValueObject.d.ts +7 -0
- package/dist/src/value-objects/StringValueObject.d.ts.map +1 -0
- package/dist/src/value-objects/StringValueObject.js +24 -0
- package/dist/src/value-objects/StringValueObject.js.map +1 -0
- package/dist/src/value-objects/ValueObject.d.ts +12 -0
- package/dist/src/value-objects/ValueObject.d.ts.map +1 -0
- package/dist/src/value-objects/ValueObject.js +33 -0
- package/dist/src/value-objects/ValueObject.js.map +1 -0
- package/dist/src/value-objects/coordinates/Coordinates.d.ts +12 -0
- package/dist/src/value-objects/coordinates/Coordinates.d.ts.map +1 -0
- package/dist/src/value-objects/coordinates/Coordinates.js +28 -0
- package/dist/src/value-objects/coordinates/Coordinates.js.map +1 -0
- package/dist/src/value-objects/coordinates/Latitude.d.ts +8 -0
- package/dist/src/value-objects/coordinates/Latitude.d.ts.map +1 -0
- package/dist/src/value-objects/coordinates/Latitude.js +21 -0
- package/dist/src/value-objects/coordinates/Latitude.js.map +1 -0
- package/dist/src/value-objects/coordinates/Longitude.d.ts +8 -0
- package/dist/src/value-objects/coordinates/Longitude.d.ts.map +1 -0
- package/dist/src/value-objects/coordinates/Longitude.js +21 -0
- package/dist/src/value-objects/coordinates/Longitude.js.map +1 -0
- package/{src/value-objects/coordinates/index.ts → dist/src/value-objects/coordinates/index.d.ts} +1 -0
- package/dist/src/value-objects/coordinates/index.d.ts.map +1 -0
- package/dist/src/value-objects/coordinates/index.js +7 -0
- package/dist/src/value-objects/coordinates/index.js.map +1 -0
- package/dist/src/value-objects/hashes/Hash.d.ts +7 -0
- package/dist/src/value-objects/hashes/Hash.d.ts.map +1 -0
- package/dist/src/value-objects/hashes/Hash.js +19 -0
- package/dist/src/value-objects/hashes/Hash.js.map +1 -0
- package/dist/src/value-objects/hashes/MD5Hash.d.ts +8 -0
- package/dist/src/value-objects/hashes/MD5Hash.d.ts.map +1 -0
- package/dist/src/value-objects/hashes/MD5Hash.js +26 -0
- package/dist/src/value-objects/hashes/MD5Hash.js.map +1 -0
- package/dist/src/value-objects/hashes/SHA256Hash.d.ts +9 -0
- package/dist/src/value-objects/hashes/SHA256Hash.d.ts.map +1 -0
- package/dist/src/value-objects/hashes/SHA256Hash.js +29 -0
- package/dist/src/value-objects/hashes/SHA256Hash.js.map +1 -0
- package/dist/src/value-objects/hashes/SHA512Hash.d.ts +9 -0
- package/dist/src/value-objects/hashes/SHA512Hash.d.ts.map +1 -0
- package/dist/src/value-objects/hashes/SHA512Hash.js +29 -0
- package/dist/src/value-objects/hashes/SHA512Hash.js.map +1 -0
- package/{src/value-objects/hashes/index.ts → dist/src/value-objects/hashes/index.d.ts} +1 -0
- package/dist/src/value-objects/hashes/index.d.ts.map +1 -0
- package/dist/src/value-objects/hashes/index.js +8 -0
- package/dist/src/value-objects/hashes/index.js.map +1 -0
- package/dist/src/value-objects/ids/ShortId.d.ts +10 -0
- package/dist/src/value-objects/ids/ShortId.d.ts.map +1 -0
- package/dist/src/value-objects/ids/ShortId.js +30 -0
- package/dist/src/value-objects/ids/ShortId.js.map +1 -0
- package/dist/src/value-objects/ids/UUID.d.ts +10 -0
- package/dist/src/value-objects/ids/UUID.d.ts.map +1 -0
- package/dist/src/value-objects/ids/UUID.js +29 -0
- package/dist/src/value-objects/ids/UUID.js.map +1 -0
- package/dist/src/value-objects/ids/index.d.ts +3 -0
- package/dist/src/value-objects/ids/index.d.ts.map +1 -0
- package/dist/src/value-objects/ids/index.js +6 -0
- package/dist/src/value-objects/ids/index.js.map +1 -0
- package/{src/value-objects/index.ts → dist/src/value-objects/index.d.ts} +2 -0
- package/dist/src/value-objects/index.d.ts.map +1 -0
- package/dist/src/value-objects/index.js +16 -0
- package/dist/src/value-objects/index.js.map +1 -0
- package/dist/src/value-objects/time/CalendarDay.d.ts +25 -0
- package/dist/src/value-objects/time/CalendarDay.d.ts.map +1 -0
- package/dist/src/value-objects/time/CalendarDay.js +74 -0
- package/dist/src/value-objects/time/CalendarDay.js.map +1 -0
- package/dist/src/value-objects/time/Day.d.ts +7 -0
- package/dist/src/value-objects/time/Day.d.ts.map +1 -0
- package/dist/src/value-objects/time/Day.js +18 -0
- package/dist/src/value-objects/time/Day.js.map +1 -0
- package/dist/src/value-objects/time/DayOfWeek.d.ts +34 -0
- package/dist/src/value-objects/time/DayOfWeek.d.ts.map +1 -0
- package/dist/src/value-objects/time/DayOfWeek.js +52 -0
- package/dist/src/value-objects/time/DayOfWeek.js.map +1 -0
- package/dist/src/value-objects/time/Duration.d.ts +23 -0
- package/dist/src/value-objects/time/Duration.d.ts.map +1 -0
- package/dist/src/value-objects/time/Duration.js +79 -0
- package/dist/src/value-objects/time/Duration.js.map +1 -0
- package/dist/src/value-objects/time/Hour.d.ts +15 -0
- package/dist/src/value-objects/time/Hour.d.ts.map +1 -0
- package/dist/src/value-objects/time/Hour.js +81 -0
- package/dist/src/value-objects/time/Hour.js.map +1 -0
- package/dist/src/value-objects/time/Month.d.ts +18 -0
- package/dist/src/value-objects/time/Month.d.ts.map +1 -0
- package/dist/src/value-objects/time/Month.js +41 -0
- package/dist/src/value-objects/time/Month.js.map +1 -0
- package/dist/src/value-objects/time/MonthOfYear.d.ts +17 -0
- package/dist/src/value-objects/time/MonthOfYear.d.ts.map +1 -0
- package/dist/src/value-objects/time/MonthOfYear.js +45 -0
- package/dist/src/value-objects/time/MonthOfYear.js.map +1 -0
- package/dist/src/value-objects/time/Timestamp.d.ts +51 -0
- package/dist/src/value-objects/time/Timestamp.d.ts.map +1 -0
- package/dist/src/value-objects/time/Timestamp.js +156 -0
- package/dist/src/value-objects/time/Timestamp.js.map +1 -0
- package/dist/src/value-objects/time/TimestampInterval.d.ts +26 -0
- package/dist/src/value-objects/time/TimestampInterval.d.ts.map +1 -0
- package/dist/src/value-objects/time/TimestampInterval.js +88 -0
- package/dist/src/value-objects/time/TimestampInterval.js.map +1 -0
- package/dist/src/value-objects/time/Year.d.ts +10 -0
- package/dist/src/value-objects/time/Year.d.ts.map +1 -0
- package/dist/src/value-objects/time/Year.js +26 -0
- package/dist/src/value-objects/time/Year.js.map +1 -0
- package/{src/value-objects/time/index.ts → dist/src/value-objects/time/index.d.ts} +1 -0
- package/dist/src/value-objects/time/index.d.ts.map +1 -0
- package/dist/src/value-objects/time/index.js +14 -0
- package/dist/src/value-objects/time/index.js.map +1 -0
- package/dist/tests/errors/BaseError.spec.d.ts +2 -0
- package/dist/tests/errors/BaseError.spec.d.ts.map +1 -0
- package/dist/tests/errors/BaseError.spec.js +54 -0
- package/dist/tests/errors/BaseError.spec.js.map +1 -0
- package/dist/tests/errors/DomainError.spec.d.ts +2 -0
- package/dist/tests/errors/DomainError.spec.d.ts.map +1 -0
- package/dist/tests/errors/DomainError.spec.js +47 -0
- package/dist/tests/errors/DomainError.spec.js.map +1 -0
- package/dist/tests/patterns/Assert.spec.d.ts +2 -0
- package/dist/tests/patterns/Assert.spec.d.ts.map +1 -0
- package/dist/tests/patterns/Assert.spec.js +27 -0
- package/dist/tests/patterns/Assert.spec.js.map +1 -0
- package/dist/tests/setup.jest.d.ts +2 -0
- package/dist/tests/setup.jest.d.ts.map +1 -0
- package/dist/tests/setup.jest.js +6 -0
- package/dist/tests/setup.jest.js.map +1 -0
- package/dist/tests/value-objects/Color.spec.d.ts +2 -0
- package/dist/tests/value-objects/Color.spec.d.ts.map +1 -0
- package/dist/tests/value-objects/Color.spec.js +171 -0
- package/dist/tests/value-objects/Color.spec.js.map +1 -0
- package/dist/tests/value-objects/Email.spec.d.ts +2 -0
- package/dist/tests/value-objects/Email.spec.d.ts.map +1 -0
- package/dist/tests/value-objects/Email.spec.js +117 -0
- package/dist/tests/value-objects/Email.spec.js.map +1 -0
- package/dist/tests/value-objects/Enum.spec.d.ts +2 -0
- package/dist/tests/value-objects/Enum.spec.d.ts.map +1 -0
- package/dist/tests/value-objects/Enum.spec.js +233 -0
- package/dist/tests/value-objects/Enum.spec.js.map +1 -0
- package/dist/tests/value-objects/Integer.spec.d.ts +2 -0
- package/dist/tests/value-objects/Integer.spec.d.ts.map +1 -0
- package/dist/tests/value-objects/Integer.spec.js +31 -0
- package/dist/tests/value-objects/Integer.spec.js.map +1 -0
- package/dist/tests/value-objects/NullObject.spec.d.ts +2 -0
- package/dist/tests/value-objects/NullObject.spec.d.ts.map +1 -0
- package/dist/tests/value-objects/NullObject.spec.js +48 -0
- package/dist/tests/value-objects/NullObject.spec.js.map +1 -0
- package/dist/tests/value-objects/NumberValueObject.spec.d.ts +2 -0
- package/dist/tests/value-objects/NumberValueObject.spec.d.ts.map +1 -0
- package/dist/tests/value-objects/NumberValueObject.spec.js +333 -0
- package/dist/tests/value-objects/NumberValueObject.spec.js.map +1 -0
- package/dist/tests/value-objects/PositiveNumber.spec.d.ts +2 -0
- package/dist/tests/value-objects/PositiveNumber.spec.d.ts.map +1 -0
- package/dist/tests/value-objects/PositiveNumber.spec.js +209 -0
- package/dist/tests/value-objects/PositiveNumber.spec.js.map +1 -0
- package/dist/tests/value-objects/StringValueObject.spec.d.ts +2 -0
- package/dist/tests/value-objects/StringValueObject.spec.d.ts.map +1 -0
- package/dist/tests/value-objects/StringValueObject.spec.js +104 -0
- package/dist/tests/value-objects/StringValueObject.spec.js.map +1 -0
- package/dist/tests/value-objects/coordinates/Coordinates.spec.d.ts +2 -0
- package/dist/tests/value-objects/coordinates/Coordinates.spec.d.ts.map +1 -0
- package/dist/tests/value-objects/coordinates/Coordinates.spec.js +76 -0
- package/dist/tests/value-objects/coordinates/Coordinates.spec.js.map +1 -0
- package/dist/tests/value-objects/coordinates/Latitude.spec.d.ts +2 -0
- package/dist/tests/value-objects/coordinates/Latitude.spec.d.ts.map +1 -0
- package/dist/tests/value-objects/coordinates/Latitude.spec.js +23 -0
- package/dist/tests/value-objects/coordinates/Latitude.spec.js.map +1 -0
- package/dist/tests/value-objects/coordinates/Longitude.spec.d.ts +2 -0
- package/dist/tests/value-objects/coordinates/Longitude.spec.d.ts.map +1 -0
- package/dist/tests/value-objects/coordinates/Longitude.spec.js +23 -0
- package/dist/tests/value-objects/coordinates/Longitude.spec.js.map +1 -0
- package/dist/tests/value-objects/hashes/Hashes.spec.d.ts +2 -0
- package/dist/tests/value-objects/hashes/Hashes.spec.d.ts.map +1 -0
- package/dist/tests/value-objects/hashes/Hashes.spec.js +107 -0
- package/dist/tests/value-objects/hashes/Hashes.spec.js.map +1 -0
- package/dist/tests/value-objects/hashes/MD5Hash.spec.d.ts +2 -0
- package/dist/tests/value-objects/hashes/MD5Hash.spec.d.ts.map +1 -0
- package/dist/tests/value-objects/hashes/MD5Hash.spec.js +147 -0
- package/dist/tests/value-objects/hashes/MD5Hash.spec.js.map +1 -0
- package/dist/tests/value-objects/hashes/SHA256Hash.spec.d.ts +2 -0
- package/dist/tests/value-objects/hashes/SHA256Hash.spec.d.ts.map +1 -0
- package/dist/tests/value-objects/hashes/SHA256Hash.spec.js +147 -0
- package/dist/tests/value-objects/hashes/SHA256Hash.spec.js.map +1 -0
- package/dist/tests/value-objects/hashes/SHA512Hash.spec.d.ts +2 -0
- package/dist/tests/value-objects/hashes/SHA512Hash.spec.d.ts.map +1 -0
- package/dist/tests/value-objects/hashes/SHA512Hash.spec.js +147 -0
- package/dist/tests/value-objects/hashes/SHA512Hash.spec.js.map +1 -0
- package/dist/tests/value-objects/ids/ShortId.spec.d.ts +2 -0
- package/dist/tests/value-objects/ids/ShortId.spec.d.ts.map +1 -0
- package/dist/tests/value-objects/ids/ShortId.spec.js +30 -0
- package/dist/tests/value-objects/ids/ShortId.spec.js.map +1 -0
- package/dist/tests/value-objects/ids/UUID.spec.d.ts +2 -0
- package/dist/tests/value-objects/ids/UUID.spec.d.ts.map +1 -0
- package/dist/tests/value-objects/ids/UUID.spec.js +30 -0
- package/dist/tests/value-objects/ids/UUID.spec.js.map +1 -0
- package/dist/tests/value-objects/time/CalendarDay.spec.d.ts +2 -0
- package/dist/tests/value-objects/time/CalendarDay.spec.d.ts.map +1 -0
- package/dist/tests/value-objects/time/CalendarDay.spec.js +149 -0
- package/dist/tests/value-objects/time/CalendarDay.spec.js.map +1 -0
- package/dist/tests/value-objects/time/Day.spec.d.ts +2 -0
- package/dist/tests/value-objects/time/Day.spec.d.ts.map +1 -0
- package/dist/tests/value-objects/time/Day.spec.js +28 -0
- package/dist/tests/value-objects/time/Day.spec.js.map +1 -0
- package/dist/tests/value-objects/time/DayOfWeek.spec.d.ts +2 -0
- package/dist/tests/value-objects/time/DayOfWeek.spec.d.ts.map +1 -0
- package/dist/tests/value-objects/time/DayOfWeek.spec.js +44 -0
- package/dist/tests/value-objects/time/DayOfWeek.spec.js.map +1 -0
- package/dist/tests/value-objects/time/Duration.spec.d.ts +2 -0
- package/dist/tests/value-objects/time/Duration.spec.d.ts.map +1 -0
- package/dist/tests/value-objects/time/Duration.spec.js +255 -0
- package/dist/tests/value-objects/time/Duration.spec.js.map +1 -0
- package/dist/tests/value-objects/time/Hour.spec.d.ts +2 -0
- package/dist/tests/value-objects/time/Hour.spec.d.ts.map +1 -0
- package/dist/tests/value-objects/time/Hour.spec.js +168 -0
- package/dist/tests/value-objects/time/Hour.spec.js.map +1 -0
- package/dist/tests/value-objects/time/MonthOfYear.spec.d.ts +2 -0
- package/dist/tests/value-objects/time/MonthOfYear.spec.d.ts.map +1 -0
- package/dist/tests/value-objects/time/MonthOfYear.spec.js +93 -0
- package/dist/tests/value-objects/time/MonthOfYear.spec.js.map +1 -0
- package/dist/tests/value-objects/time/Timestamp.spec.d.ts +2 -0
- package/dist/tests/value-objects/time/Timestamp.spec.d.ts.map +1 -0
- package/dist/tests/value-objects/time/Timestamp.spec.js +391 -0
- package/dist/tests/value-objects/time/Timestamp.spec.js.map +1 -0
- package/dist/tests/value-objects/time/TimestampInterval.spec.d.ts +2 -0
- package/dist/tests/value-objects/time/TimestampInterval.spec.d.ts.map +1 -0
- package/dist/tests/value-objects/time/TimestampInterval.spec.js +270 -0
- package/dist/tests/value-objects/time/TimestampInterval.spec.js.map +1 -0
- package/dist/tests/value-objects/time/Year.spec.d.ts +2 -0
- package/dist/tests/value-objects/time/Year.spec.d.ts.map +1 -0
- package/dist/tests/value-objects/time/Year.spec.js +41 -0
- package/dist/tests/value-objects/time/Year.spec.js.map +1 -0
- package/package.json +6 -2
- package/.editorconfig +0 -15
- package/.eslintignore +0 -3
- package/.eslintrc.json +0 -218
- package/.prettierrc.json +0 -13
- package/TECHNICAL_DOCUMENTATION.md +0 -1257
- package/jest.config.ts +0 -30
- package/src/errors/BaseError.ts +0 -20
- package/src/errors/DomainError.ts +0 -12
- package/src/errors/InvalidColorError.ts +0 -7
- package/src/errors/InvalidDayError.ts +0 -7
- package/src/errors/InvalidDayFormatError.ts +0 -7
- package/src/errors/InvalidEmailError.ts +0 -7
- package/src/errors/InvalidFormatError.ts +0 -7
- package/src/errors/InvalidHashError.ts +0 -7
- package/src/errors/InvalidHourError.ts +0 -7
- package/src/errors/InvalidIntegerError.ts +0 -7
- package/src/errors/InvalidLatitudeError.ts +0 -7
- package/src/errors/InvalidLengthError.ts +0 -9
- package/src/errors/InvalidLongitudeError.ts +0 -7
- package/src/errors/InvalidMinutesError.ts +0 -7
- package/src/errors/InvalidNumberError.ts +0 -7
- package/src/errors/InvalidPositiveNumberError.ts +0 -7
- package/src/errors/InvalidStringLengthError.ts +0 -9
- package/src/errors/InvalidTimestampIntervalError.ts +0 -10
- package/src/errors/InvalidValueError.ts +0 -7
- package/src/errors/NullObjectError.ts +0 -8
- package/src/errors/ValueNotInEnumError.ts +0 -9
- package/src/interfaces/PrimitiveOf.ts +0 -5
- package/src/interfaces/index.ts +0 -1
- package/src/patterns/Assert.ts +0 -15
- package/src/patterns/index.ts +0 -1
- package/src/value-objects/Color.ts +0 -39
- package/src/value-objects/Email.ts +0 -23
- package/src/value-objects/Enum.ts +0 -31
- package/src/value-objects/Integer.ts +0 -22
- package/src/value-objects/NullObject.ts +0 -60
- package/src/value-objects/NumberValueObject.ts +0 -56
- package/src/value-objects/PositiveNumber.ts +0 -20
- package/src/value-objects/StringValueObject.ts +0 -27
- package/src/value-objects/ValueObject.ts +0 -39
- package/src/value-objects/coordinates/Coordinates.ts +0 -30
- package/src/value-objects/coordinates/Latitude.ts +0 -22
- package/src/value-objects/coordinates/Longitude.ts +0 -25
- package/src/value-objects/hashes/Hash.ts +0 -19
- package/src/value-objects/hashes/MD5Hash.ts +0 -32
- package/src/value-objects/hashes/SHA256Hash.ts +0 -38
- package/src/value-objects/hashes/SHA512Hash.ts +0 -38
- package/src/value-objects/ids/ShortId.ts +0 -34
- package/src/value-objects/ids/UUID.ts +0 -34
- package/src/value-objects/time/CalendarDay.ts +0 -91
- package/src/value-objects/time/Day.ts +0 -17
- package/src/value-objects/time/DayOfWeek.ts +0 -60
- package/src/value-objects/time/Duration.ts +0 -142
- package/src/value-objects/time/Hour.ts +0 -105
- package/src/value-objects/time/Month.ts +0 -39
- package/src/value-objects/time/MonthOfYear.ts +0 -52
- package/src/value-objects/time/Timestamp.ts +0 -208
- package/src/value-objects/time/TimestampInterval.ts +0 -122
- package/src/value-objects/time/Year.ts +0 -27
- package/tests/errors/BaseError.spec.ts +0 -63
- package/tests/errors/DomainError.spec.ts +0 -52
- package/tests/patterns/Assert.spec.ts +0 -29
- package/tests/setup.jest.ts +0 -2
- package/tests/value-objects/Color.spec.ts +0 -214
- package/tests/value-objects/Email.spec.ts +0 -141
- package/tests/value-objects/Enum.spec.ts +0 -293
- package/tests/value-objects/Integer.spec.ts +0 -38
- package/tests/value-objects/NullObject.spec.ts +0 -55
- package/tests/value-objects/NumberValueObject.spec.ts +0 -446
- package/tests/value-objects/PositiveNumber.spec.ts +0 -274
- package/tests/value-objects/StringValueObject.spec.ts +0 -135
- package/tests/value-objects/coordinates/Coordinates.spec.ts +0 -90
- package/tests/value-objects/coordinates/Latitude.spec.ts +0 -24
- package/tests/value-objects/coordinates/Longitude.spec.ts +0 -24
- package/tests/value-objects/hashes/Hashes.spec.ts +0 -139
- package/tests/value-objects/hashes/MD5Hash.spec.ts +0 -187
- package/tests/value-objects/hashes/SHA256Hash.spec.ts +0 -220
- package/tests/value-objects/hashes/SHA512Hash.spec.ts +0 -220
- package/tests/value-objects/ids/ShortId.spec.ts +0 -34
- package/tests/value-objects/ids/UUID.spec.ts +0 -37
- package/tests/value-objects/time/CalendarDay.spec.ts +0 -182
- package/tests/value-objects/time/Day.spec.ts +0 -29
- package/tests/value-objects/time/DayOfWeek.spec.ts +0 -71
- package/tests/value-objects/time/Duration.spec.ts +0 -278
- package/tests/value-objects/time/Hour.spec.ts +0 -197
- package/tests/value-objects/time/MonthOfYear.spec.ts +0 -111
- package/tests/value-objects/time/Timestamp.spec.ts +0 -497
- package/tests/value-objects/time/TimestampInterval.spec.ts +0 -383
- package/tests/value-objects/time/Year.spec.ts +0 -48
- package/tsconfig.jest.json +0 -33
- package/tsconfig.json +0 -42
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const src_1 = require("../../src");
|
|
4
|
+
/* eslint-disable no-unused-expressions */
|
|
5
|
+
describe('NullObject', () => {
|
|
6
|
+
class TestNullObject {
|
|
7
|
+
uid;
|
|
8
|
+
constructor(uid) {
|
|
9
|
+
this.uid = uid;
|
|
10
|
+
}
|
|
11
|
+
getUid() {
|
|
12
|
+
return 'uid';
|
|
13
|
+
}
|
|
14
|
+
getName() {
|
|
15
|
+
return 'name';
|
|
16
|
+
}
|
|
17
|
+
valueOf() {
|
|
18
|
+
return this.getUid();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
let test;
|
|
22
|
+
beforeEach(() => {
|
|
23
|
+
test = src_1.NullObject.new(TestNullObject);
|
|
24
|
+
});
|
|
25
|
+
it('should replace all methods with fake methods throwing NullObjectError', () => {
|
|
26
|
+
expect(() => test.getUid()).toThrow(src_1.NullObjectError);
|
|
27
|
+
expect(() => test.getName()).toThrow(src_1.NullObjectError);
|
|
28
|
+
});
|
|
29
|
+
it('should replace valueOf with undefined ', () => {
|
|
30
|
+
expect(test.valueOf()).toBeUndefined();
|
|
31
|
+
});
|
|
32
|
+
it('should return true when checking if it is a null object', () => {
|
|
33
|
+
expect(src_1.NullObject.isNullObject(test)).toBeTrue();
|
|
34
|
+
});
|
|
35
|
+
it('should return false when checking if empty object it is a null object', () => {
|
|
36
|
+
expect(src_1.NullObject.isNullObject({})).toBeFalse();
|
|
37
|
+
});
|
|
38
|
+
it('should return false when checking if null it is a null object', () => {
|
|
39
|
+
expect(src_1.NullObject.isNullObject(null)).toBeFalse();
|
|
40
|
+
});
|
|
41
|
+
it('should return false when checking if undefined it is a null object', () => {
|
|
42
|
+
expect(src_1.NullObject.isNullObject(undefined)).toBeFalse();
|
|
43
|
+
});
|
|
44
|
+
it('should return false when checking if NaN it is a null object', () => {
|
|
45
|
+
expect(src_1.NullObject.isNullObject(NaN)).toBeFalse();
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=NullObject.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NullObject.spec.js","sourceRoot":"","sources":["../../../tests/value-objects/NullObject.spec.ts"],"names":[],"mappings":";;AAAA,mCAAwD;AAExD,0CAA0C;AAC1C,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,MAAM,cAAc;QACW;QAA7B,YAA6B,GAAW;YAAX,QAAG,GAAH,GAAG,CAAQ;QAAG,CAAC;QAErC,MAAM;YACX,OAAO,KAAK,CAAC;QACf,CAAC;QAEM,OAAO;YACZ,OAAO,MAAM,CAAC;QAChB,CAAC;QAEM,OAAO;YACZ,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;KACF;IAED,IAAI,IAAoB,CAAC;IAEzB,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,GAAG,gBAAU,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAC/E,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAe,CAAC,CAAC;QACrD,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAe,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,CAAC,gBAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAC/E,MAAM,CAAC,gBAAU,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,CAAC,gBAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,CAAC,gBAAU,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,CAAC,gBAAU,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NumberValueObject.spec.d.ts","sourceRoot":"","sources":["../../../tests/value-objects/NumberValueObject.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const src_1 = require("../../src");
|
|
4
|
+
describe('NumberValueObject', () => {
|
|
5
|
+
describe('constructor', () => {
|
|
6
|
+
it('should return a NullValueObject when a Nullish is received', () => {
|
|
7
|
+
expect(() => new src_1.NumberValueObject(undefined)).not.toThrow();
|
|
8
|
+
expect(src_1.NullObject.isNullObject(new src_1.NumberValueObject(undefined))).toBeTrue();
|
|
9
|
+
expect(src_1.NullObject.isNullObject(new src_1.NumberValueObject(null))).toBeTrue();
|
|
10
|
+
});
|
|
11
|
+
it('should throw InvalidNumberError for NaN', () => {
|
|
12
|
+
const value = NaN;
|
|
13
|
+
expect(() => new src_1.NumberValueObject(value)).toThrow(src_1.InvalidNumberError);
|
|
14
|
+
expect(() => new src_1.NumberValueObject(value)).toThrow(`Invalid number ${value}`);
|
|
15
|
+
});
|
|
16
|
+
it('should throw InvalidNumberError for a parsed string', () => {
|
|
17
|
+
const value = parseInt('Not a number');
|
|
18
|
+
expect(() => new src_1.NumberValueObject(value)).toThrow(src_1.InvalidNumberError);
|
|
19
|
+
expect(() => new src_1.NumberValueObject(value)).toThrow(`Invalid number ${value}`);
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
describe('isZero', () => {
|
|
23
|
+
it('should return true when value is 0', () => {
|
|
24
|
+
expect(new src_1.NumberValueObject(0).isZero()).toBeTrue();
|
|
25
|
+
});
|
|
26
|
+
it('should return false when value is not 0', () => {
|
|
27
|
+
expect(new src_1.NumberValueObject(1).isZero()).toBeFalse();
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
describe('isGreaterThan', () => {
|
|
31
|
+
it('should return true when value is greater than other', () => {
|
|
32
|
+
expect(new src_1.NumberValueObject(1).isGreaterThan(new src_1.NumberValueObject(0))).toBeTrue();
|
|
33
|
+
});
|
|
34
|
+
it('should return false when value is not greater than other', () => {
|
|
35
|
+
expect(new src_1.NumberValueObject(0).isGreaterThan(new src_1.NumberValueObject(1))).toBeFalse();
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
describe('isGreaterOrEqualThan', () => {
|
|
39
|
+
it('should return true when value is greater than other', () => {
|
|
40
|
+
expect(new src_1.NumberValueObject(1).isGreaterOrEqualThan(new src_1.NumberValueObject(0))).toBeTrue();
|
|
41
|
+
});
|
|
42
|
+
it('should return true when value is the equal than other', () => {
|
|
43
|
+
expect(new src_1.NumberValueObject(1).isGreaterOrEqualThan(new src_1.NumberValueObject(1))).toBeTrue();
|
|
44
|
+
});
|
|
45
|
+
it('should return false when value is not greater than other', () => {
|
|
46
|
+
expect(new src_1.NumberValueObject(0).isGreaterOrEqualThan(new src_1.NumberValueObject(1))).toBeFalse();
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
describe('isLessThan', () => {
|
|
50
|
+
it('should return true when value is less than other', () => {
|
|
51
|
+
expect(new src_1.NumberValueObject(0).isLessThan(new src_1.NumberValueObject(1))).toBeTrue();
|
|
52
|
+
});
|
|
53
|
+
it('should return false when value is not less than other', () => {
|
|
54
|
+
expect(new src_1.NumberValueObject(1).isLessThan(new src_1.NumberValueObject(0))).toBeFalse();
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
describe('isLessOrEqualThan', () => {
|
|
58
|
+
it('should return true when value is less than other', () => {
|
|
59
|
+
expect(new src_1.NumberValueObject(0).isLessOrEqualThan(new src_1.NumberValueObject(1))).toBeTrue();
|
|
60
|
+
});
|
|
61
|
+
it('should return true when value is equal than other', () => {
|
|
62
|
+
expect(new src_1.NumberValueObject(1).isLessOrEqualThan(new src_1.NumberValueObject(1))).toBeTrue();
|
|
63
|
+
});
|
|
64
|
+
it('should return false when value is not less than other', () => {
|
|
65
|
+
expect(new src_1.NumberValueObject(1).isLessOrEqualThan(new src_1.NumberValueObject(0))).toBeFalse();
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
describe('add', () => {
|
|
69
|
+
it('should return a new NumberValueObject with the sum of the two values', () => {
|
|
70
|
+
const value = new src_1.NumberValueObject(1);
|
|
71
|
+
const other = new src_1.NumberValueObject(2);
|
|
72
|
+
const result = value.add(other);
|
|
73
|
+
expect(result.valueOf()).toEqual(3);
|
|
74
|
+
});
|
|
75
|
+
it('should not mutate original objects when adding', () => {
|
|
76
|
+
const original = new src_1.NumberValueObject(10);
|
|
77
|
+
const other = new src_1.NumberValueObject(5);
|
|
78
|
+
const originalValue = original.valueOf();
|
|
79
|
+
const otherValue = other.valueOf();
|
|
80
|
+
const result = original.add(other);
|
|
81
|
+
// Original objects should remain unchanged
|
|
82
|
+
expect(original.valueOf()).toBe(originalValue);
|
|
83
|
+
expect(original.valueOf()).toBe(10);
|
|
84
|
+
expect(other.valueOf()).toBe(otherValue);
|
|
85
|
+
expect(other.valueOf()).toBe(5);
|
|
86
|
+
// Result should be a new instance
|
|
87
|
+
expect(result.valueOf()).toBe(15);
|
|
88
|
+
expect(result).not.toBe(original);
|
|
89
|
+
expect(result).not.toBe(other);
|
|
90
|
+
});
|
|
91
|
+
it('should work with primitive numbers and maintain immutability', () => {
|
|
92
|
+
const original = new src_1.NumberValueObject(15);
|
|
93
|
+
const originalValue = original.valueOf();
|
|
94
|
+
const result = original.add(5);
|
|
95
|
+
// Original should remain unchanged
|
|
96
|
+
expect(original.valueOf()).toBe(originalValue);
|
|
97
|
+
expect(original.valueOf()).toBe(15);
|
|
98
|
+
// Result should be correct and a new instance
|
|
99
|
+
expect(result.valueOf()).toBe(20);
|
|
100
|
+
expect(result).not.toBe(original);
|
|
101
|
+
});
|
|
102
|
+
it('should maintain immutability when adding zero', () => {
|
|
103
|
+
const original = new src_1.NumberValueObject(42);
|
|
104
|
+
const zero = new src_1.NumberValueObject(0);
|
|
105
|
+
const originalValue = original.valueOf();
|
|
106
|
+
const result = original.add(zero);
|
|
107
|
+
// Original should remain unchanged
|
|
108
|
+
expect(original.valueOf()).toBe(originalValue);
|
|
109
|
+
expect(original.valueOf()).toBe(42);
|
|
110
|
+
expect(zero.valueOf()).toBe(0);
|
|
111
|
+
// Result should be correct and a new instance
|
|
112
|
+
expect(result.valueOf()).toBe(42);
|
|
113
|
+
expect(result).not.toBe(original);
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
describe('subtract', () => {
|
|
117
|
+
it('should return a new NumberValueObject with the difference of the two values', () => {
|
|
118
|
+
const value = new src_1.NumberValueObject(1);
|
|
119
|
+
const other = new src_1.NumberValueObject(2);
|
|
120
|
+
const result = value.subtract(other);
|
|
121
|
+
expect(result.valueOf()).toEqual(-1);
|
|
122
|
+
});
|
|
123
|
+
it('should not mutate original objects when subtracting', () => {
|
|
124
|
+
const original = new src_1.NumberValueObject(10);
|
|
125
|
+
const other = new src_1.NumberValueObject(3);
|
|
126
|
+
const originalValue = original.valueOf();
|
|
127
|
+
const otherValue = other.valueOf();
|
|
128
|
+
const result = original.subtract(other);
|
|
129
|
+
// Original objects should remain unchanged
|
|
130
|
+
expect(original.valueOf()).toBe(originalValue);
|
|
131
|
+
expect(original.valueOf()).toBe(10);
|
|
132
|
+
expect(other.valueOf()).toBe(otherValue);
|
|
133
|
+
expect(other.valueOf()).toBe(3);
|
|
134
|
+
// Result should be a new instance
|
|
135
|
+
expect(result.valueOf()).toBe(7);
|
|
136
|
+
expect(result).not.toBe(original);
|
|
137
|
+
expect(result).not.toBe(other);
|
|
138
|
+
});
|
|
139
|
+
it('should work with primitive numbers and maintain immutability', () => {
|
|
140
|
+
const original = new src_1.NumberValueObject(15);
|
|
141
|
+
const originalValue = original.valueOf();
|
|
142
|
+
const result = original.subtract(3);
|
|
143
|
+
// Original should remain unchanged
|
|
144
|
+
expect(original.valueOf()).toBe(originalValue);
|
|
145
|
+
expect(original.valueOf()).toBe(15);
|
|
146
|
+
// Result should be correct and a new instance
|
|
147
|
+
expect(result.valueOf()).toBe(12);
|
|
148
|
+
expect(result).not.toBe(original);
|
|
149
|
+
});
|
|
150
|
+
it('should maintain immutability when subtracting zero', () => {
|
|
151
|
+
const original = new src_1.NumberValueObject(42);
|
|
152
|
+
const zero = new src_1.NumberValueObject(0);
|
|
153
|
+
const originalValue = original.valueOf();
|
|
154
|
+
const result = original.subtract(zero);
|
|
155
|
+
// Original should remain unchanged
|
|
156
|
+
expect(original.valueOf()).toBe(originalValue);
|
|
157
|
+
expect(original.valueOf()).toBe(42);
|
|
158
|
+
expect(zero.valueOf()).toBe(0);
|
|
159
|
+
// Result should be correct and a new instance
|
|
160
|
+
expect(result.valueOf()).toBe(42);
|
|
161
|
+
expect(result).not.toBe(original);
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
describe('multiply', () => {
|
|
165
|
+
it('should return a new NumberValueObject with the product of the two values', () => {
|
|
166
|
+
const value = new src_1.NumberValueObject(1);
|
|
167
|
+
const other = new src_1.NumberValueObject(2);
|
|
168
|
+
const result = value.multiply(other);
|
|
169
|
+
expect(result.valueOf()).toEqual(2);
|
|
170
|
+
});
|
|
171
|
+
it('should not mutate original objects when multiplying', () => {
|
|
172
|
+
const original = new src_1.NumberValueObject(7);
|
|
173
|
+
const other = new src_1.NumberValueObject(6);
|
|
174
|
+
const originalValue = original.valueOf();
|
|
175
|
+
const otherValue = other.valueOf();
|
|
176
|
+
const result = original.multiply(other);
|
|
177
|
+
// Original objects should remain unchanged
|
|
178
|
+
expect(original.valueOf()).toBe(originalValue);
|
|
179
|
+
expect(original.valueOf()).toBe(7);
|
|
180
|
+
expect(other.valueOf()).toBe(otherValue);
|
|
181
|
+
expect(other.valueOf()).toBe(6);
|
|
182
|
+
// Result should be a new instance
|
|
183
|
+
expect(result.valueOf()).toBe(42);
|
|
184
|
+
expect(result).not.toBe(original);
|
|
185
|
+
expect(result).not.toBe(other);
|
|
186
|
+
});
|
|
187
|
+
it('should work with primitive numbers and maintain immutability', () => {
|
|
188
|
+
const original = new src_1.NumberValueObject(15);
|
|
189
|
+
const originalValue = original.valueOf();
|
|
190
|
+
const result = original.multiply(2);
|
|
191
|
+
// Original should remain unchanged
|
|
192
|
+
expect(original.valueOf()).toBe(originalValue);
|
|
193
|
+
expect(original.valueOf()).toBe(15);
|
|
194
|
+
// Result should be correct and a new instance
|
|
195
|
+
expect(result.valueOf()).toBe(30);
|
|
196
|
+
expect(result).not.toBe(original);
|
|
197
|
+
});
|
|
198
|
+
it('should maintain immutability when multiplying by zero', () => {
|
|
199
|
+
const original = new src_1.NumberValueObject(42);
|
|
200
|
+
const zero = new src_1.NumberValueObject(0);
|
|
201
|
+
const originalValue = original.valueOf();
|
|
202
|
+
const result = original.multiply(zero);
|
|
203
|
+
// Original should remain unchanged
|
|
204
|
+
expect(original.valueOf()).toBe(originalValue);
|
|
205
|
+
expect(original.valueOf()).toBe(42);
|
|
206
|
+
expect(zero.valueOf()).toBe(0);
|
|
207
|
+
// Result should be correct and a new instance
|
|
208
|
+
expect(result.valueOf()).toBe(0);
|
|
209
|
+
expect(result).not.toBe(original);
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
describe('divide', () => {
|
|
213
|
+
it('should return a new NumberValueObject with the quotient of the two values', () => {
|
|
214
|
+
const value = new src_1.NumberValueObject(1);
|
|
215
|
+
const other = new src_1.NumberValueObject(2);
|
|
216
|
+
const result = value.divide(other);
|
|
217
|
+
expect(result.valueOf()).toEqual(0.5);
|
|
218
|
+
});
|
|
219
|
+
it('should not mutate original objects when dividing', () => {
|
|
220
|
+
const original = new src_1.NumberValueObject(20);
|
|
221
|
+
const other = new src_1.NumberValueObject(4);
|
|
222
|
+
const originalValue = original.valueOf();
|
|
223
|
+
const otherValue = other.valueOf();
|
|
224
|
+
const result = original.divide(other);
|
|
225
|
+
// Original objects should remain unchanged
|
|
226
|
+
expect(original.valueOf()).toBe(originalValue);
|
|
227
|
+
expect(original.valueOf()).toBe(20);
|
|
228
|
+
expect(other.valueOf()).toBe(otherValue);
|
|
229
|
+
expect(other.valueOf()).toBe(4);
|
|
230
|
+
// Result should be a new instance
|
|
231
|
+
expect(result.valueOf()).toBe(5);
|
|
232
|
+
expect(result).not.toBe(original);
|
|
233
|
+
expect(result).not.toBe(other);
|
|
234
|
+
});
|
|
235
|
+
it('should work with primitive numbers and maintain immutability', () => {
|
|
236
|
+
const original = new src_1.NumberValueObject(15);
|
|
237
|
+
const originalValue = original.valueOf();
|
|
238
|
+
const result = original.divide(3);
|
|
239
|
+
// Original should remain unchanged
|
|
240
|
+
expect(original.valueOf()).toBe(originalValue);
|
|
241
|
+
expect(original.valueOf()).toBe(15);
|
|
242
|
+
// Result should be correct and a new instance
|
|
243
|
+
expect(result.valueOf()).toBe(5);
|
|
244
|
+
expect(result).not.toBe(original);
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
describe('inheritance and ValueObject behavior', () => {
|
|
248
|
+
it('should inherit from ValueObject', () => {
|
|
249
|
+
const numberValueObject = new src_1.NumberValueObject(42);
|
|
250
|
+
expect(numberValueObject).toBeInstanceOf(src_1.NumberValueObject);
|
|
251
|
+
expect(numberValueObject.valueOf).toBeDefined();
|
|
252
|
+
expect(numberValueObject.isEqual).toBeDefined();
|
|
253
|
+
expect(numberValueObject.toString).toBeDefined();
|
|
254
|
+
});
|
|
255
|
+
it('should implement valueOf() method correctly', () => {
|
|
256
|
+
const value = 123.45;
|
|
257
|
+
const numberValueObject = new src_1.NumberValueObject(value);
|
|
258
|
+
expect(numberValueObject.valueOf()).toBe(value);
|
|
259
|
+
});
|
|
260
|
+
it('should implement toString() method correctly from ValueObject', () => {
|
|
261
|
+
const value = 987.654;
|
|
262
|
+
const numberValueObject = new src_1.NumberValueObject(value);
|
|
263
|
+
expect(numberValueObject.toString()).toBe(value.toString());
|
|
264
|
+
expect(numberValueObject.toString()).toBe('987.654');
|
|
265
|
+
});
|
|
266
|
+
it('should implement isEqual() method correctly', () => {
|
|
267
|
+
const value = 100;
|
|
268
|
+
const numberValueObject1 = new src_1.NumberValueObject(value);
|
|
269
|
+
const numberValueObject2 = new src_1.NumberValueObject(value);
|
|
270
|
+
const numberValueObject3 = new src_1.NumberValueObject(200);
|
|
271
|
+
expect(numberValueObject1.isEqual(numberValueObject2)).toBeTrue();
|
|
272
|
+
expect(numberValueObject1.isEqual(numberValueObject3)).toBeFalse();
|
|
273
|
+
expect(numberValueObject1.isEqual(value)).toBeTrue();
|
|
274
|
+
expect(numberValueObject1.isEqual(200)).toBeFalse();
|
|
275
|
+
});
|
|
276
|
+
it('should compare with primitive values using isEqual', () => {
|
|
277
|
+
const numberValueObject = new src_1.NumberValueObject(42);
|
|
278
|
+
expect(numberValueObject.isEqual(42)).toBeTrue();
|
|
279
|
+
expect(numberValueObject.isEqual(43)).toBeFalse();
|
|
280
|
+
});
|
|
281
|
+
it('should implement clone() method correctly', () => {
|
|
282
|
+
const originalValue = 3.14159;
|
|
283
|
+
const original = new src_1.NumberValueObject(originalValue);
|
|
284
|
+
const cloned = original.clone();
|
|
285
|
+
expect(cloned).toBeInstanceOf(src_1.NumberValueObject);
|
|
286
|
+
expect(cloned.valueOf()).toBe(originalValue);
|
|
287
|
+
expect(cloned.toString()).toBe(originalValue.toString());
|
|
288
|
+
expect(cloned.isEqual(original)).toBeTrue();
|
|
289
|
+
expect(cloned).not.toBe(original); // Different instances
|
|
290
|
+
});
|
|
291
|
+
it('should accept another NumberValueObject in constructor', () => {
|
|
292
|
+
const original = new src_1.NumberValueObject(555);
|
|
293
|
+
const copy = new src_1.NumberValueObject(original);
|
|
294
|
+
expect(copy.valueOf()).toBe(555);
|
|
295
|
+
expect(copy.isEqual(original)).toBeTrue();
|
|
296
|
+
});
|
|
297
|
+
it('should validate number when constructed from another NumberValueObject', () => {
|
|
298
|
+
const validNumberValueObject = new src_1.NumberValueObject(123);
|
|
299
|
+
expect(() => new src_1.NumberValueObject(validNumberValueObject)).not.toThrow();
|
|
300
|
+
// Create an invalid NumberValueObject by bypassing validation (for testing)
|
|
301
|
+
const invalidValue = NaN;
|
|
302
|
+
expect(() => new src_1.NumberValueObject(invalidValue)).toThrow(src_1.InvalidNumberError);
|
|
303
|
+
});
|
|
304
|
+
it('should maintain immutability with chained operations', () => {
|
|
305
|
+
const original = new src_1.NumberValueObject(10);
|
|
306
|
+
const two = new src_1.NumberValueObject(2);
|
|
307
|
+
const three = new src_1.NumberValueObject(3);
|
|
308
|
+
const originalValue = original.valueOf();
|
|
309
|
+
const twoValue = two.valueOf();
|
|
310
|
+
const threeValue = three.valueOf();
|
|
311
|
+
// Chain operations: (10 + 2) * 3 / 2
|
|
312
|
+
const step1 = original.add(two);
|
|
313
|
+
const step2 = step1.multiply(three);
|
|
314
|
+
const final = step2.divide(two);
|
|
315
|
+
// All original objects should remain unchanged
|
|
316
|
+
expect(original.valueOf()).toBe(originalValue);
|
|
317
|
+
expect(original.valueOf()).toBe(10);
|
|
318
|
+
expect(two.valueOf()).toBe(twoValue);
|
|
319
|
+
expect(two.valueOf()).toBe(2);
|
|
320
|
+
expect(three.valueOf()).toBe(threeValue);
|
|
321
|
+
expect(three.valueOf()).toBe(3);
|
|
322
|
+
// Each step should create new instances
|
|
323
|
+
expect(step1.valueOf()).toBe(12);
|
|
324
|
+
expect(step2.valueOf()).toBe(36);
|
|
325
|
+
expect(final.valueOf()).toBe(18);
|
|
326
|
+
// All results should be different instances
|
|
327
|
+
expect(step1).not.toBe(original);
|
|
328
|
+
expect(step2).not.toBe(step1);
|
|
329
|
+
expect(final).not.toBe(step2);
|
|
330
|
+
});
|
|
331
|
+
});
|
|
332
|
+
});
|
|
333
|
+
//# sourceMappingURL=NumberValueObject.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NumberValueObject.spec.js","sourceRoot":"","sources":["../../../tests/value-objects/NumberValueObject.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PositiveNumber.spec.d.ts","sourceRoot":"","sources":["../../../tests/value-objects/PositiveNumber.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const src_1 = require("../../src");
|
|
4
|
+
describe('PositiveNumber', () => {
|
|
5
|
+
describe('constructor', () => {
|
|
6
|
+
it('should return a NullValueObject when a Nullish is received', () => {
|
|
7
|
+
expect(() => new src_1.PositiveNumber(undefined)).not.toThrow();
|
|
8
|
+
expect(src_1.NullObject.isNullObject(new src_1.PositiveNumber(undefined))).toBeTrue();
|
|
9
|
+
expect(src_1.NullObject.isNullObject(new src_1.PositiveNumber(null))).toBeTrue();
|
|
10
|
+
});
|
|
11
|
+
it('should validate is positive number', () => {
|
|
12
|
+
expect(() => new src_1.PositiveNumber(-1)).toThrow('Value must be greater or equal than 0');
|
|
13
|
+
expect(() => new src_1.PositiveNumber(-1)).toThrow(src_1.InvalidPositiveNumberError);
|
|
14
|
+
});
|
|
15
|
+
it('should accept positive numbers', () => {
|
|
16
|
+
expect(() => new src_1.PositiveNumber(1)).not.toThrow();
|
|
17
|
+
expect(() => new src_1.PositiveNumber(0.1)).not.toThrow();
|
|
18
|
+
expect(() => new src_1.PositiveNumber(100.5)).not.toThrow();
|
|
19
|
+
});
|
|
20
|
+
it('should reject negative numbers', () => {
|
|
21
|
+
expect(() => new src_1.PositiveNumber(-0.1)).toThrow(src_1.InvalidPositiveNumberError);
|
|
22
|
+
expect(() => new src_1.PositiveNumber(-100)).toThrow(src_1.InvalidPositiveNumberError);
|
|
23
|
+
});
|
|
24
|
+
it('should accept another PositiveNumber', () => {
|
|
25
|
+
const original = new src_1.PositiveNumber(42);
|
|
26
|
+
const copy = new src_1.PositiveNumber(original);
|
|
27
|
+
expect(copy.valueOf()).toBe(42);
|
|
28
|
+
expect(copy.isEqual(original)).toBeTrue();
|
|
29
|
+
});
|
|
30
|
+
it('should validate when constructed from another NumberValueObject', () => {
|
|
31
|
+
const validNumber = new src_1.PositiveNumber(10);
|
|
32
|
+
expect(() => new src_1.PositiveNumber(validNumber)).not.toThrow();
|
|
33
|
+
// Cannot test invalid NumberValueObject directly since NumberValueObject validates NaN
|
|
34
|
+
// But we can test edge cases
|
|
35
|
+
expect(() => new src_1.PositiveNumber(0.00001)).not.toThrow();
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
describe('inheritance and NumberValueObject behavior', () => {
|
|
39
|
+
it('should inherit from NumberValueObject', () => {
|
|
40
|
+
const positiveNumber = new src_1.PositiveNumber(42);
|
|
41
|
+
expect(positiveNumber).toBeInstanceOf(src_1.PositiveNumber);
|
|
42
|
+
expect(positiveNumber).toBeInstanceOf(src_1.NumberValueObject);
|
|
43
|
+
expect(positiveNumber.valueOf).toBeDefined();
|
|
44
|
+
expect(positiveNumber.isEqual).toBeDefined();
|
|
45
|
+
expect(positiveNumber.toString).toBeDefined();
|
|
46
|
+
expect(positiveNumber.isZero).toBeDefined();
|
|
47
|
+
expect(positiveNumber.add).toBeDefined();
|
|
48
|
+
expect(positiveNumber.subtract).toBeDefined();
|
|
49
|
+
expect(positiveNumber.multiply).toBeDefined();
|
|
50
|
+
expect(positiveNumber.divide).toBeDefined();
|
|
51
|
+
});
|
|
52
|
+
it('should implement valueOf() method correctly from NumberValueObject', () => {
|
|
53
|
+
const value = 123.45;
|
|
54
|
+
const positiveNumber = new src_1.PositiveNumber(value);
|
|
55
|
+
expect(positiveNumber.valueOf()).toBe(value);
|
|
56
|
+
});
|
|
57
|
+
it('should implement toString() method correctly from ValueObject', () => {
|
|
58
|
+
const value = 987.654;
|
|
59
|
+
const positiveNumber = new src_1.PositiveNumber(value);
|
|
60
|
+
expect(positiveNumber.toString()).toBe(value.toString());
|
|
61
|
+
expect(positiveNumber.toString()).toBe('987.654');
|
|
62
|
+
});
|
|
63
|
+
it('should implement isEqual() method correctly', () => {
|
|
64
|
+
const value = 100.5;
|
|
65
|
+
const positiveNumber1 = new src_1.PositiveNumber(value);
|
|
66
|
+
const positiveNumber2 = new src_1.PositiveNumber(value);
|
|
67
|
+
const positiveNumber3 = new src_1.PositiveNumber(200.7);
|
|
68
|
+
expect(positiveNumber1.isEqual(positiveNumber2)).toBeTrue();
|
|
69
|
+
expect(positiveNumber1.isEqual(positiveNumber3)).toBeFalse();
|
|
70
|
+
expect(positiveNumber1.isEqual(value)).toBeTrue();
|
|
71
|
+
expect(positiveNumber1.isEqual(200.7)).toBeFalse();
|
|
72
|
+
});
|
|
73
|
+
it('should implement isZero() method correctly', () => {
|
|
74
|
+
// PositiveNumber cannot be zero, but method should exist
|
|
75
|
+
const positiveNumber = new src_1.PositiveNumber(1);
|
|
76
|
+
expect(positiveNumber.isZero()).toBeFalse();
|
|
77
|
+
expect(typeof positiveNumber.isZero).toBe('function');
|
|
78
|
+
});
|
|
79
|
+
it('should implement comparison methods correctly', () => {
|
|
80
|
+
const smaller = new src_1.PositiveNumber(5);
|
|
81
|
+
const larger = new src_1.PositiveNumber(10);
|
|
82
|
+
expect(larger.isGreaterThan(smaller)).toBeTrue();
|
|
83
|
+
expect(smaller.isLessThan(larger)).toBeTrue();
|
|
84
|
+
expect(larger.isGreaterOrEqualThan(smaller)).toBeTrue();
|
|
85
|
+
expect(smaller.isLessOrEqualThan(larger)).toBeTrue();
|
|
86
|
+
const equal = new src_1.PositiveNumber(5);
|
|
87
|
+
expect(smaller.isGreaterOrEqualThan(equal)).toBeTrue();
|
|
88
|
+
expect(smaller.isLessOrEqualThan(equal)).toBeTrue();
|
|
89
|
+
});
|
|
90
|
+
it('should implement clone() method correctly', () => {
|
|
91
|
+
const originalValue = 3.14159;
|
|
92
|
+
const original = new src_1.PositiveNumber(originalValue);
|
|
93
|
+
const cloned = original.clone();
|
|
94
|
+
expect(cloned).toBeInstanceOf(src_1.PositiveNumber);
|
|
95
|
+
expect(cloned).toBeInstanceOf(src_1.NumberValueObject);
|
|
96
|
+
expect(cloned.valueOf()).toBe(originalValue);
|
|
97
|
+
expect(cloned.toString()).toBe(originalValue.toString());
|
|
98
|
+
expect(cloned.isEqual(original)).toBeTrue();
|
|
99
|
+
expect(cloned).not.toBe(original); // Different instances
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
describe('arithmetic operations with positive validation', () => {
|
|
103
|
+
it('should perform addition and maintain positive result', () => {
|
|
104
|
+
const a = new src_1.PositiveNumber(5);
|
|
105
|
+
const b = new src_1.PositiveNumber(3);
|
|
106
|
+
const result = a.add(b);
|
|
107
|
+
expect(result).toBeInstanceOf(src_1.PositiveNumber);
|
|
108
|
+
expect(result.valueOf()).toBe(8);
|
|
109
|
+
});
|
|
110
|
+
it('should perform multiplication and maintain positive result', () => {
|
|
111
|
+
const a = new src_1.PositiveNumber(4);
|
|
112
|
+
const b = new src_1.PositiveNumber(2.5);
|
|
113
|
+
const result = a.multiply(b);
|
|
114
|
+
expect(result).toBeInstanceOf(src_1.PositiveNumber);
|
|
115
|
+
expect(result.valueOf()).toBe(10);
|
|
116
|
+
});
|
|
117
|
+
it('should perform division and maintain positive result', () => {
|
|
118
|
+
const a = new src_1.PositiveNumber(10);
|
|
119
|
+
const b = new src_1.PositiveNumber(2);
|
|
120
|
+
const result = a.divide(b);
|
|
121
|
+
expect(result).toBeInstanceOf(src_1.PositiveNumber);
|
|
122
|
+
expect(result.valueOf()).toBe(5);
|
|
123
|
+
});
|
|
124
|
+
it('should throw an error if a subtraction results in negative number', () => {
|
|
125
|
+
const a = new src_1.PositiveNumber(3);
|
|
126
|
+
const b = new src_1.PositiveNumber(5);
|
|
127
|
+
expect(() => a.subtract(b)).toThrow(src_1.InvalidPositiveNumberError);
|
|
128
|
+
});
|
|
129
|
+
it('should work with primitive numbers in operations', () => {
|
|
130
|
+
const positive = new src_1.PositiveNumber(15);
|
|
131
|
+
const addResult = positive.add(5);
|
|
132
|
+
const multiplyResult = positive.multiply(2);
|
|
133
|
+
const divideResult = positive.divide(3);
|
|
134
|
+
expect(addResult.valueOf()).toBe(20);
|
|
135
|
+
expect(multiplyResult.valueOf()).toBe(30);
|
|
136
|
+
expect(divideResult.valueOf()).toBe(5);
|
|
137
|
+
// All results should be NumberValueObject instances (not necessarily PositiveNumber)
|
|
138
|
+
expect(addResult.valueOf()).toBeGreaterThan(0);
|
|
139
|
+
expect(multiplyResult.valueOf()).toBeGreaterThan(0);
|
|
140
|
+
expect(divideResult.valueOf()).toBeGreaterThan(0);
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
describe('immutability', () => {
|
|
144
|
+
it('should have immutable value property inherited from NumberValueObject', () => {
|
|
145
|
+
const positiveNumber = new src_1.PositiveNumber(42);
|
|
146
|
+
// Verify immutability through value consistency
|
|
147
|
+
expect(positiveNumber.valueOf()).toBe(42);
|
|
148
|
+
expect(positiveNumber.value).toBe(42);
|
|
149
|
+
const originalValue = positiveNumber.valueOf();
|
|
150
|
+
expect(originalValue).toBe(42);
|
|
151
|
+
});
|
|
152
|
+
it('should return the same value after creation', () => {
|
|
153
|
+
const originalValue = 3.14159;
|
|
154
|
+
const positiveNumber = new src_1.PositiveNumber(originalValue);
|
|
155
|
+
expect(positiveNumber.valueOf()).toBe(originalValue);
|
|
156
|
+
expect(positiveNumber.toString()).toBe(originalValue.toString());
|
|
157
|
+
// Value should remain the same
|
|
158
|
+
expect(positiveNumber.valueOf()).toBe(originalValue);
|
|
159
|
+
});
|
|
160
|
+
it('should create new instances instead of modifying existing ones', () => {
|
|
161
|
+
const value1 = 100.5;
|
|
162
|
+
const value2 = 200.7;
|
|
163
|
+
const positiveNumber1 = new src_1.PositiveNumber(value1);
|
|
164
|
+
const positiveNumber2 = new src_1.PositiveNumber(value2);
|
|
165
|
+
expect(positiveNumber1.valueOf()).toBe(value1);
|
|
166
|
+
expect(positiveNumber2.valueOf()).toBe(value2);
|
|
167
|
+
expect(positiveNumber1.valueOf()).not.toBe(positiveNumber2.valueOf());
|
|
168
|
+
});
|
|
169
|
+
it('should maintain immutability when constructed from another PositiveNumber', () => {
|
|
170
|
+
const original = new src_1.PositiveNumber(987.654);
|
|
171
|
+
const copy = new src_1.PositiveNumber(original);
|
|
172
|
+
expect(copy.valueOf()).toBe(original.valueOf());
|
|
173
|
+
expect(copy.isEqual(original)).toBeTrue();
|
|
174
|
+
// Both should maintain their values independently
|
|
175
|
+
expect(original.valueOf()).toBe(987.654);
|
|
176
|
+
expect(copy.valueOf()).toBe(987.654);
|
|
177
|
+
});
|
|
178
|
+
it('should maintain immutability when cloning', () => {
|
|
179
|
+
const original = new src_1.PositiveNumber(777.888);
|
|
180
|
+
const cloned = original.clone();
|
|
181
|
+
expect(original.valueOf()).toBe(777.888);
|
|
182
|
+
expect(cloned.valueOf()).toBe(777.888);
|
|
183
|
+
expect(original.isEqual(cloned)).toBeTrue();
|
|
184
|
+
expect(original).not.toBe(cloned);
|
|
185
|
+
// Both should remain immutable
|
|
186
|
+
expect(original.valueOf()).toBe(777.888);
|
|
187
|
+
expect(cloned.valueOf()).toBe(777.888);
|
|
188
|
+
});
|
|
189
|
+
it('should maintain immutability in arithmetic operations', () => {
|
|
190
|
+
const original = new src_1.PositiveNumber(10);
|
|
191
|
+
const other = new src_1.PositiveNumber(5);
|
|
192
|
+
const sum = original.add(other);
|
|
193
|
+
const product = original.multiply(other);
|
|
194
|
+
const quotient = original.divide(other);
|
|
195
|
+
// Original values should remain unchanged
|
|
196
|
+
expect(original.valueOf()).toBe(10);
|
|
197
|
+
expect(other.valueOf()).toBe(5);
|
|
198
|
+
// Results should be correct
|
|
199
|
+
expect(sum.valueOf()).toBe(15);
|
|
200
|
+
expect(product.valueOf()).toBe(50);
|
|
201
|
+
expect(quotient.valueOf()).toBe(2);
|
|
202
|
+
// All should be different instances
|
|
203
|
+
expect(sum).not.toBe(original);
|
|
204
|
+
expect(product).not.toBe(original);
|
|
205
|
+
expect(quotient).not.toBe(original);
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
//# sourceMappingURL=PositiveNumber.spec.js.map
|