2017-10-17 14:49 GMT+02:00 Herby Voj����k <herby@mailbox.sk>:
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).

Why not? I think it could be a ��good library. Try to publish it as is. Then people can contribute with their own cases.��
I remember other people looked for similar tool in past. So it could be good start.
��

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).

You can be the man who starts the process :). Not necessary to implement full version.
��
Actually asked if there is one is the original thread. :-)

Herby




2017-10-17 14:22 GMT+02:00 Herby Voj����k <herby@mailbox.sk
<mailto:herby@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