fix(quick add magic): parse full month name as month, do not replace only the abbreviation
Resolves https://kolaente.dev/vikunja/vikunja/issues/2320
This commit is contained in:
@ -1,7 +1,7 @@
|
||||
import {beforeEach, afterEach, describe, it, expect, vi} from 'vitest'
|
||||
import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest'
|
||||
|
||||
import {parseTaskText, PrefixMode} from './parseTaskText'
|
||||
import {getDateFromText, parseDate} from '../helpers/time/parseDate'
|
||||
import {ParsedTaskText, parseTaskText, PrefixMode} from './parseTaskText'
|
||||
import {parseDate} from '../helpers/time/parseDate'
|
||||
import {calculateDayInterval} from '../helpers/time/calculateDayInterval'
|
||||
import {PRIORITIES} from '@/constants/priorities'
|
||||
import {MILLISECONDS_A_DAY} from '@/constants/date'
|
||||
@ -461,50 +461,69 @@ describe('Parse Task Text', () => {
|
||||
'1/27': '2022-1-27',
|
||||
'jan 27': '2022-1-27',
|
||||
'Jan 27': '2022-1-27',
|
||||
'january 27': '2022-1-27',
|
||||
'January 27': '2022-1-27',
|
||||
'feb 21': '2022-2-21',
|
||||
'Feb 21': '2022-2-21',
|
||||
'february 21': '2022-2-21',
|
||||
'February 21': '2022-2-21',
|
||||
'mar 21': '2022-3-21',
|
||||
'Mar 21': '2022-3-21',
|
||||
'march 21': '2022-3-21',
|
||||
'March 21': '2022-3-21',
|
||||
'apr 21': '2022-4-21',
|
||||
'Apr 21': '2022-4-21',
|
||||
'april 21': '2022-4-21',
|
||||
'April 21': '2022-4-21',
|
||||
'may 21': '2022-5-21',
|
||||
'May 21': '2022-5-21',
|
||||
'jun 21': '2022-6-21',
|
||||
'Jun 21': '2022-6-21',
|
||||
'june 21': '2022-6-21',
|
||||
'June 21': '2022-6-21',
|
||||
'21st June': '2021-6-21',
|
||||
'jul 21': '2021-7-21',
|
||||
'Jul 21': '2021-7-21',
|
||||
'july 21': '2021-7-21',
|
||||
'July 21': '2021-7-21',
|
||||
'aug 21': '2021-8-21',
|
||||
'Aug 21': '2021-8-21',
|
||||
'august 21': '2021-8-21',
|
||||
'August 21': '2021-8-21',
|
||||
'sep 21': '2021-9-21',
|
||||
'Sep 21': '2021-9-21',
|
||||
'september 21': '2021-9-21',
|
||||
'September 21': '2021-9-21',
|
||||
'oct 21': '2021-10-21',
|
||||
'Oct 21': '2021-10-21',
|
||||
'october 21': '2021-10-21',
|
||||
'October 21': '2021-10-21',
|
||||
'nov 21': '2021-11-21',
|
||||
'Nov 21': '2021-11-21',
|
||||
'november 21': '2021-11-21',
|
||||
'November 21': '2021-11-21',
|
||||
'dec 21': '2021-12-21',
|
||||
'Dec 21': '2021-12-21',
|
||||
'december 21': '2021-12-21',
|
||||
'December 21': '2021-12-21',
|
||||
} as Record<string, string | null>
|
||||
|
||||
for (const c in cases) {
|
||||
it(`should parse '${c}' as '${cases[c]}' with the date at the end`, () => {
|
||||
const {date, foundText} = getDateFromText(`Lorem Ipsum ${c}`, now)
|
||||
const assertResult = ({date, text}: ParsedTaskText) => {
|
||||
if (date === null && cases[c] === null) {
|
||||
expect(date).toBeNull()
|
||||
return
|
||||
}
|
||||
|
||||
expect(`${date?.getFullYear()}-${date?.getMonth() + 1}-${date?.getDate()}`).toBe(cases[c])
|
||||
expect(foundText.trim()).toBe(c)
|
||||
expect(text.trim()).toBe('Lorem Ipsum')
|
||||
}
|
||||
|
||||
it(`should parse '${c}' as '${cases[c]}' with the date at the end`, () => {
|
||||
assertResult(parseTaskText(`Lorem Ipsum ${c}`, PrefixMode.Default, now))
|
||||
})
|
||||
it(`should parse '${c}' as '${cases[c]}' with the date at the beginning`, () => {
|
||||
const {date, foundText} = getDateFromText(`${c} Lorem Ipsum`, now)
|
||||
if (date === null && cases[c] === null) {
|
||||
expect(date).toBeNull()
|
||||
return
|
||||
}
|
||||
|
||||
expect(`${date?.getFullYear()}-${date?.getMonth() + 1}-${date?.getDate()}`).toBe(cases[c])
|
||||
expect(foundText.trim()).toBe(c)
|
||||
assertResult(parseTaskText(`${c} Lorem Ipsum`, PrefixMode.Default, now))
|
||||
})
|
||||
}
|
||||
})
|
||||
|
@ -55,7 +55,7 @@ interface Prefixes {
|
||||
*
|
||||
* @param text
|
||||
*/
|
||||
export const parseTaskText = (text: string, prefixesMode: PrefixMode = PrefixMode.Default): ParsedTaskText => {
|
||||
export const parseTaskText = (text: string, prefixesMode: PrefixMode = PrefixMode.Default, now: Date = new Date()): ParsedTaskText => {
|
||||
const result: ParsedTaskText = {
|
||||
text: text,
|
||||
date: null,
|
||||
@ -86,7 +86,7 @@ export const parseTaskText = (text: string, prefixesMode: PrefixMode = PrefixMod
|
||||
result.text = textWithoutMatched
|
||||
result.repeats = repeats
|
||||
|
||||
const {newText, date} = parseDate(result.text)
|
||||
const {newText, date} = parseDate(result.text, now)
|
||||
result.text = newText
|
||||
result.date = date
|
||||
|
||||
|
Reference in New Issue
Block a user