Denis Kudriashov wrote:
I would hide the tricks even more:

   ZnClient stubRequests: [ :request |
       request uri =
('https://onesignal.com/api/v1/players/{1}?app_id={2}
<https://onesignal.com/api/v1/players/%7B1%7D?app_id=%7B2%7D>' format: {
self uidy: 'Q7'. appId }) asZnUrl
         and: [ #(GET HEAD) includes: request method ] ]
     byResponse: [ :request | ZnResponse ok: (ZnEntity json: '{}') ] ].

This would be nice, but it would need cooperation of Zinc (unless I hide mocketry use under extension method).

And maybe with set of more simple cases:

   ZnClient
     stubGET: ('https://onesignal.com/api/v1/players/{1}?app_id={2}
<https://onesignal.com/api/v1/players/%7B1%7D?app_id=%7B2%7D>' format: {
self uidy: 'Q7'. appId }) asZnUrl
     byResponse: [ :request | ZnResponse ok: (ZnEntity json: '{}') ] ].

Well, I actually send HEAD in production code, as I only need to know if it is 2xx or 4xx (of course using #isSuccess and not testing status code myself) and I want be nice. But GET is good as well. Now what? :-)

Or better:

   ZnClient
     stubGET: ('https://onesignal.com/api/v1/players' asZnUrl / (self
uidy: 'Q7')
     withParams: {'app_id' -> appId }
     byResponse: [ :request | ZnResponse ok: (ZnEntity json: '{}') ] ].

Yes, we're getting where nock library is on node. I didn't want to make full http mocking dsl (would be nice, though). Actually asked if there is one is the original thread. :-)

Herby




2017-10-17 14:22 GMT+02:00 Herby Vojčík <he...@mailbox.sk
<mailto:he...@mailbox.sk>>:

    Denis Kudriashov wrote:

        Hi Herby.

        There is message #will: which accepts the block with possible
        arguments
        (if needed).

           ZnClient stub new will: [ ZnMockClient ...]

        But generally your approach looks bad to me. You put too many
        details on
        your tests which just duplicate Zinc API used in the domain code. It
        makes tests brittle and tightly coupled. And they looks quite
        unreadable.


    BTW, made it shorter and probably more readable as a result (by also
    shortening the test condition):

       ZnClient stub new will: [ ZnMockClient
         whenRequest: [ :request |
           request uri =
    ('https://onesignal.com/api/v1/players/{1}?app_id={2}
    <https://onesignal.com/api/v1/players/%7B1%7D?app_id=%7B2%7D>'
    format: { self uidy: 'Q7'. appId }) asZnUrl
             and: [ #(GET HEAD) includes: request method ] ]
         thenResponse: [ :request | ZnResponse ok: (ZnEntity json: '{}')
    ] ].

    The reason why I could not test uri as is, is Zinc adding ':443' to
    it. But as mentioned, the previous was very unreadable; with asZnUrl
    it is probably better.

    Herby




Reply via email to