ergo icon indicating copy to clipboard operation
ergo copied to clipboard

Optional DateTime always return TRUE for `some(myDate)`

Open martinhalford opened this issue 2 years ago • 3 comments

Bug Report 🐛

Please see LOOM video for demo of bug. https://www.loom.com/share/4d628fd1e1ec4afa9d5a50444e69ebe9

In summary, optional variables return unexpected results when interrogated in code blocks within grammar.tem.md files.

An optional DateTime variable myDate is defined as:

 o DateTime myDate optional

A value in the data.json file is set as...

"myDate": "2000-01-01T00:00:00"

A code block is defined in the grammar.tem.md as:

{{%
    match some(myDate)
    with let? completionDate then "YES - Found myDate - " ++ toString(myDate)
    else "NO - myDate not found"
%}}

A draft command is executed as:

cicero draft --template . --data ./data.json  --unquoteVariables

and the following response is returned...

YES - Found myDate - {"$left": 01/01/2000}

When the myDate value is deleted from data.json and the same draft command executed then the following response is returned.

YES - Found myDate - {"$right": null}

Expected Result

If myDate present then expected

YES - Found myDate - 01/01/2000

If myDate not present then expected

NO - myDate not found

Example CTA archive attached: OptionalDateTime CTA

martinhalford avatar Feb 25 '22 10:02 martinhalford

Is this issue still prevalent? Are you still facing it?

ritikBhandari avatar May 23 '22 18:05 ritikBhandari

You shouldn't match on some(myDate), because in this case expression some(myDate) will always has value and completionDate will have type DateTime optional. Your code snipped is equivalent to just

{{%
    "YES - Found myDate - " ++ toString(myDate)
%}}

Match should be done on myDate itself:

{{%
    match myDate
    with let? completionDate then "YES - Found myDate - " ++ toString(completionDate)
    else "NO - myDate not found"
%}}

Converting optional value to string is quite ugly, yes.

prekel avatar Jul 05 '22 14:07 prekel

I agree with @prekel here some(MyDate) shouldn't be pattern matched here.

@prekel can you please create a PR (if you are willing to) for the tests that you added to the your fork I think that would be helpful in avoiding this :smiley:

shubhamkumar13 avatar Jul 10 '22 22:07 shubhamkumar13