Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to force a formatted DateTime to return a string? #1028

Closed
felipetofoli opened this issue Dec 5, 2023 · 7 comments
Closed

How to force a formatted DateTime to return a string? #1028

felipetofoli opened this issue Dec 5, 2023 · 7 comments
Labels

Comments

@felipetofoli
Copy link

First of all, thanks for this amazing lib! :)

I have to apply a specific format ("yyMMddhhmmss") to a DateTime and receive a string as the result. I tried multiple approaches, but I always receive an integer, instead of a string.
So my question is: How to force a formatted DateTime to return a string?

Example:

"BodyAsJson": {
    "timestamp": "{{ DateTime.UtcNow \"yyMMddhhmmss\" }}",
    "timestamp2": "{{ DynamicLinq.Expression 'DateTime.UtcNow.ToString(\"yyMMddhhmmss\")' }}",
    "timestamp3": "{{ String.Format (DateTime.UtcNow) \"yyMMddhhmmss\" }}",
}

The above JSON configuration returns the following result:

{
    "timestamp": 231205110312,
    "timestamp2": 231205110312,
    "timestamp3": 231205110312
}

The expected/desired result:

{
    "timestamp": "231205110312",
    "timestamp2": "231205110312",
    "timestamp3": "231205110312"
}

I already tried wrapping the configuration with double quotes, using String.Append to append an empty string (""), but I wasn't able to get the expected/desired result.

Please let me know if any other information is needed!
Thanks!

@StefH
Copy link
Collaborator

StefH commented Dec 6, 2023

@felipetofoli
This looks the same as this issue:
#884

I think the only solution for you would be not to use BodyAsJson, but just Body and return the required json message as a string.

Like:

"{\n    \"timestamp\": \"{{ DateTime.UtcNow \\\"yyMMddhhmmss\\\" }}\",\n    \"timestamp2\": \"{{ DynamicLinq.Expression 'DateTime.UtcNow.ToString(\\\"yyMMddhhmmss\\\")' }}\",\n    \"timestamp3\": \"{{ String.Format (DateTime.UtcNow) \\\"yyMMddhhmmss\\\" }}\",\n}"

@StefH
Copy link
Collaborator

StefH commented Dec 6, 2023

#1029

@StefH
Copy link
Collaborator

StefH commented Dec 7, 2023

@felipetofoli is this ok for you?

@felipetofoli
Copy link
Author

felipetofoli commented Dec 7, 2023

Hi @StefH !
Thanks for the response!

Yes, the Body approach works for the JSON configuration.

I am thinking about using C# mappings instead (to avoid the inline configurations).

According to the other issues, the .WithTransformer(ReplaceNodeOptions.EvaluateAndTryToConvert) should do the trick, right?
Reference: #884 (comment)

Or should I use .WithTransformer(ReplaceNodeOptions.KeepString)?
Reference: #884 (comment)

@StefH
Copy link
Collaborator

StefH commented Dec 7, 2023

I'm not 100% sure anymore if that enim option works as intended

So for now use c# mappings or a body as string.

@StefH StefH closed this as completed Dec 7, 2023
@felipetofoli
Copy link
Author

felipetofoli commented Dec 7, 2023

@StefH, I've just tested the c# mappings, but they are returning a number either - instead of a string:

server
    .Given(Request
        .Create()
        .WithPath(new ExactMatcher("/datetime-test"))
        .UsingPost())
    .RespondWith(Response
        .Create()
        .WithHeader("Content-Type", "application/json")
        .WithBodyAsJson(new
        {
            timestamp = "{{ DateTime.UtcNow \"yyMMddhhmmss\" }}",
        })
        .WithTransformer());

Response:

{"timestamp":231207053817}

Is there any other configuration to do?

Thanks,

@StefH
Copy link
Collaborator

StefH commented Dec 7, 2023

Sorry. In that case : use a string instead of json.

I need to think in how to change the internal logic.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants