Skip to content

Commit

Permalink
Adding validation for mixing incompatible units (#861)
Browse files Browse the repository at this point in the history
  • Loading branch information
mateusbw committed May 8, 2021
1 parent c3be6a4 commit d253afc
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 1 deletion.
17 changes: 16 additions & 1 deletion src/datetime.js
Expand Up @@ -1339,7 +1339,22 @@ export default class DateTime {
settingWeekStuff =
!isUndefined(normalized.weekYear) ||
!isUndefined(normalized.weekNumber) ||
!isUndefined(normalized.weekday);
!isUndefined(normalized.weekday),
containsOrdinal = !isUndefined(normalized.ordinal),
containsGregorYear = !isUndefined(normalized.year),
containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),
containsGregor = containsGregorYear || containsGregorMD,
definiteWeekDef = normalized.weekYear || normalized.weekNumber;

if ((containsGregor || containsOrdinal) && definiteWeekDef) {
throw new ConflictingSpecificationError(
"Can't mix weekYear/weekNumber units with year/month/day or ordinals"
);
}

if (containsGregorMD && containsOrdinal) {
throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day");
}

let mixed;
if (settingWeekStuff) {
Expand Down
6 changes: 6 additions & 0 deletions test/datetime/set.test.js
Expand Up @@ -123,6 +123,12 @@ test("DateTime#set throws for metadata", () => {
expect(() => dt.set({ invalid: true })).toThrow();
});

test("DateTime#set throws for mixing incompatible units", () => {
expect(() => dt.set({ year: 2020, weekNumber: 22 })).toThrow();
expect(() => dt.set({ ordinal: 200, weekNumber: 22 })).toThrow();
expect(() => dt.set({ ordinal: 200, month: 8 })).toThrow();
});

test("DateTime#set maintains invalidity", () => {
expect(DateTime.invalid("because").set({ ordinal: 200 }).isValid).toBe(false);
});

0 comments on commit d253afc

Please sign in to comment.