-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmetadata.json
1 lines (1 loc) · 360 KB
/
metadata.json
1
{"features":{"0c3daaef85c19f5c3e46bc5f1989ee77":{"type":"feature","id":"0c3daaef85c19f5c3e46bc5f1989ee77","name":"Authorization Failure Reporting","description":"Operations with restricted access report when authorization is denied in the form of a helpful error message.","tags":["@featureSet=access","@beta"],"location":{"line":2,"column":1,"path":"access/authorization-failure-reporting.feature"},"scenarios":["6","14","22","30"]},"49484f811a0685e566d30f2bb0c366bb":{"type":"feature","id":"49484f811a0685e566d30f2bb0c366bb","name":"Configure SDK to authorize all requests using a specific access token","description":"After an SDK instance is created, an access token can be provided which will be used for all future operations requiring an authorization check.","tags":["@featureSet=access","@beta","@skip"],"location":{"line":3,"column":1,"path":"access/configure-access-token.feature"},"scenarios":["38"]},"2c33be0dc34fc31630f86f9ea5200946":{"type":"feature","id":"2c33be0dc34fc31630f86f9ea5200946","name":"Inspect the access token which the SDK is using to authorize requests","description":"The access token which the SDK can use to authorize requests can be inspected. This may be useful in debugging or troubleshooting scenarios. This operation is known as `getToken`","tags":["@featureSet=access","@beta","@skip"],"location":{"line":2,"column":1,"path":"access/get-access-token.feature"},"scenarios":["47","51"]},"fc6c498d2d86d21d24b32d6b49944654":{"type":"feature","id":"fc6c498d2d86d21d24b32d6b49944654","name":"Grant an access token","description":"As a PubNub customer I want to restrict and allow access to specific PubNub resources (channels, channel groups, uuids) by my user base (both people and devices) which are each identified by a unique UUID.","tags":["@featureSet=access"],"location":{"line":2,"column":1,"path":"access/grant-token.feature"},"scenarios":["123","133","144","157","170","183","197"]},"960f98cc9286b75871db01397bacb186":{"type":"feature","id":"960f98cc9286b75871db01397bacb186","name":"Parse Access Token","description":"Although clients do not need to know the internal details of how an access token is constructed, it can be helpful to have the ability to parse this internal structure to help with debugging and troubleshooting access issues.","tags":["@featureSet=access"],"location":{"line":2,"column":1,"path":"access/parse-access-token.feature"},"scenarios":["204","209","214"]},"9cd4c8809e3f376bdc0d41d8a3694ee9":{"type":"feature","id":"9cd4c8809e3f376bdc0d41d8a3694ee9","name":"Revoke an access token","description":"As a PubNub customer I want to withdraw existing permission for specific PubNub resources by revoking corresponding tokens.","tags":["@featureSet=access","@beta"],"location":{"line":2,"column":1,"path":"access/revoke-token.feature"},"scenarios":["222","234","246","251"]},"1f8b452724077879725454e9af577e99":{"type":"feature","id":"1f8b452724077879725454e9af577e99","name":"provide an access token to the the SDK to authorize requests","description":"An access token can be provided which will be used for all future operations requiring an authorization check. This operation is known as `setToken`","tags":["@featureSet=access","@beta","@skip"],"location":{"line":2,"column":1,"path":"access/set-access-token.feature"},"scenarios":["259","264","269"]},"6e9750172217843920f5490ad1ad88ef":{"type":"feature","id":"6e9750172217843920f5490ad1ad88ef","name":"Crypto module","description":"As a PubNub user I want to be able to encrypt data using crypto module I want to be able to decrypt data generated by previous cryptors","tags":["@featureSet=cryptoModule","@beta"],"location":{"line":2,"column":1,"path":"encryption/cryptor-module.feature"},"scenarios":["286","298","314","327","344","357","372","390","408","418"]},"2538da2e47f0f4e23c573fc847c6acaf":{"type":"feature","id":"2538da2e47f0f4e23c573fc847c6acaf","name":"Message encryption","description":"As a PubNub user I want to be able to receive and decrypt messages So I can send confidential information throught PubNub network","tags":["@featureSet=subscribe"],"location":{"line":2,"column":1,"path":"encryption/message-encryption.feature"},"scenarios":["426","432"]},"8f3fe7bfcc733e7c46314c53f0c3c1a8":{"type":"feature","id":"8f3fe7bfcc733e7c46314c53f0c3c1a8","name":"Send a file to Space","description":"As a PubNub user I want to send a file with custom message type. Client should be able to pass optional custom message type to the File endpoint.","tags":["@featureSet=files","@beta"],"location":{"line":2,"column":3,"path":"files/file-upload-to-space.feature"},"scenarios":["439","443","447"]},"91f3a2c0e4424c87689525da44c4db11":{"type":"feature","id":"91f3a2c0e4424c87689525da44c4db11","name":"Files","description":"As a PubNub user I want to upload, manage and download files So my customers can share files","tags":["@featureSet=files"],"location":{"line":2,"column":1,"path":"files/file-upload.feature"},"scenarios":["455","461","467","473","479","485","491"]},"efd56bc133990dba6fb78d8ed3345948":{"type":"feature","id":"efd56bc133990dba6fb78d8ed3345948","name":"History for VSP","description":"As a PubNub user I want to fetch history with message type. Client should be able to opt-out default `includeType`.","tags":["@featureSet=historyCustomMssgType","@beta"],"location":{"line":2,"column":1,"path":"history/history-custom-mssg-type.feature"},"scenarios":["499","504","509"]},"16d2b386b2034b9488996466aaae0b57":{"type":"feature","id":"16d2b386b2034b9488996466aaae0b57","name":"History","description":"As a PubNub user I want to get message history So I can display past messages","tags":["@featureSet=history"],"location":{"line":2,"column":1,"path":"history/history.feature"},"scenarios":["518","524","530"]},"bfc34cd74d1dab63536a80aebfe3dc7e":{"type":"feature","id":"bfc34cd74d1dab63536a80aebfe3dc7e","name":"Message Actions","description":"As a PubNub user I want to add, fetch and remove message actions So I can add features to my application like read receipts or reactions","tags":["@featureSet=messageActions"],"location":{"line":2,"column":1,"path":"message-actions/message-actions.feature"},"scenarios":["537","543","550","556","562"]},"86a052365207542b400a5a2afa08025c":{"type":"feature","id":"86a052365207542b400a5a2afa08025c","name":"Objects V2 Channel metadata","description":"As a PubNub customer I want to create, update, remove channels.","tags":["@featureSet=objectsV2","@beta"],"location":{"line":2,"column":1,"path":"objectsV2/channel-metadata.feature"},"scenarios":["571","577","583","588","593","598"]},"f904be085f84e4dd964d64b101fe5673":{"type":"feature","id":"f904be085f84e4dd964d64b101fe5673","name":"Objects V2 Members","description":"As a PubNub customer I want to create, get, remove and update channel members(UUIDs).","tags":["@featureSet=objectsV2","@beta"],"location":{"line":2,"column":1,"path":"objectsV2/members-metadata.feature"},"scenarios":["608","614","621","628","634","645"]},"28ce82f5aa5c139169ffec2eef237027":{"type":"feature","id":"28ce82f5aa5c139169ffec2eef237027","name":"Objects V2 Memberships","description":"As a PubNub customer I want to create, update, remove channels.","tags":["@featureSet=objectsV2","@beta"],"location":{"line":2,"column":1,"path":"objectsV2/membership-metadata.feature"},"scenarios":["655","661","667","674","681","687","693","704"]},"8a383f24948b75233e7a80e59607ce99":{"type":"feature","id":"8a383f24948b75233e7a80e59607ce99","name":"Objects V2 UUID metadata","description":"As a PubNub customer I want to create, update, remove uuids.","tags":["@featureSet=objectsV2","@beta"],"location":{"line":2,"column":1,"path":"objectsV2/uuid-metadata.feature"},"scenarios":["714","720","726","731","736","741","746"]},"d8c6f6d645bc73f9b38ced476208b4a2":{"type":"feature","id":"d8c6f6d645bc73f9b38ced476208b4a2","name":"Presence Event Engine","description":"Validating the correctness of EE for Presence events","tags":["@featureSet=presenceEventEngine","@beta"],"location":{"line":6,"column":1,"path":"presence/event-engine/presence-engine_Legacy.feature"},"scenarios":["866","877","892","915","934","939","955"]},"ecb96f0fb94cc64370cd3d01a5c2d2bb":{"type":"feature","id":"ecb96f0fb94cc64370cd3d01a5c2d2bb","name":"Get presence state","description":"As a PubNub user I want to be able to get presence state associated with specific user identifier.","tags":["@featureSet=getPresenceState","@beta"],"location":{"line":2,"column":1,"path":"presence/get-state.feature"},"scenarios":["964","969"]},"2d9b192cca7419c829a709b08c4a2f06":{"type":"feature","id":"2d9b192cca7419c829a709b08c4a2f06","name":"Signal user presence","description":"As a PubNub user I want to be able to signal user presence on channels and groups. Client should be able to add presence state.","tags":["@featureSet=heartbeat","@beta"],"location":{"line":2,"column":1,"path":"presence/heartbeat.feature"},"scenarios":["977","982","987"]},"102f68ae159f97fa6e1bc8272ef0bae6":{"type":"feature","id":"102f68ae159f97fa6e1bc8272ef0bae6","name":"Get channels and groups presence","description":"As a PubNub user I want to be able to check presence on channels and groups.","tags":["@featureSet=hereNow","@beta"],"location":{"line":2,"column":1,"path":"presence/here-now.feature"},"scenarios":["996","1001","1006","1012"]},"1eecb18ed355aa7aeffa00907735b9bf":{"type":"feature","id":"1eecb18ed355aa7aeffa00907735b9bf","name":"Set presence state","description":"As a PubNub user I want to be able to associate presence state with specific user identifier.","tags":["@featureSet=setPresenceState","@beta"],"location":{"line":2,"column":1,"path":"presence/set-state.feature"},"scenarios":["1020","1024"]},"56a3566ff98a5d205b39311dd479b541":{"type":"feature","id":"56a3566ff98a5d205b39311dd479b541","name":"Publish to Space","description":"As a PubNub user I want to publish messages to Space with type. Client should be able to pass optional custom message type to publish endpoint.","tags":["@featureSet=publishWithCustomMssgType","@beta"],"location":{"line":2,"column":1,"path":"publish/publish-custom-mssg-type.feature"},"scenarios":["1032","1036","1040","1044","1048","1052","1056","1060"]},"31e79e1a4e04e30eb7b299d55dc8d1f7":{"type":"feature","id":"31e79e1a4e04e30eb7b299d55dc8d1f7","name":"Publish a message","description":"As a PubNub user I want to publish messages So I can use PubNub","tags":["@featureSet=publish","@beta"],"location":{"line":2,"column":1,"path":"publish/publish.feature"},"scenarios":["1067","1073","1079","1084","1089","1094","1099","1104","1109","1115","1121","1127","1133"]},"a2732f84d2540a965fd29df847d1c3b0":{"type":"feature","id":"a2732f84d2540a965fd29df847d1c3b0","name":"Send a signal to Space","description":"As a PubNub user I want to send some signals to Space with type. Client should be able to pass optional custom message type to the signal endpoint.","tags":["@featureSet=signalWithCustomMssgType","@beta"],"location":{"line":2,"column":1,"path":"publish/signal-custom-mssg-type.feature"},"scenarios":["1141","1145","1149","1153","1157","1161","1165","1169"]},"085fea7abdc5d904fe69a3081efd7398":{"type":"feature","id":"085fea7abdc5d904fe69a3081efd7398","name":"Signal","description":"As a PubNub user I want to send signals So I can implement features in my application?","tags":["@featureSet=signal"],"location":{"line":2,"column":1,"path":"publish/signal.feature"},"scenarios":["1177"]},"31577c8a54813edae7252a078e710d11":{"type":"feature","id":"31577c8a54813edae7252a078e710d11","name":"Push Notifications","description":"As a PubNub user I want to manage push notifications So I can communicate with my customers even when they are not using the application","tags":["@featureSet=push"],"location":{"line":2,"column":1,"path":"push/push-notifications.feature"},"scenarios":["1184","1189","1195","1201","1207","1212","1218","1224","1229","1235","1241","1246","1252"]},"3853114ae6230622b0724ef5c2f8df03":{"type":"feature","id":"3853114ae6230622b0724ef5c2f8df03","name":"Subscribing to a channel automatically connects","description":"To make basic subscribe examples simpler, subscribing to a channel automatically connects to the server to receive messages.","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":2,"column":1,"path":"subscribe/automatic-connection-on-subscribe.feature"},"scenarios":["1257"]},"ed865dcde7bceb38933da21bf045757b":{"type":"feature","id":"ed865dcde7bceb38933da21bf045757b","name":"Unsubscribing to all Channels automatically disconnects","description":"If there are no active subscriptions, the SDK will disconnect from the PubNub service. Unsubscribing from the last subscription can be thought of as an Unsubscribe All operation.","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":2,"column":1,"path":"subscribe/automatic-disconnect-on-unsubscribe.feature"},"scenarios":["1264","1268","1272","1276"]},"84cb60a4b2d22e8a1f1b60b8d9c57c02":{"type":"feature","id":"84cb60a4b2d22e8a1f1b60b8d9c57c02","name":"Automatic Reconnection","description":"After the SDK becomes disconnected, in some conditions, the SDK may schedule an automatic reconnection attempt. This may be done by scheduling a reconnect timer to require a delay before reconnecting or by requesting an immediate reconnect.","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":2,"column":1,"path":"subscribe/automatic-reconnection.feature"},"scenarios":["1283","1287","1291","1295","1299"]},"1fc98e7efd54aef1bcf026a7a2a69043":{"type":"feature","id":"1fc98e7efd54aef1bcf026a7a2a69043","name":"Check for Messages","description":"Represents a single call to the subscribe api. For SDKs which do not have a subscribe loop May also be implemented in SDKs which do have a subscribe loop","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":2,"column":1,"path":"subscribe/check-for-messages.feature"},"scenarios":[]},"4b48b3258ff3c38dfea73b816cf22460":{"type":"feature","id":"4b48b3258ff3c38dfea73b816cf22460","name":"Maximum allowed reconnection attempt configuration","description":"The SDK can be configured at instance creation time to specify a Maximum number of reconnection attempts.","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":2,"column":1,"path":"subscribe/config/max-allowed-reconnection-attempts.feature"},"scenarios":["1308"]},"abb97f0b299e9e281651778e1575396b":{"type":"feature","id":"abb97f0b299e9e281651778e1575396b","name":"Reconnection policy","description":"The SDK can be configured at instance creation time to specify a reconnection policy which determines the delay between reconnection attempts.","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":2,"column":1,"path":"subscribe/config/reconnection-policy.feature"},"scenarios":["1314"]},"70791bbe139c7e7969ec6dc39345811d":{"type":"feature","id":"70791bbe139c7e7969ec6dc39345811d","name":"Continuously receive messages","description":"The SDK can receive messages from the PubNub service and hand them off to the user's application. The messages will be delivered continuously using a technique known as long polling which involves repeatedly calling a subscribe api endpoint. This is known internally as \"The subscribe loop\" The ability to receive messages this way is known as being \"connected.\" Connected refers only to the connection to PubNub and is not related to whether the network is connected. Making a subsequent subscribe api call is known as \"reconnection\" If reconnection is possible, the SDK is not considered \"disconnected\" \"retry\" will not be used to describe repeating subscribe calls and will only be used in association with transactional calls. \"reconnect\" will never be used in association with transactional calls. Receiving messages continuosly requires an automatic reconnection attempt. SDKs may also perform a manual reconnection attempt. Sometimes automatic reconnection attempts are not allowed. https://www.pubnub.com/docs/connections/connection-management For more information on status codes https://datatracker.ietf.org/doc/html/rfc7231#section-6.1","tags":["@featureSet=subscribe","@na=c-core","@beta","@skip"],"location":{"line":2,"column":1,"path":"subscribe/continuously-receive-messages.feature"},"scenarios":["1325","1333","1343","1348","1353","1357"]},"93d2a5de416a9faa342b3b52ff46571c":{"type":"feature","id":"93d2a5de416a9faa342b3b52ff46571c","name":"Subscribe Loop auto-retry with access denied","description":"Test to ensure that clients won't try automatic retry when 403 received.","tags":["@featureSet=subscribe"],"location":{"line":2,"column":1,"path":"subscribe/contracts/access-denied-subscribe.feature"},"scenarios":["1370","1377","1384","1394","1402","1410","1421"]},"ceaa4b37fc9e2ca631d4c99bdd231ee8":{"type":"feature","id":"ceaa4b37fc9e2ca631d4c99bdd231ee8","name":"Subscribe Loop","description":"Subscribe long polling with message published","tags":["@featureSet=subscribe"],"location":{"line":2,"column":1,"path":"subscribe/contracts/simple-subscribe.feature"},"scenarios":["1428"]},"38ca7aacc2b2fa9c8847d1e0a368b1d1":{"type":"feature","id":"38ca7aacc2b2fa9c8847d1e0a368b1d1","name":"De-duplicate messages","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":2,"column":1,"path":"subscribe/deduplicate-messages.feature"},"scenarios":[]},"85a6a2486a7b7deed8666fefb5ed581c":{"type":"feature","id":"85a6a2486a7b7deed8666fefb5ed581c","name":"Delay between Automatic Reconnection Attempts","description":"To protect an overloaded server from the \"Thundering Herd\" problem, it is necessary to delay between reconnection attempts in response to failed communication. It is also helpful to limit the number of reconnection attempts via delays from the client side for billing and network usage reasons. A reconnection policy determines how long the SDK should wait before attempting an automatic reconnection after the last subscribe api call completed.","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":2,"column":1,"path":"subscribe/delay-between-reconnection-attempts.feature"},"scenarios":["1435","1438","1442","1446","1447","1448","1450","1456","1462"]},"77d2668a4ea72f5e414536c4f0257234":{"type":"feature","id":"77d2668a4ea72f5e414536c4f0257234","name":"Detect Missed Messages","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":2,"column":1,"path":"subscribe/detect-missed-messages.feature"},"scenarios":[]},"33bd81145c51e36419cb6ae4d8717295":{"type":"feature","id":"33bd81145c51e36419cb6ae4d8717295","name":"Can stop receiving messages","description":"The developer can manually indicate they wish to stop checking for messages, but preserve subscription state to allow reconnecting later. This operation is known as manual \"disconnect\" After disconnecting, the SDK will report a connection status of disconnected. automatic reconnection attempts will not be allowed. automatic connection attempts will not be allowed. The only way to connect or reconnect is by mannually initiating a `reconnect` operation.","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":2,"column":1,"path":"subscribe/disconnect.feature"},"scenarios":[]},"ca6268e71ce8a000eb95295c5143dcce":{"type":"feature","id":"ca6268e71ce8a000eb95295c5143dcce","name":"Event Engine","description":"This is a description of the feature","tags":["@featureSet=eventEngine","@beta"],"location":{"line":6,"column":1,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"scenarios":["1588","1604","1624","1648","1671","1691"]},"e8d2029f4b9e556281ab05e09de04882":{"type":"feature","id":"e8d2029f4b9e556281ab05e09de04882","name":"Receiving a file event","description":"The SDK should receive a file event when other users have sent a file.","tags":["@skip"],"location":{"line":2,"column":1,"path":"subscribe/events/file/receiving-file-event.feature"},"scenarios":["1705","1717"]},"9e27e675110cf356753fb24432090889":{"type":"feature","id":"9e27e675110cf356753fb24432090889","name":"Receiving a message event","description":"The SDK should receive a message event when other users have sent a message.","tags":["@skip"],"location":{"line":2,"column":1,"path":"subscribe/events/message/receiving-message-event.feature"},"scenarios":["1728","1738"]},"896307b1bed9e5bd8d5630edfbbd0f20":{"type":"feature","id":"896307b1bed9e5bd8d5630edfbbd0f20","name":"Receiving a message action added event","description":"The SDK should receive a message action added event when other users set message actions","tags":["@skip"],"location":{"line":2,"column":1,"path":"subscribe/events/message-action/receiving-message-action-added-event.feature"},"scenarios":["1750"]},"c35f178e8b121545c0db49fdb8e13d55":{"type":"feature","id":"c35f178e8b121545c0db49fdb8e13d55","name":"Receiving a message action event","description":"The SDK should receive a message action removed event when other users delete message actions","tags":["@skip"],"location":{"line":2,"column":1,"path":"subscribe/events/message-action/receiving-message-action-removed-event.feature"},"scenarios":["1762"]},"536e7f5b942edcd2bb0667280abc4d94":{"type":"feature","id":"536e7f5b942edcd2bb0667280abc4d94","name":"Receiving a channel metadata removed event","description":"The SDK should receive a channel metadata removed event when other users remove channel metadata","tags":["@skip"],"location":{"line":2,"column":1,"path":"subscribe/events/object/channel-metadata-removed-event.feature"},"scenarios":["1773","1783"]},"173a5a7e1c9ee9ab73a72041e1387796":{"type":"feature","id":"173a5a7e1c9ee9ab73a72041e1387796","name":"Receiving a channel metadata set event","description":"The SDK should receive a channel metadata set event when other users set channel metadata","tags":["@skip"],"location":{"line":2,"column":1,"path":"subscribe/events/object/channel-metadata-set-event.feature"},"scenarios":["1797","1810"]},"ffc5ff7fec04ba688cdefe40c7407ddf":{"type":"feature","id":"ffc5ff7fec04ba688cdefe40c7407ddf","name":"Receiving a membership removed event","description":"The SDK should receive a membership removed event when other users remove memberships","tags":["@skip"],"location":{"line":2,"column":1,"path":"subscribe/events/object/membership-removed-event.feature"},"scenarios":["1822","1833"]},"342c0ab0bf912abf99eef41a2a56d586":{"type":"feature","id":"342c0ab0bf912abf99eef41a2a56d586","name":"Receiving a membership added event","description":"The SDK should receive a membership added event when other users set memberships","tags":["@skip"],"location":{"line":2,"column":1,"path":"subscribe/events/object/membership-set-event.feature"},"scenarios":["1846","1858"]},"ac812bda8bb79bca1b4caabefb64c837":{"type":"feature","id":"ac812bda8bb79bca1b4caabefb64c837","name":"Receiving a uuid metadata removed event","description":"The SDK should receive a uuid metadata removed event when other users remove uuid metadata","tags":["@skip"],"location":{"line":2,"column":1,"path":"subscribe/events/object/user-metadata-removed-event.feature"},"scenarios":["1869","1879"]},"7651c64e50fadcdac3691c0507ba39f5":{"type":"feature","id":"7651c64e50fadcdac3691c0507ba39f5","name":"Receiving a uuid metadata set event","description":"The SDK should receive a uuid metadata set event when other users set uuid metadata","tags":["@skip"],"location":{"line":2,"column":1,"path":"subscribe/events/object/user-metadata-set-event.feature"},"scenarios":["1893","1906"]},"daba20e14b42ee46855cae69480f19e5":{"type":"feature","id":"daba20e14b42ee46855cae69480f19e5","name":"Presence events","description":"The SDK should receive presence when other users have connected to a channel, disconnected from a channel or changed presence state. Presence can be configured in two differente modes 'announce' or 'interval'. The event contains an 'action' that is either 'join'/'leave'/'timeout' for 'announce' mode or 'interval' for 'interval' mode. The action field is also used to indicate 'state-change' events. For 'announce' mode the event will trigger individually for each UUID in a channel that is joining, leaving or changing state. For 'interval' mode the event will trigger at a set interval and do not include an individual UUID. If presence deltas are enabled the event will include a list of uuids that joined, left, timed out during that interval. Interval mode is automatically entered when the occupancy of the channel exceeds the Announce Max setting. here_now_refresh is a flag sometimes returned in 'interval' mode indicating that the presence message payload is over 30KB and the application developer will have call the hereNow() method in order to retrieve the details of who is present for a channel.","tags":["@skip"],"location":{"line":2,"column":1,"path":"subscribe/events/presence/presence-events.feature"},"scenarios":[]},"825e17780996f4f0d938449d8116998d":{"type":"feature","id":"825e17780996f4f0d938449d8116998d","name":"Receiving a join event","description":"The SDK should receive a join event when other users have connected to a channel.","tags":["@skip"],"location":{"line":2,"column":1,"path":"subscribe/events/presence/receiving-join-event.feature"},"scenarios":["1918","1927","1937","1947"]},"efb1e9ef17f55d6c9c4567ed08d8e613":{"type":"feature","id":"efb1e9ef17f55d6c9c4567ed08d8e613","name":"Receiving a leave event","description":"The SDK should receive a leave event when other users have disconnected from a channel.","tags":["@skip"],"location":{"line":2,"column":1,"path":"subscribe/events/presence/receiving-leave-event.feature"},"scenarios":["1958","1967","1977","1987"]},"61bec27692421ab9d3858f8992e1ca43":{"type":"feature","id":"61bec27692421ab9d3858f8992e1ca43","name":"Receiving a state change event","description":"The SDK should receive a state change event when other users have changed presence state.","tags":["@skip"],"location":{"line":2,"column":1,"path":"subscribe/events/presence/receiving-state-change-event.feature"},"scenarios":["2000"]},"ffd9a590eed0925aa23eaedbc952c426":{"type":"feature","id":"ffd9a590eed0925aa23eaedbc952c426","name":"Receiving a timeout event","description":"The SDK should receive a timeout event when other users have not yet left a channel and have not sent a heartbeat in the expected time.","tags":["@skip"],"location":{"line":2,"column":1,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"scenarios":["2011","2020","2030","2040"]},"b757dc696cd4a4f94b8b4c9f998cfeb9":{"type":"feature","id":"b757dc696cd4a4f94b8b4c9f998cfeb9","name":"Receiving a signsal event","description":"The SDK should receive a signal event when other users have sent a signal.","tags":["@skip"],"location":{"line":2,"column":1,"path":"subscribe/events/signal/receiving-signal-event.feature"},"scenarios":["2050"]},"0529ef94add867a1c27802281e1bee68":{"type":"feature","id":"0529ef94add867a1c27802281e1bee68","name":"Receiving a status event","description":"The SDK should receive a status event when the server includes status information","tags":["@skip"],"location":{"line":2,"column":1,"path":"subscribe/events/status/receiving-status-event.feature"},"scenarios":["2062"]},"fb36d5c0af66cdad53d6c537dd7e01a5":{"type":"feature","id":"fb36d5c0af66cdad53d6c537dd7e01a5","name":"Limit unsuccessful reconnection attempts","description":"To protect the server (or to batch receive messages) it may be useful to limit The number of unsuccessful reconnection attempts. This is part of the \"Recconnection Policy\". It is completely separate from retry attempts on transactional requests.","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":2,"column":1,"path":"subscribe/limit-unsuccessful-reconnection-attempts.feature"},"scenarios":["2066","2070","2073","2077","2078","2079","2080","2081","2082"]},"49a4cd6a615910fc88b7abf3fa43072f":{"type":"feature","id":"49a4cd6a615910fc88b7abf3fa43072f","name":"Can trigger the SDK to receive messages","description":"Uses the existing state (timetoken and subsciptions) This operation is known as a manual \"reconnect\"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":2,"column":1,"path":"subscribe/reconnect.feature"},"scenarios":["2089"]},"844dfc878f4d4fa323d781f82f55f1c6":{"type":"feature","id":"844dfc878f4d4fa323d781f82f55f1c6","name":"Exponential Reconnection Policy","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":2,"column":1,"path":"subscribe/reconnection-policy/exponential-reconnection-policy.feature"},"scenarios":[]},"fc01f9a6a76f2f8cc4ed497dc6420cd6":{"type":"feature","id":"fc01f9a6a76f2f8cc4ed497dc6420cd6","name":"Linear Reconnection Policy","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":2,"column":1,"path":"subscribe/reconnection-policy/linear-reconnection-policy.feature"},"scenarios":[]},"f2a5d70969c57bd2ae66139a8f1b509f":{"type":"feature","id":"f2a5d70969c57bd2ae66139a8f1b509f","name":"Restore Serialized Connection State","description":"Restore connection state replaces the current state of the SDK with serialized state information","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":2,"column":1,"path":"subscribe/restore-connection-state.feature"},"scenarios":[]},"d76fe0c538901a8850e00130378d2582":{"type":"feature","id":"d76fe0c538901a8850e00130378d2582","name":"Serialize Connection State","description":"Returns an opaque string which is suitable for serialization and which represents a subset of the state of the SDK. This is used to serialize the state of the SDK and restore it later after any unexpected interuption (like a force quit of the process)","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":2,"column":1,"path":"subscribe/serialize-connection-state.feature"},"scenarios":[]},"c53f8be9cd8421dce302dfdaedcf9746":{"type":"feature","id":"c53f8be9cd8421dce302dfdaedcf9746","name":"Get Connection Status","description":"The SDK will provide an operation that can be queried which will return the current connection state of the SDK This is intended to be primarily used for debugging and test writing.","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":2,"column":1,"path":"subscribe/state/get-connection-status.feature"},"scenarios":["2107"]},"8279f7f2d75407f881ce3cfa15a524b6":{"type":"feature","id":"8279f7f2d75407f881ce3cfa15a524b6","name":"Inspect the number of subsequent failed reconnection attempts","description":"The SDK can be queried to determine how many sequential attempts to call the Subscribe REST API endpoint have failed. The number of failed attempts is only positive when the SDK is actively attempting to reconnect. If the SDK gives up on reconnecting, failed attempt count is reset to 0.","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":2,"column":1,"path":"subscribe/state/get-failed-reconnection-attempts.feature"},"scenarios":["2111","2112","2113"]},"d5b5a1cc5e3b64ffd505e84d68539f25":{"type":"feature","id":"d5b5a1cc5e3b64ffd505e84d68539f25","name":"Inspect automatic reconnection delay","description":"The SDK can be queried to determine how long of a reconnection delay will be used before the next automatic reconnection attempt. This is not a dynamic number in that it does not reflect current time until reconnection. This is intended to be primarily used for debugging and test writing.","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":2,"column":1,"path":"subscribe/state/get-reconnection-delay.feature"},"scenarios":["2119"]},"b379e4ce371372b8d6b7ae225659030b":{"type":"feature","id":"b379e4ce371372b8d6b7ae225659030b","name":"Get Subscribed Channel Groups","description":"The SDK can be queried to determine a list of the names of the channel groups that the SDK is subscribed to or will attempt to subscribe to. This is intended to be primarily used for debugging and test writing.","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":2,"column":1,"path":"subscribe/state/get-subscribed-channel-groups.feature"},"scenarios":["2125"]},"5504663e6c2324a25367b06043967260":{"type":"feature","id":"5504663e6c2324a25367b06043967260","name":"Get Subscribed Channels","description":"The SDK can be queried to determine a list of the names of the channels that the SDK is subscribed to or will attempt to subscribe to. This is intended to be primarily used for debugging and test writing.","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":2,"column":1,"path":"subscribe/state/get-subscribed-channels.feature"},"scenarios":["2131"]},"638f41460fe2b7e0022bdd92ab8e7df0":{"type":"feature","id":"638f41460fe2b7e0022bdd92ab8e7df0","name":"Get Subscription Cursor","description":"A subscription cursor represents a point in time in a stream of messages. The subscription cursor is opaque, but internally is represented currently by a time token and region combination. This is intended to be primarily used for debugging and test writing.","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":2,"column":1,"path":"subscribe/state/get-subscription-cursor.feature"},"scenarios":["2137"]},"4862b5407d890e3eb184e749e401cd0a":{"type":"feature","id":"4862b5407d890e3eb184e749e401cd0a","name":"Subscribe for VSP","description":"As a PubNub user I want to subscribe and receive custom message type. Client should be able to receive custom message type from subscribe response without any additional options set (like `include_custom_message_type`for other API).","tags":["@featureSet=subscribeCustomMssgType","@beta"],"location":{"line":2,"column":1,"path":"subscribe/subscribe-custom-mssg-type.feature"},"scenarios":["2147"]},"b26917587d98330d93f87808fc9d7267":{"type":"feature","id":"b26917587d98330d93f87808fc9d7267","name":"Subscribe","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":2,"column":1,"path":"subscribe/subscribe.feature"},"scenarios":[]},"4182c8f19d40c7ca236a5f4f83faeb6b":{"type":"feature","id":"4182c8f19d40c7ca236a5f4f83faeb6b","name":"Unsubscribe","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":2,"column":1,"path":"subscribe/unsubscribe.feature"},"scenarios":[]},"a76d4ef5f3f6a672bbfab2865563e530":{"type":"feature","id":"a76d4ef5f3f6a672bbfab2865563e530","name":"Time","description":"As a PubNub user I want to get current PubNub time So I can verify connectivity to the PubNub network","tags":["@featureSet=time"],"location":{"line":2,"column":1,"path":"utilities/time.feature"},"scenarios":["2160"]}},"backgrounds":{"1":{"type":"background","id":"1","name":"I have enabled access manager","description":"","location":{"line":10,"column":3,"path":"access/authorization-failure-reporting.feature"},"steps":["0"]},"34":{"type":"background","id":"34","name":"I have enabled access manager","description":"","location":{"line":7,"column":3,"path":"access/configure-access-token.feature"},"steps":["33"]},"43":{"type":"background","id":"43","name":"I have enabled access manager","description":"","location":{"line":8,"column":3,"path":"access/get-access-token.feature"},"steps":["42"]},"56":{"type":"background","id":"56","name":"I have enabled access manager","description":"","location":{"line":8,"column":3,"path":"access/grant-token.feature"},"steps":["55"]},"200":{"type":"background","id":"200","name":"I have enabled access manager","description":"","location":{"line":7,"column":3,"path":"access/parse-access-token.feature"},"steps":["199"]},"217":{"type":"background","id":"217","name":"I have enabled access manager","description":"","location":{"line":6,"column":3,"path":"access/revoke-token.feature"},"steps":["216"]},"255":{"type":"background","id":"255","name":"I have enabled access manager","description":"","location":{"line":9,"column":3,"path":"access/set-access-token.feature"},"steps":["254"]},"435":{"type":"background","id":"435","name":"","description":"","location":{"line":6,"column":5,"path":"files/file-upload-to-space.feature"},"steps":["434"]},"494":{"type":"background","id":"494","name":"","description":"","location":{"line":6,"column":3,"path":"history/history-custom-mssg-type.feature"},"steps":["493"]},"565":{"type":"background","id":"565","name":"","description":"","location":{"line":5,"column":3,"path":"objectsV2/channel-metadata.feature"},"steps":["564"]},"602":{"type":"background","id":"602","name":"","description":"","location":{"line":5,"column":3,"path":"objectsV2/members-metadata.feature"},"steps":["601"]},"649":{"type":"background","id":"649","name":"","description":"","location":{"line":5,"column":3,"path":"objectsV2/membership-metadata.feature"},"steps":["648"]},"708":{"type":"background","id":"708","name":"","description":"","location":{"line":5,"column":3,"path":"objectsV2/uuid-metadata.feature"},"steps":["707"]},"750":{"type":"background","id":"750","name":"","description":"","location":{"line":5,"column":3,"path":"presence/event-engine/presence-engine.feature"},"steps":["749"]},"847":{"type":"background","id":"847","name":"","description":"","location":{"line":9,"column":3,"path":"presence/event-engine/presence-engine_Legacy.feature"},"steps":["846"]},"959":{"type":"background","id":"959","name":"","description":"","location":{"line":5,"column":3,"path":"presence/get-state.feature"},"steps":["958"]},"973":{"type":"background","id":"973","name":"","description":"","location":{"line":6,"column":3,"path":"presence/heartbeat.feature"},"steps":["972"]},"991":{"type":"background","id":"991","name":"","description":"","location":{"line":5,"column":3,"path":"presence/here-now.feature"},"steps":["990"]},"1016":{"type":"background","id":"1016","name":"","description":"","location":{"line":5,"column":3,"path":"presence/set-state.feature"},"steps":["1015"]},"1028":{"type":"background","id":"1028","name":"","description":"","location":{"line":6,"column":3,"path":"publish/publish-custom-mssg-type.feature"},"steps":["1027"]},"1137":{"type":"background","id":"1137","name":"","description":"","location":{"line":6,"column":3,"path":"publish/signal-custom-mssg-type.feature"},"steps":["1136"]},"1363":{"type":"background","id":"1363","name":"I have enabled access manager","description":"","location":{"line":6,"column":3,"path":"subscribe/contracts/access-denied-subscribe.feature"},"steps":["1362"]},"1473":{"type":"background","id":"1473","name":"","description":"","location":{"line":5,"column":3,"path":"subscribe/event-engine/happy-path.feature"},"steps":["1472"]},"1572":{"type":"background","id":"1572","name":"","description":"","location":{"line":9,"column":3,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"steps":["1571"]},"2142":{"type":"background","id":"2142","name":"","description":"","location":{"line":7,"column":3,"path":"subscribe/subscribe-custom-mssg-type.feature"},"steps":["2141"]}},"scenarios":{"6":{"type":"scenario","id":"6","backgroundId":"1","featureId":"0c3daaef85c19f5c3e46bc5f1989ee77","name":"Publish simple message with valid ttl and auth permissions","description":"","tags":["@featureSet=access","@beta","@contract=authSuccess"],"location":{"line":14,"column":3,"path":"access/authorization-failure-reporting.feature"},"steps":["2","3","4"]},"14":{"type":"scenario","id":"14","backgroundId":"1","featureId":"0c3daaef85c19f5c3e46bc5f1989ee77","name":"Publish simple message with expired auth token","description":"","tags":["@featureSet=access","@beta","@contract=authFailureExpired"],"location":{"line":20,"column":3,"path":"access/authorization-failure-reporting.feature"},"steps":["7","8","9","10","11","12"]},"22":{"type":"scenario","id":"22","backgroundId":"1","featureId":"0c3daaef85c19f5c3e46bc5f1989ee77","name":"Publish simple message with invalid auth permissions","description":"","tags":["@featureSet=access","@beta","@contract=authFailurePermissions"],"location":{"line":29,"column":3,"path":"access/authorization-failure-reporting.feature"},"steps":["15","16","17","18","19","20"]},"30":{"type":"scenario","id":"30","backgroundId":"1","featureId":"0c3daaef85c19f5c3e46bc5f1989ee77","name":"Publish fails due to revoked token","description":"","tags":["@featureSet=access","@beta","@contract=authFailureRevoked"],"location":{"line":38,"column":3,"path":"access/authorization-failure-reporting.feature"},"steps":["23","24","25","26","27","28"]},"38":{"type":"scenario","id":"38","backgroundId":"34","featureId":"49484f811a0685e566d30f2bb0c366bb","name":"An access token passed in the authKey configuration parameter will be used to authorize requests","description":"","tags":["@featureSet=access","@beta","@skip"],"location":{"line":10,"column":3,"path":"access/configure-access-token.feature"},"steps":["35","36","37"]},"47":{"type":"scenario","id":"47","backgroundId":"43","featureId":"2c33be0dc34fc31630f86f9ea5200946","name":"I can read the current access token","description":"","tags":["@featureSet=access","@beta","@skip"],"location":{"line":11,"column":3,"path":"access/get-access-token.feature"},"steps":["44","45","46"]},"51":{"type":"scenario","id":"51","backgroundId":"43","featureId":"2c33be0dc34fc31630f86f9ea5200946","name":"No token is associated","description":"","tags":["@featureSet=access","@beta","@skip"],"location":{"line":16,"column":3,"path":"access/get-access-token.feature"},"steps":["48","49","50"]},"123":{"type":"scenario","id":"123","backgroundId":"56","featureId":"fc6c498d2d86d21d24b32d6b49944654","name":"Grant an access token with all permissions on all resource types with authorized uuid","description":"","tags":["@featureSet=access","@contract=grantAllPermissions"],"location":{"line":12,"column":3,"path":"access/grant-token.feature"},"steps":["57","58","59","60","61","62","63","64","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","91","92","93","94","95","96","97","98","99","100","101","102","103","104","105","106","107","108","109","110","111","112","113","114","115","116","117","118","119","120","121"]},"133":{"type":"scenario","id":"133","backgroundId":"56","featureId":"fc6c498d2d86d21d24b32d6b49944654","name":"Grant an access token without an authorized uuid","description":"","tags":["@featureSet=access","@contract=grantWithoutAuthorizedUUID"],"location":{"line":81,"column":3,"path":"access/grant-token.feature"},"steps":["124","125","126","127","128","129","130","131"]},"144":{"type":"scenario","id":"144","backgroundId":"56","featureId":"fc6c498d2d86d21d24b32d6b49944654","name":"Grant an access token successfully with an authorized uuid","description":"","tags":["@featureSet=access","@contract=grantWithAuthorizedUUID"],"location":{"line":92,"column":3,"path":"access/grant-token.feature"},"steps":["134","135","136","137","138","139","140","141","142"]},"157":{"type":"scenario","id":"157","backgroundId":"56","featureId":"fc6c498d2d86d21d24b32d6b49944654","name":"Attempt to grant an access token with all permissions empty or false and expect a server error","description":"","tags":["@featureSet=access","@contract=grantWithoutAnyPermissionsError"],"location":{"line":104,"column":3,"path":"access/grant-token.feature"},"steps":["145","146","147","148","149","150","151","152","153","154","155"]},"170":{"type":"scenario","id":"170","backgroundId":"56","featureId":"fc6c498d2d86d21d24b32d6b49944654","name":"Attempt to grant an access token with a regular expression containing a syntax error and expect a server error","description":"","tags":["@featureSet=access","@contract=grantWithRegExpSyntaxError"],"location":{"line":118,"column":3,"path":"access/grant-token.feature"},"steps":["158","159","160","161","162","163","164","165","166","167","168"]},"183":{"type":"scenario","id":"183","backgroundId":"56","featureId":"fc6c498d2d86d21d24b32d6b49944654","name":"Attempt to grant an access token with a regular expression containing capturing groups and expect a server error","description":"","tags":["@featureSet=access","@contract=grantWithRegExpNonCapturingError"],"location":{"line":132,"column":3,"path":"access/grant-token.feature"},"steps":["171","172","173","174","175","176","177","178","179","180","181"]},"197":{"type":"scenario","id":"197","backgroundId":"56","featureId":"fc6c498d2d86d21d24b32d6b49944654","name":"Attempt to grant an access token when ttl provided exceeds the max ttl configured (use default max 43200 for the test)","description":"","tags":["@featureSet=access","@contract=grantWithTTLExceedMaxTTL","@beta"],"location":{"line":146,"column":3,"path":"access/grant-token.feature"},"steps":["184","185","186","187","188","189","190","191","192","193","194"]},"204":{"type":"scenario","id":"204","backgroundId":"200","featureId":"960f98cc9286b75871db01397bacb186","name":"Validate that a token containing authorized uuid can be parsed correctly","description":"","tags":["@featureSet=access"],"location":{"line":10,"column":3,"path":"access/parse-access-token.feature"},"steps":["201","202","203"]},"209":{"type":"scenario","id":"209","backgroundId":"200","featureId":"960f98cc9286b75871db01397bacb186","name":"Validate that a token containing uuid resource permissions can be parsed correctly","description":"","tags":["@featureSet=access"],"location":{"line":15,"column":3,"path":"access/parse-access-token.feature"},"steps":["205","206","207","208"]},"214":{"type":"scenario","id":"214","backgroundId":"200","featureId":"960f98cc9286b75871db01397bacb186","name":"Validate that a token containing uuid pattern permissions can be parsed correctly","description":"","tags":["@featureSet=access"],"location":{"line":21,"column":3,"path":"access/parse-access-token.feature"},"steps":["210","211","212","213"]},"222":{"type":"scenario","id":"222","backgroundId":"217","featureId":"9cd4c8809e3f376bdc0d41d8a3694ee9","name":"Revoke existing valid token","description":"","tags":["@featureSet=access","@beta","@contract=revokeValidToken"],"location":{"line":10,"column":3,"path":"access/revoke-token.feature"},"steps":["218","219","220"]},"234":{"type":"scenario","id":"234","backgroundId":"217","featureId":"9cd4c8809e3f376bdc0d41d8a3694ee9","name":"Revoke invalid token","description":"","tags":["@featureSet=access","@beta","@contract=revokeInvalidToken"],"location":{"line":16,"column":3,"path":"access/revoke-token.feature"},"steps":["223","224","225","226","227","228","229","230","231","232"]},"246":{"type":"scenario","id":"246","backgroundId":"217","featureId":"9cd4c8809e3f376bdc0d41d8a3694ee9","name":"Revoke a token while it is disabled on a server","description":"","tags":["@featureSet=access","@beta","@contract=revokeFeatureDisabled"],"location":{"line":29,"column":3,"path":"access/revoke-token.feature"},"steps":["235","236","237","238","239","240","241","242","243","244"]},"251":{"type":"scenario","id":"251","backgroundId":"217","featureId":"9cd4c8809e3f376bdc0d41d8a3694ee9","name":"Revoke a token with characters that require url encoding","description":"","tags":["@featureSet=access","@beta","@contract=revokeEncodePathParameter"],"location":{"line":42,"column":3,"path":"access/revoke-token.feature"},"steps":["247","248","249"]},"259":{"type":"scenario","id":"259","backgroundId":"255","featureId":"1f8b452724077879725454e9af577e99","name":"An access token provided via the setToken operation will be used to authorize future requests","description":"","tags":["@featureSet=access","@beta","@skip"],"location":{"line":12,"column":3,"path":"access/set-access-token.feature"},"steps":["256","257","258"]},"264":{"type":"scenario","id":"264","backgroundId":"255","featureId":"1f8b452724077879725454e9af577e99","name":"An Access token provided via the setToken operation overrides access token provided in configuration","description":"","tags":["@featureSet=access","@beta","@skip"],"location":{"line":17,"column":3,"path":"access/set-access-token.feature"},"steps":["260","261","262","263"]},"269":{"type":"scenario","id":"269","backgroundId":"255","featureId":"1f8b452724077879725454e9af577e99","name":"It is possible to stop using an access token without replacing it with another one","description":"","tags":["@featureSet=access","@beta","@skip"],"location":{"line":24,"column":3,"path":"access/set-access-token.feature"},"steps":["265","266","267","268"]},"286":{"type":"scenario","id":"286","featureId":"6e9750172217843920f5490ad1ad88ef","name":"AES-CBC cryptor data header can be processed","description":"","tags":["@featureSet=cryptoModule","@beta"],"location":{"line":7,"column":3,"path":"encryption/cryptor-module.feature"},"steps":["273","274","275","276"]},"298":{"type":"scenario","id":"298","featureId":"6e9750172217843920f5490ad1ad88ef","name":"Empty data encryption should fail","description":"","tags":["@featureSet=cryptoModule","@beta"],"location":{"line":37,"column":3,"path":"encryption/cryptor-module.feature"},"steps":["287","288","289","290","291"]},"314":{"type":"scenario","id":"314","featureId":"6e9750172217843920f5490ad1ad88ef","name":"Empty stream data encryption should fail","description":"","tags":["@featureSet=cryptoModule","@beta","@na=rust","@na=dart","@na=ruby","@na=python"],"location":{"line":54,"column":3,"path":"encryption/cryptor-module.feature"},"steps":["299","300","301","302","303"]},"327":{"type":"scenario","id":"327","featureId":"6e9750172217843920f5490ad1ad88ef","name":"Empty data decryption should fail","description":"","tags":["@featureSet=cryptoModule","@beta"],"location":{"line":68,"column":3,"path":"encryption/cryptor-module.feature"},"steps":["315","316","317","318","319"]},"344":{"type":"scenario","id":"344","featureId":"6e9750172217843920f5490ad1ad88ef","name":"Empty stream data decryption should fail","description":"","tags":["@featureSet=cryptoModule","@beta","@na=rust","@na=dart","@na=ruby","@na=python"],"location":{"line":89,"column":3,"path":"encryption/cryptor-module.feature"},"steps":["328","329","330","331","332"]},"357":{"type":"scenario","id":"357","featureId":"6e9750172217843920f5490ad1ad88ef","name":"Data encrypted with legacy AES-CBC cryptor is decryptable with legacy implementation","description":"","tags":["@featureSet=cryptoModule","@beta"],"location":{"line":107,"column":3,"path":"encryption/cryptor-module.feature"},"steps":["345","346","347","348","349","350"]},"372":{"type":"scenario","id":"372","featureId":"6e9750172217843920f5490ad1ad88ef","name":"Stream data encrypted with legacy AES-CBC cryptor is decryptable with legacy implementation","description":"","tags":["@featureSet=cryptoModule","@beta","@na=rust","@na=dart","@na=ruby","@na=python"],"location":{"line":125,"column":3,"path":"encryption/cryptor-module.feature"},"steps":["358","359","360","361","362","363"]},"390":{"type":"scenario","id":"390","featureId":"6e9750172217843920f5490ad1ad88ef","name":"Cryptor is able to process sample files as binary","description":"","tags":["@featureSet=cryptoModule","@beta"],"location":{"line":138,"column":3,"path":"encryption/cryptor-module.feature"},"steps":["373","374","375","376","377"]},"408":{"type":"scenario","id":"408","featureId":"6e9750172217843920f5490ad1ad88ef","name":"Cryptor is able to process sample files as stream","description":"","tags":["@featureSet=cryptoModule","@beta","@na=rust","@na=dart","@na=ruby","@na=python"],"location":{"line":161,"column":3,"path":"encryption/cryptor-module.feature"},"steps":["391","392","393","394","395"]},"418":{"type":"scenario","id":"418","featureId":"6e9750172217843920f5490ad1ad88ef","name":"Crypto module can handle encrypted data from different cryptors","description":"","tags":["@featureSet=cryptoModule","@beta"],"location":{"line":177,"column":3,"path":"encryption/cryptor-module.feature"},"steps":["409","410","411","412","413"]},"426":{"type":"scenario","id":"426","featureId":"2538da2e47f0f4e23c573fc847c6acaf","name":"Receiving an encrypted message with correct crypto key","description":"","tags":["@featureSet=subscribe","@contract=messageEncryption","@beta"],"location":{"line":8,"column":3,"path":"encryption/message-encryption.feature"},"steps":["421","422","423"]},"432":{"type":"scenario","id":"432","featureId":"2538da2e47f0f4e23c573fc847c6acaf","name":"Receiving an encrypted message with invalid crypto key","description":"","tags":["@featureSet=subscribe","@contract=messageEncryption","@beta"],"location":{"line":14,"column":3,"path":"encryption/message-encryption.feature"},"steps":["427","428","429"]},"439":{"type":"scenario","id":"439","backgroundId":"435","featureId":"8f3fe7bfcc733e7c46314c53f0c3c1a8","name":"Send a file success","description":"","tags":["@featureSet=files","@beta","@contract=sendFileWithType"],"location":{"line":10,"column":5,"path":"files/file-upload-to-space.feature"},"steps":["436","437"]},"443":{"type":"scenario","id":"443","backgroundId":"435","featureId":"8f3fe7bfcc733e7c46314c53f0c3c1a8","name":"Send a file fails when message type is too short, shorten than 3 characters","description":"","tags":["@featureSet=files","@beta","@contract=sendFileWithTooShortType"],"location":{"line":15,"column":5,"path":"files/file-upload-to-space.feature"},"steps":["440","441"]},"447":{"type":"scenario","id":"447","backgroundId":"435","featureId":"8f3fe7bfcc733e7c46314c53f0c3c1a8","name":"Send a file fails when message type is too long, longer than 50 characters","description":"","tags":["@featureSet=files","@beta","@contract=sendFileWithTooLongType"],"location":{"line":20,"column":5,"path":"files/file-upload-to-space.feature"},"steps":["444","445"]},"455":{"type":"scenario","id":"455","featureId":"91f3a2c0e4424c87689525da44c4db11","name":"Listing files","description":"","tags":["@featureSet=files","@contract=listingFiles","@beta"],"location":{"line":8,"column":3,"path":"files/file-upload.feature"},"steps":["450","451","452"]},"461":{"type":"scenario","id":"461","featureId":"91f3a2c0e4424c87689525da44c4db11","name":"Publishing file message","description":"","tags":["@featureSet=files","@contract=publishingFileMessage","@beta"],"location":{"line":14,"column":3,"path":"files/file-upload.feature"},"steps":["456","457","458"]},"467":{"type":"scenario","id":"467","featureId":"91f3a2c0e4424c87689525da44c4db11","name":"Publishing file message failure","description":"","tags":["@featureSet=files","@contract=publishingFileMessageFailure","@beta"],"location":{"line":20,"column":3,"path":"files/file-upload.feature"},"steps":["462","463","464"]},"473":{"type":"scenario","id":"473","featureId":"91f3a2c0e4424c87689525da44c4db11","name":"Deleting a file","description":"","tags":["@featureSet=files","@contract=deletingFile","@beta"],"location":{"line":26,"column":3,"path":"files/file-upload.feature"},"steps":["468","469","470"]},"479":{"type":"scenario","id":"479","featureId":"91f3a2c0e4424c87689525da44c4db11","name":"Downloading a file","description":"","tags":["@featureSet=files","@contract=downloadingFile","@beta"],"location":{"line":32,"column":3,"path":"files/file-upload.feature"},"steps":["474","475","476"]},"485":{"type":"scenario","id":"485","featureId":"91f3a2c0e4424c87689525da44c4db11","name":"Sending file","description":"","tags":["@featureSet=files","@skip","@beta"],"location":{"line":38,"column":3,"path":"files/file-upload.feature"},"steps":["480","481","482"]},"491":{"type":"scenario","id":"491","featureId":"91f3a2c0e4424c87689525da44c4db11","name":"Sending file with retries","description":"","tags":["@featureSet=files","@skip","@beta"],"location":{"line":44,"column":3,"path":"files/file-upload.feature"},"steps":["486","487","488"]},"499":{"type":"scenario","id":"499","backgroundId":"494","featureId":"efd56bc133990dba6fb78d8ed3345948","name":"Client can fetch history with message types","description":"","tags":["@featureSet=historyCustomMssgType","@beta","@contract=fetchHistoryWithPubNubMessageTypes"],"location":{"line":10,"column":3,"path":"history/history-custom-mssg-type.feature"},"steps":["495","496","497"]},"504":{"type":"scenario","id":"504","backgroundId":"494","featureId":"efd56bc133990dba6fb78d8ed3345948","name":"Client can fetch history with types","description":"","tags":["@featureSet=historyCustomMssgType","@beta","@contract=fetchHistoryWithUserAndPubNubTypes"],"location":{"line":16,"column":3,"path":"history/history-custom-mssg-type.feature"},"steps":["500","501","502"]},"509":{"type":"scenario","id":"509","backgroundId":"494","featureId":"efd56bc133990dba6fb78d8ed3345948","name":"Client can fetch history without types enabled by default","description":"","tags":["@featureSet=historyCustomMssgType","@beta","@contract=fetchHistoryWithoutTypes"],"location":{"line":22,"column":3,"path":"history/history-custom-mssg-type.feature"},"steps":["505","506","507"]},"518":{"type":"scenario","id":"518","featureId":"16d2b386b2034b9488996466aaae0b57","name":"Fetching message history","description":"","tags":["@featureSet=history","@contract=fetchMessageHistory","@beta"],"location":{"line":8,"column":3,"path":"history/history.feature"},"steps":["512","513","514","515"]},"524":{"type":"scenario","id":"524","featureId":"16d2b386b2034b9488996466aaae0b57","name":"Fetching message history for multiple channels","description":"","tags":["@featureSet=history","@contract=fetchMessageHistoryMulti","@beta"],"location":{"line":15,"column":3,"path":"history/history.feature"},"steps":["519","520","521"]},"530":{"type":"scenario","id":"530","featureId":"16d2b386b2034b9488996466aaae0b57","name":"Fetching message history with message actions","description":"","tags":["@featureSet=history","@contract=fetchMessageHistoryActions","@beta"],"location":{"line":21,"column":3,"path":"history/history.feature"},"steps":["525","526","527"]},"537":{"type":"scenario","id":"537","featureId":"bfc34cd74d1dab63536a80aebfe3dc7e","name":"Adding a message action","description":"","tags":["@featureSet=messageActions","@contract=successfulAddMessageAction","@beta"],"location":{"line":8,"column":3,"path":"message-actions/message-actions.feature"},"steps":["532","533","534"]},"543":{"type":"scenario","id":"543","featureId":"bfc34cd74d1dab63536a80aebfe3dc7e","name":"Failing to add a message action","description":"","tags":["@featureSet=messageActions","@contract=failedAddMessageAction","@beta"],"location":{"line":14,"column":3,"path":"message-actions/message-actions.feature"},"steps":["538","539","540"]},"550":{"type":"scenario","id":"550","featureId":"bfc34cd74d1dab63536a80aebfe3dc7e","name":"Fetching message actions with pagination","description":"","tags":["@featureSet=messageActions","@contract=fetchMessageActions","@beta"],"location":{"line":20,"column":3,"path":"message-actions/message-actions.feature"},"steps":["544","545","546","547"]},"556":{"type":"scenario","id":"556","featureId":"bfc34cd74d1dab63536a80aebfe3dc7e","name":"Deleting a message action","description":"","tags":["@featureSet=messageActions","@contract=successfulDeleteMessageAction","@beta"],"location":{"line":27,"column":3,"path":"message-actions/message-actions.feature"},"steps":["551","552","553"]},"562":{"type":"scenario","id":"562","featureId":"bfc34cd74d1dab63536a80aebfe3dc7e","name":"Failing to delete a message action","description":"","tags":["@featureSet=messageActions","@contract=failedDeleteMessageAction","@beta"],"location":{"line":33,"column":3,"path":"message-actions/message-actions.feature"},"steps":["557","558","559"]},"571":{"type":"scenario","id":"571","backgroundId":"565","featureId":"86a052365207542b400a5a2afa08025c","name":"Get a channel metadata for id","description":"","tags":["@featureSet=objectsV2","@beta","@contract=getChannelMetadataOfChat"],"location":{"line":9,"column":3,"path":"objectsV2/channel-metadata.feature"},"steps":["566","567","568","569"]},"577":{"type":"scenario","id":"577","backgroundId":"565","featureId":"86a052365207542b400a5a2afa08025c","name":"Get a channel with custom metadata","description":"","tags":["@featureSet=objectsV2","@beta","@contract=getChannelMetadataOfDMWithCustom"],"location":{"line":16,"column":3,"path":"objectsV2/channel-metadata.feature"},"steps":["572","573","574","575"]},"583":{"type":"scenario","id":"583","backgroundId":"565","featureId":"86a052365207542b400a5a2afa08025c","name":"Set a channel metadata","description":"","tags":["@featureSet=objectsV2","@beta","@contract=setChannelMetadataForChat"],"location":{"line":23,"column":3,"path":"objectsV2/channel-metadata.feature"},"steps":["578","579","580","581"]},"588":{"type":"scenario","id":"588","backgroundId":"565","featureId":"86a052365207542b400a5a2afa08025c","name":"Remove a channel metadata for id","description":"","tags":["@featureSet=objectsV2","@beta","@contract=removeChannelMetadataOfChat"],"location":{"line":30,"column":3,"path":"objectsV2/channel-metadata.feature"},"steps":["584","585","586"]},"593":{"type":"scenario","id":"593","backgroundId":"565","featureId":"86a052365207542b400a5a2afa08025c","name":"Get all channel metadata","description":"","tags":["@featureSet=objectsV2","@beta","@contract=getAllChannelMetadata"],"location":{"line":36,"column":3,"path":"objectsV2/channel-metadata.feature"},"steps":["589","590","591"]},"598":{"type":"scenario","id":"598","backgroundId":"565","featureId":"86a052365207542b400a5a2afa08025c","name":"Get all channel metadata with custom","description":"","tags":["@featureSet=objectsV2","@beta","@contract=getAllChannelMetadataWithCustom"],"location":{"line":42,"column":3,"path":"objectsV2/channel-metadata.feature"},"steps":["594","595","596"]},"608":{"type":"scenario","id":"608","backgroundId":"602","featureId":"f904be085f84e4dd964d64b101fe5673","name":"Get members for a channel","description":"","tags":["@featureSet=objectsV2","@beta","@contract=getMembersOfChatChannel"],"location":{"line":9,"column":3,"path":"objectsV2/members-metadata.feature"},"steps":["603","604","605","606"]},"614":{"type":"scenario","id":"614","backgroundId":"602","featureId":"f904be085f84e4dd964d64b101fe5673","name":"Get members for VipChat channel with custom and UUID with custom","description":"","tags":["@featureSet=objectsV2","@beta","@contract=getMembersOfVipChatChannelWithCustomAndUuidWithCustom"],"location":{"line":16,"column":3,"path":"objectsV2/members-metadata.feature"},"steps":["609","610","611","612"]},"621":{"type":"scenario","id":"621","backgroundId":"602","featureId":"f904be085f84e4dd964d64b101fe5673","name":"Set member for a channel","description":"","tags":["@featureSet=objectsV2","@beta","@contract=setMembersForChatChannel"],"location":{"line":23,"column":3,"path":"objectsV2/members-metadata.feature"},"steps":["615","616","617","618","619"]},"628":{"type":"scenario","id":"628","backgroundId":"602","featureId":"f904be085f84e4dd964d64b101fe5673","name":"Set member with custom for a channel and UUID with custom","description":"","tags":["@featureSet=objectsV2","@beta","@contract=setMembersForChatChannelWithCustomAndUuidWithCustom"],"location":{"line":31,"column":3,"path":"objectsV2/members-metadata.feature"},"steps":["622","623","624","625","626"]},"634":{"type":"scenario","id":"634","backgroundId":"602","featureId":"f904be085f84e4dd964d64b101fe5673","name":"Remove member for a channel","description":"","tags":["@featureSet=objectsV2","@beta","@contract=removeMembersForChatChannel"],"location":{"line":39,"column":3,"path":"objectsV2/members-metadata.feature"},"steps":["629","630","631","632"]},"645":{"type":"scenario","id":"645","backgroundId":"602","featureId":"f904be085f84e4dd964d64b101fe5673","name":"Manage members for a channel","description":"","tags":["@featureSet=objectsV2","@beta","@contract=manageMembersForChatChannel","@na=ruby","@na=js"],"location":{"line":46,"column":3,"path":"objectsV2/members-metadata.feature"},"steps":["635","636","637","638","639","640","641"]},"655":{"type":"scenario","id":"655","backgroundId":"649","featureId":"28ce82f5aa5c139169ffec2eef237027","name":"Get memberships for UUID","description":"","tags":["@featureSet=objectsV2","@beta","@contract=getAliceMemberships"],"location":{"line":9,"column":3,"path":"objectsV2/membership-metadata.feature"},"steps":["650","651","652","653"]},"661":{"type":"scenario","id":"661","backgroundId":"649","featureId":"28ce82f5aa5c139169ffec2eef237027","name":"Get memberships for current user","description":"","tags":["@featureSet=objectsV2","@beta","@contract=getAliceMemberships"],"location":{"line":16,"column":3,"path":"objectsV2/membership-metadata.feature"},"steps":["656","657","658","659"]},"667":{"type":"scenario","id":"667","backgroundId":"649","featureId":"28ce82f5aa5c139169ffec2eef237027","name":"Get memberships for UUID with custom and channel custom","description":"","tags":["@featureSet=objectsV2","@beta","@contract=getBobMembershipWithCustomAndChannelCustom"],"location":{"line":23,"column":3,"path":"objectsV2/membership-metadata.feature"},"steps":["662","663","664","665"]},"674":{"type":"scenario","id":"674","backgroundId":"649","featureId":"28ce82f5aa5c139169ffec2eef237027","name":"Set membership","description":"","tags":["@featureSet=objectsV2","@beta","@contract=setAliceMembership"],"location":{"line":30,"column":3,"path":"objectsV2/membership-metadata.feature"},"steps":["668","669","670","671","672"]},"681":{"type":"scenario","id":"681","backgroundId":"649","featureId":"28ce82f5aa5c139169ffec2eef237027","name":"Set membership for current user","description":"","tags":["@featureSet=objectsV2","@beta","@contract=setAliceMembership"],"location":{"line":38,"column":3,"path":"objectsV2/membership-metadata.feature"},"steps":["675","676","677","678","679"]},"687":{"type":"scenario","id":"687","backgroundId":"649","featureId":"28ce82f5aa5c139169ffec2eef237027","name":"Remove membership","description":"","tags":["@featureSet=objectsV2","@beta","@contract=removeAliceMembership"],"location":{"line":46,"column":3,"path":"objectsV2/membership-metadata.feature"},"steps":["682","683","684","685"]},"693":{"type":"scenario","id":"693","backgroundId":"649","featureId":"28ce82f5aa5c139169ffec2eef237027","name":"Remove membership for current user","description":"","tags":["@featureSet=objectsV2","@beta","@contract=removeAliceMembership"],"location":{"line":53,"column":3,"path":"objectsV2/membership-metadata.feature"},"steps":["688","689","690","691"]},"704":{"type":"scenario","id":"704","backgroundId":"649","featureId":"28ce82f5aa5c139169ffec2eef237027","name":"Manage memberships for a UUID","description":"","tags":["@featureSet=objectsV2","@beta","@contract=manageAliceMemberships","@na=ruby","@na=js"],"location":{"line":60,"column":3,"path":"objectsV2/membership-metadata.feature"},"steps":["694","695","696","697","698","699","700"]},"714":{"type":"scenario","id":"714","backgroundId":"708","featureId":"8a383f24948b75233e7a80e59607ce99","name":"Get a UUID metadata for id","description":"","tags":["@featureSet=objectsV2","@beta","@contract=getUUIDMetadataOfAlice"],"location":{"line":9,"column":3,"path":"objectsV2/uuid-metadata.feature"},"steps":["709","710","711","712"]},"720":{"type":"scenario","id":"720","backgroundId":"708","featureId":"8a383f24948b75233e7a80e59607ce99","name":"Get a UUID with custom metadata, id stored in config","description":"","tags":["@featureSet=objectsV2","@beta","@contract=getUUIDMetadataOfBobWithCustom"],"location":{"line":16,"column":3,"path":"objectsV2/uuid-metadata.feature"},"steps":["715","716","717","718"]},"726":{"type":"scenario","id":"726","backgroundId":"708","featureId":"8a383f24948b75233e7a80e59607ce99","name":"Set a UUID metadata","description":"","tags":["@featureSet=objectsV2","@beta","@contract=setUUIDMetadataForAlice"],"location":{"line":23,"column":3,"path":"objectsV2/uuid-metadata.feature"},"steps":["721","722","723","724"]},"731":{"type":"scenario","id":"731","backgroundId":"708","featureId":"8a383f24948b75233e7a80e59607ce99","name":"Remove a UUID metadata for id","description":"","tags":["@featureSet=objectsV2","@beta","@contract=removeUUIDMetadataOfAlice"],"location":{"line":30,"column":3,"path":"objectsV2/uuid-metadata.feature"},"steps":["727","728","729"]},"736":{"type":"scenario","id":"736","backgroundId":"708","featureId":"8a383f24948b75233e7a80e59607ce99","name":"Remove a UUID metadata, id stored in config","description":"","tags":["@featureSet=objectsV2","@beta","@contract=removeUUIDMetadataOfAlice"],"location":{"line":36,"column":3,"path":"objectsV2/uuid-metadata.feature"},"steps":["732","733","734"]},"741":{"type":"scenario","id":"741","backgroundId":"708","featureId":"8a383f24948b75233e7a80e59607ce99","name":"Get all UUID metadata","description":"","tags":["@featureSet=objectsV2","@beta","@contract=getAllUUIDMetadata"],"location":{"line":42,"column":3,"path":"objectsV2/uuid-metadata.feature"},"steps":["737","738","739"]},"746":{"type":"scenario","id":"746","backgroundId":"708","featureId":"8a383f24948b75233e7a80e59607ce99","name":"Get all UUID metadata with custom","description":"","tags":["@featureSet=objectsV2","@beta","@contract=getAllUUIDMetadataWithCustom"],"location":{"line":48,"column":3,"path":"objectsV2/uuid-metadata.feature"},"steps":["742","743","744"]},"769":{"type":"scenario","id":"769","backgroundId":"750","featureId":"d8c6f6d645bc73f9b38ced476208b4a2","name":"Successfully joined a few channels","description":"","tags":["@featureSet=presenceEventEngine","@beta","@contract=presenceTestMultipleWait"],"location":{"line":9,"column":3,"path":"presence/event-engine/presence-engine.feature"},"steps":["751","752","753","767"]},"780":{"type":"scenario","id":"780","backgroundId":"750","featureId":"d8c6f6d645bc73f9b38ced476208b4a2","name":"Successfully joined a few channels with presence","description":"","tags":["@featureSet=presenceEventEngine","@beta","@contract=presenceJoin"],"location":{"line":29,"column":3,"path":"presence/event-engine/presence-engine.feature"},"steps":["770","771","772","778"]},"792":{"type":"scenario","id":"792","backgroundId":"750","featureId":"d8c6f6d645bc73f9b38ced476208b4a2","name":"Recovery from one unexpected error along the way","description":"","tags":["@featureSet=presenceEventEngine","@beta","@contract=presenceJoinWithAnError"],"location":{"line":41,"column":3,"path":"presence/event-engine/presence-engine.feature"},"steps":["781","782","783","784","790"]},"803":{"type":"scenario","id":"803","backgroundId":"750","featureId":"d8c6f6d645bc73f9b38ced476208b4a2","name":"Complete handshake failure","description":"","tags":["@featureSet=presenceEventEngine","@beta","@contract=presenceJoinWithContinuousFailures"],"location":{"line":54,"column":3,"path":"presence/event-engine/presence-engine.feature"},"steps":["793","794","795","796","801"]},"822":{"type":"scenario","id":"822","backgroundId":"750","featureId":"d8c6f6d645bc73f9b38ced476208b4a2","name":"Joining and leaving channels","description":"","tags":["@featureSet=presenceEventEngine","@beta","@contract=presenceLeave"],"location":{"line":66,"column":3,"path":"presence/event-engine/presence-engine.feature"},"steps":["804","805","806","807","808","820"]},"827":{"type":"scenario","id":"827","backgroundId":"750","featureId":"d8c6f6d645bc73f9b38ced476208b4a2","name":"Joining a few channels with heartbeat interval set to 0","description":"","tags":["@featureSet=presenceEventEngine","@beta","@contract=presenceJoinWithHeartbeatDisabled"],"location":{"line":86,"column":3,"path":"presence/event-engine/presence-engine.feature"},"steps":["823","824","825"]},"843":{"type":"scenario","id":"843","backgroundId":"750","featureId":"d8c6f6d645bc73f9b38ced476208b4a2","name":"Leaving channels while sending out leave requests is disabled","description":"","tags":["@featureSet=presenceEventEngine","@beta","@contract=presenceSuppressLeaveEvents","@na=js"],"location":{"line":92,"column":3,"path":"presence/event-engine/presence-engine.feature"},"steps":["828","829","830","831","840"]},"866":{"type":"scenario","id":"866","backgroundId":"847","featureId":"d8c6f6d645bc73f9b38ced476208b4a2","name":"Successfully joined a few channels","description":"","tags":["@featureSet=presenceEventEngine","@beta","@contract=presenceTestMultipleWait"],"location":{"line":13,"column":3,"path":"presence/event-engine/presence-engine_Legacy.feature"},"steps":["848","849","850","864"]},"877":{"type":"scenario","id":"877","backgroundId":"847","featureId":"d8c6f6d645bc73f9b38ced476208b4a2","name":"Successfully joined a few channels with presence","description":"","tags":["@featureSet=presenceEventEngine","@beta","@contract=presenceJoin"],"location":{"line":33,"column":3,"path":"presence/event-engine/presence-engine_Legacy.feature"},"steps":["867","868","869","875"]},"892":{"type":"scenario","id":"892","backgroundId":"847","featureId":"d8c6f6d645bc73f9b38ced476208b4a2","name":"Recovery from one unexpected error along the way","description":"","tags":["@featureSet=presenceEventEngine","@beta","@contract=presenceJoinWithAnError"],"location":{"line":45,"column":3,"path":"presence/event-engine/presence-engine_Legacy.feature"},"steps":["878","879","880","881","890"]},"915":{"type":"scenario","id":"915","backgroundId":"847","featureId":"d8c6f6d645bc73f9b38ced476208b4a2","name":"Complete handshake failure","description":"","tags":["@featureSet=presenceEventEngine","@beta","@contract=presenceJoinWithContinuousFailures"],"location":{"line":61,"column":3,"path":"presence/event-engine/presence-engine_Legacy.feature"},"steps":["893","894","895","896","913"]},"934":{"type":"scenario","id":"934","backgroundId":"847","featureId":"d8c6f6d645bc73f9b38ced476208b4a2","name":"Joining and leaving channels","description":"","tags":["@featureSet=presenceEventEngine","@beta","@contract=presenceLeave"],"location":{"line":85,"column":3,"path":"presence/event-engine/presence-engine_Legacy.feature"},"steps":["916","917","918","919","920","932"]},"939":{"type":"scenario","id":"939","backgroundId":"847","featureId":"d8c6f6d645bc73f9b38ced476208b4a2","name":"Joining a few channels with heartbeat interval set to 0","description":"","tags":["@featureSet=presenceEventEngine","@beta","@contract=presenceJoinWithHeartbeatDisabled"],"location":{"line":105,"column":3,"path":"presence/event-engine/presence-engine_Legacy.feature"},"steps":["935","936","937"]},"955":{"type":"scenario","id":"955","backgroundId":"847","featureId":"d8c6f6d645bc73f9b38ced476208b4a2","name":"Leaving channels while sending out leave requests is disabled","description":"","tags":["@featureSet=presenceEventEngine","@beta","@contract=presenceSuppressLeaveEvents","@na=js"],"location":{"line":111,"column":3,"path":"presence/event-engine/presence-engine_Legacy.feature"},"steps":["940","941","942","943","952"]},"964":{"type":"scenario","id":"964","backgroundId":"959","featureId":"ecb96f0fb94cc64370cd3d01a5c2d2bb","name":"Get presence state which has been set on channel using presence/data endpoint","description":"","tags":["@featureSet=getPresenceState","@beta","@contract=getPresenceStateSetUsingPresenceDataEndpoint"],"location":{"line":9,"column":3,"path":"presence/get-state.feature"},"steps":["960","961","962"]},"969":{"type":"scenario","id":"969","backgroundId":"959","featureId":"ecb96f0fb94cc64370cd3d01a5c2d2bb","name":"Get presence state which has been set on channel using presence/heartbeat endpoint","description":"","tags":["@featureSet=getPresenceState","@beta","@contract=getPresenceStateSetUsingPresenceHeartbeatEndpoint"],"location":{"line":15,"column":3,"path":"presence/get-state.feature"},"steps":["965","966","967"]},"977":{"type":"scenario","id":"977","backgroundId":"973","featureId":"2d9b192cca7419c829a709b08c4a2f06","name":"Heartbeat call for channel without 'state' query parameter when state not set","description":"","tags":["@featureSet=heartbeat","@beta","@contract=heartbeatWithoutPresenceState"],"location":{"line":10,"column":3,"path":"presence/heartbeat.feature"},"steps":["974","975"]},"982":{"type":"scenario","id":"982","backgroundId":"973","featureId":"2d9b192cca7419c829a709b08c4a2f06","name":"Heartbeat call for channel with 'state' query parameter when state is set with presence/data endpoint","description":"","tags":["@featureSet=heartbeat","@beta","@contract=heartbeatWitPresenceStateSetWithPresenceDataEndpoint"],"location":{"line":15,"column":3,"path":"presence/heartbeat.feature"},"steps":["978","979","980"]},"987":{"type":"scenario","id":"987","backgroundId":"973","featureId":"2d9b192cca7419c829a709b08c4a2f06","name":"Heartbeat call for channel with 'state' query parameter when state is set with presence/heartbeat endpoint","description":"","tags":["@featureSet=heartbeat","@beta","@contract=heartbeatWitPresenceStateSetWithPresenceHeartbeatEndpoint"],"location":{"line":21,"column":3,"path":"presence/heartbeat.feature"},"steps":["983","984","985"]},"996":{"type":"scenario","id":"996","backgroundId":"991","featureId":"102f68ae159f97fa6e1bc8272ef0bae6","name":"Check active clients on channel without subscribers","description":"","tags":["@featureSet=hereNow","@beta","@contract=hereNowChannelWithNoSubscriptions"],"location":{"line":9,"column":3,"path":"presence/here-now.feature"},"steps":["992","993","994"]},"1001":{"type":"scenario","id":"1001","backgroundId":"991","featureId":"102f68ae159f97fa6e1bc8272ef0bae6","name":"Check active clients on channel with subscribers","description":"","tags":["@featureSet=hereNow","@beta","@contract=hereNowChannelWithSubscriptions"],"location":{"line":15,"column":3,"path":"presence/here-now.feature"},"steps":["997","998","999"]},"1006":{"type":"scenario","id":"1006","backgroundId":"991","featureId":"102f68ae159f97fa6e1bc8272ef0bae6","name":"Check active clients on channel without subscribers and with presence state set with presence/data endpoint","description":"","tags":["@featureSet=hereNow","@beta","@contract=hereNowChannelWithNoSubscriptionsAndPresenceState1"],"location":{"line":21,"column":3,"path":"presence/here-now.feature"},"steps":["1002","1003","1004"]},"1012":{"type":"scenario","id":"1012","backgroundId":"991","featureId":"102f68ae159f97fa6e1bc8272ef0bae6","name":"Check active clients on channel without subscribers but with presence state set with presence/heartbeat endpoint","description":"","tags":["@featureSet=hereNow","@beta","@contract=hereNowChannelWithNoSubscriptionsAndPresenceState2"],"location":{"line":27,"column":3,"path":"presence/here-now.feature"},"steps":["1007","1008","1009","1010"]},"1020":{"type":"scenario","id":"1020","backgroundId":"1016","featureId":"1eecb18ed355aa7aeffa00907735b9bf","name":"Set presence state on channel using presence/data endpoint","description":"","tags":["@featureSet=setPresenceState","@beta","@contract=setPresenceStateUsingPresenceDataEndpoint"],"location":{"line":9,"column":3,"path":"presence/set-state.feature"},"steps":["1017","1018"]},"1024":{"type":"scenario","id":"1024","backgroundId":"1016","featureId":"1eecb18ed355aa7aeffa00907735b9bf","name":"Set presence state on channel using presence/heartbeat endpoint","description":"","tags":["@featureSet=setPresenceState","@beta","@contract=setPresenceStateUsingPresenceHeartbeatEndpoint"],"location":{"line":14,"column":3,"path":"presence/set-state.feature"},"steps":["1021","1022"]},"1032":{"type":"scenario","id":"1032","backgroundId":"1028","featureId":"56a3566ff98a5d205b39311dd479b541","name":"Publish message success","description":"","tags":["@featureSet=publishWithCustomMssgType","@beta","@contract=publishWithType"],"location":{"line":10,"column":3,"path":"publish/publish-custom-mssg-type.feature"},"steps":["1029","1030"]},"1036":{"type":"scenario","id":"1036","backgroundId":"1028","featureId":"56a3566ff98a5d205b39311dd479b541","name":"Publish message fails when type is too short","description":"","tags":["@featureSet=publishWithCustomMssgType","@beta","@contract=publishWithTooShortType"],"location":{"line":15,"column":3,"path":"publish/publish-custom-mssg-type.feature"},"steps":["1033","1034"]},"1040":{"type":"scenario","id":"1040","backgroundId":"1028","featureId":"56a3566ff98a5d205b39311dd479b541","name":"Publish message fails when type is too long","description":"","tags":["@featureSet=publishWithCustomMssgType","@beta","@contract=publishWithTooLongType"],"location":{"line":20,"column":3,"path":"publish/publish-custom-mssg-type.feature"},"steps":["1037","1038"]},"1044":{"type":"scenario","id":"1044","backgroundId":"1028","featureId":"56a3566ff98a5d205b39311dd479b541","name":"Publish message fails when type starts with reserved 'pn-' (hyphen) string","description":"","tags":["@featureSet=publishWithCustomMssgType","@beta","@contract=publishWithTypeStartingWithReservedStrings"],"location":{"line":25,"column":3,"path":"publish/publish-custom-mssg-type.feature"},"steps":["1041","1042"]},"1048":{"type":"scenario","id":"1048","backgroundId":"1028","featureId":"56a3566ff98a5d205b39311dd479b541","name":"Publish message fails when type starts with reserved 'pn_' (underscore) string","description":"","tags":["@featureSet=publishWithCustomMssgType","@beta","@contract=publishWithTypeStartingWithReservedStrings"],"location":{"line":30,"column":3,"path":"publish/publish-custom-mssg-type.feature"},"steps":["1045","1046"]},"1052":{"type":"scenario","id":"1052","backgroundId":"1028","featureId":"56a3566ff98a5d205b39311dd479b541","name":"Publish message fails when type starts with not allowed '-' (hyphen) character","description":"","tags":["@featureSet=publishWithCustomMssgType","@beta","@contract=publishWithTypeStartingWithNotAllowedCharacter"],"location":{"line":35,"column":3,"path":"publish/publish-custom-mssg-type.feature"},"steps":["1049","1050"]},"1056":{"type":"scenario","id":"1056","backgroundId":"1028","featureId":"56a3566ff98a5d205b39311dd479b541","name":"Publish message fails when type starts with not allowed '_' (underscore) character","description":"","tags":["@featureSet=publishWithCustomMssgType","@beta","@contract=publishWithTypeStartingWithNotAllowedCharacter"],"location":{"line":40,"column":3,"path":"publish/publish-custom-mssg-type.feature"},"steps":["1053","1054"]},"1060":{"type":"scenario","id":"1060","backgroundId":"1028","featureId":"56a3566ff98a5d205b39311dd479b541","name":"Publish message fails when type contains not allowed characters","description":"","tags":["@featureSet=publishWithCustomMssgType","@beta","@contract=publishWithTypeContainingNotAllowedCharacter"],"location":{"line":45,"column":3,"path":"publish/publish-custom-mssg-type.feature"},"steps":["1057","1058"]},"1067":{"type":"scenario","id":"1067","featureId":"31e79e1a4e04e30eb7b299d55dc8d1f7","name":"Publish string success","description":"","tags":["@featureSet=publish","@beta","@contract=publishMessageWithStringSuccess"],"location":{"line":8,"column":3,"path":"publish/publish.feature"},"steps":["1063","1064","1065"]},"1073":{"type":"scenario","id":"1073","featureId":"31e79e1a4e04e30eb7b299d55dc8d1f7","name":"Publish dictionary with compression success","description":"","tags":["@featureSet=publish","@beta","@contract=publishMessageWithCompressionSuccess","@na=rust"],"location":{"line":14,"column":3,"path":"publish/publish.feature"},"steps":["1068","1069","1070"]},"1079":{"type":"scenario","id":"1079","featureId":"31e79e1a4e04e30eb7b299d55dc8d1f7","name":"Publish dictionary as POST body success","description":"","tags":["@featureSet=publish","@beta","@contract=publishMessageAsPOSTBodySuccess","@na=objc"],"location":{"line":20,"column":3,"path":"publish/publish.feature"},"steps":["1074","1075","1076"]},"1084":{"type":"scenario","id":"1084","featureId":"31e79e1a4e04e30eb7b299d55dc8d1f7","name":"Publish number success","description":"","tags":["@featureSet=publish","@beta","@contract=publishMessageWithNumberSuccess"],"location":{"line":26,"column":3,"path":"publish/publish.feature"},"steps":["1080","1081","1082"]},"1089":{"type":"scenario","id":"1089","featureId":"31e79e1a4e04e30eb7b299d55dc8d1f7","name":"Publish array success","description":"","tags":["@featureSet=publish","@beta","@contract=publishMessageWithArraySuccess"],"location":{"line":32,"column":3,"path":"publish/publish.feature"},"steps":["1085","1086","1087"]},"1094":{"type":"scenario","id":"1094","featureId":"31e79e1a4e04e30eb7b299d55dc8d1f7","name":"Publish dictionary success","description":"","tags":["@featureSet=publish","@beta","@contract=publishMessageWithDictionarySuccess"],"location":{"line":38,"column":3,"path":"publish/publish.feature"},"steps":["1090","1091","1092"]},"1099":{"type":"scenario","id":"1099","featureId":"31e79e1a4e04e30eb7b299d55dc8d1f7","name":"Publish message with meta success","description":"","tags":["@featureSet=publish","@beta","@contract=publishMessageWithMetaSuccess"],"location":{"line":44,"column":3,"path":"publish/publish.feature"},"steps":["1095","1096","1097"]},"1104":{"type":"scenario","id":"1104","featureId":"31e79e1a4e04e30eb7b299d55dc8d1f7","name":"Publish message with store success","description":"","tags":["@featureSet=publish","@beta","@contract=publishMessageWithStoreSuccess"],"location":{"line":50,"column":3,"path":"publish/publish.feature"},"steps":["1100","1101","1102"]},"1109":{"type":"scenario","id":"1109","featureId":"31e79e1a4e04e30eb7b299d55dc8d1f7","name":"Publish message with ttl success","description":"","tags":["@featureSet=publish","@beta","@contract=publishMessageWithTTLSuccess"],"location":{"line":56,"column":3,"path":"publish/publish.feature"},"steps":["1105","1106","1107"]},"1115":{"type":"scenario","id":"1115","featureId":"31e79e1a4e04e30eb7b299d55dc8d1f7","name":"Publish message fails when message payload is larger than 32 KiB","description":"","tags":["@featureSet=publish","@beta","@contract=publishMessageWithTooLongMessageFail"],"location":{"line":64,"column":3,"path":"publish/publish.feature"},"steps":["1110","1111","1112","1113"]},"1121":{"type":"scenario","id":"1121","featureId":"31e79e1a4e04e30eb7b299d55dc8d1f7","name":"Publish message with meta fails when meta isn't dictionary","description":"","tags":["@featureSet=publish","@beta","@contract=publishMessageWithMetaFail","@na=rust"],"location":{"line":73,"column":3,"path":"publish/publish.feature"},"steps":["1116","1117","1118"]},"1127":{"type":"scenario","id":"1127","featureId":"31e79e1a4e04e30eb7b299d55dc8d1f7","name":"Publish message with the wrong publish key fail","description":"","tags":["@featureSet=publish","@beta","@contract=publishMessageWithWrongPublishKeyFail"],"location":{"line":79,"column":3,"path":"publish/publish.feature"},"steps":["1122","1123","1124","1125"]},"1133":{"type":"scenario","id":"1133","featureId":"31e79e1a4e04e30eb7b299d55dc8d1f7","name":"Publish message with the wrong subscribe key fail","description":"","tags":["@featureSet=publish","@beta","@contract=publishMessageWithWrongSubscribeKeyFail"],"location":{"line":86,"column":3,"path":"publish/publish.feature"},"steps":["1128","1129","1130","1131"]},"1141":{"type":"scenario","id":"1141","backgroundId":"1137","featureId":"a2732f84d2540a965fd29df847d1c3b0","name":"Send a signal success","description":"","tags":["@featureSet=signalWithCustomMssgType","@beta","@contract=signalWithType"],"location":{"line":10,"column":3,"path":"publish/signal-custom-mssg-type.feature"},"steps":["1138","1139"]},"1145":{"type":"scenario","id":"1145","backgroundId":"1137","featureId":"a2732f84d2540a965fd29df847d1c3b0","name":"Send a signal fails when type is too short","description":"","tags":["@featureSet=signalWithCustomMssgType","@beta","@contract=signalWithTooShortType"],"location":{"line":15,"column":3,"path":"publish/signal-custom-mssg-type.feature"},"steps":["1142","1143"]},"1149":{"type":"scenario","id":"1149","backgroundId":"1137","featureId":"a2732f84d2540a965fd29df847d1c3b0","name":"Send a signal fails when type is too long","description":"","tags":["@featureSet=signalWithCustomMssgType","@beta","@contract=signalWithTooLongType"],"location":{"line":20,"column":3,"path":"publish/signal-custom-mssg-type.feature"},"steps":["1146","1147"]},"1153":{"type":"scenario","id":"1153","backgroundId":"1137","featureId":"a2732f84d2540a965fd29df847d1c3b0","name":"Send a signal fails when type starts with reserved 'pn-' (hyphen) string","description":"","tags":["@featureSet=signalWithCustomMssgType","@beta","@contract=signalWithTypeStartingWithReservedStrings"],"location":{"line":25,"column":3,"path":"publish/signal-custom-mssg-type.feature"},"steps":["1150","1151"]},"1157":{"type":"scenario","id":"1157","backgroundId":"1137","featureId":"a2732f84d2540a965fd29df847d1c3b0","name":"Send a signal fails when type starts with reserved 'pn_' (underscore) string","description":"","tags":["@featureSet=signalWithCustomMssgType","@beta","@contract=signalWithTypeStartingWithReservedStrings"],"location":{"line":30,"column":3,"path":"publish/signal-custom-mssg-type.feature"},"steps":["1154","1155"]},"1161":{"type":"scenario","id":"1161","backgroundId":"1137","featureId":"a2732f84d2540a965fd29df847d1c3b0","name":"Send a signal fails when type starts with not allowed '-' (hyphen) character","description":"","tags":["@featureSet=signalWithCustomMssgType","@beta","@contract=signalWithTypeStartingWithNotAllowedCharacter"],"location":{"line":35,"column":3,"path":"publish/signal-custom-mssg-type.feature"},"steps":["1158","1159"]},"1165":{"type":"scenario","id":"1165","backgroundId":"1137","featureId":"a2732f84d2540a965fd29df847d1c3b0","name":"Send a signal fails when type starts with not allowed '_' (underscore) character","description":"","tags":["@featureSet=signalWithCustomMssgType","@beta","@contract=signalWithTypeStartingWithNotAllowedCharacter"],"location":{"line":40,"column":3,"path":"publish/signal-custom-mssg-type.feature"},"steps":["1162","1163"]},"1169":{"type":"scenario","id":"1169","backgroundId":"1137","featureId":"a2732f84d2540a965fd29df847d1c3b0","name":"Send a signal fails when type contains not allowed characters","description":"","tags":["@featureSet=signalWithCustomMssgType","@beta","@contract=signalWithTypeContainingNotAllowedCharacter"],"location":{"line":45,"column":3,"path":"publish/signal-custom-mssg-type.feature"},"steps":["1166","1167"]},"1177":{"type":"scenario","id":"1177","featureId":"085fea7abdc5d904fe69a3081efd7398","name":"Sending a signal","description":"","tags":["@featureSet=signal","@contract=successfulSignal","@beta"],"location":{"line":8,"column":3,"path":"publish/signal.feature"},"steps":["1172","1173","1174"]},"1184":{"type":"scenario","id":"1184","featureId":"31577c8a54813edae7252a078e710d11","name":"Listing push channels for GCM gateway","description":"","tags":["@featureSet=push","@contract=listingPushChannels","@beta"],"location":{"line":8,"column":3,"path":"push/push-notifications.feature"},"steps":["1179","1180","1181"]},"1189":{"type":"scenario","id":"1189","featureId":"31577c8a54813edae7252a078e710d11","name":"Listing push channels for APNS2 without topic","description":"","tags":["@featureSet=push","@beta"],"location":{"line":14,"column":3,"path":"push/push-notifications.feature"},"steps":["1185","1186","1187"]},"1195":{"type":"scenario","id":"1195","featureId":"31577c8a54813edae7252a078e710d11","name":"Listing push channels for APNS2","description":"","tags":["@featureSet=push","@contract=listingPushChannels","@beta"],"location":{"line":20,"column":3,"path":"push/push-notifications.feature"},"steps":["1190","1191","1192"]},"1201":{"type":"scenario","id":"1201","featureId":"31577c8a54813edae7252a078e710d11","name":"Adding push channels for GCM","description":"","tags":["@featureSet=push","@contract=addingPushChannels","@beta"],"location":{"line":26,"column":3,"path":"push/push-notifications.feature"},"steps":["1196","1197","1198"]},"1207":{"type":"scenario","id":"1207","featureId":"31577c8a54813edae7252a078e710d11","name":"Adding push channels for FCM","description":"","tags":["@featureSet=push","@contract=addingPushChannels","@beta"],"location":{"line":32,"column":3,"path":"push/push-notifications.feature"},"steps":["1202","1203","1204"]},"1212":{"type":"scenario","id":"1212","featureId":"31577c8a54813edae7252a078e710d11","name":"Adding push channels for APNS2 without topic","description":"","tags":["@featureSet=push","@beta"],"location":{"line":38,"column":3,"path":"push/push-notifications.feature"},"steps":["1208","1209","1210"]},"1218":{"type":"scenario","id":"1218","featureId":"31577c8a54813edae7252a078e710d11","name":"Adding push channels for APNS2","description":"","tags":["@featureSet=push","@contract=addingPushChannels","@beta"],"location":{"line":44,"column":3,"path":"push/push-notifications.feature"},"steps":["1213","1214","1215"]},"1224":{"type":"scenario","id":"1224","featureId":"31577c8a54813edae7252a078e710d11","name":"Removing push channels for GCM","description":"","tags":["@featureSet=push","@contract=removingPushChannels","@beta"],"location":{"line":50,"column":3,"path":"push/push-notifications.feature"},"steps":["1219","1220","1221"]},"1229":{"type":"scenario","id":"1229","featureId":"31577c8a54813edae7252a078e710d11","name":"Removing push channels for APNS2 without topic","description":"","tags":["@featureSet=push","@beta"],"location":{"line":56,"column":3,"path":"push/push-notifications.feature"},"steps":["1225","1226","1227"]},"1235":{"type":"scenario","id":"1235","featureId":"31577c8a54813edae7252a078e710d11","name":"Removing push channels for APNS2","description":"","tags":["@featureSet=push","@contract=removingPushChannels","@beta"],"location":{"line":62,"column":3,"path":"push/push-notifications.feature"},"steps":["1230","1231","1232"]},"1241":{"type":"scenario","id":"1241","featureId":"31577c8a54813edae7252a078e710d11","name":"Removing device for GCM","description":"","tags":["@featureSet=push","@contract=removingDevice","@beta"],"location":{"line":68,"column":3,"path":"push/push-notifications.feature"},"steps":["1236","1237","1238"]},"1246":{"type":"scenario","id":"1246","featureId":"31577c8a54813edae7252a078e710d11","name":"Removing device for APNS2 without topic","description":"","tags":["@featureSet=push","@beta"],"location":{"line":74,"column":3,"path":"push/push-notifications.feature"},"steps":["1242","1243","1244"]},"1252":{"type":"scenario","id":"1252","featureId":"31577c8a54813edae7252a078e710d11","name":"Removing device for APNS2","description":"","tags":["@featureSet=push","@contract=removingDevice","@beta"],"location":{"line":80,"column":3,"path":"push/push-notifications.feature"},"steps":["1247","1248","1249"]},"1257":{"type":"scenario","id":"1257","featureId":"3853114ae6230622b0724ef5c2f8df03","name":"Subscribing to a channel automatically connects","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":8,"column":3,"path":"subscribe/automatic-connection-on-subscribe.feature"},"steps":["1254","1255","1256"]},"1264":{"type":"scenario","id":"1264","featureId":"ed865dcde7bceb38933da21bf045757b","name":"Unsubscribe All operation is requested","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":8,"column":3,"path":"subscribe/automatic-disconnect-on-unsubscribe.feature"},"steps":["1261","1262","1263"]},"1268":{"type":"scenario","id":"1268","featureId":"ed865dcde7bceb38933da21bf045757b","name":"Unsubscribing to all channels terminates a handshake","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":13,"column":3,"path":"subscribe/automatic-disconnect-on-unsubscribe.feature"},"steps":["1265","1266","1267"]},"1272":{"type":"scenario","id":"1272","featureId":"ed865dcde7bceb38933da21bf045757b","name":"Unsubscribing to all channels stops reconnection attempts","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":18,"column":3,"path":"subscribe/automatic-disconnect-on-unsubscribe.feature"},"steps":["1269","1270","1271"]},"1276":{"type":"scenario","id":"1276","featureId":"ed865dcde7bceb38933da21bf045757b","name":"Unsubscribe is requested leaving no subscribed channels","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":23,"column":3,"path":"subscribe/automatic-disconnect-on-unsubscribe.feature"},"steps":["1273","1274","1275"]},"1283":{"type":"scenario","id":"1283","featureId":"84cb60a4b2d22e8a1f1b60b8d9c57c02","name":"Automatically Reconnect with a delay","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":9,"column":3,"path":"subscribe/automatic-reconnection.feature"},"steps":["1280","1281","1282"]},"1287":{"type":"scenario","id":"1287","featureId":"84cb60a4b2d22e8a1f1b60b8d9c57c02","name":"Automatically Reconnect immediately","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":14,"column":3,"path":"subscribe/automatic-reconnection.feature"},"steps":["1284","1285","1286"]},"1291":{"type":"scenario","id":"1291","featureId":"84cb60a4b2d22e8a1f1b60b8d9c57c02","name":"Reconnection not allowed after a 400 error","description":"Don't attempt to reconnect when we know the result will fail","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":19,"column":3,"path":"subscribe/automatic-reconnection.feature"},"steps":["1288","1289","1290"]},"1295":{"type":"scenario","id":"1295","featureId":"84cb60a4b2d22e8a1f1b60b8d9c57c02","name":"Reconnection not allowed after a 403 error","description":"Don't attempt to reconnect when we know the result will fail","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":27,"column":3,"path":"subscribe/automatic-reconnection.feature"},"steps":["1292","1293","1294"]},"1299":{"type":"scenario","id":"1299","featureId":"84cb60a4b2d22e8a1f1b60b8d9c57c02","name":"Reconnection not allowed after a 414 error","description":"Don't attempt to reconnect when we know the result will fail","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":35,"column":3,"path":"subscribe/automatic-reconnection.feature"},"steps":["1296","1297","1298"]},"1308":{"type":"scenario","id":"1308","featureId":"4b48b3258ff3c38dfea73b816cf22460","name":"Starts at ?","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":9,"column":5,"path":"subscribe/config/max-allowed-reconnection-attempts.feature"},"steps":["1306","1307"]},"1314":{"type":"scenario","id":"1314","featureId":"abb97f0b299e9e281651778e1575396b","name":"Starts at ?","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":8,"column":5,"path":"subscribe/config/reconnection-policy.feature"},"steps":["1312","1313"]},"1325":{"type":"scenario","id":"1325","featureId":"70791bbe139c7e7969ec6dc39345811d","name":"Receive Messages","description":"","tags":["@featureSet=subscribe","@na=c-core","@beta","@skip"],"location":{"line":42,"column":3,"path":"subscribe/continuously-receive-messages.feature"},"steps":["1318","1319","1320","1321","1322","1323","1324"]},"1333":{"type":"scenario","id":"1333","featureId":"70791bbe139c7e7969ec6dc39345811d","name":"Receive No Messages","description":"","tags":["@featureSet=subscribe","@na=c-core","@beta","@skip"],"location":{"line":51,"column":3,"path":"subscribe/continuously-receive-messages.feature"},"steps":["1326","1327","1328","1329","1330","1331","1332"]},"1343":{"type":"scenario","id":"1343","featureId":"70791bbe139c7e7969ec6dc39345811d","name":"Connect after being disconnected","description":"","tags":["@featureSet=subscribe","@na=c-core","@beta","@skip"],"location":{"line":60,"column":3,"path":"subscribe/continuously-receive-messages.feature"},"steps":["1334","1335","1336","1337","1338","1339","1340","1341","1342"]},"1348":{"type":"scenario","id":"1348","featureId":"70791bbe139c7e7969ec6dc39345811d","name":"A 403 response emits an access denied status message","description":"","tags":["@featureSet=subscribe","@na=c-core","@beta","@skip"],"location":{"line":71,"column":3,"path":"subscribe/continuously-receive-messages.feature"},"steps":["1344","1345","1346","1347"]},"1353":{"type":"scenario","id":"1353","featureId":"70791bbe139c7e7969ec6dc39345811d","name":"Reconnection will be attempted after 503 failure","description":"","tags":["@featureSet=subscribe","@na=c-core","@beta","@skip"],"location":{"line":77,"column":3,"path":"subscribe/continuously-receive-messages.feature"},"steps":["1349","1350","1351","1352"]},"1357":{"type":"scenario","id":"1357","featureId":"70791bbe139c7e7969ec6dc39345811d","name":"Subscription State is retained after disconnect for reconnecting","description":"","tags":["@featureSet=subscribe","@na=c-core","@beta","@skip"],"location":{"line":90,"column":3,"path":"subscribe/continuously-receive-messages.feature"},"steps":["1354","1355","1356"]},"1370":{"type":"scenario","id":"1370","backgroundId":"1363","featureId":"93d2a5de416a9faa342b3b52ff46571c","name":"don't auto-retry without auth key","description":"","tags":["@featureSet=subscribe","@contract=failedSubscribeWithInvalidAuthKey","@beta"],"location":{"line":10,"column":3,"path":"subscribe/contracts/access-denied-subscribe.feature"},"steps":["1364","1365","1366","1367"]},"1377":{"type":"scenario","id":"1377","backgroundId":"1363","featureId":"93d2a5de416a9faa342b3b52ff46571c","name":"don't auto-retry with invalid PAMv2 auth key","description":"","tags":["@featureSet=subscribe","@contract=failedSubscribeWithInvalidAuthKey","@beta"],"location":{"line":17,"column":3,"path":"subscribe/contracts/access-denied-subscribe.feature"},"steps":["1371","1372","1373","1374"]},"1384":{"type":"scenario","id":"1384","backgroundId":"1363","featureId":"93d2a5de416a9faa342b3b52ff46571c","name":"don't auto-retry with invalid PAMv3 token","description":"","tags":["@featureSet=subscribe","@contract=failedSubscribeWithInvalidAuthKey","@beta"],"location":{"line":24,"column":3,"path":"subscribe/contracts/access-denied-subscribe.feature"},"steps":["1378","1379","1380","1381"]},"1394":{"type":"scenario","id":"1394","backgroundId":"1363","featureId":"93d2a5de416a9faa342b3b52ff46571c","name":"don't auto-retry with invalid secret key","description":"","tags":["@featureSet=subscribe","@contract=failedSubscribeWithInvalidAuthKey","@na=swift","@na=objc","@na=unity","@beta"],"location":{"line":31,"column":3,"path":"subscribe/contracts/access-denied-subscribe.feature"},"steps":["1385","1386","1387","1388"]},"1402":{"type":"scenario","id":"1402","backgroundId":"1363","featureId":"93d2a5de416a9faa342b3b52ff46571c","name":"don't auto-retry with PAMv2 auth key permissions reset after subscribe","description":"","tags":["@featureSet=subscribe","@contract=failedSubscribeInvalidatedAuthKey","@beta"],"location":{"line":38,"column":3,"path":"subscribe/contracts/access-denied-subscribe.feature"},"steps":["1395","1396","1397","1398","1399"]},"1410":{"type":"scenario","id":"1410","backgroundId":"1363","featureId":"93d2a5de416a9faa342b3b52ff46571c","name":"don't auto-retry with PAMv3 token revoked after subscribe","description":"","tags":["@featureSet=subscribe","@contract=failedSubscribeInvalidatedAuthKey","@beta"],"location":{"line":46,"column":3,"path":"subscribe/contracts/access-denied-subscribe.feature"},"steps":["1403","1404","1405","1406","1407"]},"1421":{"type":"scenario","id":"1421","backgroundId":"1363","featureId":"93d2a5de416a9faa342b3b52ff46571c","name":"don't auto-retry with secret key invalidated after subscribe","description":"","tags":["@featureSet=subscribe","@contract=failedSubscribeInvalidatedAuthKey","@na=swift","@na=objc","@na=unity","@beta"],"location":{"line":54,"column":3,"path":"subscribe/contracts/access-denied-subscribe.feature"},"steps":["1411","1412","1413","1414","1415"]},"1428":{"type":"scenario","id":"1428","featureId":"ceaa4b37fc9e2ca631d4c99bdd231ee8","name":"subscribe and recieve a published message","description":"","tags":["@featureSet=subscribe","@contract=simpleSubscribe","@beta"],"location":{"line":6,"column":3,"path":"subscribe/contracts/simple-subscribe.feature"},"steps":["1423","1424","1425"]},"1435":{"type":"scenario","id":"1435","featureId":"85a6a2486a7b7deed8666fefb5ed581c","name":"Delay starts out as the lowest value","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":14,"column":3,"path":"subscribe/delay-between-reconnection-attempts.feature"},"steps":["1433","1434"]},"1438":{"type":"scenario","id":"1438","featureId":"85a6a2486a7b7deed8666fefb5ed581c","name":"A manual reconnection resets the delay","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":18,"column":3,"path":"subscribe/delay-between-reconnection-attempts.feature"},"steps":["1436","1437"]},"1442":{"type":"scenario","id":"1442","featureId":"85a6a2486a7b7deed8666fefb5ed581c","name":"A successful check for messages resets the delay","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":22,"column":3,"path":"subscribe/delay-between-reconnection-attempts.feature"},"steps":["1439","1440","1441"]},"1446":{"type":"scenario","id":"1446","featureId":"85a6a2486a7b7deed8666fefb5ed581c","name":"Each reconnection attempt advances the delay","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":27,"column":3,"path":"subscribe/delay-between-reconnection-attempts.feature"},"steps":["1443","1444","1445"]},"1447":{"type":"scenario","id":"1447","featureId":"85a6a2486a7b7deed8666fefb5ed581c","name":"Changing subscribed channels resets the delay","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":32,"column":3,"path":"subscribe/delay-between-reconnection-attempts.feature"},"steps":[]},"1448":{"type":"scenario","id":"1448","featureId":"85a6a2486a7b7deed8666fefb5ed581c","name":"Changing AuthToken resets the delay","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":34,"column":3,"path":"subscribe/delay-between-reconnection-attempts.feature"},"steps":[]},"1450":{"type":"scenario","id":"1450","featureId":"85a6a2486a7b7deed8666fefb5ed581c","name":"Changing AuthKey resets the delay","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":36,"column":3,"path":"subscribe/delay-between-reconnection-attempts.feature"},"steps":[]},"1456":{"type":"scenario","id":"1456","featureId":"85a6a2486a7b7deed8666fefb5ed581c","name":"Delay set by Retry-After header on 503","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":40,"column":3,"path":"subscribe/delay-between-reconnection-attempts.feature"},"steps":["1451","1452","1453","1454","1455"]},"1462":{"type":"scenario","id":"1462","featureId":"85a6a2486a7b7deed8666fefb5ed581c","name":"Delay set by Retry-After header on 429","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":47,"column":3,"path":"subscribe/delay-between-reconnection-attempts.feature"},"steps":["1457","1458","1459","1460","1461"]},"1489":{"type":"scenario","id":"1489","backgroundId":"1473","featureId":"ca6268e71ce8a000eb95295c5143dcce","name":"Successfully receive messages","description":"","tags":["@featureSet=eventEngine","@beta","@contract=simpleSubscribe"],"location":{"line":9,"column":3,"path":"subscribe/event-engine/happy-path.feature"},"steps":["1474","1475","1487"]},"1505":{"type":"scenario","id":"1505","backgroundId":"1473","featureId":"ca6268e71ce8a000eb95295c5143dcce","name":"Successfully restore subscribe","description":"","tags":["@featureSet=eventEngine","@beta","@contract=restoringSubscribe"],"location":{"line":26,"column":3,"path":"subscribe/event-engine/happy-path.feature"},"steps":["1490","1491","1503"]},"1522":{"type":"scenario","id":"1522","backgroundId":"1473","featureId":"ca6268e71ce8a000eb95295c5143dcce","name":"Successfully restore subscribe with failures","description":"","tags":["@featureSet=eventEngine","@beta","@contract=restoringSubscribeWithFailures"],"location":{"line":43,"column":3,"path":"subscribe/event-engine/happy-path.feature"},"steps":["1506","1507","1508","1520"]},"1534":{"type":"scenario","id":"1534","backgroundId":"1473","featureId":"ca6268e71ce8a000eb95295c5143dcce","name":"Complete handshake failure","description":"","tags":["@featureSet=eventEngine","@beta","@contract=subscribeHandshakeFailure"],"location":{"line":61,"column":3,"path":"subscribe/event-engine/happy-path.feature"},"steps":["1523","1524","1525","1532"]},"1551":{"type":"scenario","id":"1551","backgroundId":"1473","featureId":"ca6268e71ce8a000eb95295c5143dcce","name":"Handshake failure recovery","description":"","tags":["@featureSet=eventEngine","@beta","@contract=subscribeHandshakeRecovery"],"location":{"line":75,"column":3,"path":"subscribe/event-engine/happy-path.feature"},"steps":["1535","1536","1537","1549"]},"1568":{"type":"scenario","id":"1568","backgroundId":"1473","featureId":"ca6268e71ce8a000eb95295c5143dcce","name":"Receiving failure recovery","description":"","tags":["@featureSet=eventEngine","@beta","@contract=subscribeReceivingRecovery"],"location":{"line":93,"column":3,"path":"subscribe/event-engine/happy-path.feature"},"steps":["1552","1553","1554","1566"]},"1588":{"type":"scenario","id":"1588","backgroundId":"1572","featureId":"ca6268e71ce8a000eb95295c5143dcce","name":"Successfully receive messages","description":"","tags":["@featureSet=eventEngine","@beta","@contract=simpleSubscribe"],"location":{"line":13,"column":3,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"steps":["1573","1574","1586"]},"1604":{"type":"scenario","id":"1604","backgroundId":"1572","featureId":"ca6268e71ce8a000eb95295c5143dcce","name":"Successfully restore subscribe","description":"","tags":["@featureSet=eventEngine","@beta","@contract=restoringSubscribe"],"location":{"line":30,"column":3,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"steps":["1589","1590","1602"]},"1624":{"type":"scenario","id":"1624","backgroundId":"1572","featureId":"ca6268e71ce8a000eb95295c5143dcce","name":"Successfully restore subscribe with failures","description":"","tags":["@featureSet=eventEngine","@beta","@contract=restoringSubscribeWithFailures"],"location":{"line":47,"column":3,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"steps":["1605","1606","1607","1622"]},"1648":{"type":"scenario","id":"1648","backgroundId":"1572","featureId":"ca6268e71ce8a000eb95295c5143dcce","name":"Complete handshake failure","description":"","tags":["@featureSet=eventEngine","@beta","@contract=subscribeHandshakeFailure"],"location":{"line":68,"column":3,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"steps":["1625","1626","1627","1646"]},"1671":{"type":"scenario","id":"1671","backgroundId":"1572","featureId":"ca6268e71ce8a000eb95295c5143dcce","name":"Handshake failure recovery","description":"","tags":["@featureSet=eventEngine","@beta","@contract=subscribeHandshakeRecovery"],"location":{"line":93,"column":3,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"steps":["1649","1650","1651","1669"]},"1691":{"type":"scenario","id":"1691","backgroundId":"1572","featureId":"ca6268e71ce8a000eb95295c5143dcce","name":"Receiving failure recovery","description":"","tags":["@featureSet=eventEngine","@beta","@contract=subscribeReceivingRecovery"],"location":{"line":117,"column":3,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"steps":["1672","1673","1674","1689"]},"1705":{"type":"scenario","id":"1705","featureId":"e8d2029f4b9e556281ab05e09de04882","name":"Receiving a file event without a message","description":"","tags":["@skip"],"location":{"line":6,"column":3,"path":"subscribe/events/file/receiving-file-event.feature"},"steps":["1694","1695","1696","1697","1698","1699","1700","1701","1702","1703","1704"]},"1717":{"type":"scenario","id":"1717","featureId":"e8d2029f4b9e556281ab05e09de04882","name":"Receiving a file event with a message","description":"","tags":["@skip"],"location":{"line":19,"column":3,"path":"subscribe/events/file/receiving-file-event.feature"},"steps":["1706","1707","1708","1709","1710","1711","1712","1713","1714","1715","1716"]},"1728":{"type":"scenario","id":"1728","featureId":"9e27e675110cf356753fb24432090889","name":"Receiving a message event without user metadata","description":"","tags":["@skip"],"location":{"line":6,"column":3,"path":"subscribe/events/message/receiving-message-event.feature"},"steps":["1719","1720","1721","1722","1723","1724","1725","1726","1727"]},"1738":{"type":"scenario","id":"1738","featureId":"9e27e675110cf356753fb24432090889","name":"Receiving a message event with user metadata","description":"","tags":["@skip"],"location":{"line":17,"column":3,"path":"subscribe/events/message/receiving-message-event.feature"},"steps":["1729","1730","1731","1732","1733","1734","1735","1736","1737"]},"1750":{"type":"scenario","id":"1750","featureId":"896307b1bed9e5bd8d5630edfbbd0f20","name":"Receiving a message action added event","description":"","tags":["@skip"],"location":{"line":6,"column":3,"path":"subscribe/events/message-action/receiving-message-action-added-event.feature"},"steps":["1740","1741","1742","1743","1744","1745","1746","1747","1748","1749"]},"1762":{"type":"scenario","id":"1762","featureId":"c35f178e8b121545c0db49fdb8e13d55","name":"Receiving a message action removed event","description":"","tags":["@skip"],"location":{"line":6,"column":3,"path":"subscribe/events/message-action/receiving-message-action-removed-event.feature"},"steps":["1752","1753","1754","1755","1756","1757","1758","1759","1760","1761"]},"1773":{"type":"scenario","id":"1773","featureId":"536e7f5b942edcd2bb0667280abc4d94","name":"Receiving a channel metadata removed event with custom","description":"","tags":["@skip"],"location":{"line":6,"column":3,"path":"subscribe/events/object/channel-metadata-removed-event.feature"},"steps":["1764","1765","1766","1767","1768","1769","1770","1771","1772"]},"1783":{"type":"scenario","id":"1783","featureId":"536e7f5b942edcd2bb0667280abc4d94","name":"Receiving a channel metadata removed event without custom","description":"","tags":["@skip"],"location":{"line":17,"column":3,"path":"subscribe/events/object/channel-metadata-removed-event.feature"},"steps":["1774","1775","1776","1777","1778","1779","1780","1781","1782"]},"1797":{"type":"scenario","id":"1797","featureId":"173a5a7e1c9ee9ab73a72041e1387796","name":"Receiving a channel metadata set event with custom","description":"","tags":["@skip"],"location":{"line":6,"column":3,"path":"subscribe/events/object/channel-metadata-set-event.feature"},"steps":["1785","1786","1787","1788","1789","1790","1791","1792","1793","1794","1795","1796"]},"1810":{"type":"scenario","id":"1810","featureId":"173a5a7e1c9ee9ab73a72041e1387796","name":"Receiving a channel metadata set event without custom","description":"","tags":["@skip"],"location":{"line":20,"column":3,"path":"subscribe/events/object/channel-metadata-set-event.feature"},"steps":["1798","1799","1800","1801","1802","1803","1804","1805","1806","1807","1808","1809"]},"1822":{"type":"scenario","id":"1822","featureId":"ffc5ff7fec04ba688cdefe40c7407ddf","name":"Receiving a membership removed event with custom","description":"","tags":["@skip"],"location":{"line":6,"column":3,"path":"subscribe/events/object/membership-removed-event.feature"},"steps":["1812","1813","1814","1815","1816","1817","1818","1819","1820","1821"]},"1833":{"type":"scenario","id":"1833","featureId":"ffc5ff7fec04ba688cdefe40c7407ddf","name":"Receiving a membership removed event without custom","description":"","tags":["@skip"],"location":{"line":18,"column":3,"path":"subscribe/events/object/membership-removed-event.feature"},"steps":["1823","1824","1825","1826","1827","1828","1829","1830","1831","1832"]},"1846":{"type":"scenario","id":"1846","featureId":"342c0ab0bf912abf99eef41a2a56d586","name":"Receiving a membership added event with custom","description":"","tags":["@skip"],"location":{"line":6,"column":3,"path":"subscribe/events/object/membership-set-event.feature"},"steps":["1835","1836","1837","1838","1839","1840","1841","1842","1843","1844","1845"]},"1858":{"type":"scenario","id":"1858","featureId":"342c0ab0bf912abf99eef41a2a56d586","name":"Receiving a membership added event without custom","description":"","tags":["@skip"],"location":{"line":19,"column":3,"path":"subscribe/events/object/membership-set-event.feature"},"steps":["1847","1848","1849","1850","1851","1852","1853","1854","1855","1856","1857"]},"1869":{"type":"scenario","id":"1869","featureId":"ac812bda8bb79bca1b4caabefb64c837","name":"Receiving a uuid metadata removed event with custom","description":"","tags":["@skip"],"location":{"line":6,"column":3,"path":"subscribe/events/object/user-metadata-removed-event.feature"},"steps":["1860","1861","1862","1863","1864","1865","1866","1867","1868"]},"1879":{"type":"scenario","id":"1879","featureId":"ac812bda8bb79bca1b4caabefb64c837","name":"Receiving a uuid metadata removed event without custom","description":"","tags":["@skip"],"location":{"line":17,"column":3,"path":"subscribe/events/object/user-metadata-removed-event.feature"},"steps":["1870","1871","1872","1873","1874","1875","1876","1877","1878"]},"1893":{"type":"scenario","id":"1893","featureId":"7651c64e50fadcdac3691c0507ba39f5","name":"Receiving a uuid metadata set event with custom","description":"","tags":["@skip"],"location":{"line":6,"column":3,"path":"subscribe/events/object/user-metadata-set-event.feature"},"steps":["1881","1882","1883","1884","1885","1886","1887","1888","1889","1890","1891","1892"]},"1906":{"type":"scenario","id":"1906","featureId":"7651c64e50fadcdac3691c0507ba39f5","name":"Receiving a uuid metadata set event without custom","description":"","tags":["@skip"],"location":{"line":20,"column":3,"path":"subscribe/events/object/user-metadata-set-event.feature"},"steps":["1894","1895","1896","1897","1898","1899","1900","1901","1902","1903","1904","1905"]},"1918":{"type":"scenario","id":"1918","featureId":"825e17780996f4f0d938449d8116998d","name":"Receiving a join event in announce mode","description":"","tags":["@skip"],"location":{"line":6,"column":3,"path":"subscribe/events/presence/receiving-join-event.feature"},"steps":["1909","1910","1911","1912","1913","1914","1915","1916","1917"]},"1927":{"type":"scenario","id":"1927","featureId":"825e17780996f4f0d938449d8116998d","name":"Receiving a join event in interval mode (without presence deltas)","description":"","tags":["@skip"],"location":{"line":17,"column":3,"path":"subscribe/events/presence/receiving-join-event.feature"},"steps":["1919","1920","1921","1922","1923","1924","1925","1926"]},"1937":{"type":"scenario","id":"1937","featureId":"825e17780996f4f0d938449d8116998d","name":"Receiving a join event in interval mode (with presence deltas)","description":"","tags":["@skip"],"location":{"line":27,"column":3,"path":"subscribe/events/presence/receiving-join-event.feature"},"steps":["1928","1929","1930","1931","1932","1933","1934","1935","1936"]},"1947":{"type":"scenario","id":"1947","featureId":"825e17780996f4f0d938449d8116998d","name":"Receiving a join event in interval mode (with presence deltas) over 30KB message size","description":"","tags":["@skip"],"location":{"line":38,"column":3,"path":"subscribe/events/presence/receiving-join-event.feature"},"steps":["1938","1939","1940","1941","1942","1943","1944","1945","1946"]},"1958":{"type":"scenario","id":"1958","featureId":"efb1e9ef17f55d6c9c4567ed08d8e613","name":"Receiving a leave event in announce mode","description":"","tags":["@skip"],"location":{"line":6,"column":3,"path":"subscribe/events/presence/receiving-leave-event.feature"},"steps":["1949","1950","1951","1952","1953","1954","1955","1956","1957"]},"1967":{"type":"scenario","id":"1967","featureId":"efb1e9ef17f55d6c9c4567ed08d8e613","name":"Receiving a leave event in interval mode (without presence deltas)","description":"","tags":["@skip"],"location":{"line":17,"column":3,"path":"subscribe/events/presence/receiving-leave-event.feature"},"steps":["1959","1960","1961","1962","1963","1964","1965","1966"]},"1977":{"type":"scenario","id":"1977","featureId":"efb1e9ef17f55d6c9c4567ed08d8e613","name":"Receiving a leave event in interval mode (with presence deltas)","description":"","tags":["@skip"],"location":{"line":27,"column":3,"path":"subscribe/events/presence/receiving-leave-event.feature"},"steps":["1968","1969","1970","1971","1972","1973","1974","1975","1976"]},"1987":{"type":"scenario","id":"1987","featureId":"efb1e9ef17f55d6c9c4567ed08d8e613","name":"Receiving a leave event in interval mode (with presence deltas) over 30KB message size","description":"","tags":["@skip"],"location":{"line":38,"column":3,"path":"subscribe/events/presence/receiving-leave-event.feature"},"steps":["1978","1979","1980","1981","1982","1983","1984","1985","1986"]},"2000":{"type":"scenario","id":"2000","featureId":"61bec27692421ab9d3858f8992e1ca43","name":"Receiving a state-change event","description":"","tags":["@skip"],"location":{"line":6,"column":3,"path":"subscribe/events/presence/receiving-state-change-event.feature"},"steps":["1989","1990","1991","1992","1993","1994","1995","1996","1997","1998","1999"]},"2011":{"type":"scenario","id":"2011","featureId":"ffd9a590eed0925aa23eaedbc952c426","name":"Receiving a timeout event in announce mode","description":"","tags":["@skip"],"location":{"line":6,"column":3,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"steps":["2002","2003","2004","2005","2006","2007","2008","2009","2010"]},"2020":{"type":"scenario","id":"2020","featureId":"ffd9a590eed0925aa23eaedbc952c426","name":"Receiving a timeout event in interval mode (without presence deltas)","description":"","tags":["@skip"],"location":{"line":17,"column":3,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"steps":["2012","2013","2014","2015","2016","2017","2018","2019"]},"2030":{"type":"scenario","id":"2030","featureId":"ffd9a590eed0925aa23eaedbc952c426","name":"Receiving a timeout event in interval mode (with presence deltas)","description":"","tags":["@skip"],"location":{"line":27,"column":3,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"steps":["2021","2022","2023","2024","2025","2026","2027","2028","2029"]},"2040":{"type":"scenario","id":"2040","featureId":"ffd9a590eed0925aa23eaedbc952c426","name":"Receiving a timeout event in interval mode (with presence deltas) over 30KB message size","description":"","tags":["@skip"],"location":{"line":38,"column":3,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"steps":["2031","2032","2033","2034","2035","2036","2037","2038","2039"]},"2050":{"type":"scenario","id":"2050","featureId":"b757dc696cd4a4f94b8b4c9f998cfeb9","name":"Receiving a signal event","description":"","tags":["@skip"],"location":{"line":6,"column":3,"path":"subscribe/events/signal/receiving-signal-event.feature"},"steps":["2042","2043","2044","2045","2046","2047","2048","2049"]},"2062":{"type":"scenario","id":"2062","featureId":"0529ef94add867a1c27802281e1bee68","name":"Receiving a status event","description":"","tags":["@skip"],"location":{"line":6,"column":3,"path":"subscribe/events/status/receiving-status-event.feature"},"steps":["2052","2053","2054","2055","2056","2057","2058","2059","2060","2061"]},"2066":{"type":"scenario","id":"2066","featureId":"fb36d5c0af66cdad53d6c537dd7e01a5","name":"Limit starts out as the maximum value","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":11,"column":3,"path":"subscribe/limit-unsuccessful-reconnection-attempts.feature"},"steps":["2064","2065"]},"2070":{"type":"scenario","id":"2070","featureId":"fb36d5c0af66cdad53d6c537dd7e01a5","name":"Receiving messages resets limits","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":15,"column":3,"path":"subscribe/limit-unsuccessful-reconnection-attempts.feature"},"steps":["2067","2068","2069"]},"2073":{"type":"scenario","id":"2073","featureId":"fb36d5c0af66cdad53d6c537dd7e01a5","name":"A manual reconnection resets the limits","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":20,"column":3,"path":"subscribe/limit-unsuccessful-reconnection-attempts.feature"},"steps":["2071","2072"]},"2077":{"type":"scenario","id":"2077","featureId":"fb36d5c0af66cdad53d6c537dd7e01a5","name":"Each reconnection advances reduces available attempts","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":24,"column":3,"path":"subscribe/limit-unsuccessful-reconnection-attempts.feature"},"steps":["2074","2075","2076"]},"2078":{"type":"scenario","id":"2078","featureId":"fb36d5c0af66cdad53d6c537dd7e01a5","name":"Changing subscribed channels resets the limits","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":29,"column":3,"path":"subscribe/limit-unsuccessful-reconnection-attempts.feature"},"steps":[]},"2079":{"type":"scenario","id":"2079","featureId":"fb36d5c0af66cdad53d6c537dd7e01a5","name":"Changing AuthToken resets the limits","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":31,"column":3,"path":"subscribe/limit-unsuccessful-reconnection-attempts.feature"},"steps":[]},"2080":{"type":"scenario","id":"2080","featureId":"fb36d5c0af66cdad53d6c537dd7e01a5","name":"Changing AuthKey resets the limits","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":33,"column":3,"path":"subscribe/limit-unsuccessful-reconnection-attempts.feature"},"steps":[]},"2081":{"type":"scenario","id":"2081","featureId":"fb36d5c0af66cdad53d6c537dd7e01a5","name":"Reconnection happens when attempts are available","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":35,"column":3,"path":"subscribe/limit-unsuccessful-reconnection-attempts.feature"},"steps":[]},"2082":{"type":"scenario","id":"2082","featureId":"fb36d5c0af66cdad53d6c537dd7e01a5","name":"Reconnection only happens when attempts are available","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":37,"column":3,"path":"subscribe/limit-unsuccessful-reconnection-attempts.feature"},"steps":[]},"2089":{"type":"scenario","id":"2089","featureId":"49a4cd6a615910fc88b7abf3fa43072f","name":"Automatic reconnections are allowed after reconnect","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":7,"column":3,"path":"subscribe/reconnect.feature"},"steps":["2086","2087","2088"]},"2107":{"type":"scenario","id":"2107","featureId":"c53f8be9cd8421dce302dfdaedcf9746","name":"Starts at Unsubscribed","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":9,"column":5,"path":"subscribe/state/get-connection-status.feature"},"steps":["2105","2106"]},"2111":{"type":"scenario","id":"2111","featureId":"8279f7f2d75407f881ce3cfa15a524b6","name":"Failed attempts is 0 when disconnected","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":11,"column":5,"path":"subscribe/state/get-failed-reconnection-attempts.feature"},"steps":[]},"2112":{"type":"scenario","id":"2112","featureId":"8279f7f2d75407f881ce3cfa15a524b6","name":"Failed attempts is 0 after successfully receiving messages","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":13,"column":5,"path":"subscribe/state/get-failed-reconnection-attempts.feature"},"steps":[]},"2113":{"type":"scenario","id":"2113","featureId":"8279f7f2d75407f881ce3cfa15a524b6","name":"Failed attempts increases after each reconnection failure","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":15,"column":5,"path":"subscribe/state/get-failed-reconnection-attempts.feature"},"steps":[]},"2119":{"type":"scenario","id":"2119","featureId":"d5b5a1cc5e3b64ffd505e84d68539f25","name":"Starts at 0","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":10,"column":5,"path":"subscribe/state/get-reconnection-delay.feature"},"steps":["2117","2118"]},"2125":{"type":"scenario","id":"2125","featureId":"b379e4ce371372b8d6b7ae225659030b","name":"Starts as Empty","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":9,"column":5,"path":"subscribe/state/get-subscribed-channel-groups.feature"},"steps":["2123","2124"]},"2131":{"type":"scenario","id":"2131","featureId":"5504663e6c2324a25367b06043967260","name":"Starts as Empty","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":9,"column":5,"path":"subscribe/state/get-subscribed-channels.feature"},"steps":["2129","2130"]},"2137":{"type":"scenario","id":"2137","featureId":"638f41460fe2b7e0022bdd92ab8e7df0","name":"Starts as unavailable","description":"","tags":["@featureSet=subscribe","@beta","@skip"],"location":{"line":10,"column":5,"path":"subscribe/state/get-subscription-cursor.feature"},"steps":["2135","2136"]},"2147":{"type":"scenario","id":"2147","backgroundId":"2142","featureId":"4862b5407d890e3eb184e749e401cd0a","name":"Client can subscribe and receive messages with types","description":"","tags":["@featureSet=subscribeCustomMssgType","@beta","@contract=subscribeReceiveMessagesWithTypes"],"location":{"line":11,"column":3,"path":"subscribe/subscribe-custom-mssg-type.feature"},"steps":["2143","2144","2145"]},"2160":{"type":"scenario","id":"2160","featureId":"a76d4ef5f3f6a672bbfab2865563e530","name":"Getting PubNub time","description":"","tags":["@featureSet=time","@contract=successfulTime","@beta"],"location":{"line":8,"column":3,"path":"utilities/time.feature"},"steps":["2156","2157"]}},"steps":{"0":{"type":"step","id":"0","scenarioId":"1","location":{"line":11,"column":5,"path":"access/authorization-failure-reporting.feature"},"text":"I have a keyset with access manager enabled - without secret key","keyword":"Given"},"2":{"type":"step","id":"2","scenarioId":"6","location":{"line":15,"column":5,"path":"access/authorization-failure-reporting.feature"},"text":"a valid token with permissions to publish with channel 'channel-1'","keyword":"Given"},"3":{"type":"step","id":"3","scenarioId":"6","location":{"line":16,"column":5,"path":"access/authorization-failure-reporting.feature"},"text":"I publish a message using that auth token with channel 'channel-1'","keyword":"When"},"4":{"type":"step","id":"4","scenarioId":"6","location":{"line":17,"column":5,"path":"access/authorization-failure-reporting.feature"},"text":"the result is successful","keyword":"Then"},"7":{"type":"step","id":"7","scenarioId":"14","location":{"line":21,"column":5,"path":"access/authorization-failure-reporting.feature"},"text":"an expired token with permissions to publish with channel 'channel-1'","keyword":"Given"},"8":{"type":"step","id":"8","scenarioId":"14","location":{"line":22,"column":5,"path":"access/authorization-failure-reporting.feature"},"text":"I attempt to publish a message using that auth token with channel 'channel-1'","keyword":"When"},"9":{"type":"step","id":"9","scenarioId":"14","location":{"line":23,"column":5,"path":"access/authorization-failure-reporting.feature"},"text":"an auth error is returned","keyword":"Then"},"10":{"type":"step","id":"10","scenarioId":"14","location":{"line":24,"column":5,"path":"access/authorization-failure-reporting.feature"},"text":"the error status code is 403","keyword":"*"},"11":{"type":"step","id":"11","scenarioId":"14","location":{"line":25,"column":5,"path":"access/authorization-failure-reporting.feature"},"text":"the auth error message is 'Token is expired.'","keyword":"*"},"12":{"type":"step","id":"12","scenarioId":"14","location":{"line":26,"column":5,"path":"access/authorization-failure-reporting.feature"},"text":"the error service is 'Access Manager'","keyword":"*"},"15":{"type":"step","id":"15","scenarioId":"22","location":{"line":30,"column":5,"path":"access/authorization-failure-reporting.feature"},"text":"a valid token with permissions to publish with channel 'channel-1'","keyword":"Given"},"16":{"type":"step","id":"16","scenarioId":"22","location":{"line":31,"column":5,"path":"access/authorization-failure-reporting.feature"},"text":"I attempt to publish a message using that auth token with channel 'channel-1'","keyword":"When"},"17":{"type":"step","id":"17","scenarioId":"22","location":{"line":32,"column":5,"path":"access/authorization-failure-reporting.feature"},"text":"an auth error is returned","keyword":"Then"},"18":{"type":"step","id":"18","scenarioId":"22","location":{"line":33,"column":5,"path":"access/authorization-failure-reporting.feature"},"text":"the error status code is 403","keyword":"*"},"19":{"type":"step","id":"19","scenarioId":"22","location":{"line":34,"column":5,"path":"access/authorization-failure-reporting.feature"},"text":"the auth error message is 'Forbidden'","keyword":"*"},"20":{"type":"step","id":"20","scenarioId":"22","location":{"line":35,"column":5,"path":"access/authorization-failure-reporting.feature"},"text":"the error service is 'Access Manager'","keyword":"*"},"23":{"type":"step","id":"23","scenarioId":"30","location":{"line":39,"column":5,"path":"access/authorization-failure-reporting.feature"},"text":"a valid token with permissions to publish with channel 'channel-1'","keyword":"Given"},"24":{"type":"step","id":"24","scenarioId":"30","location":{"line":40,"column":5,"path":"access/authorization-failure-reporting.feature"},"text":"I attempt to publish a message using that auth token with channel 'channel-1'","keyword":"When"},"25":{"type":"step","id":"25","scenarioId":"30","location":{"line":41,"column":5,"path":"access/authorization-failure-reporting.feature"},"text":"an auth error is returned","keyword":"Then"},"26":{"type":"step","id":"26","scenarioId":"30","location":{"line":42,"column":5,"path":"access/authorization-failure-reporting.feature"},"text":"the error status code is 403","keyword":"*"},"27":{"type":"step","id":"27","scenarioId":"30","location":{"line":43,"column":5,"path":"access/authorization-failure-reporting.feature"},"text":"the auth error message is 'Token is revoked.'","keyword":"*"},"28":{"type":"step","id":"28","scenarioId":"30","location":{"line":44,"column":5,"path":"access/authorization-failure-reporting.feature"},"text":"the error service is 'Access Manager'","keyword":"*"},"33":{"type":"step","id":"33","scenarioId":"34","location":{"line":8,"column":5,"path":"access/configure-access-token.feature"},"text":"I have a keyset with access manager enabled","keyword":"Given"},"35":{"type":"step","id":"35","scenarioId":"38","location":{"line":11,"column":5,"path":"access/configure-access-token.feature"},"text":"The SDK is configured with an AuthKey representing an access Token","keyword":"Given"},"36":{"type":"step","id":"36","scenarioId":"38","location":{"line":12,"column":5,"path":"access/configure-access-token.feature"},"text":"I publish a messages","keyword":"When"},"37":{"type":"step","id":"37","scenarioId":"38","location":{"line":13,"column":5,"path":"access/configure-access-token.feature"},"text":"The request uses the specified access token for authorization","keyword":"Then"},"42":{"type":"step","id":"42","scenarioId":"43","location":{"line":9,"column":5,"path":"access/get-access-token.feature"},"text":"I have a keyset with access manager enabled","keyword":"Given"},"44":{"type":"step","id":"44","scenarioId":"47","location":{"line":12,"column":5,"path":"access/get-access-token.feature"},"text":"I have associated an access token with the SDK instance","keyword":"Given"},"45":{"type":"step","id":"45","scenarioId":"47","location":{"line":13,"column":5,"path":"access/get-access-token.feature"},"text":"I request the current access token via the getToken operation","keyword":"When"},"46":{"type":"step","id":"46","scenarioId":"47","location":{"line":14,"column":5,"path":"access/get-access-token.feature"},"text":"The token returned matches","keyword":"Then"},"48":{"type":"step","id":"48","scenarioId":"51","location":{"line":17,"column":5,"path":"access/get-access-token.feature"},"text":"I have not associated an access token with the SDK instance","keyword":"Given"},"49":{"type":"step","id":"49","scenarioId":"51","location":{"line":18,"column":5,"path":"access/get-access-token.feature"},"text":"I request the current access token via the getToken operation","keyword":"When"},"50":{"type":"step","id":"50","scenarioId":"51","location":{"line":19,"column":5,"path":"access/get-access-token.feature"},"text":"A non-error response indicating no token is associated will be returned","keyword":"Then"},"55":{"type":"step","id":"55","scenarioId":"56","location":{"line":9,"column":5,"path":"access/grant-token.feature"},"text":"I have a keyset with access manager enabled","keyword":"Given"},"57":{"type":"step","id":"57","scenarioId":"123","location":{"line":14,"column":5,"path":"access/grant-token.feature"},"text":"the authorized UUID \"test-authorized-uuid\"","keyword":"Given"},"58":{"type":"step","id":"58","scenarioId":"123","location":{"line":15,"column":5,"path":"access/grant-token.feature"},"text":"the TTL 60","keyword":"Given"},"59":{"type":"step","id":"59","scenarioId":"123","location":{"line":16,"column":5,"path":"access/grant-token.feature"},"text":"the 'channel-1' CHANNEL resource access permissions","keyword":"Given"},"60":{"type":"step","id":"60","scenarioId":"123","location":{"line":17,"column":5,"path":"access/grant-token.feature"},"text":"grant resource permission READ","keyword":"*"},"61":{"type":"step","id":"61","scenarioId":"123","location":{"line":18,"column":5,"path":"access/grant-token.feature"},"text":"grant resource permission WRITE","keyword":"*"},"62":{"type":"step","id":"62","scenarioId":"123","location":{"line":19,"column":5,"path":"access/grant-token.feature"},"text":"grant resource permission GET","keyword":"*"},"63":{"type":"step","id":"63","scenarioId":"123","location":{"line":20,"column":5,"path":"access/grant-token.feature"},"text":"grant resource permission MANAGE","keyword":"*"},"64":{"type":"step","id":"64","scenarioId":"123","location":{"line":21,"column":5,"path":"access/grant-token.feature"},"text":"grant resource permission UPDATE","keyword":"*"},"65":{"type":"step","id":"65","scenarioId":"123","location":{"line":22,"column":5,"path":"access/grant-token.feature"},"text":"grant resource permission JOIN","keyword":"*"},"66":{"type":"step","id":"66","scenarioId":"123","location":{"line":23,"column":5,"path":"access/grant-token.feature"},"text":"grant resource permission DELETE","keyword":"*"},"67":{"type":"step","id":"67","scenarioId":"123","location":{"line":24,"column":5,"path":"access/grant-token.feature"},"text":"the 'channel_group-1' CHANNEL_GROUP resource access permissions","keyword":"Given"},"68":{"type":"step","id":"68","scenarioId":"123","location":{"line":25,"column":5,"path":"access/grant-token.feature"},"text":"grant resource permission READ","keyword":"*"},"69":{"type":"step","id":"69","scenarioId":"123","location":{"line":26,"column":5,"path":"access/grant-token.feature"},"text":"grant resource permission MANAGE","keyword":"*"},"70":{"type":"step","id":"70","scenarioId":"123","location":{"line":27,"column":5,"path":"access/grant-token.feature"},"text":"the 'uuid-1' UUID resource access permissions","keyword":"Given"},"71":{"type":"step","id":"71","scenarioId":"123","location":{"line":28,"column":5,"path":"access/grant-token.feature"},"text":"grant resource permission GET","keyword":"*"},"72":{"type":"step","id":"72","scenarioId":"123","location":{"line":29,"column":5,"path":"access/grant-token.feature"},"text":"grant resource permission UPDATE","keyword":"*"},"73":{"type":"step","id":"73","scenarioId":"123","location":{"line":30,"column":5,"path":"access/grant-token.feature"},"text":"grant resource permission DELETE","keyword":"*"},"74":{"type":"step","id":"74","scenarioId":"123","location":{"line":31,"column":5,"path":"access/grant-token.feature"},"text":"the '^channel-\\S*$' CHANNEL pattern access permissions","keyword":"Given"},"75":{"type":"step","id":"75","scenarioId":"123","location":{"line":32,"column":5,"path":"access/grant-token.feature"},"text":"grant pattern permission READ","keyword":"*"},"76":{"type":"step","id":"76","scenarioId":"123","location":{"line":33,"column":5,"path":"access/grant-token.feature"},"text":"grant pattern permission WRITE","keyword":"*"},"77":{"type":"step","id":"77","scenarioId":"123","location":{"line":34,"column":5,"path":"access/grant-token.feature"},"text":"grant pattern permission GET","keyword":"*"},"78":{"type":"step","id":"78","scenarioId":"123","location":{"line":35,"column":5,"path":"access/grant-token.feature"},"text":"grant pattern permission MANAGE","keyword":"*"},"79":{"type":"step","id":"79","scenarioId":"123","location":{"line":36,"column":5,"path":"access/grant-token.feature"},"text":"grant pattern permission UPDATE","keyword":"*"},"80":{"type":"step","id":"80","scenarioId":"123","location":{"line":37,"column":5,"path":"access/grant-token.feature"},"text":"grant pattern permission JOIN","keyword":"*"},"81":{"type":"step","id":"81","scenarioId":"123","location":{"line":38,"column":5,"path":"access/grant-token.feature"},"text":"grant pattern permission DELETE","keyword":"*"},"82":{"type":"step","id":"82","scenarioId":"123","location":{"line":39,"column":5,"path":"access/grant-token.feature"},"text":"the '^:channel_group-\\S*$' CHANNEL_GROUP pattern access permissions","keyword":"Given"},"83":{"type":"step","id":"83","scenarioId":"123","location":{"line":40,"column":5,"path":"access/grant-token.feature"},"text":"grant pattern permission READ","keyword":"*"},"84":{"type":"step","id":"84","scenarioId":"123","location":{"line":41,"column":5,"path":"access/grant-token.feature"},"text":"grant pattern permission MANAGE","keyword":"*"},"85":{"type":"step","id":"85","scenarioId":"123","location":{"line":42,"column":5,"path":"access/grant-token.feature"},"text":"the '^uuid-\\S*$' UUID pattern access permissions","keyword":"Given"},"86":{"type":"step","id":"86","scenarioId":"123","location":{"line":43,"column":5,"path":"access/grant-token.feature"},"text":"grant pattern permission GET","keyword":"*"},"87":{"type":"step","id":"87","scenarioId":"123","location":{"line":44,"column":5,"path":"access/grant-token.feature"},"text":"grant pattern permission UPDATE","keyword":"*"},"88":{"type":"step","id":"88","scenarioId":"123","location":{"line":45,"column":5,"path":"access/grant-token.feature"},"text":"grant pattern permission DELETE","keyword":"*"},"89":{"type":"step","id":"89","scenarioId":"123","location":{"line":46,"column":5,"path":"access/grant-token.feature"},"text":"I grant a token specifying those permissions","keyword":"When"},"90":{"type":"step","id":"90","scenarioId":"123","location":{"line":47,"column":5,"path":"access/grant-token.feature"},"text":"the token contains the authorized UUID \"test-authorized-uuid\"","keyword":"Then"},"91":{"type":"step","id":"91","scenarioId":"123","location":{"line":48,"column":5,"path":"access/grant-token.feature"},"text":"the token contains the TTL 60","keyword":"Then"},"92":{"type":"step","id":"92","scenarioId":"123","location":{"line":49,"column":5,"path":"access/grant-token.feature"},"text":"the token has 'channel-1' CHANNEL resource access permissions","keyword":"Then"},"93":{"type":"step","id":"93","scenarioId":"123","location":{"line":50,"column":5,"path":"access/grant-token.feature"},"text":"token resource permission READ","keyword":"*"},"94":{"type":"step","id":"94","scenarioId":"123","location":{"line":51,"column":5,"path":"access/grant-token.feature"},"text":"token resource permission WRITE","keyword":"*"},"95":{"type":"step","id":"95","scenarioId":"123","location":{"line":52,"column":5,"path":"access/grant-token.feature"},"text":"token resource permission GET","keyword":"*"},"96":{"type":"step","id":"96","scenarioId":"123","location":{"line":53,"column":5,"path":"access/grant-token.feature"},"text":"token resource permission MANAGE","keyword":"*"},"97":{"type":"step","id":"97","scenarioId":"123","location":{"line":54,"column":5,"path":"access/grant-token.feature"},"text":"token resource permission UPDATE","keyword":"*"},"98":{"type":"step","id":"98","scenarioId":"123","location":{"line":55,"column":5,"path":"access/grant-token.feature"},"text":"token resource permission JOIN","keyword":"*"},"99":{"type":"step","id":"99","scenarioId":"123","location":{"line":56,"column":5,"path":"access/grant-token.feature"},"text":"token resource permission DELETE","keyword":"*"},"100":{"type":"step","id":"100","scenarioId":"123","location":{"line":57,"column":5,"path":"access/grant-token.feature"},"text":"the token has 'channel_group-1' CHANNEL_GROUP resource access permissions","keyword":"Then"},"101":{"type":"step","id":"101","scenarioId":"123","location":{"line":58,"column":5,"path":"access/grant-token.feature"},"text":"token resource permission READ","keyword":"*"},"102":{"type":"step","id":"102","scenarioId":"123","location":{"line":59,"column":5,"path":"access/grant-token.feature"},"text":"token resource permission MANAGE","keyword":"*"},"103":{"type":"step","id":"103","scenarioId":"123","location":{"line":60,"column":5,"path":"access/grant-token.feature"},"text":"the token has 'uuid-1' UUID resource access permissions","keyword":"Then"},"104":{"type":"step","id":"104","scenarioId":"123","location":{"line":61,"column":5,"path":"access/grant-token.feature"},"text":"token resource permission GET","keyword":"*"},"105":{"type":"step","id":"105","scenarioId":"123","location":{"line":62,"column":5,"path":"access/grant-token.feature"},"text":"token resource permission UPDATE","keyword":"*"},"106":{"type":"step","id":"106","scenarioId":"123","location":{"line":63,"column":5,"path":"access/grant-token.feature"},"text":"token resource permission DELETE","keyword":"*"},"107":{"type":"step","id":"107","scenarioId":"123","location":{"line":64,"column":5,"path":"access/grant-token.feature"},"text":"the token has '^channel-\\S*$' CHANNEL pattern access permissions","keyword":"Then"},"108":{"type":"step","id":"108","scenarioId":"123","location":{"line":65,"column":5,"path":"access/grant-token.feature"},"text":"token pattern permission READ","keyword":"*"},"109":{"type":"step","id":"109","scenarioId":"123","location":{"line":66,"column":5,"path":"access/grant-token.feature"},"text":"token pattern permission WRITE","keyword":"*"},"110":{"type":"step","id":"110","scenarioId":"123","location":{"line":67,"column":5,"path":"access/grant-token.feature"},"text":"token pattern permission GET","keyword":"*"},"111":{"type":"step","id":"111","scenarioId":"123","location":{"line":68,"column":5,"path":"access/grant-token.feature"},"text":"token pattern permission MANAGE","keyword":"*"},"112":{"type":"step","id":"112","scenarioId":"123","location":{"line":69,"column":5,"path":"access/grant-token.feature"},"text":"token pattern permission UPDATE","keyword":"*"},"113":{"type":"step","id":"113","scenarioId":"123","location":{"line":70,"column":5,"path":"access/grant-token.feature"},"text":"token pattern permission JOIN","keyword":"*"},"114":{"type":"step","id":"114","scenarioId":"123","location":{"line":71,"column":5,"path":"access/grant-token.feature"},"text":"token pattern permission DELETE","keyword":"*"},"115":{"type":"step","id":"115","scenarioId":"123","location":{"line":72,"column":5,"path":"access/grant-token.feature"},"text":"the token has '^:channel_group-\\S*$' CHANNEL_GROUP pattern access permissions","keyword":"Then"},"116":{"type":"step","id":"116","scenarioId":"123","location":{"line":73,"column":5,"path":"access/grant-token.feature"},"text":"token pattern permission READ","keyword":"*"},"117":{"type":"step","id":"117","scenarioId":"123","location":{"line":74,"column":5,"path":"access/grant-token.feature"},"text":"token pattern permission MANAGE","keyword":"*"},"118":{"type":"step","id":"118","scenarioId":"123","location":{"line":75,"column":5,"path":"access/grant-token.feature"},"text":"the token has '^uuid-\\S*$' UUID pattern access permissions","keyword":"Then"},"119":{"type":"step","id":"119","scenarioId":"123","location":{"line":76,"column":5,"path":"access/grant-token.feature"},"text":"token pattern permission GET","keyword":"*"},"120":{"type":"step","id":"120","scenarioId":"123","location":{"line":77,"column":5,"path":"access/grant-token.feature"},"text":"token pattern permission UPDATE","keyword":"*"},"121":{"type":"step","id":"121","scenarioId":"123","location":{"line":78,"column":5,"path":"access/grant-token.feature"},"text":"token pattern permission DELETE","keyword":"*"},"124":{"type":"step","id":"124","scenarioId":"133","location":{"line":82,"column":5,"path":"access/grant-token.feature"},"text":"the TTL 60","keyword":"Given"},"125":{"type":"step","id":"125","scenarioId":"133","location":{"line":83,"column":5,"path":"access/grant-token.feature"},"text":"the 'channel-1' CHANNEL resource access permissions","keyword":"Given"},"126":{"type":"step","id":"126","scenarioId":"133","location":{"line":84,"column":5,"path":"access/grant-token.feature"},"text":"grant resource permission READ","keyword":"*"},"127":{"type":"step","id":"127","scenarioId":"133","location":{"line":85,"column":5,"path":"access/grant-token.feature"},"text":"I grant a token specifying those permissions","keyword":"When"},"128":{"type":"step","id":"128","scenarioId":"133","location":{"line":86,"column":5,"path":"access/grant-token.feature"},"text":"the token contains the TTL 60","keyword":"Then"},"129":{"type":"step","id":"129","scenarioId":"133","location":{"line":87,"column":5,"path":"access/grant-token.feature"},"text":"the token does not contain an authorized uuid","keyword":"Then"},"130":{"type":"step","id":"130","scenarioId":"133","location":{"line":88,"column":5,"path":"access/grant-token.feature"},"text":"the token has 'channel-1' CHANNEL resource access permissions","keyword":"Then"},"131":{"type":"step","id":"131","scenarioId":"133","location":{"line":89,"column":5,"path":"access/grant-token.feature"},"text":"token resource permission READ","keyword":"*"},"134":{"type":"step","id":"134","scenarioId":"144","location":{"line":93,"column":5,"path":"access/grant-token.feature"},"text":"the authorized UUID \"test-authorized-uuid\"","keyword":"Given"},"135":{"type":"step","id":"135","scenarioId":"144","location":{"line":94,"column":5,"path":"access/grant-token.feature"},"text":"the TTL 60","keyword":"Given"},"136":{"type":"step","id":"136","scenarioId":"144","location":{"line":95,"column":5,"path":"access/grant-token.feature"},"text":"the 'channel-1' CHANNEL resource access permissions","keyword":"Given"},"137":{"type":"step","id":"137","scenarioId":"144","location":{"line":96,"column":5,"path":"access/grant-token.feature"},"text":"grant resource permission READ","keyword":"*"},"138":{"type":"step","id":"138","scenarioId":"144","location":{"line":97,"column":5,"path":"access/grant-token.feature"},"text":"I grant a token specifying those permissions","keyword":"When"},"139":{"type":"step","id":"139","scenarioId":"144","location":{"line":98,"column":5,"path":"access/grant-token.feature"},"text":"the token contains the TTL 60","keyword":"Then"},"140":{"type":"step","id":"140","scenarioId":"144","location":{"line":99,"column":5,"path":"access/grant-token.feature"},"text":"the token contains the authorized UUID \"test-authorized-uuid\"","keyword":"Then"},"141":{"type":"step","id":"141","scenarioId":"144","location":{"line":100,"column":5,"path":"access/grant-token.feature"},"text":"the token has 'channel-1' CHANNEL resource access permissions","keyword":"Then"},"142":{"type":"step","id":"142","scenarioId":"144","location":{"line":101,"column":5,"path":"access/grant-token.feature"},"text":"token resource permission READ","keyword":"*"},"145":{"type":"step","id":"145","scenarioId":"157","location":{"line":105,"column":5,"path":"access/grant-token.feature"},"text":"the TTL 60","keyword":"Given"},"146":{"type":"step","id":"146","scenarioId":"157","location":{"line":106,"column":5,"path":"access/grant-token.feature"},"text":"the 'uuid-1' UUID resource access permissions","keyword":"Given"},"147":{"type":"step","id":"147","scenarioId":"157","location":{"line":107,"column":5,"path":"access/grant-token.feature"},"text":"deny resource permission GET","keyword":"*"},"148":{"type":"step","id":"148","scenarioId":"157","location":{"line":108,"column":5,"path":"access/grant-token.feature"},"text":"I attempt to grant a token specifying those permissions","keyword":"When"},"149":{"type":"step","id":"149","scenarioId":"157","location":{"line":109,"column":5,"path":"access/grant-token.feature"},"text":"an error is returned","keyword":"Then"},"150":{"type":"step","id":"150","scenarioId":"157","location":{"line":110,"column":5,"path":"access/grant-token.feature"},"text":"the error status code is 400","keyword":"*"},"151":{"type":"step","id":"151","scenarioId":"157","location":{"line":111,"column":5,"path":"access/grant-token.feature"},"text":"the error message is 'Invalid permissions'","keyword":"*"},"152":{"type":"step","id":"152","scenarioId":"157","location":{"line":112,"column":5,"path":"access/grant-token.feature"},"text":"the error source is 'grant'","keyword":"*"},"153":{"type":"step","id":"153","scenarioId":"157","location":{"line":113,"column":5,"path":"access/grant-token.feature"},"text":"the error detail message is 'Unexpected value: `permissions.resources.uuids.uuid-1` must be positive and non-zero.'","keyword":"*"},"154":{"type":"step","id":"154","scenarioId":"157","location":{"line":114,"column":5,"path":"access/grant-token.feature"},"text":"the error detail location is 'permissions.resources.uuids.uuid-1'","keyword":"*"},"155":{"type":"step","id":"155","scenarioId":"157","location":{"line":115,"column":5,"path":"access/grant-token.feature"},"text":"the error detail location type is 'body'","keyword":"*"},"158":{"type":"step","id":"158","scenarioId":"170","location":{"line":119,"column":5,"path":"access/grant-token.feature"},"text":"the TTL 60","keyword":"Given"},"159":{"type":"step","id":"159","scenarioId":"170","location":{"line":120,"column":5,"path":"access/grant-token.feature"},"text":"the '!<[^>]+>++' UUID pattern access permissions","keyword":"Given"},"160":{"type":"step","id":"160","scenarioId":"170","location":{"line":121,"column":5,"path":"access/grant-token.feature"},"text":"grant pattern permission GET","keyword":"*"},"161":{"type":"step","id":"161","scenarioId":"170","location":{"line":122,"column":5,"path":"access/grant-token.feature"},"text":"I attempt to grant a token specifying those permissions","keyword":"When"},"162":{"type":"step","id":"162","scenarioId":"170","location":{"line":123,"column":5,"path":"access/grant-token.feature"},"text":"an error is returned","keyword":"Then"},"163":{"type":"step","id":"163","scenarioId":"170","location":{"line":124,"column":5,"path":"access/grant-token.feature"},"text":"the error status code is 400","keyword":"*"},"164":{"type":"step","id":"164","scenarioId":"170","location":{"line":125,"column":5,"path":"access/grant-token.feature"},"text":"the error message is 'Invalid RegExp'","keyword":"*"},"165":{"type":"step","id":"165","scenarioId":"170","location":{"line":126,"column":5,"path":"access/grant-token.feature"},"text":"the error source is 'grant'","keyword":"*"},"166":{"type":"step","id":"166","scenarioId":"170","location":{"line":127,"column":5,"path":"access/grant-token.feature"},"text":"the error detail message is 'Syntax error: multiple repeat.'","keyword":"*"},"167":{"type":"step","id":"167","scenarioId":"170","location":{"line":128,"column":5,"path":"access/grant-token.feature"},"text":"the error detail location is 'permissions.patterns.uuids.!<[^>]+>++'","keyword":"*"},"168":{"type":"step","id":"168","scenarioId":"170","location":{"line":129,"column":5,"path":"access/grant-token.feature"},"text":"the error detail location type is 'body'","keyword":"*"},"171":{"type":"step","id":"171","scenarioId":"183","location":{"line":133,"column":5,"path":"access/grant-token.feature"},"text":"the TTL 60","keyword":"Given"},"172":{"type":"step","id":"172","scenarioId":"183","location":{"line":134,"column":5,"path":"access/grant-token.feature"},"text":"the '(!<[^>]+>)+' UUID pattern access permissions","keyword":"Given"},"173":{"type":"step","id":"173","scenarioId":"183","location":{"line":135,"column":5,"path":"access/grant-token.feature"},"text":"grant pattern permission GET","keyword":"*"},"174":{"type":"step","id":"174","scenarioId":"183","location":{"line":136,"column":5,"path":"access/grant-token.feature"},"text":"I attempt to grant a token specifying those permissions","keyword":"When"},"175":{"type":"step","id":"175","scenarioId":"183","location":{"line":137,"column":5,"path":"access/grant-token.feature"},"text":"an error is returned","keyword":"Then"},"176":{"type":"step","id":"176","scenarioId":"183","location":{"line":138,"column":5,"path":"access/grant-token.feature"},"text":"the error status code is 400","keyword":"*"},"177":{"type":"step","id":"177","scenarioId":"183","location":{"line":139,"column":5,"path":"access/grant-token.feature"},"text":"the error message is 'Invalid RegExp'","keyword":"*"},"178":{"type":"step","id":"178","scenarioId":"183","location":{"line":140,"column":5,"path":"access/grant-token.feature"},"text":"the error source is 'grant'","keyword":"*"},"179":{"type":"step","id":"179","scenarioId":"183","location":{"line":141,"column":5,"path":"access/grant-token.feature"},"text":"the error detail message is 'Only non-capturing groups are allowed. Try replacing `(` with `(?:`.'","keyword":"*"},"180":{"type":"step","id":"180","scenarioId":"183","location":{"line":142,"column":5,"path":"access/grant-token.feature"},"text":"the error detail location is 'permissions.patterns.uuids.(!<[^>]+>)+'","keyword":"*"},"181":{"type":"step","id":"181","scenarioId":"183","location":{"line":143,"column":5,"path":"access/grant-token.feature"},"text":"the error detail location type is 'body'","keyword":"*"},"184":{"type":"step","id":"184","scenarioId":"197","location":{"line":147,"column":5,"path":"access/grant-token.feature"},"text":"the TTL 43201","keyword":"Given"},"185":{"type":"step","id":"185","scenarioId":"197","location":{"line":148,"column":5,"path":"access/grant-token.feature"},"text":"the 'channel-1' CHANNEL resource access permissions","keyword":"Given"},"186":{"type":"step","id":"186","scenarioId":"197","location":{"line":149,"column":5,"path":"access/grant-token.feature"},"text":"grant resource permission READ","keyword":"*"},"187":{"type":"step","id":"187","scenarioId":"197","location":{"line":150,"column":5,"path":"access/grant-token.feature"},"text":"I attempt to grant a token specifying those permissions","keyword":"When"},"188":{"type":"step","id":"188","scenarioId":"197","location":{"line":151,"column":5,"path":"access/grant-token.feature"},"text":"an error is returned","keyword":"Then"},"189":{"type":"step","id":"189","scenarioId":"197","location":{"line":152,"column":5,"path":"access/grant-token.feature"},"text":"the error status code is 400","keyword":"*"},"190":{"type":"step","id":"190","scenarioId":"197","location":{"line":153,"column":5,"path":"access/grant-token.feature"},"text":"the error message is 'Invalid ttl'","keyword":"*"},"191":{"type":"step","id":"191","scenarioId":"197","location":{"line":154,"column":5,"path":"access/grant-token.feature"},"text":"the error source is 'grant'","keyword":"*"},"192":{"type":"step","id":"192","scenarioId":"197","location":{"line":155,"column":5,"path":"access/grant-token.feature"},"text":"the error detail message is 'Range should be 1 to 43200 minute(s).'","keyword":"*"},"193":{"type":"step","id":"193","scenarioId":"197","location":{"line":156,"column":5,"path":"access/grant-token.feature"},"text":"the error detail location is 'ttl'","keyword":"*"},"194":{"type":"step","id":"194","scenarioId":"197","location":{"line":157,"column":5,"path":"access/grant-token.feature"},"text":"the error detail location type is 'body'","keyword":"*"},"199":{"type":"step","id":"199","scenarioId":"200","location":{"line":8,"column":5,"path":"access/parse-access-token.feature"},"text":"I have a keyset with access manager enabled","keyword":"Given"},"201":{"type":"step","id":"201","scenarioId":"204","location":{"line":11,"column":5,"path":"access/parse-access-token.feature"},"text":"I have a known token containing an authorized UUID","keyword":"Given"},"202":{"type":"step","id":"202","scenarioId":"204","location":{"line":12,"column":5,"path":"access/parse-access-token.feature"},"text":"I parse the token","keyword":"When"},"203":{"type":"step","id":"203","scenarioId":"204","location":{"line":13,"column":5,"path":"access/parse-access-token.feature"},"text":"the parsed token output contains the authorized UUID \"test-authorized-uuid\"","keyword":"Then"},"205":{"type":"step","id":"205","scenarioId":"209","location":{"line":16,"column":5,"path":"access/parse-access-token.feature"},"text":"I have a known token containing UUID resource permissions","keyword":"Given"},"206":{"type":"step","id":"206","scenarioId":"209","location":{"line":17,"column":5,"path":"access/parse-access-token.feature"},"text":"I parse the token","keyword":"When"},"207":{"type":"step","id":"207","scenarioId":"209","location":{"line":18,"column":5,"path":"access/parse-access-token.feature"},"text":"the token has 'uuid-1' UUID resource access permissions","keyword":"Then"},"208":{"type":"step","id":"208","scenarioId":"209","location":{"line":19,"column":5,"path":"access/parse-access-token.feature"},"text":"token resource permission GET","keyword":"*"},"210":{"type":"step","id":"210","scenarioId":"214","location":{"line":22,"column":5,"path":"access/parse-access-token.feature"},"text":"I have a known token containing UUID pattern Permissions","keyword":"Given"},"211":{"type":"step","id":"211","scenarioId":"214","location":{"line":23,"column":5,"path":"access/parse-access-token.feature"},"text":"I parse the token","keyword":"When"},"212":{"type":"step","id":"212","scenarioId":"214","location":{"line":24,"column":5,"path":"access/parse-access-token.feature"},"text":"the token has '^uuid-\\S*$' UUID pattern access permissions","keyword":"Then"},"213":{"type":"step","id":"213","scenarioId":"214","location":{"line":25,"column":5,"path":"access/parse-access-token.feature"},"text":"token pattern permission GET","keyword":"*"},"216":{"type":"step","id":"216","scenarioId":"217","location":{"line":7,"column":5,"path":"access/revoke-token.feature"},"text":"I have a keyset with access manager enabled","keyword":"Given"},"218":{"type":"step","id":"218","scenarioId":"222","location":{"line":11,"column":5,"path":"access/revoke-token.feature"},"text":"a token","keyword":"Given"},"219":{"type":"step","id":"219","scenarioId":"222","location":{"line":12,"column":5,"path":"access/revoke-token.feature"},"text":"I revoke a token","keyword":"When"},"220":{"type":"step","id":"220","scenarioId":"222","location":{"line":13,"column":5,"path":"access/revoke-token.feature"},"text":"I get confirmation that token has been revoked","keyword":"Then"},"223":{"type":"step","id":"223","scenarioId":"234","location":{"line":17,"column":5,"path":"access/revoke-token.feature"},"text":"a token","keyword":"Given"},"224":{"type":"step","id":"224","scenarioId":"234","location":{"line":18,"column":5,"path":"access/revoke-token.feature"},"text":"I revoke a token","keyword":"When"},"225":{"type":"step","id":"225","scenarioId":"234","location":{"line":19,"column":5,"path":"access/revoke-token.feature"},"text":"an error is returned","keyword":"Then"},"226":{"type":"step","id":"226","scenarioId":"234","location":{"line":20,"column":5,"path":"access/revoke-token.feature"},"text":"the error status code is 400","keyword":"*"},"227":{"type":"step","id":"227","scenarioId":"234","location":{"line":21,"column":5,"path":"access/revoke-token.feature"},"text":"the error message is 'Invalid token'","keyword":"*"},"228":{"type":"step","id":"228","scenarioId":"234","location":{"line":22,"column":5,"path":"access/revoke-token.feature"},"text":"the error source is 'revoke'","keyword":"*"},"229":{"type":"step","id":"229","scenarioId":"234","location":{"line":23,"column":5,"path":"access/revoke-token.feature"},"text":"the error detail message is not empty","keyword":"*"},"230":{"type":"step","id":"230","scenarioId":"234","location":{"line":24,"column":5,"path":"access/revoke-token.feature"},"text":"the error detail location is 'token'","keyword":"*"},"231":{"type":"step","id":"231","scenarioId":"234","location":{"line":25,"column":5,"path":"access/revoke-token.feature"},"text":"the error detail location type is 'path'","keyword":"*"},"232":{"type":"step","id":"232","scenarioId":"234","location":{"line":26,"column":5,"path":"access/revoke-token.feature"},"text":"the error service is 'Access Manager'","keyword":"*"},"235":{"type":"step","id":"235","scenarioId":"246","location":{"line":30,"column":5,"path":"access/revoke-token.feature"},"text":"a token","keyword":"Given"},"236":{"type":"step","id":"236","scenarioId":"246","location":{"line":31,"column":5,"path":"access/revoke-token.feature"},"text":"I revoke a token","keyword":"When"},"237":{"type":"step","id":"237","scenarioId":"246","location":{"line":32,"column":5,"path":"access/revoke-token.feature"},"text":"an error is returned","keyword":"Then"},"238":{"type":"step","id":"238","scenarioId":"246","location":{"line":33,"column":5,"path":"access/revoke-token.feature"},"text":"the error status code is 400","keyword":"*"},"239":{"type":"step","id":"239","scenarioId":"246","location":{"line":34,"column":5,"path":"access/revoke-token.feature"},"text":"the error message is 'Feature disabled'","keyword":"*"},"240":{"type":"step","id":"240","scenarioId":"246","location":{"line":35,"column":5,"path":"access/revoke-token.feature"},"text":"the error source is 'revoke'","keyword":"*"},"241":{"type":"step","id":"241","scenarioId":"246","location":{"line":36,"column":5,"path":"access/revoke-token.feature"},"text":"the error detail message is 'Token revocation is disabled.'","keyword":"*"},"242":{"type":"step","id":"242","scenarioId":"246","location":{"line":37,"column":5,"path":"access/revoke-token.feature"},"text":"the error detail location is 'subscribe-key'","keyword":"*"},"243":{"type":"step","id":"243","scenarioId":"246","location":{"line":38,"column":5,"path":"access/revoke-token.feature"},"text":"the error detail location type is 'path'","keyword":"*"},"244":{"type":"step","id":"244","scenarioId":"246","location":{"line":39,"column":5,"path":"access/revoke-token.feature"},"text":"the error service is 'Access Manager'","keyword":"*"},"247":{"type":"step","id":"247","scenarioId":"251","location":{"line":43,"column":5,"path":"access/revoke-token.feature"},"text":"the token string 'unescaped-_.ABCabc123 escaped;,/?:@&=+$#'","keyword":"Given"},"248":{"type":"step","id":"248","scenarioId":"251","location":{"line":44,"column":5,"path":"access/revoke-token.feature"},"text":"I revoke a token","keyword":"When"},"249":{"type":"step","id":"249","scenarioId":"251","location":{"line":45,"column":5,"path":"access/revoke-token.feature"},"text":"I get confirmation that token has been revoked","keyword":"Then"},"254":{"type":"step","id":"254","scenarioId":"255","location":{"line":10,"column":5,"path":"access/set-access-token.feature"},"text":"I have a keyset with access manager enabled","keyword":"Given"},"256":{"type":"step","id":"256","scenarioId":"259","location":{"line":13,"column":5,"path":"access/set-access-token.feature"},"text":"I have provided an access token to the SDK via the setToken operation","keyword":"Given"},"257":{"type":"step","id":"257","scenarioId":"259","location":{"line":14,"column":5,"path":"access/set-access-token.feature"},"text":"I publish a messages","keyword":"When"},"258":{"type":"step","id":"258","scenarioId":"259","location":{"line":15,"column":5,"path":"access/set-access-token.feature"},"text":"The request uses the specified access token for authorization","keyword":"Then"},"260":{"type":"step","id":"260","scenarioId":"264","location":{"line":18,"column":5,"path":"access/set-access-token.feature"},"text":"The SDK is configured with an AuthKey representing an acess Token","keyword":"Given"},"261":{"type":"step","id":"261","scenarioId":"264","location":{"line":19,"column":5,"path":"access/set-access-token.feature"},"text":"I provide an access token to the SDK via the setToken operation","keyword":"And"},"262":{"type":"step","id":"262","scenarioId":"264","location":{"line":20,"column":5,"path":"access/set-access-token.feature"},"text":"I publish a messages","keyword":"When"},"263":{"type":"step","id":"263","scenarioId":"264","location":{"line":21,"column":5,"path":"access/set-access-token.feature"},"text":"The request uses the specified access token for authorization","keyword":"Then"},"265":{"type":"step","id":"265","scenarioId":"269","location":{"line":25,"column":5,"path":"access/set-access-token.feature"},"text":"I have associated an access token with the SDK instance","keyword":"Given"},"266":{"type":"step","id":"266","scenarioId":"269","location":{"line":26,"column":5,"path":"access/set-access-token.feature"},"text":"I indicated to the SDK to not use a token.","keyword":"And"},"267":{"type":"step","id":"267","scenarioId":"269","location":{"line":27,"column":5,"path":"access/set-access-token.feature"},"text":"I publish a messages","keyword":"When"},"268":{"type":"step","id":"268","scenarioId":"269","location":{"line":28,"column":5,"path":"access/set-access-token.feature"},"text":"The request does not include an access token","keyword":"Then"},"273":{"type":"step","id":"273","scenarioId":"286","location":{"line":8,"column":5,"path":"encryption/cryptor-module.feature"},"text":"Crypto module with 'acrh' cryptor","keyword":"Given"},"274":{"type":"step","id":"274","scenarioId":"286","location":{"line":9,"column":5,"path":"encryption/cryptor-module.feature"},"text":"with '<cipher_key>' cipher key","keyword":"*"},"275":{"type":"step","id":"275","scenarioId":"286","location":{"line":10,"column":5,"path":"encryption/cryptor-module.feature"},"text":"I decrypt '<file>' file","keyword":"When"},"276":{"type":"step","id":"276","scenarioId":"286","location":{"line":11,"column":5,"path":"encryption/cryptor-module.feature"},"text":"I receive '<outcome>'","keyword":"Then"},"287":{"type":"step","id":"287","scenarioId":"298","location":{"line":38,"column":5,"path":"encryption/cryptor-module.feature"},"text":"Crypto module with '<cryptor_id>' cryptor","keyword":"Given"},"288":{"type":"step","id":"288","scenarioId":"298","location":{"line":39,"column":5,"path":"encryption/cryptor-module.feature"},"text":"with '<cipher_key>' cipher key","keyword":"*"},"289":{"type":"step","id":"289","scenarioId":"298","location":{"line":40,"column":5,"path":"encryption/cryptor-module.feature"},"text":"with '<vector>' vector","keyword":"*"},"290":{"type":"step","id":"290","scenarioId":"298","location":{"line":41,"column":5,"path":"encryption/cryptor-module.feature"},"text":"I encrypt 'empty-file.txt' file as 'binary'","keyword":"When"},"291":{"type":"step","id":"291","scenarioId":"298","location":{"line":42,"column":5,"path":"encryption/cryptor-module.feature"},"text":"I receive 'encryption error'","keyword":"Then"},"299":{"type":"step","id":"299","scenarioId":"314","location":{"line":55,"column":5,"path":"encryption/cryptor-module.feature"},"text":"Crypto module with '<cryptor_id>' cryptor","keyword":"Given"},"300":{"type":"step","id":"300","scenarioId":"314","location":{"line":56,"column":5,"path":"encryption/cryptor-module.feature"},"text":"with '<cipher_key>' cipher key","keyword":"*"},"301":{"type":"step","id":"301","scenarioId":"314","location":{"line":57,"column":5,"path":"encryption/cryptor-module.feature"},"text":"with '<vector>' vector","keyword":"*"},"302":{"type":"step","id":"302","scenarioId":"314","location":{"line":58,"column":5,"path":"encryption/cryptor-module.feature"},"text":"I encrypt 'empty-file.txt' file as 'stream'","keyword":"When"},"303":{"type":"step","id":"303","scenarioId":"314","location":{"line":59,"column":5,"path":"encryption/cryptor-module.feature"},"text":"I receive 'encryption error'","keyword":"Then"},"315":{"type":"step","id":"315","scenarioId":"327","location":{"line":69,"column":5,"path":"encryption/cryptor-module.feature"},"text":"Crypto module with '<cryptor_id>' cryptor","keyword":"Given"},"316":{"type":"step","id":"316","scenarioId":"327","location":{"line":70,"column":5,"path":"encryption/cryptor-module.feature"},"text":"with '<cipher_key>' cipher key","keyword":"*"},"317":{"type":"step","id":"317","scenarioId":"327","location":{"line":71,"column":5,"path":"encryption/cryptor-module.feature"},"text":"with '<vector>' vector","keyword":"*"},"318":{"type":"step","id":"318","scenarioId":"327","location":{"line":72,"column":5,"path":"encryption/cryptor-module.feature"},"text":"I decrypt '<encrypted_file>' file as 'binary'","keyword":"When"},"319":{"type":"step","id":"319","scenarioId":"327","location":{"line":73,"column":5,"path":"encryption/cryptor-module.feature"},"text":"I receive 'decryption error'","keyword":"Then"},"328":{"type":"step","id":"328","scenarioId":"344","location":{"line":90,"column":5,"path":"encryption/cryptor-module.feature"},"text":"Crypto module with '<cryptor_id>' cryptor","keyword":"Given"},"329":{"type":"step","id":"329","scenarioId":"344","location":{"line":91,"column":5,"path":"encryption/cryptor-module.feature"},"text":"with '<cipher_key>' cipher key","keyword":"*"},"330":{"type":"step","id":"330","scenarioId":"344","location":{"line":92,"column":5,"path":"encryption/cryptor-module.feature"},"text":"with '<vector>' vector","keyword":"*"},"331":{"type":"step","id":"331","scenarioId":"344","location":{"line":93,"column":5,"path":"encryption/cryptor-module.feature"},"text":"I decrypt '<encrypted_file>' file as 'stream'","keyword":"When"},"332":{"type":"step","id":"332","scenarioId":"344","location":{"line":94,"column":5,"path":"encryption/cryptor-module.feature"},"text":"I receive 'decryption error'","keyword":"Then"},"345":{"type":"step","id":"345","scenarioId":"357","location":{"line":108,"column":5,"path":"encryption/cryptor-module.feature"},"text":"Crypto module with 'legacy' cryptor","keyword":"Given"},"346":{"type":"step","id":"346","scenarioId":"357","location":{"line":109,"column":5,"path":"encryption/cryptor-module.feature"},"text":"with '<cipher_key>' cipher key","keyword":"*"},"347":{"type":"step","id":"347","scenarioId":"357","location":{"line":110,"column":5,"path":"encryption/cryptor-module.feature"},"text":"with '<vector>' vector","keyword":"*"},"348":{"type":"step","id":"348","scenarioId":"357","location":{"line":111,"column":5,"path":"encryption/cryptor-module.feature"},"text":"Legacy code with '<cipher_key>' cipher key and '<vector>' vector","keyword":"Given"},"349":{"type":"step","id":"349","scenarioId":"357","location":{"line":112,"column":5,"path":"encryption/cryptor-module.feature"},"text":"I encrypt '<file>' file as 'binary'","keyword":"When"},"350":{"type":"step","id":"350","scenarioId":"357","location":{"line":113,"column":5,"path":"encryption/cryptor-module.feature"},"text":"Successfully decrypt an encrypted file with legacy code","keyword":"Then"},"358":{"type":"step","id":"358","scenarioId":"372","location":{"line":126,"column":5,"path":"encryption/cryptor-module.feature"},"text":"Crypto module with 'legacy' cryptor","keyword":"Given"},"359":{"type":"step","id":"359","scenarioId":"372","location":{"line":127,"column":5,"path":"encryption/cryptor-module.feature"},"text":"Legacy code with '<cipher_key>' cipher key and '<vector>' vector","keyword":"Given"},"360":{"type":"step","id":"360","scenarioId":"372","location":{"line":128,"column":5,"path":"encryption/cryptor-module.feature"},"text":"with '<cipher_key>' cipher key","keyword":"*"},"361":{"type":"step","id":"361","scenarioId":"372","location":{"line":129,"column":5,"path":"encryption/cryptor-module.feature"},"text":"with '<vector>' vector","keyword":"*"},"362":{"type":"step","id":"362","scenarioId":"372","location":{"line":130,"column":5,"path":"encryption/cryptor-module.feature"},"text":"I encrypt '<file>' file as 'stream'","keyword":"When"},"363":{"type":"step","id":"363","scenarioId":"372","location":{"line":131,"column":5,"path":"encryption/cryptor-module.feature"},"text":"Successfully decrypt an encrypted file with legacy code","keyword":"Then"},"373":{"type":"step","id":"373","scenarioId":"390","location":{"line":139,"column":5,"path":"encryption/cryptor-module.feature"},"text":"Crypto module with '<cryptor_id>' cryptor","keyword":"Given"},"374":{"type":"step","id":"374","scenarioId":"390","location":{"line":140,"column":5,"path":"encryption/cryptor-module.feature"},"text":"with '<cipher_key>' cipher key","keyword":"*"},"375":{"type":"step","id":"375","scenarioId":"390","location":{"line":141,"column":5,"path":"encryption/cryptor-module.feature"},"text":"with '<vector>' vector","keyword":"*"},"376":{"type":"step","id":"376","scenarioId":"390","location":{"line":142,"column":5,"path":"encryption/cryptor-module.feature"},"text":"I decrypt '<encrypted_file>' file as 'binary'","keyword":"When"},"377":{"type":"step","id":"377","scenarioId":"390","location":{"line":143,"column":5,"path":"encryption/cryptor-module.feature"},"text":"Decrypted file content equal to the '<source_file>' file content","keyword":"Then"},"391":{"type":"step","id":"391","scenarioId":"408","location":{"line":162,"column":5,"path":"encryption/cryptor-module.feature"},"text":"Crypto module with '<cryptor_id>' cryptor","keyword":"Given"},"392":{"type":"step","id":"392","scenarioId":"408","location":{"line":163,"column":5,"path":"encryption/cryptor-module.feature"},"text":"with '<cipher_key>' cipher key","keyword":"*"},"393":{"type":"step","id":"393","scenarioId":"408","location":{"line":164,"column":5,"path":"encryption/cryptor-module.feature"},"text":"with '<vector>' vector","keyword":"*"},"394":{"type":"step","id":"394","scenarioId":"408","location":{"line":165,"column":5,"path":"encryption/cryptor-module.feature"},"text":"I decrypt '<encrypted_file>' file as 'stream'","keyword":"When"},"395":{"type":"step","id":"395","scenarioId":"408","location":{"line":166,"column":5,"path":"encryption/cryptor-module.feature"},"text":"Decrypted file content equal to the '<source_file>' file content","keyword":"Then"},"409":{"type":"step","id":"409","scenarioId":"418","location":{"line":178,"column":5,"path":"encryption/cryptor-module.feature"},"text":"Crypto module with default '<cryptor_id1>' and additional '<cryptor_id2>' cryptors","keyword":"Given"},"410":{"type":"step","id":"410","scenarioId":"418","location":{"line":179,"column":5,"path":"encryption/cryptor-module.feature"},"text":"with '<cipher_key>' cipher key","keyword":"*"},"411":{"type":"step","id":"411","scenarioId":"418","location":{"line":180,"column":5,"path":"encryption/cryptor-module.feature"},"text":"with '<vector>' vector","keyword":"*"},"412":{"type":"step","id":"412","scenarioId":"418","location":{"line":181,"column":5,"path":"encryption/cryptor-module.feature"},"text":"I decrypt '<encrypted_file>' file as 'binary'","keyword":"When"},"413":{"type":"step","id":"413","scenarioId":"418","location":{"line":182,"column":5,"path":"encryption/cryptor-module.feature"},"text":"Decrypted file content equal to the '<source_file>' file content","keyword":"Then"},"421":{"type":"step","id":"421","scenarioId":"426","location":{"line":9,"column":5,"path":"encryption/message-encryption.feature"},"text":"the crypto keyset","keyword":"Given"},"422":{"type":"step","id":"422","scenarioId":"426","location":{"line":10,"column":5,"path":"encryption/message-encryption.feature"},"text":"I subscribe","keyword":"When"},"423":{"type":"step","id":"423","scenarioId":"426","location":{"line":11,"column":5,"path":"encryption/message-encryption.feature"},"text":"I receive the message in my subscribe response","keyword":"Then"},"427":{"type":"step","id":"427","scenarioId":"432","location":{"line":15,"column":5,"path":"encryption/message-encryption.feature"},"text":"the invalid-crypto keyset","keyword":"Given"},"428":{"type":"step","id":"428","scenarioId":"432","location":{"line":16,"column":5,"path":"encryption/message-encryption.feature"},"text":"I subscribe","keyword":"When"},"429":{"type":"step","id":"429","scenarioId":"432","location":{"line":17,"column":5,"path":"encryption/message-encryption.feature"},"text":"an error is thrown","keyword":"Then"},"434":{"type":"step","id":"434","scenarioId":"435","location":{"line":7,"column":7,"path":"files/file-upload-to-space.feature"},"text":"the demo keyset","keyword":"Given"},"436":{"type":"step","id":"436","scenarioId":"439","location":{"line":11,"column":7,"path":"files/file-upload-to-space.feature"},"text":"I send a file with 'test_message_type' type","keyword":"When"},"437":{"type":"step","id":"437","scenarioId":"439","location":{"line":12,"column":7,"path":"files/file-upload-to-space.feature"},"text":"I receive a successful response","keyword":"Then"},"440":{"type":"step","id":"440","scenarioId":"443","location":{"line":16,"column":7,"path":"files/file-upload-to-space.feature"},"text":"I send a file with 'ts' type","keyword":"When"},"441":{"type":"step","id":"441","scenarioId":"443","location":{"line":17,"column":7,"path":"files/file-upload-to-space.feature"},"text":"I receive an error response","keyword":"Then"},"444":{"type":"step","id":"444","scenarioId":"447","location":{"line":21,"column":7,"path":"files/file-upload-to-space.feature"},"text":"I send a file with 'this-is-really-long-message-type-to-be-used-with-publish' type","keyword":"When"},"445":{"type":"step","id":"445","scenarioId":"447","location":{"line":22,"column":7,"path":"files/file-upload-to-space.feature"},"text":"I receive an error response","keyword":"Then"},"450":{"type":"step","id":"450","scenarioId":"455","location":{"line":9,"column":5,"path":"files/file-upload.feature"},"text":"the demo keyset","keyword":"Given"},"451":{"type":"step","id":"451","scenarioId":"455","location":{"line":10,"column":5,"path":"files/file-upload.feature"},"text":"I list files","keyword":"When"},"452":{"type":"step","id":"452","scenarioId":"455","location":{"line":11,"column":5,"path":"files/file-upload.feature"},"text":"I receive successful response","keyword":"Then"},"456":{"type":"step","id":"456","scenarioId":"461","location":{"line":15,"column":5,"path":"files/file-upload.feature"},"text":"the demo keyset","keyword":"Given"},"457":{"type":"step","id":"457","scenarioId":"461","location":{"line":16,"column":5,"path":"files/file-upload.feature"},"text":"I publish file message","keyword":"When"},"458":{"type":"step","id":"458","scenarioId":"461","location":{"line":17,"column":5,"path":"files/file-upload.feature"},"text":"I receive successful response","keyword":"Then"},"462":{"type":"step","id":"462","scenarioId":"467","location":{"line":21,"column":5,"path":"files/file-upload.feature"},"text":"the demo keyset","keyword":"Given"},"463":{"type":"step","id":"463","scenarioId":"467","location":{"line":22,"column":5,"path":"files/file-upload.feature"},"text":"I publish file message","keyword":"When"},"464":{"type":"step","id":"464","scenarioId":"467","location":{"line":23,"column":5,"path":"files/file-upload.feature"},"text":"I receive error response","keyword":"Then"},"468":{"type":"step","id":"468","scenarioId":"473","location":{"line":27,"column":5,"path":"files/file-upload.feature"},"text":"the demo keyset","keyword":"Given"},"469":{"type":"step","id":"469","scenarioId":"473","location":{"line":28,"column":5,"path":"files/file-upload.feature"},"text":"I delete file","keyword":"When"},"470":{"type":"step","id":"470","scenarioId":"473","location":{"line":29,"column":5,"path":"files/file-upload.feature"},"text":"I receive successful response","keyword":"Then"},"474":{"type":"step","id":"474","scenarioId":"479","location":{"line":33,"column":5,"path":"files/file-upload.feature"},"text":"the demo keyset","keyword":"Given"},"475":{"type":"step","id":"475","scenarioId":"479","location":{"line":34,"column":5,"path":"files/file-upload.feature"},"text":"I download file","keyword":"When"},"476":{"type":"step","id":"476","scenarioId":"479","location":{"line":35,"column":5,"path":"files/file-upload.feature"},"text":"I receive successful response","keyword":"Then"},"480":{"type":"step","id":"480","scenarioId":"485","location":{"line":39,"column":5,"path":"files/file-upload.feature"},"text":"the demo keyset","keyword":"Given"},"481":{"type":"step","id":"481","scenarioId":"485","location":{"line":40,"column":5,"path":"files/file-upload.feature"},"text":"I send file","keyword":"When"},"482":{"type":"step","id":"482","scenarioId":"485","location":{"line":41,"column":5,"path":"files/file-upload.feature"},"text":"I receive successful response","keyword":"Then"},"486":{"type":"step","id":"486","scenarioId":"491","location":{"line":45,"column":5,"path":"files/file-upload.feature"},"text":"the demo keyset","keyword":"Given"},"487":{"type":"step","id":"487","scenarioId":"491","location":{"line":46,"column":5,"path":"files/file-upload.feature"},"text":"I send file","keyword":"When"},"488":{"type":"step","id":"488","scenarioId":"491","location":{"line":47,"column":5,"path":"files/file-upload.feature"},"text":"I receive successful response","keyword":"Then"},"493":{"type":"step","id":"493","scenarioId":"494","location":{"line":7,"column":5,"path":"history/history-custom-mssg-type.feature"},"text":"the demo keyset with enabled storage","keyword":"Given"},"495":{"type":"step","id":"495","scenarioId":"499","location":{"line":11,"column":5,"path":"history/history-custom-mssg-type.feature"},"text":"I fetch message history for 'simple-channel' channel","keyword":"When"},"496":{"type":"step","id":"496","scenarioId":"499","location":{"line":12,"column":5,"path":"history/history-custom-mssg-type.feature"},"text":"I receive a successful response","keyword":"Then"},"497":{"type":"step","id":"497","scenarioId":"499","location":{"line":13,"column":5,"path":"history/history-custom-mssg-type.feature"},"text":"history response contains messages with '0' and '4' message types","keyword":"And"},"500":{"type":"step","id":"500","scenarioId":"504","location":{"line":17,"column":5,"path":"history/history-custom-mssg-type.feature"},"text":"I fetch message history for 'some-channel' channel","keyword":"When"},"501":{"type":"step","id":"501","scenarioId":"504","location":{"line":18,"column":5,"path":"history/history-custom-mssg-type.feature"},"text":"I receive a successful response","keyword":"Then"},"502":{"type":"step","id":"502","scenarioId":"504","location":{"line":19,"column":5,"path":"history/history-custom-mssg-type.feature"},"text":"history response contains messages with 'custom-message-type' and 'user-custom-message-type' types","keyword":"And"},"505":{"type":"step","id":"505","scenarioId":"509","location":{"line":23,"column":5,"path":"history/history-custom-mssg-type.feature"},"text":"I fetch message history with 'include_custom_message_type' set to 'false' for 'some-channel' channel","keyword":"When"},"506":{"type":"step","id":"506","scenarioId":"509","location":{"line":24,"column":5,"path":"history/history-custom-mssg-type.feature"},"text":"I receive a successful response","keyword":"Then"},"507":{"type":"step","id":"507","scenarioId":"509","location":{"line":25,"column":5,"path":"history/history-custom-mssg-type.feature"},"text":"history response contains messages without types","keyword":"And"},"512":{"type":"step","id":"512","scenarioId":"518","location":{"line":9,"column":5,"path":"history/history.feature"},"text":"the demo keyset","keyword":"Given"},"513":{"type":"step","id":"513","scenarioId":"518","location":{"line":10,"column":5,"path":"history/history.feature"},"text":"I fetch message history for single channel","keyword":"When"},"514":{"type":"step","id":"514","scenarioId":"518","location":{"line":11,"column":5,"path":"history/history.feature"},"text":"I receive successful response","keyword":"Then"},"515":{"type":"step","id":"515","scenarioId":"518","location":{"line":12,"column":5,"path":"history/history.feature"},"text":"the response contains pagination info","keyword":"And"},"519":{"type":"step","id":"519","scenarioId":"524","location":{"line":16,"column":5,"path":"history/history.feature"},"text":"the demo keyset","keyword":"Given"},"520":{"type":"step","id":"520","scenarioId":"524","location":{"line":17,"column":5,"path":"history/history.feature"},"text":"I fetch message history for multiple channels","keyword":"When"},"521":{"type":"step","id":"521","scenarioId":"524","location":{"line":18,"column":5,"path":"history/history.feature"},"text":"I receive successful response","keyword":"Then"},"525":{"type":"step","id":"525","scenarioId":"530","location":{"line":22,"column":5,"path":"history/history.feature"},"text":"the demo keyset","keyword":"Given"},"526":{"type":"step","id":"526","scenarioId":"530","location":{"line":23,"column":5,"path":"history/history.feature"},"text":"I fetch message history with message actions","keyword":"When"},"527":{"type":"step","id":"527","scenarioId":"530","location":{"line":24,"column":5,"path":"history/history.feature"},"text":"I receive successful response","keyword":"Then"},"532":{"type":"step","id":"532","scenarioId":"537","location":{"line":9,"column":5,"path":"message-actions/message-actions.feature"},"text":"the demo keyset","keyword":"Given"},"533":{"type":"step","id":"533","scenarioId":"537","location":{"line":10,"column":5,"path":"message-actions/message-actions.feature"},"text":"I add a message action","keyword":"When"},"534":{"type":"step","id":"534","scenarioId":"537","location":{"line":11,"column":5,"path":"message-actions/message-actions.feature"},"text":"I receive successful response","keyword":"Then"},"538":{"type":"step","id":"538","scenarioId":"543","location":{"line":15,"column":5,"path":"message-actions/message-actions.feature"},"text":"the demo keyset","keyword":"Given"},"539":{"type":"step","id":"539","scenarioId":"543","location":{"line":16,"column":5,"path":"message-actions/message-actions.feature"},"text":"I add a message action","keyword":"When"},"540":{"type":"step","id":"540","scenarioId":"543","location":{"line":17,"column":5,"path":"message-actions/message-actions.feature"},"text":"I receive error response","keyword":"Then"},"544":{"type":"step","id":"544","scenarioId":"550","location":{"line":21,"column":5,"path":"message-actions/message-actions.feature"},"text":"the demo keyset","keyword":"Given"},"545":{"type":"step","id":"545","scenarioId":"550","location":{"line":22,"column":5,"path":"message-actions/message-actions.feature"},"text":"I fetch message actions","keyword":"When"},"546":{"type":"step","id":"546","scenarioId":"550","location":{"line":23,"column":5,"path":"message-actions/message-actions.feature"},"text":"I receive successful response","keyword":"Then"},"547":{"type":"step","id":"547","scenarioId":"550","location":{"line":24,"column":5,"path":"message-actions/message-actions.feature"},"text":"the response contains pagination info","keyword":"And"},"551":{"type":"step","id":"551","scenarioId":"556","location":{"line":28,"column":5,"path":"message-actions/message-actions.feature"},"text":"the demo keyset","keyword":"Given"},"552":{"type":"step","id":"552","scenarioId":"556","location":{"line":29,"column":5,"path":"message-actions/message-actions.feature"},"text":"I delete a message action","keyword":"When"},"553":{"type":"step","id":"553","scenarioId":"556","location":{"line":30,"column":5,"path":"message-actions/message-actions.feature"},"text":"I receive successful response","keyword":"Then"},"557":{"type":"step","id":"557","scenarioId":"562","location":{"line":34,"column":5,"path":"message-actions/message-actions.feature"},"text":"the demo keyset","keyword":"Given"},"558":{"type":"step","id":"558","scenarioId":"562","location":{"line":35,"column":5,"path":"message-actions/message-actions.feature"},"text":"I delete a message action","keyword":"When"},"559":{"type":"step","id":"559","scenarioId":"562","location":{"line":36,"column":5,"path":"message-actions/message-actions.feature"},"text":"I receive error response","keyword":"Then"},"564":{"type":"step","id":"564","scenarioId":"565","location":{"line":6,"column":5,"path":"objectsV2/channel-metadata.feature"},"text":"I have a keyset with Objects V2 enabled","keyword":"Given"},"566":{"type":"step","id":"566","scenarioId":"571","location":{"line":10,"column":5,"path":"objectsV2/channel-metadata.feature"},"text":"the id for 'Chat' channel","keyword":"Given"},"567":{"type":"step","id":"567","scenarioId":"571","location":{"line":11,"column":5,"path":"objectsV2/channel-metadata.feature"},"text":"I get the channel metadata","keyword":"When"},"568":{"type":"step","id":"568","scenarioId":"571","location":{"line":12,"column":5,"path":"objectsV2/channel-metadata.feature"},"text":"I receive a successful response","keyword":"Then"},"569":{"type":"step","id":"569","scenarioId":"571","location":{"line":13,"column":5,"path":"objectsV2/channel-metadata.feature"},"text":"the channel metadata for 'Chat' channel","keyword":"And"},"572":{"type":"step","id":"572","scenarioId":"577","location":{"line":17,"column":5,"path":"objectsV2/channel-metadata.feature"},"text":"the id for 'DM' channel","keyword":"Given"},"573":{"type":"step","id":"573","scenarioId":"577","location":{"line":18,"column":5,"path":"objectsV2/channel-metadata.feature"},"text":"I get the channel metadata with custom","keyword":"When"},"574":{"type":"step","id":"574","scenarioId":"577","location":{"line":19,"column":5,"path":"objectsV2/channel-metadata.feature"},"text":"I receive a successful response","keyword":"Then"},"575":{"type":"step","id":"575","scenarioId":"577","location":{"line":20,"column":5,"path":"objectsV2/channel-metadata.feature"},"text":"the channel metadata for 'DM' channel","keyword":"And"},"578":{"type":"step","id":"578","scenarioId":"583","location":{"line":24,"column":5,"path":"objectsV2/channel-metadata.feature"},"text":"the data for 'Chat' channel","keyword":"Given"},"579":{"type":"step","id":"579","scenarioId":"583","location":{"line":25,"column":5,"path":"objectsV2/channel-metadata.feature"},"text":"I set the channel metadata","keyword":"When"},"580":{"type":"step","id":"580","scenarioId":"583","location":{"line":26,"column":5,"path":"objectsV2/channel-metadata.feature"},"text":"I receive a successful response","keyword":"Then"},"581":{"type":"step","id":"581","scenarioId":"583","location":{"line":27,"column":5,"path":"objectsV2/channel-metadata.feature"},"text":"the channel metadata for 'Chat' channel contains updated","keyword":"And"},"584":{"type":"step","id":"584","scenarioId":"588","location":{"line":31,"column":5,"path":"objectsV2/channel-metadata.feature"},"text":"the id for 'Chat' channel","keyword":"Given"},"585":{"type":"step","id":"585","scenarioId":"588","location":{"line":32,"column":5,"path":"objectsV2/channel-metadata.feature"},"text":"I remove the channel metadata","keyword":"When"},"586":{"type":"step","id":"586","scenarioId":"588","location":{"line":33,"column":5,"path":"objectsV2/channel-metadata.feature"},"text":"I receive a successful response","keyword":"Then"},"589":{"type":"step","id":"589","scenarioId":"593","location":{"line":37,"column":5,"path":"objectsV2/channel-metadata.feature"},"text":"I get all channel metadata","keyword":"When"},"590":{"type":"step","id":"590","scenarioId":"593","location":{"line":38,"column":5,"path":"objectsV2/channel-metadata.feature"},"text":"I receive a successful response","keyword":"Then"},"591":{"type":"step","id":"591","scenarioId":"593","location":{"line":39,"column":5,"path":"objectsV2/channel-metadata.feature"},"text":"the response contains list with 'Chat' and 'Patient' channel metadata","keyword":"And"},"594":{"type":"step","id":"594","scenarioId":"598","location":{"line":43,"column":5,"path":"objectsV2/channel-metadata.feature"},"text":"I get all channel metadata with custom","keyword":"When"},"595":{"type":"step","id":"595","scenarioId":"598","location":{"line":44,"column":5,"path":"objectsV2/channel-metadata.feature"},"text":"I receive a successful response","keyword":"Then"},"596":{"type":"step","id":"596","scenarioId":"598","location":{"line":45,"column":5,"path":"objectsV2/channel-metadata.feature"},"text":"the response contains list with 'DM' and 'VipChat' channel metadata","keyword":"And"},"601":{"type":"step","id":"601","scenarioId":"602","location":{"line":6,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"I have a keyset with Objects V2 enabled","keyword":"Given"},"603":{"type":"step","id":"603","scenarioId":"608","location":{"line":10,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"the id for 'Chat' channel","keyword":"Given"},"604":{"type":"step","id":"604","scenarioId":"608","location":{"line":11,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"I get the channel members","keyword":"When"},"605":{"type":"step","id":"605","scenarioId":"608","location":{"line":12,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"I receive a successful response","keyword":"Then"},"606":{"type":"step","id":"606","scenarioId":"608","location":{"line":13,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"the response contains list with 'AmeliaMember' and 'EvaMember' members","keyword":"And"},"609":{"type":"step","id":"609","scenarioId":"614","location":{"line":17,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"the id for 'VipChat' channel","keyword":"Given"},"610":{"type":"step","id":"610","scenarioId":"614","location":{"line":18,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"I get the channel members including custom and UUID custom information","keyword":"When"},"611":{"type":"step","id":"611","scenarioId":"614","location":{"line":19,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"I receive a successful response","keyword":"Then"},"612":{"type":"step","id":"612","scenarioId":"614","location":{"line":20,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"the response contains list with 'OliverMember' and 'PeterMember' members","keyword":"And"},"615":{"type":"step","id":"615","scenarioId":"621","location":{"line":24,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"the data for 'AmeliaMember' member","keyword":"Given"},"616":{"type":"step","id":"616","scenarioId":"621","location":{"line":25,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"the id for 'Chat' channel","keyword":"And"},"617":{"type":"step","id":"617","scenarioId":"621","location":{"line":26,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"I set a channel member","keyword":"When"},"618":{"type":"step","id":"618","scenarioId":"621","location":{"line":27,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"I receive a successful response","keyword":"Then"},"619":{"type":"step","id":"619","scenarioId":"621","location":{"line":28,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"the response contains list with 'AmeliaMember' member","keyword":"And"},"622":{"type":"step","id":"622","scenarioId":"628","location":{"line":32,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"the data for 'PeterMember' member","keyword":"Given"},"623":{"type":"step","id":"623","scenarioId":"628","location":{"line":33,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"the id for 'Chat' channel","keyword":"And"},"624":{"type":"step","id":"624","scenarioId":"628","location":{"line":34,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"I set a channel member including custom and UUID with custom","keyword":"When"},"625":{"type":"step","id":"625","scenarioId":"628","location":{"line":35,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"I receive a successful response","keyword":"Then"},"626":{"type":"step","id":"626","scenarioId":"628","location":{"line":36,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"the response contains list with 'PeterMember' member","keyword":"And"},"629":{"type":"step","id":"629","scenarioId":"634","location":{"line":40,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"the id for 'Chat' channel","keyword":"Given"},"630":{"type":"step","id":"630","scenarioId":"634","location":{"line":41,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"the data for 'AmeliaMember' member that we want to remove","keyword":"And"},"631":{"type":"step","id":"631","scenarioId":"634","location":{"line":42,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"I remove a channel member","keyword":"When"},"632":{"type":"step","id":"632","scenarioId":"634","location":{"line":43,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"I receive a successful response","keyword":"Then"},"635":{"type":"step","id":"635","scenarioId":"645","location":{"line":47,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"the data for 'PeterMember' member","keyword":"Given"},"636":{"type":"step","id":"636","scenarioId":"645","location":{"line":48,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"the data for 'AmeliaMember' member that we want to remove","keyword":"And"},"637":{"type":"step","id":"637","scenarioId":"645","location":{"line":49,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"the id for 'Chat' channel","keyword":"And"},"638":{"type":"step","id":"638","scenarioId":"645","location":{"line":50,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"I manage channel members","keyword":"When"},"639":{"type":"step","id":"639","scenarioId":"645","location":{"line":51,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"I receive a successful response","keyword":"Then"},"640":{"type":"step","id":"640","scenarioId":"645","location":{"line":52,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"the response contains list with 'PeterMember' member","keyword":"And"},"641":{"type":"step","id":"641","scenarioId":"645","location":{"line":53,"column":5,"path":"objectsV2/members-metadata.feature"},"text":"the response does not contain list with 'AmeliaMember' member","keyword":"And"},"648":{"type":"step","id":"648","scenarioId":"649","location":{"line":6,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"I have a keyset with Objects V2 enabled","keyword":"Given"},"650":{"type":"step","id":"650","scenarioId":"655","location":{"line":10,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"the id for 'Alice' persona","keyword":"Given"},"651":{"type":"step","id":"651","scenarioId":"655","location":{"line":11,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"I get the memberships","keyword":"When"},"652":{"type":"step","id":"652","scenarioId":"655","location":{"line":12,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"I receive a successful response","keyword":"Then"},"653":{"type":"step","id":"653","scenarioId":"655","location":{"line":13,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"the response contains list with 'ChatMembership' and 'PatientMembership' memberships","keyword":"And"},"656":{"type":"step","id":"656","scenarioId":"661","location":{"line":17,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"current user is 'Alice' persona","keyword":"Given"},"657":{"type":"step","id":"657","scenarioId":"661","location":{"line":18,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"I get the memberships for current user","keyword":"When"},"658":{"type":"step","id":"658","scenarioId":"661","location":{"line":19,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"I receive a successful response","keyword":"Then"},"659":{"type":"step","id":"659","scenarioId":"661","location":{"line":20,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"the response contains list with 'ChatMembership' and 'PatientMembership' memberships","keyword":"And"},"662":{"type":"step","id":"662","scenarioId":"667","location":{"line":24,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"the id for 'Bob' persona","keyword":"Given"},"663":{"type":"step","id":"663","scenarioId":"667","location":{"line":25,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"I get the memberships including custom and channel custom information","keyword":"When"},"664":{"type":"step","id":"664","scenarioId":"667","location":{"line":26,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"I receive a successful response","keyword":"Then"},"665":{"type":"step","id":"665","scenarioId":"667","location":{"line":27,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"the response contains list with 'VipChatMembership' and 'DMMembership' memberships","keyword":"And"},"668":{"type":"step","id":"668","scenarioId":"674","location":{"line":31,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"the id for 'Alice' persona","keyword":"Given"},"669":{"type":"step","id":"669","scenarioId":"674","location":{"line":32,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"the data for 'ChatMembership' membership","keyword":"And"},"670":{"type":"step","id":"670","scenarioId":"674","location":{"line":33,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"I set the membership","keyword":"When"},"671":{"type":"step","id":"671","scenarioId":"674","location":{"line":34,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"I receive a successful response","keyword":"Then"},"672":{"type":"step","id":"672","scenarioId":"674","location":{"line":35,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"the response contains list with 'ChatMembership' membership","keyword":"And"},"675":{"type":"step","id":"675","scenarioId":"681","location":{"line":39,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"current user is 'Alice' persona","keyword":"Given"},"676":{"type":"step","id":"676","scenarioId":"681","location":{"line":40,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"the data for 'ChatMembership' membership","keyword":"And"},"677":{"type":"step","id":"677","scenarioId":"681","location":{"line":41,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"I set the membership for current user","keyword":"When"},"678":{"type":"step","id":"678","scenarioId":"681","location":{"line":42,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"I receive a successful response","keyword":"Then"},"679":{"type":"step","id":"679","scenarioId":"681","location":{"line":43,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"the response contains list with 'ChatMembership' membership","keyword":"And"},"682":{"type":"step","id":"682","scenarioId":"687","location":{"line":47,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"the id for 'Alice' persona","keyword":"Given"},"683":{"type":"step","id":"683","scenarioId":"687","location":{"line":48,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"the data for 'ChatMembership' membership","keyword":"And"},"684":{"type":"step","id":"684","scenarioId":"687","location":{"line":49,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"I remove the membership","keyword":"When"},"685":{"type":"step","id":"685","scenarioId":"687","location":{"line":50,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"I receive a successful response","keyword":"Then"},"688":{"type":"step","id":"688","scenarioId":"693","location":{"line":54,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"current user is 'Alice' persona","keyword":"Given"},"689":{"type":"step","id":"689","scenarioId":"693","location":{"line":55,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"the data for 'ChatMembership' membership that we want to remove","keyword":"And"},"690":{"type":"step","id":"690","scenarioId":"693","location":{"line":56,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"I remove the membership for current user","keyword":"When"},"691":{"type":"step","id":"691","scenarioId":"693","location":{"line":57,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"I receive a successful response","keyword":"Then"},"694":{"type":"step","id":"694","scenarioId":"704","location":{"line":61,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"the id for 'Alice' persona","keyword":"Given"},"695":{"type":"step","id":"695","scenarioId":"704","location":{"line":62,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"the data for 'ChatMembership' membership","keyword":"And"},"696":{"type":"step","id":"696","scenarioId":"704","location":{"line":63,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"the data for 'PatientMembership' membership that we want to remove","keyword":"And"},"697":{"type":"step","id":"697","scenarioId":"704","location":{"line":64,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"I manage memberships","keyword":"When"},"698":{"type":"step","id":"698","scenarioId":"704","location":{"line":65,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"I receive a successful response","keyword":"Then"},"699":{"type":"step","id":"699","scenarioId":"704","location":{"line":66,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"the response contains list with 'ChatMembership' membership","keyword":"And"},"700":{"type":"step","id":"700","scenarioId":"704","location":{"line":67,"column":5,"path":"objectsV2/membership-metadata.feature"},"text":"the response does not contain list with 'PatientMembership' membership","keyword":"And"},"707":{"type":"step","id":"707","scenarioId":"708","location":{"line":6,"column":5,"path":"objectsV2/uuid-metadata.feature"},"text":"I have a keyset with Objects V2 enabled","keyword":"Given"},"709":{"type":"step","id":"709","scenarioId":"714","location":{"line":10,"column":5,"path":"objectsV2/uuid-metadata.feature"},"text":"the id for 'Alice' persona","keyword":"Given"},"710":{"type":"step","id":"710","scenarioId":"714","location":{"line":11,"column":5,"path":"objectsV2/uuid-metadata.feature"},"text":"I get the UUID metadata","keyword":"When"},"711":{"type":"step","id":"711","scenarioId":"714","location":{"line":12,"column":5,"path":"objectsV2/uuid-metadata.feature"},"text":"I receive a successful response","keyword":"Then"},"712":{"type":"step","id":"712","scenarioId":"714","location":{"line":13,"column":5,"path":"objectsV2/uuid-metadata.feature"},"text":"the UUID metadata for 'Alice' persona","keyword":"And"},"715":{"type":"step","id":"715","scenarioId":"720","location":{"line":17,"column":5,"path":"objectsV2/uuid-metadata.feature"},"text":"current user is 'Bob' persona","keyword":"Given"},"716":{"type":"step","id":"716","scenarioId":"720","location":{"line":18,"column":5,"path":"objectsV2/uuid-metadata.feature"},"text":"I get the UUID metadata with custom for current user","keyword":"When"},"717":{"type":"step","id":"717","scenarioId":"720","location":{"line":19,"column":5,"path":"objectsV2/uuid-metadata.feature"},"text":"I receive a successful response","keyword":"Then"},"718":{"type":"step","id":"718","scenarioId":"720","location":{"line":20,"column":5,"path":"objectsV2/uuid-metadata.feature"},"text":"the UUID metadata for 'Bob' persona","keyword":"And"},"721":{"type":"step","id":"721","scenarioId":"726","location":{"line":24,"column":5,"path":"objectsV2/uuid-metadata.feature"},"text":"the data for 'Alice' persona","keyword":"Given"},"722":{"type":"step","id":"722","scenarioId":"726","location":{"line":25,"column":5,"path":"objectsV2/uuid-metadata.feature"},"text":"I set the UUID metadata","keyword":"When"},"723":{"type":"step","id":"723","scenarioId":"726","location":{"line":26,"column":5,"path":"objectsV2/uuid-metadata.feature"},"text":"I receive a successful response","keyword":"Then"},"724":{"type":"step","id":"724","scenarioId":"726","location":{"line":27,"column":5,"path":"objectsV2/uuid-metadata.feature"},"text":"the UUID metadata for 'Alice' persona contains updated","keyword":"And"},"727":{"type":"step","id":"727","scenarioId":"731","location":{"line":31,"column":5,"path":"objectsV2/uuid-metadata.feature"},"text":"the id for 'Alice' persona","keyword":"Given"},"728":{"type":"step","id":"728","scenarioId":"731","location":{"line":32,"column":5,"path":"objectsV2/uuid-metadata.feature"},"text":"I remove the UUID metadata","keyword":"When"},"729":{"type":"step","id":"729","scenarioId":"731","location":{"line":33,"column":5,"path":"objectsV2/uuid-metadata.feature"},"text":"I receive a successful response","keyword":"Then"},"732":{"type":"step","id":"732","scenarioId":"736","location":{"line":37,"column":5,"path":"objectsV2/uuid-metadata.feature"},"text":"current user is 'Alice' persona","keyword":"Given"},"733":{"type":"step","id":"733","scenarioId":"736","location":{"line":38,"column":5,"path":"objectsV2/uuid-metadata.feature"},"text":"I remove the UUID metadata for current user","keyword":"When"},"734":{"type":"step","id":"734","scenarioId":"736","location":{"line":39,"column":5,"path":"objectsV2/uuid-metadata.feature"},"text":"I receive a successful response","keyword":"Then"},"737":{"type":"step","id":"737","scenarioId":"741","location":{"line":43,"column":5,"path":"objectsV2/uuid-metadata.feature"},"text":"I get all UUID metadata","keyword":"When"},"738":{"type":"step","id":"738","scenarioId":"741","location":{"line":44,"column":5,"path":"objectsV2/uuid-metadata.feature"},"text":"I receive a successful response","keyword":"Then"},"739":{"type":"step","id":"739","scenarioId":"741","location":{"line":45,"column":5,"path":"objectsV2/uuid-metadata.feature"},"text":"the response contains list with 'Alice' and 'James' UUID metadata","keyword":"And"},"742":{"type":"step","id":"742","scenarioId":"746","location":{"line":49,"column":5,"path":"objectsV2/uuid-metadata.feature"},"text":"I get all UUID metadata with custom","keyword":"When"},"743":{"type":"step","id":"743","scenarioId":"746","location":{"line":50,"column":5,"path":"objectsV2/uuid-metadata.feature"},"text":"I receive a successful response","keyword":"Then"},"744":{"type":"step","id":"744","scenarioId":"746","location":{"line":51,"column":5,"path":"objectsV2/uuid-metadata.feature"},"text":"the response contains list with 'Bob' and 'Lisa' UUID metadata","keyword":"And"},"749":{"type":"step","id":"749","scenarioId":"750","location":{"line":6,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"the demo keyset with Presence EE enabled","keyword":"Given"},"751":{"type":"step","id":"751","scenarioId":"769","location":{"line":10,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"heartbeatInterval set to '1', timeout set to '60' and suppressLeaveEvents set to 'false'","keyword":"Given"},"752":{"type":"step","id":"752","scenarioId":"769","location":{"line":11,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"I join 'first', 'second', 'third' channels","keyword":"When"},"753":{"type":"step","id":"753","scenarioId":"769","location":{"line":12,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"I wait '3' seconds","keyword":"Then"},"767":{"type":"step","id":"767","scenarioId":"769","location":{"line":13,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"I observe the following Events and Invocations of the Presence EE:","keyword":"And"},"770":{"type":"step","id":"770","scenarioId":"780","location":{"line":30,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"heartbeatInterval set to '1', timeout set to '60' and suppressLeaveEvents set to 'false'","keyword":"Given"},"771":{"type":"step","id":"771","scenarioId":"780","location":{"line":31,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"I join 'first', 'second', 'third' channels with presence","keyword":"When"},"772":{"type":"step","id":"772","scenarioId":"780","location":{"line":32,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"I wait for getting Presence joined events","keyword":"Then"},"778":{"type":"step","id":"778","scenarioId":"780","location":{"line":33,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"I observe the following Events and Invocations of the Presence EE:","keyword":"And"},"781":{"type":"step","id":"781","scenarioId":"792","location":{"line":42,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"heartbeatInterval set to '1', timeout set to '60' and suppressLeaveEvents set to 'false'","keyword":"Given"},"782":{"type":"step","id":"782","scenarioId":"792","location":{"line":43,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"a linear reconnection policy with 3 retries","keyword":"Given"},"783":{"type":"step","id":"783","scenarioId":"792","location":{"line":44,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"I join 'first', 'second', 'third' channels with presence","keyword":"When"},"784":{"type":"step","id":"784","scenarioId":"792","location":{"line":45,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"I wait for getting Presence joined events","keyword":"Then"},"790":{"type":"step","id":"790","scenarioId":"792","location":{"line":46,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"I observe the following Events and Invocations of the Presence EE:","keyword":"And"},"793":{"type":"step","id":"793","scenarioId":"803","location":{"line":55,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"heartbeatInterval set to '1', timeout set to '60' and suppressLeaveEvents set to 'false'","keyword":"Given"},"794":{"type":"step","id":"794","scenarioId":"803","location":{"line":56,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"a linear reconnection policy with 3 retries","keyword":"Given"},"795":{"type":"step","id":"795","scenarioId":"803","location":{"line":57,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"I join 'first', 'second', 'third' channels","keyword":"When"},"796":{"type":"step","id":"796","scenarioId":"803","location":{"line":58,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"I receive an error in my heartbeat response","keyword":"Then"},"801":{"type":"step","id":"801","scenarioId":"803","location":{"line":59,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"I observe the following Events and Invocations of the Presence EE:","keyword":"And"},"804":{"type":"step","id":"804","scenarioId":"822","location":{"line":67,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"heartbeatInterval set to '20', timeout set to '60' and suppressLeaveEvents set to 'false'","keyword":"Given"},"805":{"type":"step","id":"805","scenarioId":"822","location":{"line":68,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"I join 'first', 'second', 'third' channels with presence","keyword":"When"},"806":{"type":"step","id":"806","scenarioId":"822","location":{"line":69,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"I wait for getting Presence joined events","keyword":"Then"},"807":{"type":"step","id":"807","scenarioId":"822","location":{"line":70,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"I leave 'first' and 'second' channels with presence","keyword":"Then"},"808":{"type":"step","id":"808","scenarioId":"822","location":{"line":71,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"I wait '3' seconds","keyword":"Then"},"820":{"type":"step","id":"820","scenarioId":"822","location":{"line":72,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"I observe the following Events and Invocations of the Presence EE:","keyword":"And"},"823":{"type":"step","id":"823","scenarioId":"827","location":{"line":87,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"heartbeatInterval set to '0', timeout set to '60' and suppressLeaveEvents set to 'false'","keyword":"Given"},"824":{"type":"step","id":"824","scenarioId":"827","location":{"line":88,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"I join 'first', 'second', 'third' channels","keyword":"When"},"825":{"type":"step","id":"825","scenarioId":"827","location":{"line":89,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"I don't observe any Events and Invocations of the Presence EE","keyword":"Then"},"828":{"type":"step","id":"828","scenarioId":"843","location":{"line":93,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"heartbeatInterval set to '1', timeout set to '60' and suppressLeaveEvents set to 'true'","keyword":"Given"},"829":{"type":"step","id":"829","scenarioId":"843","location":{"line":94,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"I join 'first', 'second', 'third' channels with presence","keyword":"When"},"830":{"type":"step","id":"830","scenarioId":"843","location":{"line":95,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"I wait for getting Presence joined events","keyword":"Then"},"831":{"type":"step","id":"831","scenarioId":"843","location":{"line":96,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"I leave 'first' and 'second' channels with presence","keyword":"And"},"840":{"type":"step","id":"840","scenarioId":"843","location":{"line":97,"column":5,"path":"presence/event-engine/presence-engine.feature"},"text":"I observe the following Events and Invocations of the Presence EE:","keyword":"And"},"846":{"type":"step","id":"846","scenarioId":"847","location":{"line":10,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"the demo keyset with Presence EE enabled","keyword":"Given"},"848":{"type":"step","id":"848","scenarioId":"866","location":{"line":14,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"heartbeatInterval set to '1', timeout set to '60' and suppressLeaveEvents set to 'false'","keyword":"Given"},"849":{"type":"step","id":"849","scenarioId":"866","location":{"line":15,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"I join 'first', 'second', 'third' channels","keyword":"When"},"850":{"type":"step","id":"850","scenarioId":"866","location":{"line":16,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"I wait '3' seconds","keyword":"Then"},"864":{"type":"step","id":"864","scenarioId":"866","location":{"line":17,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"I observe the following Events and Invocations of the Presence EE:","keyword":"And"},"867":{"type":"step","id":"867","scenarioId":"877","location":{"line":34,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"heartbeatInterval set to '1', timeout set to '60' and suppressLeaveEvents set to 'false'","keyword":"Given"},"868":{"type":"step","id":"868","scenarioId":"877","location":{"line":35,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"I join 'first', 'second', 'third' channels with presence","keyword":"When"},"869":{"type":"step","id":"869","scenarioId":"877","location":{"line":36,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"I wait for getting Presence joined events","keyword":"Then"},"875":{"type":"step","id":"875","scenarioId":"877","location":{"line":37,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"I observe the following Events and Invocations of the Presence EE:","keyword":"And"},"878":{"type":"step","id":"878","scenarioId":"892","location":{"line":46,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"heartbeatInterval set to '1', timeout set to '60' and suppressLeaveEvents set to 'false'","keyword":"Given"},"879":{"type":"step","id":"879","scenarioId":"892","location":{"line":47,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"a linear reconnection policy with 3 retries","keyword":"Given"},"880":{"type":"step","id":"880","scenarioId":"892","location":{"line":48,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"I join 'first', 'second', 'third' channels with presence","keyword":"When"},"881":{"type":"step","id":"881","scenarioId":"892","location":{"line":49,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"I wait for getting Presence joined events","keyword":"Then"},"890":{"type":"step","id":"890","scenarioId":"892","location":{"line":50,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"I observe the following Events and Invocations of the Presence EE:","keyword":"And"},"893":{"type":"step","id":"893","scenarioId":"915","location":{"line":62,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"heartbeatInterval set to '1', timeout set to '60' and suppressLeaveEvents set to 'false'","keyword":"Given"},"894":{"type":"step","id":"894","scenarioId":"915","location":{"line":63,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"a linear reconnection policy with 3 retries","keyword":"Given"},"895":{"type":"step","id":"895","scenarioId":"915","location":{"line":64,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"I join 'first', 'second', 'third' channels","keyword":"When"},"896":{"type":"step","id":"896","scenarioId":"915","location":{"line":65,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"I receive an error in my heartbeat response","keyword":"Then"},"913":{"type":"step","id":"913","scenarioId":"915","location":{"line":66,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"I observe the following Events and Invocations of the Presence EE:","keyword":"And"},"916":{"type":"step","id":"916","scenarioId":"934","location":{"line":86,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"heartbeatInterval set to '20', timeout set to '60' and suppressLeaveEvents set to 'false'","keyword":"Given"},"917":{"type":"step","id":"917","scenarioId":"934","location":{"line":87,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"I join 'first', 'second', 'third' channels with presence","keyword":"When"},"918":{"type":"step","id":"918","scenarioId":"934","location":{"line":88,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"I wait for getting Presence joined events","keyword":"Then"},"919":{"type":"step","id":"919","scenarioId":"934","location":{"line":89,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"I leave 'first' and 'second' channels with presence","keyword":"Then"},"920":{"type":"step","id":"920","scenarioId":"934","location":{"line":90,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"I wait '3' seconds","keyword":"Then"},"932":{"type":"step","id":"932","scenarioId":"934","location":{"line":91,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"I observe the following Events and Invocations of the Presence EE:","keyword":"And"},"935":{"type":"step","id":"935","scenarioId":"939","location":{"line":106,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"heartbeatInterval set to '0', timeout set to '60' and suppressLeaveEvents set to 'false'","keyword":"Given"},"936":{"type":"step","id":"936","scenarioId":"939","location":{"line":107,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"I join 'first', 'second', 'third' channels","keyword":"When"},"937":{"type":"step","id":"937","scenarioId":"939","location":{"line":108,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"I don't observe any Events and Invocations of the Presence EE","keyword":"Then"},"940":{"type":"step","id":"940","scenarioId":"955","location":{"line":112,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"heartbeatInterval set to '1', timeout set to '60' and suppressLeaveEvents set to 'true'","keyword":"Given"},"941":{"type":"step","id":"941","scenarioId":"955","location":{"line":113,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"I join 'first', 'second', 'third' channels with presence","keyword":"When"},"942":{"type":"step","id":"942","scenarioId":"955","location":{"line":114,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"I wait for getting Presence joined events","keyword":"Then"},"943":{"type":"step","id":"943","scenarioId":"955","location":{"line":115,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"I leave 'first' and 'second' channels with presence","keyword":"And"},"952":{"type":"step","id":"952","scenarioId":"955","location":{"line":116,"column":5,"path":"presence/event-engine/presence-engine_Legacy.feature"},"text":"I observe the following Events and Invocations of the Presence EE:","keyword":"And"},"958":{"type":"step","id":"958","scenarioId":"959","location":{"line":6,"column":5,"path":"presence/get-state.feature"},"text":"the demo keyset","keyword":"Given"},"960":{"type":"step","id":"960","scenarioId":"964","location":{"line":10,"column":5,"path":"presence/get-state.feature"},"text":"I fetch presence state for 'test-channel' channel","keyword":"When"},"961":{"type":"step","id":"961","scenarioId":"964","location":{"line":11,"column":5,"path":"presence/get-state.feature"},"text":"I receive successful response","keyword":"Then"},"962":{"type":"step","id":"962","scenarioId":"964","location":{"line":12,"column":5,"path":"presence/get-state.feature"},"text":"response contains state","keyword":"And"},"965":{"type":"step","id":"965","scenarioId":"969","location":{"line":16,"column":5,"path":"presence/get-state.feature"},"text":"I fetch presence state for 'test-channel' channel","keyword":"When"},"966":{"type":"step","id":"966","scenarioId":"969","location":{"line":17,"column":5,"path":"presence/get-state.feature"},"text":"I receive successful response","keyword":"Then"},"967":{"type":"step","id":"967","scenarioId":"969","location":{"line":18,"column":5,"path":"presence/get-state.feature"},"text":"response contains state","keyword":"And"},"972":{"type":"step","id":"972","scenarioId":"973","location":{"line":7,"column":5,"path":"presence/heartbeat.feature"},"text":"the demo keyset","keyword":"Given"},"974":{"type":"step","id":"974","scenarioId":"977","location":{"line":11,"column":5,"path":"presence/heartbeat.feature"},"text":"I call heartbeat for 'test-channel' channel","keyword":"When"},"975":{"type":"step","id":"975","scenarioId":"977","location":{"line":12,"column":5,"path":"presence/heartbeat.feature"},"text":"I receive successful response","keyword":"Then"},"978":{"type":"step","id":"978","scenarioId":"982","location":{"line":16,"column":5,"path":"presence/heartbeat.feature"},"text":"presence state set for 'test-channel' channel with withHeartbeat set to 'true'","keyword":"Given"},"979":{"type":"step","id":"979","scenarioId":"982","location":{"line":17,"column":5,"path":"presence/heartbeat.feature"},"text":"I call heartbeat for 'test-channel' channel","keyword":"When"},"980":{"type":"step","id":"980","scenarioId":"982","location":{"line":18,"column":5,"path":"presence/heartbeat.feature"},"text":"I receive successful response","keyword":"Then"},"983":{"type":"step","id":"983","scenarioId":"987","location":{"line":22,"column":5,"path":"presence/heartbeat.feature"},"text":"presence state set for 'test-channel' channel with withHeartbeat set to 'false'","keyword":"Given"},"984":{"type":"step","id":"984","scenarioId":"987","location":{"line":23,"column":5,"path":"presence/heartbeat.feature"},"text":"I call heartbeat for 'test-channel' channel","keyword":"When"},"985":{"type":"step","id":"985","scenarioId":"987","location":{"line":24,"column":5,"path":"presence/heartbeat.feature"},"text":"I receive successful response","keyword":"Then"},"990":{"type":"step","id":"990","scenarioId":"991","location":{"line":6,"column":5,"path":"presence/here-now.feature"},"text":"the demo keyset","keyword":"Given"},"992":{"type":"step","id":"992","scenarioId":"996","location":{"line":10,"column":5,"path":"presence/here-now.feature"},"text":"I fetch presence on 'test-channel' channel with presence state","keyword":"When"},"993":{"type":"step","id":"993","scenarioId":"996","location":{"line":11,"column":5,"path":"presence/here-now.feature"},"text":"I receive successful response","keyword":"Then"},"994":{"type":"step","id":"994","scenarioId":"996","location":{"line":12,"column":5,"path":"presence/here-now.feature"},"text":"there is no active clients","keyword":"And"},"997":{"type":"step","id":"997","scenarioId":"1001","location":{"line":16,"column":5,"path":"presence/here-now.feature"},"text":"I fetch presence on 'test-channel' channel with presence state","keyword":"When"},"998":{"type":"step","id":"998","scenarioId":"1001","location":{"line":17,"column":5,"path":"presence/here-now.feature"},"text":"I receive successful response","keyword":"Then"},"999":{"type":"step","id":"999","scenarioId":"1001","location":{"line":18,"column":5,"path":"presence/here-now.feature"},"text":"there is active clients","keyword":"And"},"1002":{"type":"step","id":"1002","scenarioId":"1006","location":{"line":22,"column":5,"path":"presence/here-now.feature"},"text":"I fetch presence on 'test-channel' channel with presence state","keyword":"When"},"1003":{"type":"step","id":"1003","scenarioId":"1006","location":{"line":23,"column":5,"path":"presence/here-now.feature"},"text":"I receive successful response","keyword":"Then"},"1004":{"type":"step","id":"1004","scenarioId":"1006","location":{"line":24,"column":5,"path":"presence/here-now.feature"},"text":"there is no active clients","keyword":"And"},"1007":{"type":"step","id":"1007","scenarioId":"1012","location":{"line":28,"column":5,"path":"presence/here-now.feature"},"text":"I fetch presence on 'test-channel' channel with presence state","keyword":"When"},"1008":{"type":"step","id":"1008","scenarioId":"1012","location":{"line":29,"column":5,"path":"presence/here-now.feature"},"text":"I receive successful response","keyword":"Then"},"1009":{"type":"step","id":"1009","scenarioId":"1012","location":{"line":30,"column":5,"path":"presence/here-now.feature"},"text":"there is active clients","keyword":"And"},"1010":{"type":"step","id":"1010","scenarioId":"1012","location":{"line":31,"column":5,"path":"presence/here-now.feature"},"text":"state associated with active clients","keyword":"And"},"1015":{"type":"step","id":"1015","scenarioId":"1016","location":{"line":6,"column":5,"path":"presence/set-state.feature"},"text":"the demo keyset","keyword":"Given"},"1017":{"type":"step","id":"1017","scenarioId":"1020","location":{"line":10,"column":5,"path":"presence/set-state.feature"},"text":"I set state on 'test-channel' channel with withHeartbeat set to 'false'","keyword":"When"},"1018":{"type":"step","id":"1018","scenarioId":"1020","location":{"line":11,"column":5,"path":"presence/set-state.feature"},"text":"I receive successful response","keyword":"Then"},"1021":{"type":"step","id":"1021","scenarioId":"1024","location":{"line":15,"column":5,"path":"presence/set-state.feature"},"text":"I set state on 'test-channel' channel with withHeartbeat set to 'true'","keyword":"When"},"1022":{"type":"step","id":"1022","scenarioId":"1024","location":{"line":16,"column":5,"path":"presence/set-state.feature"},"text":"I receive successful response","keyword":"Then"},"1027":{"type":"step","id":"1027","scenarioId":"1028","location":{"line":7,"column":5,"path":"publish/publish-custom-mssg-type.feature"},"text":"the demo keyset","keyword":"Given"},"1029":{"type":"step","id":"1029","scenarioId":"1032","location":{"line":11,"column":5,"path":"publish/publish-custom-mssg-type.feature"},"text":"I publish message with 'test_step' type","keyword":"When"},"1030":{"type":"step","id":"1030","scenarioId":"1032","location":{"line":12,"column":5,"path":"publish/publish-custom-mssg-type.feature"},"text":"I receive a successful response","keyword":"Then"},"1033":{"type":"step","id":"1033","scenarioId":"1036","location":{"line":16,"column":5,"path":"publish/publish-custom-mssg-type.feature"},"text":"I publish message with 'ts' type","keyword":"When"},"1034":{"type":"step","id":"1034","scenarioId":"1036","location":{"line":17,"column":5,"path":"publish/publish-custom-mssg-type.feature"},"text":"I receive an error response","keyword":"Then"},"1037":{"type":"step","id":"1037","scenarioId":"1040","location":{"line":21,"column":5,"path":"publish/publish-custom-mssg-type.feature"},"text":"I publish message with 'this-is-really-long-message-type-to-be-used-with-publish' type","keyword":"When"},"1038":{"type":"step","id":"1038","scenarioId":"1040","location":{"line":22,"column":5,"path":"publish/publish-custom-mssg-type.feature"},"text":"I receive an error response","keyword":"Then"},"1041":{"type":"step","id":"1041","scenarioId":"1044","location":{"line":26,"column":5,"path":"publish/publish-custom-mssg-type.feature"},"text":"I publish message with 'pn-test-step' type","keyword":"When"},"1042":{"type":"step","id":"1042","scenarioId":"1044","location":{"line":27,"column":5,"path":"publish/publish-custom-mssg-type.feature"},"text":"I receive an error response","keyword":"Then"},"1045":{"type":"step","id":"1045","scenarioId":"1048","location":{"line":31,"column":5,"path":"publish/publish-custom-mssg-type.feature"},"text":"I publish message with 'pn_test-step' type","keyword":"When"},"1046":{"type":"step","id":"1046","scenarioId":"1048","location":{"line":32,"column":5,"path":"publish/publish-custom-mssg-type.feature"},"text":"I receive an error response","keyword":"Then"},"1049":{"type":"step","id":"1049","scenarioId":"1052","location":{"line":36,"column":5,"path":"publish/publish-custom-mssg-type.feature"},"text":"I publish message with '-test-step' type","keyword":"When"},"1050":{"type":"step","id":"1050","scenarioId":"1052","location":{"line":37,"column":5,"path":"publish/publish-custom-mssg-type.feature"},"text":"I receive an error response","keyword":"Then"},"1053":{"type":"step","id":"1053","scenarioId":"1056","location":{"line":41,"column":5,"path":"publish/publish-custom-mssg-type.feature"},"text":"I publish message with '_test-step' type","keyword":"When"},"1054":{"type":"step","id":"1054","scenarioId":"1056","location":{"line":42,"column":5,"path":"publish/publish-custom-mssg-type.feature"},"text":"I receive an error response","keyword":"Then"},"1057":{"type":"step","id":"1057","scenarioId":"1060","location":{"line":46,"column":5,"path":"publish/publish-custom-mssg-type.feature"},"text":"I publish message with 'test:step' type","keyword":"When"},"1058":{"type":"step","id":"1058","scenarioId":"1060","location":{"line":47,"column":5,"path":"publish/publish-custom-mssg-type.feature"},"text":"I receive an error response","keyword":"Then"},"1063":{"type":"step","id":"1063","scenarioId":"1067","location":{"line":9,"column":5,"path":"publish/publish.feature"},"text":"the demo keyset","keyword":"Given"},"1064":{"type":"step","id":"1064","scenarioId":"1067","location":{"line":10,"column":5,"path":"publish/publish.feature"},"text":"I publish 'tm+Jp@%X=JJgu!7$gHWpa0ee4S;8DZ=zCc3%' string as message to 'test-channel' channel","keyword":"When"},"1065":{"type":"step","id":"1065","scenarioId":"1067","location":{"line":11,"column":5,"path":"publish/publish.feature"},"text":"I receive successful response","keyword":"Then"},"1068":{"type":"step","id":"1068","scenarioId":"1073","location":{"line":15,"column":5,"path":"publish/publish.feature"},"text":"the demo keyset","keyword":"Given"},"1069":{"type":"step","id":"1069","scenarioId":"1073","location":{"line":16,"column":5,"path":"publish/publish.feature"},"text":"I publish '{\"pubnub\":\"message is here\"}' dictionary as message to '@Bm4=#%@X*oZ6Df' channel with compression","keyword":"When"},"1070":{"type":"step","id":"1070","scenarioId":"1073","location":{"line":17,"column":5,"path":"publish/publish.feature"},"text":"I receive successful response","keyword":"Then"},"1074":{"type":"step","id":"1074","scenarioId":"1079","location":{"line":21,"column":5,"path":"publish/publish.feature"},"text":"the demo keyset","keyword":"Given"},"1075":{"type":"step","id":"1075","scenarioId":"1079","location":{"line":22,"column":5,"path":"publish/publish.feature"},"text":"I publish '{\"pubnub\":\"message is here\"}' dictionary as message to 'test-channel' channel as POST body","keyword":"When"},"1076":{"type":"step","id":"1076","scenarioId":"1079","location":{"line":23,"column":5,"path":"publish/publish.feature"},"text":"I receive successful response","keyword":"Then"},"1080":{"type":"step","id":"1080","scenarioId":"1084","location":{"line":27,"column":5,"path":"publish/publish.feature"},"text":"the demo keyset","keyword":"Given"},"1081":{"type":"step","id":"1081","scenarioId":"1084","location":{"line":28,"column":5,"path":"publish/publish.feature"},"text":"I publish '2010' number as message to 'test_channel' channel","keyword":"When"},"1082":{"type":"step","id":"1082","scenarioId":"1084","location":{"line":29,"column":5,"path":"publish/publish.feature"},"text":"I receive successful response","keyword":"Then"},"1085":{"type":"step","id":"1085","scenarioId":"1089","location":{"line":33,"column":5,"path":"publish/publish.feature"},"text":"the demo keyset","keyword":"Given"},"1086":{"type":"step","id":"1086","scenarioId":"1089","location":{"line":34,"column":5,"path":"publish/publish.feature"},"text":"I publish '[\"pubnub\",\"message is here\"]' array as message to 'test-channel' channel","keyword":"When"},"1087":{"type":"step","id":"1087","scenarioId":"1089","location":{"line":35,"column":5,"path":"publish/publish.feature"},"text":"I receive successful response","keyword":"Then"},"1090":{"type":"step","id":"1090","scenarioId":"1094","location":{"line":39,"column":5,"path":"publish/publish.feature"},"text":"the demo keyset","keyword":"Given"},"1091":{"type":"step","id":"1091","scenarioId":"1094","location":{"line":40,"column":5,"path":"publish/publish.feature"},"text":"I publish '{\"pubnub\":\"message is here\"}' dictionary as message to 'test+channel' channel","keyword":"When"},"1092":{"type":"step","id":"1092","scenarioId":"1094","location":{"line":41,"column":5,"path":"publish/publish.feature"},"text":"I receive successful response","keyword":"Then"},"1095":{"type":"step","id":"1095","scenarioId":"1099","location":{"line":45,"column":5,"path":"publish/publish.feature"},"text":"the demo keyset","keyword":"Given"},"1096":{"type":"step","id":"1096","scenarioId":"1099","location":{"line":46,"column":5,"path":"publish/publish.feature"},"text":"I publish 'hello meta' string as message to 'test-channel' channel with 'meta' set to '{\"payload\":\"surprise\"}'","keyword":"When"},"1097":{"type":"step","id":"1097","scenarioId":"1099","location":{"line":47,"column":5,"path":"publish/publish.feature"},"text":"I receive successful response","keyword":"Then"},"1100":{"type":"step","id":"1100","scenarioId":"1104","location":{"line":51,"column":5,"path":"publish/publish.feature"},"text":"the demo keyset","keyword":"Given"},"1101":{"type":"step","id":"1101","scenarioId":"1104","location":{"line":52,"column":5,"path":"publish/publish.feature"},"text":"I publish 'hello store' string as message to 'test-channel' channel with 'store' set to '0'","keyword":"When"},"1102":{"type":"step","id":"1102","scenarioId":"1104","location":{"line":53,"column":5,"path":"publish/publish.feature"},"text":"I receive successful response","keyword":"Then"},"1105":{"type":"step","id":"1105","scenarioId":"1109","location":{"line":57,"column":5,"path":"publish/publish.feature"},"text":"the demo keyset","keyword":"Given"},"1106":{"type":"step","id":"1106","scenarioId":"1109","location":{"line":58,"column":5,"path":"publish/publish.feature"},"text":"I publish 'hello ttl' string as message to 'test channel' channel with 'ttl' set to '123'","keyword":"When"},"1107":{"type":"step","id":"1107","scenarioId":"1109","location":{"line":59,"column":5,"path":"publish/publish.feature"},"text":"I receive successful response","keyword":"Then"},"1110":{"type":"step","id":"1110","scenarioId":"1115","location":{"line":65,"column":5,"path":"publish/publish.feature"},"text":"the demo keyset","keyword":"Given"},"1111":{"type":"step","id":"1111","scenarioId":"1115","location":{"line":66,"column":5,"path":"publish/publish.feature"},"text":"I publish too long message to 'test-channel' channel","keyword":"When"},"1112":{"type":"step","id":"1112","scenarioId":"1115","location":{"line":67,"column":5,"path":"publish/publish.feature"},"text":"I receive an error response","keyword":"Then"},"1113":{"type":"step","id":"1113","scenarioId":"1115","location":{"line":68,"column":5,"path":"publish/publish.feature"},"text":"the error status code is 414","keyword":"*"},"1116":{"type":"step","id":"1116","scenarioId":"1121","location":{"line":74,"column":5,"path":"publish/publish.feature"},"text":"the demo keyset","keyword":"Given"},"1117":{"type":"step","id":"1117","scenarioId":"1121","location":{"line":75,"column":5,"path":"publish/publish.feature"},"text":"I publish 'hello meta' string as message to 'test-channel' channel with 'meta' set to 'string-value'","keyword":"When"},"1118":{"type":"step","id":"1118","scenarioId":"1121","location":{"line":76,"column":5,"path":"publish/publish.feature"},"text":"I receive an error response","keyword":"Then"},"1122":{"type":"step","id":"1122","scenarioId":"1127","location":{"line":80,"column":5,"path":"publish/publish.feature"},"text":"the wrong publish key","keyword":"Given"},"1123":{"type":"step","id":"1123","scenarioId":"1127","location":{"line":81,"column":5,"path":"publish/publish.feature"},"text":"I publish '{\"pubnub\":\"message\"}' dictionary as message to 'test+channel' channel","keyword":"When"},"1124":{"type":"step","id":"1124","scenarioId":"1127","location":{"line":82,"column":5,"path":"publish/publish.feature"},"text":"I receive an error response","keyword":"Then"},"1125":{"type":"step","id":"1125","scenarioId":"1127","location":{"line":83,"column":5,"path":"publish/publish.feature"},"text":"the error status code is 400","keyword":"And"},"1128":{"type":"step","id":"1128","scenarioId":"1133","location":{"line":87,"column":5,"path":"publish/publish.feature"},"text":"the wrong subscribe key","keyword":"Given"},"1129":{"type":"step","id":"1129","scenarioId":"1133","location":{"line":88,"column":5,"path":"publish/publish.feature"},"text":"I publish '{\"pubnub\":\"message\"}' dictionary as message to 'test!channel' channel","keyword":"When"},"1130":{"type":"step","id":"1130","scenarioId":"1133","location":{"line":89,"column":5,"path":"publish/publish.feature"},"text":"I receive an error response","keyword":"Then"},"1131":{"type":"step","id":"1131","scenarioId":"1133","location":{"line":90,"column":5,"path":"publish/publish.feature"},"text":"the error status code is 400","keyword":"And"},"1136":{"type":"step","id":"1136","scenarioId":"1137","location":{"line":7,"column":5,"path":"publish/signal-custom-mssg-type.feature"},"text":"the demo keyset","keyword":"Given"},"1138":{"type":"step","id":"1138","scenarioId":"1141","location":{"line":11,"column":5,"path":"publish/signal-custom-mssg-type.feature"},"text":"I send a signal with 'test_message_type' type","keyword":"When"},"1139":{"type":"step","id":"1139","scenarioId":"1141","location":{"line":12,"column":5,"path":"publish/signal-custom-mssg-type.feature"},"text":"I receive a successful response","keyword":"Then"},"1142":{"type":"step","id":"1142","scenarioId":"1145","location":{"line":16,"column":5,"path":"publish/signal-custom-mssg-type.feature"},"text":"I send a signal with 'ts' type","keyword":"When"},"1143":{"type":"step","id":"1143","scenarioId":"1145","location":{"line":17,"column":5,"path":"publish/signal-custom-mssg-type.feature"},"text":"I receive an error response","keyword":"Then"},"1146":{"type":"step","id":"1146","scenarioId":"1149","location":{"line":21,"column":5,"path":"publish/signal-custom-mssg-type.feature"},"text":"I send a signal with 'this-is-really-long-message-type-to-be-used-with-publish' type","keyword":"When"},"1147":{"type":"step","id":"1147","scenarioId":"1149","location":{"line":22,"column":5,"path":"publish/signal-custom-mssg-type.feature"},"text":"I receive an error response","keyword":"Then"},"1150":{"type":"step","id":"1150","scenarioId":"1153","location":{"line":26,"column":5,"path":"publish/signal-custom-mssg-type.feature"},"text":"I send a signal with 'pn-test_message_type' type","keyword":"When"},"1151":{"type":"step","id":"1151","scenarioId":"1153","location":{"line":27,"column":5,"path":"publish/signal-custom-mssg-type.feature"},"text":"I receive an error response","keyword":"Then"},"1154":{"type":"step","id":"1154","scenarioId":"1157","location":{"line":31,"column":5,"path":"publish/signal-custom-mssg-type.feature"},"text":"I send a signal with 'pn_test_message_type' type","keyword":"When"},"1155":{"type":"step","id":"1155","scenarioId":"1157","location":{"line":32,"column":5,"path":"publish/signal-custom-mssg-type.feature"},"text":"I receive an error response","keyword":"Then"},"1158":{"type":"step","id":"1158","scenarioId":"1161","location":{"line":36,"column":5,"path":"publish/signal-custom-mssg-type.feature"},"text":"I send a signal with '-test_message_type' type","keyword":"When"},"1159":{"type":"step","id":"1159","scenarioId":"1161","location":{"line":37,"column":5,"path":"publish/signal-custom-mssg-type.feature"},"text":"I receive an error response","keyword":"Then"},"1162":{"type":"step","id":"1162","scenarioId":"1165","location":{"line":41,"column":5,"path":"publish/signal-custom-mssg-type.feature"},"text":"I send a signal with '_test_message_type' type","keyword":"When"},"1163":{"type":"step","id":"1163","scenarioId":"1165","location":{"line":42,"column":5,"path":"publish/signal-custom-mssg-type.feature"},"text":"I receive an error response","keyword":"Then"},"1166":{"type":"step","id":"1166","scenarioId":"1169","location":{"line":46,"column":5,"path":"publish/signal-custom-mssg-type.feature"},"text":"I send a signal with 'test:message_type' type","keyword":"When"},"1167":{"type":"step","id":"1167","scenarioId":"1169","location":{"line":47,"column":5,"path":"publish/signal-custom-mssg-type.feature"},"text":"I receive an error response","keyword":"Then"},"1172":{"type":"step","id":"1172","scenarioId":"1177","location":{"line":9,"column":5,"path":"publish/signal.feature"},"text":"the demo keyset","keyword":"Given"},"1173":{"type":"step","id":"1173","scenarioId":"1177","location":{"line":10,"column":5,"path":"publish/signal.feature"},"text":"I send a signal","keyword":"When"},"1174":{"type":"step","id":"1174","scenarioId":"1177","location":{"line":11,"column":5,"path":"publish/signal.feature"},"text":"I receive successful response","keyword":"Then"},"1179":{"type":"step","id":"1179","scenarioId":"1184","location":{"line":9,"column":5,"path":"push/push-notifications.feature"},"text":"the demo keyset","keyword":"Given"},"1180":{"type":"step","id":"1180","scenarioId":"1184","location":{"line":10,"column":5,"path":"push/push-notifications.feature"},"text":"I list GCM push channels","keyword":"When"},"1181":{"type":"step","id":"1181","scenarioId":"1184","location":{"line":11,"column":5,"path":"push/push-notifications.feature"},"text":"I receive successful response","keyword":"Then"},"1185":{"type":"step","id":"1185","scenarioId":"1189","location":{"line":15,"column":5,"path":"push/push-notifications.feature"},"text":"the demo keyset","keyword":"Given"},"1186":{"type":"step","id":"1186","scenarioId":"1189","location":{"line":16,"column":5,"path":"push/push-notifications.feature"},"text":"I list APNS2 push channels","keyword":"When"},"1187":{"type":"step","id":"1187","scenarioId":"1189","location":{"line":17,"column":5,"path":"push/push-notifications.feature"},"text":"I receive error response","keyword":"Then"},"1190":{"type":"step","id":"1190","scenarioId":"1195","location":{"line":21,"column":5,"path":"push/push-notifications.feature"},"text":"the demo keyset","keyword":"Given"},"1191":{"type":"step","id":"1191","scenarioId":"1195","location":{"line":22,"column":5,"path":"push/push-notifications.feature"},"text":"I list APNS2 push channels with topic","keyword":"When"},"1192":{"type":"step","id":"1192","scenarioId":"1195","location":{"line":23,"column":5,"path":"push/push-notifications.feature"},"text":"I receive successful response","keyword":"Then"},"1196":{"type":"step","id":"1196","scenarioId":"1201","location":{"line":27,"column":5,"path":"push/push-notifications.feature"},"text":"the demo keyset","keyword":"Given"},"1197":{"type":"step","id":"1197","scenarioId":"1201","location":{"line":28,"column":5,"path":"push/push-notifications.feature"},"text":"I add GCM push channels","keyword":"When"},"1198":{"type":"step","id":"1198","scenarioId":"1201","location":{"line":29,"column":5,"path":"push/push-notifications.feature"},"text":"I receive successful response","keyword":"Then"},"1202":{"type":"step","id":"1202","scenarioId":"1207","location":{"line":33,"column":5,"path":"push/push-notifications.feature"},"text":"the demo keyset","keyword":"Given"},"1203":{"type":"step","id":"1203","scenarioId":"1207","location":{"line":34,"column":5,"path":"push/push-notifications.feature"},"text":"I add FCM push channels","keyword":"When"},"1204":{"type":"step","id":"1204","scenarioId":"1207","location":{"line":35,"column":5,"path":"push/push-notifications.feature"},"text":"I receive successful response","keyword":"Then"},"1208":{"type":"step","id":"1208","scenarioId":"1212","location":{"line":39,"column":5,"path":"push/push-notifications.feature"},"text":"the demo keyset","keyword":"Given"},"1209":{"type":"step","id":"1209","scenarioId":"1212","location":{"line":40,"column":5,"path":"push/push-notifications.feature"},"text":"I add APNS2 push channels","keyword":"When"},"1210":{"type":"step","id":"1210","scenarioId":"1212","location":{"line":41,"column":5,"path":"push/push-notifications.feature"},"text":"I receive error response","keyword":"Then"},"1213":{"type":"step","id":"1213","scenarioId":"1218","location":{"line":45,"column":5,"path":"push/push-notifications.feature"},"text":"the demo keyset","keyword":"Given"},"1214":{"type":"step","id":"1214","scenarioId":"1218","location":{"line":46,"column":5,"path":"push/push-notifications.feature"},"text":"I add APNS2 push channels with topic","keyword":"When"},"1215":{"type":"step","id":"1215","scenarioId":"1218","location":{"line":47,"column":5,"path":"push/push-notifications.feature"},"text":"I receive successful response","keyword":"Then"},"1219":{"type":"step","id":"1219","scenarioId":"1224","location":{"line":51,"column":5,"path":"push/push-notifications.feature"},"text":"the demo keyset","keyword":"Given"},"1220":{"type":"step","id":"1220","scenarioId":"1224","location":{"line":52,"column":5,"path":"push/push-notifications.feature"},"text":"I remove GCM push channels","keyword":"When"},"1221":{"type":"step","id":"1221","scenarioId":"1224","location":{"line":53,"column":5,"path":"push/push-notifications.feature"},"text":"I receive successful response","keyword":"Then"},"1225":{"type":"step","id":"1225","scenarioId":"1229","location":{"line":57,"column":5,"path":"push/push-notifications.feature"},"text":"the demo keyset","keyword":"Given"},"1226":{"type":"step","id":"1226","scenarioId":"1229","location":{"line":58,"column":5,"path":"push/push-notifications.feature"},"text":"I remove APNS2 push channels","keyword":"When"},"1227":{"type":"step","id":"1227","scenarioId":"1229","location":{"line":59,"column":5,"path":"push/push-notifications.feature"},"text":"I receive error response","keyword":"Then"},"1230":{"type":"step","id":"1230","scenarioId":"1235","location":{"line":63,"column":5,"path":"push/push-notifications.feature"},"text":"the demo keyset","keyword":"Given"},"1231":{"type":"step","id":"1231","scenarioId":"1235","location":{"line":64,"column":5,"path":"push/push-notifications.feature"},"text":"I remove APNS2 push channels with topic","keyword":"When"},"1232":{"type":"step","id":"1232","scenarioId":"1235","location":{"line":65,"column":5,"path":"push/push-notifications.feature"},"text":"I receive successful response","keyword":"Then"},"1236":{"type":"step","id":"1236","scenarioId":"1241","location":{"line":69,"column":5,"path":"push/push-notifications.feature"},"text":"the demo keyset","keyword":"Given"},"1237":{"type":"step","id":"1237","scenarioId":"1241","location":{"line":70,"column":5,"path":"push/push-notifications.feature"},"text":"I remove GCM device","keyword":"When"},"1238":{"type":"step","id":"1238","scenarioId":"1241","location":{"line":71,"column":5,"path":"push/push-notifications.feature"},"text":"I receive successful response","keyword":"Then"},"1242":{"type":"step","id":"1242","scenarioId":"1246","location":{"line":75,"column":5,"path":"push/push-notifications.feature"},"text":"the demo keyset","keyword":"Given"},"1243":{"type":"step","id":"1243","scenarioId":"1246","location":{"line":76,"column":5,"path":"push/push-notifications.feature"},"text":"I remove APNS2 device","keyword":"When"},"1244":{"type":"step","id":"1244","scenarioId":"1246","location":{"line":77,"column":5,"path":"push/push-notifications.feature"},"text":"I receive error response","keyword":"Then"},"1247":{"type":"step","id":"1247","scenarioId":"1252","location":{"line":81,"column":5,"path":"push/push-notifications.feature"},"text":"the demo keyset","keyword":"Given"},"1248":{"type":"step","id":"1248","scenarioId":"1252","location":{"line":82,"column":5,"path":"push/push-notifications.feature"},"text":"I remove APNS2 device with topic","keyword":"When"},"1249":{"type":"step","id":"1249","scenarioId":"1252","location":{"line":83,"column":5,"path":"push/push-notifications.feature"},"text":"I receive successful response","keyword":"Then"},"1254":{"type":"step","id":"1254","scenarioId":"1257","location":{"line":9,"column":5,"path":"subscribe/automatic-connection-on-subscribe.feature"},"text":"The SDK has a connection status of Unsubscribed","keyword":"Given"},"1255":{"type":"step","id":"1255","scenarioId":"1257","location":{"line":10,"column":5,"path":"subscribe/automatic-connection-on-subscribe.feature"},"text":"You subscribe to a channel","keyword":"When"},"1256":{"type":"step","id":"1256","scenarioId":"1257","location":{"line":11,"column":5,"path":"subscribe/automatic-connection-on-subscribe.feature"},"text":"The SDK will have a connection status of `handshaking`","keyword":"Then"},"1261":{"type":"step","id":"1261","scenarioId":"1264","location":{"line":9,"column":5,"path":"subscribe/automatic-disconnect-on-unsubscribe.feature"},"text":"The SDK has a connection status of Receiving","keyword":"Given"},"1262":{"type":"step","id":"1262","scenarioId":"1264","location":{"line":10,"column":5,"path":"subscribe/automatic-disconnect-on-unsubscribe.feature"},"text":"The unsubscribe all operation is requested","keyword":"When"},"1263":{"type":"step","id":"1263","scenarioId":"1264","location":{"line":11,"column":5,"path":"subscribe/automatic-disconnect-on-unsubscribe.feature"},"text":"The SDK will have a connection status of `unsubscribed`","keyword":"Then"},"1265":{"type":"step","id":"1265","scenarioId":"1268","location":{"line":14,"column":5,"path":"subscribe/automatic-disconnect-on-unsubscribe.feature"},"text":"The SDK has a connection status of Handshaking","keyword":"Given"},"1266":{"type":"step","id":"1266","scenarioId":"1268","location":{"line":15,"column":5,"path":"subscribe/automatic-disconnect-on-unsubscribe.feature"},"text":"The unsubscribe all operation is requested","keyword":"When"},"1267":{"type":"step","id":"1267","scenarioId":"1268","location":{"line":16,"column":5,"path":"subscribe/automatic-disconnect-on-unsubscribe.feature"},"text":"The SDK will have a connection status of `unsubscribed`","keyword":"Then"},"1269":{"type":"step","id":"1269","scenarioId":"1272","location":{"line":19,"column":5,"path":"subscribe/automatic-disconnect-on-unsubscribe.feature"},"text":"The SDK has a connection status of Reconnecting","keyword":"Given"},"1270":{"type":"step","id":"1270","scenarioId":"1272","location":{"line":20,"column":5,"path":"subscribe/automatic-disconnect-on-unsubscribe.feature"},"text":"The unsubscribe all operation is requested","keyword":"When"},"1271":{"type":"step","id":"1271","scenarioId":"1272","location":{"line":21,"column":5,"path":"subscribe/automatic-disconnect-on-unsubscribe.feature"},"text":"The SDK will have a connection status of `unsubscribed`","keyword":"Then"},"1273":{"type":"step","id":"1273","scenarioId":"1276","location":{"line":24,"column":5,"path":"subscribe/automatic-disconnect-on-unsubscribe.feature"},"text":"The SDK has a connection status of Receiving","keyword":"Given"},"1274":{"type":"step","id":"1274","scenarioId":"1276","location":{"line":25,"column":5,"path":"subscribe/automatic-disconnect-on-unsubscribe.feature"},"text":"You unsubscribe from the last subscribed channel","keyword":"When"},"1275":{"type":"step","id":"1275","scenarioId":"1276","location":{"line":26,"column":5,"path":"subscribe/automatic-disconnect-on-unsubscribe.feature"},"text":"The SDK will have a connection status of `unsubscribed`","keyword":"Then"},"1280":{"type":"step","id":"1280","scenarioId":"1283","location":{"line":10,"column":5,"path":"subscribe/automatic-reconnection.feature"},"text":"A pending automatic reconnection timer","keyword":"Given"},"1281":{"type":"step","id":"1281","scenarioId":"1283","location":{"line":11,"column":5,"path":"subscribe/automatic-reconnection.feature"},"text":"The timer activates","keyword":"When"},"1282":{"type":"step","id":"1282","scenarioId":"1283","location":{"line":12,"column":5,"path":"subscribe/automatic-reconnection.feature"},"text":"A subscribe REST api call is made based on current subscription state","keyword":"Then"},"1284":{"type":"step","id":"1284","scenarioId":"1287","location":{"line":15,"column":5,"path":"subscribe/automatic-reconnection.feature"},"text":"An SDK Instance that is disconnected","keyword":"Given"},"1285":{"type":"step","id":"1285","scenarioId":"1287","location":{"line":16,"column":5,"path":"subscribe/automatic-reconnection.feature"},"text":"Immediate automatic reconnection is requested","keyword":"When"},"1286":{"type":"step","id":"1286","scenarioId":"1287","location":{"line":17,"column":5,"path":"subscribe/automatic-reconnection.feature"},"text":"A subscribe REST api call is made based on current subscription state","keyword":"Then"},"1288":{"type":"step","id":"1288","scenarioId":"1291","location":{"line":23,"column":5,"path":"subscribe/automatic-reconnection.feature"},"text":"A subscribe REST api call with non-zero time token that has not completed","keyword":"Given"},"1289":{"type":"step","id":"1289","scenarioId":"1291","location":{"line":24,"column":5,"path":"subscribe/automatic-reconnection.feature"},"text":"The request completes with a HTTP 400 Status code","keyword":"When"},"1290":{"type":"step","id":"1290","scenarioId":"1291","location":{"line":25,"column":5,"path":"subscribe/automatic-reconnection.feature"},"text":"remaining reconnect attempts will be 0","keyword":"Then"},"1292":{"type":"step","id":"1292","scenarioId":"1295","location":{"line":31,"column":5,"path":"subscribe/automatic-reconnection.feature"},"text":"A subscribe REST api call with non-zero time token that has not completed","keyword":"Given"},"1293":{"type":"step","id":"1293","scenarioId":"1295","location":{"line":32,"column":5,"path":"subscribe/automatic-reconnection.feature"},"text":"The request completes with a HTTP 403 Status code","keyword":"When"},"1294":{"type":"step","id":"1294","scenarioId":"1295","location":{"line":33,"column":5,"path":"subscribe/automatic-reconnection.feature"},"text":"remaining reconnect attempts will be 0","keyword":"Then"},"1296":{"type":"step","id":"1296","scenarioId":"1299","location":{"line":39,"column":5,"path":"subscribe/automatic-reconnection.feature"},"text":"A subscribe REST api call with non-zero time token that has not completed","keyword":"Given"},"1297":{"type":"step","id":"1297","scenarioId":"1299","location":{"line":40,"column":5,"path":"subscribe/automatic-reconnection.feature"},"text":"The request completes with a HTTP 414 Status code","keyword":"When"},"1298":{"type":"step","id":"1298","scenarioId":"1299","location":{"line":41,"column":5,"path":"subscribe/automatic-reconnection.feature"},"text":"remaining reconnect attempts will be 0","keyword":"Then"},"1306":{"type":"step","id":"1306","scenarioId":"1308","location":{"line":10,"column":9,"path":"subscribe/config/max-allowed-reconnection-attempts.feature"},"text":"A freshly initialized SDK","keyword":"Given"},"1307":{"type":"step","id":"1307","scenarioId":"1308","location":{"line":11,"column":9,"path":"subscribe/config/max-allowed-reconnection-attempts.feature"},"text":"The automatic reconnection delay will be ?","keyword":"Then"},"1312":{"type":"step","id":"1312","scenarioId":"1314","location":{"line":9,"column":9,"path":"subscribe/config/reconnection-policy.feature"},"text":"A freshly initialized SDK","keyword":"Given"},"1313":{"type":"step","id":"1313","scenarioId":"1314","location":{"line":10,"column":9,"path":"subscribe/config/reconnection-policy.feature"},"text":"The reconnection policy will be ?","keyword":"Then"},"1318":{"type":"step","id":"1318","scenarioId":"1325","location":{"line":43,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"A subscribe REST api call with non-zero time token that has not completed","keyword":"Given"},"1319":{"type":"step","id":"1319","scenarioId":"1325","location":{"line":44,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"The request completes with a HTTP 200 Status code","keyword":"When"},"1320":{"type":"step","id":"1320","scenarioId":"1325","location":{"line":45,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"Received messages are emitted to registered message listeners","keyword":"Then"},"1321":{"type":"step","id":"1321","scenarioId":"1325","location":{"line":46,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"last time token will be the time token from the completed response","keyword":"And"},"1322":{"type":"step","id":"1322","scenarioId":"1325","location":{"line":47,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"last region will be the region from the completed response","keyword":"And"},"1323":{"type":"step","id":"1323","scenarioId":"1325","location":{"line":48,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"Another subscribe api call will be made","keyword":"And"},"1324":{"type":"step","id":"1324","scenarioId":"1325","location":{"line":49,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"a notification is sent to the presence system for successful implicit heartbeat","keyword":"And"},"1326":{"type":"step","id":"1326","scenarioId":"1333","location":{"line":52,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"A subscribe REST api call with non-zero time token that has not completed","keyword":"Given"},"1327":{"type":"step","id":"1327","scenarioId":"1333","location":{"line":53,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"The request completes with a HTTP 200 Status code","keyword":"When"},"1328":{"type":"step","id":"1328","scenarioId":"1333","location":{"line":54,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"the response body contains no messages","keyword":"And"},"1329":{"type":"step","id":"1329","scenarioId":"1333","location":{"line":55,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"last time token will be the time token from the completed response","keyword":"Then"},"1330":{"type":"step","id":"1330","scenarioId":"1333","location":{"line":56,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"last region will be the region from the completed response","keyword":"And"},"1331":{"type":"step","id":"1331","scenarioId":"1333","location":{"line":57,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"Another subscribe api call will be made","keyword":"And"},"1332":{"type":"step","id":"1332","scenarioId":"1333","location":{"line":58,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"a notification is sent to the presence system for successful implicit heartbeat","keyword":"And"},"1334":{"type":"step","id":"1334","scenarioId":"1343","location":{"line":61,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"A subscribe REST api call with non-zero time token that has not completed","keyword":"Given"},"1335":{"type":"step","id":"1335","scenarioId":"1343","location":{"line":62,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"The SDK connection Status is disconnected","keyword":"And"},"1336":{"type":"step","id":"1336","scenarioId":"1343","location":{"line":63,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"The request completes with a HTTP 200 Status code","keyword":"When"},"1337":{"type":"step","id":"1337","scenarioId":"1343","location":{"line":64,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"The SDK connection status will be connected","keyword":"Then"},"1338":{"type":"step","id":"1338","scenarioId":"1343","location":{"line":65,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"A reconnected status message will be emitted to subscription status listeners","keyword":"And"},"1339":{"type":"step","id":"1339","scenarioId":"1343","location":{"line":66,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"Received messages will be emitted to registered message listeners","keyword":"And"},"1340":{"type":"step","id":"1340","scenarioId":"1343","location":{"line":67,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"last time token will be the time token from the completed response","keyword":"And"},"1341":{"type":"step","id":"1341","scenarioId":"1343","location":{"line":68,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"last region will be the region from the completed response","keyword":"And"},"1342":{"type":"step","id":"1342","scenarioId":"1343","location":{"line":69,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"Another subscribe api call will be made","keyword":"And"},"1344":{"type":"step","id":"1344","scenarioId":"1348","location":{"line":72,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"A subscribe REST api call with non-zero time token that has not completed","keyword":"Given"},"1345":{"type":"step","id":"1345","scenarioId":"1348","location":{"line":73,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"The REST request completes with a HTTP 403 Status code","keyword":"When"},"1346":{"type":"step","id":"1346","scenarioId":"1348","location":{"line":74,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"An Access Denied Message will be delivered to subscription status listeners","keyword":"Then"},"1347":{"type":"step","id":"1347","scenarioId":"1348","location":{"line":75,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"The SDK connection status will be disconnected","keyword":"And"},"1349":{"type":"step","id":"1349","scenarioId":"1353","location":{"line":78,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"A subscribe REST api call with non-zero time token that has not completed","keyword":"Given"},"1350":{"type":"step","id":"1350","scenarioId":"1353","location":{"line":79,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"The REST request completes with a HTTP 503 Status code","keyword":"When"},"1351":{"type":"step","id":"1351","scenarioId":"1353","location":{"line":80,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"The SDK connection status will be disconnected","keyword":"And"},"1352":{"type":"step","id":"1352","scenarioId":"1353","location":{"line":81,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"A reconnection timer will be set with the current reconnection delay","keyword":"And"},"1354":{"type":"step","id":"1354","scenarioId":"1357","location":{"line":91,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"The disconnect operation is requested","keyword":"When"},"1355":{"type":"step","id":"1355","scenarioId":"1357","location":{"line":92,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"Subscription state including subscribed channels and time token are retained","keyword":"Then"},"1356":{"type":"step","id":"1356","scenarioId":"1357","location":{"line":93,"column":5,"path":"subscribe/continuously-receive-messages.feature"},"text":"The retrained state is used when the next reconnect operation is triggered","keyword":"And"},"1362":{"type":"step","id":"1362","scenarioId":"1363","location":{"line":7,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"I have a keyset with access manager enabled","keyword":"Given"},"1364":{"type":"step","id":"1364","scenarioId":"1370","location":{"line":11,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"no auth key","keyword":"Given"},"1365":{"type":"step","id":"1365","scenarioId":"1370","location":{"line":12,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"I subscribe","keyword":"When"},"1366":{"type":"step","id":"1366","scenarioId":"1370","location":{"line":13,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"I receive access denied status","keyword":"Then"},"1367":{"type":"step","id":"1367","scenarioId":"1370","location":{"line":14,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"I don't auto-retry subscribe","keyword":"*"},"1371":{"type":"step","id":"1371","scenarioId":"1377","location":{"line":18,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"auth key","keyword":"Given"},"1372":{"type":"step","id":"1372","scenarioId":"1377","location":{"line":19,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"I subscribe","keyword":"When"},"1373":{"type":"step","id":"1373","scenarioId":"1377","location":{"line":20,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"I receive access denied status","keyword":"Then"},"1374":{"type":"step","id":"1374","scenarioId":"1377","location":{"line":21,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"I don't auto-retry subscribe","keyword":"*"},"1378":{"type":"step","id":"1378","scenarioId":"1384","location":{"line":25,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"token","keyword":"Given"},"1379":{"type":"step","id":"1379","scenarioId":"1384","location":{"line":26,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"I subscribe","keyword":"When"},"1380":{"type":"step","id":"1380","scenarioId":"1384","location":{"line":27,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"I receive access denied status","keyword":"Then"},"1381":{"type":"step","id":"1381","scenarioId":"1384","location":{"line":28,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"I don't auto-retry subscribe","keyword":"*"},"1385":{"type":"step","id":"1385","scenarioId":"1394","location":{"line":32,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"secret key","keyword":"Given"},"1386":{"type":"step","id":"1386","scenarioId":"1394","location":{"line":33,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"I subscribe","keyword":"When"},"1387":{"type":"step","id":"1387","scenarioId":"1394","location":{"line":34,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"I receive access denied status","keyword":"Then"},"1388":{"type":"step","id":"1388","scenarioId":"1394","location":{"line":35,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"I don't auto-retry subscribe","keyword":"*"},"1395":{"type":"step","id":"1395","scenarioId":"1402","location":{"line":39,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"auth key","keyword":"Given"},"1396":{"type":"step","id":"1396","scenarioId":"1402","location":{"line":40,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"I subscribe","keyword":"When"},"1397":{"type":"step","id":"1397","scenarioId":"1402","location":{"line":41,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"I receive the message in my subscribe response","keyword":"Then"},"1398":{"type":"step","id":"1398","scenarioId":"1402","location":{"line":42,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"I receive access denied status","keyword":"*"},"1399":{"type":"step","id":"1399","scenarioId":"1402","location":{"line":43,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"I don't auto-retry subscribe","keyword":"*"},"1403":{"type":"step","id":"1403","scenarioId":"1410","location":{"line":47,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"token","keyword":"Given"},"1404":{"type":"step","id":"1404","scenarioId":"1410","location":{"line":48,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"I subscribe","keyword":"When"},"1405":{"type":"step","id":"1405","scenarioId":"1410","location":{"line":49,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"I receive the message in my subscribe response","keyword":"Then"},"1406":{"type":"step","id":"1406","scenarioId":"1410","location":{"line":50,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"I receive access denied status","keyword":"*"},"1407":{"type":"step","id":"1407","scenarioId":"1410","location":{"line":51,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"I don't auto-retry subscribe","keyword":"*"},"1411":{"type":"step","id":"1411","scenarioId":"1421","location":{"line":55,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"secret key","keyword":"Given"},"1412":{"type":"step","id":"1412","scenarioId":"1421","location":{"line":56,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"I subscribe","keyword":"When"},"1413":{"type":"step","id":"1413","scenarioId":"1421","location":{"line":57,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"I receive the message in my subscribe response","keyword":"Then"},"1414":{"type":"step","id":"1414","scenarioId":"1421","location":{"line":58,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"I receive access denied status","keyword":"*"},"1415":{"type":"step","id":"1415","scenarioId":"1421","location":{"line":59,"column":5,"path":"subscribe/contracts/access-denied-subscribe.feature"},"text":"I don't auto-retry subscribe","keyword":"*"},"1423":{"type":"step","id":"1423","scenarioId":"1428","location":{"line":7,"column":5,"path":"subscribe/contracts/simple-subscribe.feature"},"text":"the demo keyset","keyword":"Given"},"1424":{"type":"step","id":"1424","scenarioId":"1428","location":{"line":8,"column":5,"path":"subscribe/contracts/simple-subscribe.feature"},"text":"I subscribe","keyword":"When"},"1425":{"type":"step","id":"1425","scenarioId":"1428","location":{"line":9,"column":5,"path":"subscribe/contracts/simple-subscribe.feature"},"text":"I receive the message in my subscribe response","keyword":"Then"},"1433":{"type":"step","id":"1433","scenarioId":"1435","location":{"line":15,"column":5,"path":"subscribe/delay-between-reconnection-attempts.feature"},"text":"A Fresh SDK Instance","keyword":"Given"},"1434":{"type":"step","id":"1434","scenarioId":"1435","location":{"line":16,"column":5,"path":"subscribe/delay-between-reconnection-attempts.feature"},"text":"Reconnection delay is the lowest value allowed by reconnection policy","keyword":"Then"},"1436":{"type":"step","id":"1436","scenarioId":"1438","location":{"line":19,"column":5,"path":"subscribe/delay-between-reconnection-attempts.feature"},"text":"The manual reconnection operation is triggered","keyword":"When"},"1437":{"type":"step","id":"1437","scenarioId":"1438","location":{"line":20,"column":5,"path":"subscribe/delay-between-reconnection-attempts.feature"},"text":"Reconnection delay is the lowest value allowed by reconnection policy","keyword":"Then"},"1439":{"type":"step","id":"1439","scenarioId":"1442","location":{"line":23,"column":5,"path":"subscribe/delay-between-reconnection-attempts.feature"},"text":"A message polling request that has not completed","keyword":"Given"},"1440":{"type":"step","id":"1440","scenarioId":"1442","location":{"line":24,"column":5,"path":"subscribe/delay-between-reconnection-attempts.feature"},"text":"The request completes with a HTTP 200 Status code","keyword":"When"},"1441":{"type":"step","id":"1441","scenarioId":"1442","location":{"line":25,"column":5,"path":"subscribe/delay-between-reconnection-attempts.feature"},"text":"Reconnection delay is the lowest value allowed by reconnection policy","keyword":"Then"},"1443":{"type":"step","id":"1443","scenarioId":"1446","location":{"line":28,"column":5,"path":"subscribe/delay-between-reconnection-attempts.feature"},"text":"A completed subscribe REST api call with non-zero time token","keyword":"Given"},"1444":{"type":"step","id":"1444","scenarioId":"1446","location":{"line":29,"column":5,"path":"subscribe/delay-between-reconnection-attempts.feature"},"text":"When a timer for reconnection is scheduled","keyword":"When"},"1445":{"type":"step","id":"1445","scenarioId":"1446","location":{"line":30,"column":5,"path":"subscribe/delay-between-reconnection-attempts.feature"},"text":"Reconnection delay (set for the next reconnection attempt) is the next delay in the sequence defined by the reconnection policy","keyword":"Then"},"1451":{"type":"step","id":"1451","scenarioId":"1456","location":{"line":41,"column":5,"path":"subscribe/delay-between-reconnection-attempts.feature"},"text":"A message polling request that has not completed","keyword":"Given"},"1452":{"type":"step","id":"1452","scenarioId":"1456","location":{"line":42,"column":5,"path":"subscribe/delay-between-reconnection-attempts.feature"},"text":"The request completes with a HTTP 503 Status code","keyword":"When"},"1453":{"type":"step","id":"1453","scenarioId":"1456","location":{"line":43,"column":5,"path":"subscribe/delay-between-reconnection-attempts.feature"},"text":"The request contains a Retry-After header","keyword":"And"},"1454":{"type":"step","id":"1454","scenarioId":"1456","location":{"line":44,"column":5,"path":"subscribe/delay-between-reconnection-attempts.feature"},"text":"the Retry-After header is correctly formatted","keyword":"And"},"1455":{"type":"step","id":"1455","scenarioId":"1456","location":{"line":45,"column":5,"path":"subscribe/delay-between-reconnection-attempts.feature"},"text":"Reconnection delay is the value in the Retry-After header","keyword":"Then"},"1457":{"type":"step","id":"1457","scenarioId":"1462","location":{"line":48,"column":5,"path":"subscribe/delay-between-reconnection-attempts.feature"},"text":"A message polling request that has not completed","keyword":"Given"},"1458":{"type":"step","id":"1458","scenarioId":"1462","location":{"line":49,"column":5,"path":"subscribe/delay-between-reconnection-attempts.feature"},"text":"The request completes with a HTTP 429 Status code","keyword":"When"},"1459":{"type":"step","id":"1459","scenarioId":"1462","location":{"line":50,"column":5,"path":"subscribe/delay-between-reconnection-attempts.feature"},"text":"The request contains a Retry-After header","keyword":"And"},"1460":{"type":"step","id":"1460","scenarioId":"1462","location":{"line":51,"column":5,"path":"subscribe/delay-between-reconnection-attempts.feature"},"text":"the Retry-After header is correctly formatted","keyword":"And"},"1461":{"type":"step","id":"1461","scenarioId":"1462","location":{"line":52,"column":5,"path":"subscribe/delay-between-reconnection-attempts.feature"},"text":"Reconnection delay is the value in the Retry-After header","keyword":"Then"},"1472":{"type":"step","id":"1472","scenarioId":"1473","location":{"line":6,"column":5,"path":"subscribe/event-engine/happy-path.feature"},"text":"the demo keyset with event engine enabled","keyword":"Given"},"1474":{"type":"step","id":"1474","scenarioId":"1489","location":{"line":10,"column":5,"path":"subscribe/event-engine/happy-path.feature"},"text":"I subscribe","keyword":"When"},"1475":{"type":"step","id":"1475","scenarioId":"1489","location":{"line":11,"column":5,"path":"subscribe/event-engine/happy-path.feature"},"text":"I receive the message in my subscribe response","keyword":"Then"},"1487":{"type":"step","id":"1487","scenarioId":"1489","location":{"line":12,"column":5,"path":"subscribe/event-engine/happy-path.feature"},"text":"I observe the following:","keyword":"And"},"1490":{"type":"step","id":"1490","scenarioId":"1505","location":{"line":27,"column":5,"path":"subscribe/event-engine/happy-path.feature"},"text":"I subscribe with timetoken 12345678901234567","keyword":"When"},"1491":{"type":"step","id":"1491","scenarioId":"1505","location":{"line":28,"column":5,"path":"subscribe/event-engine/happy-path.feature"},"text":"I receive the message in my subscribe response","keyword":"Then"},"1503":{"type":"step","id":"1503","scenarioId":"1505","location":{"line":29,"column":5,"path":"subscribe/event-engine/happy-path.feature"},"text":"I observe the following:","keyword":"And"},"1506":{"type":"step","id":"1506","scenarioId":"1522","location":{"line":44,"column":5,"path":"subscribe/event-engine/happy-path.feature"},"text":"a linear reconnection policy with 3 retries","keyword":"Given"},"1507":{"type":"step","id":"1507","scenarioId":"1522","location":{"line":45,"column":5,"path":"subscribe/event-engine/happy-path.feature"},"text":"I subscribe with timetoken 12345678901234567","keyword":"When"},"1508":{"type":"step","id":"1508","scenarioId":"1522","location":{"line":46,"column":5,"path":"subscribe/event-engine/happy-path.feature"},"text":"I receive the message in my subscribe response","keyword":"Then"},"1520":{"type":"step","id":"1520","scenarioId":"1522","location":{"line":47,"column":5,"path":"subscribe/event-engine/happy-path.feature"},"text":"I observe the following:","keyword":"And"},"1523":{"type":"step","id":"1523","scenarioId":"1534","location":{"line":62,"column":5,"path":"subscribe/event-engine/happy-path.feature"},"text":"a linear reconnection policy with 3 retries","keyword":"Given"},"1524":{"type":"step","id":"1524","scenarioId":"1534","location":{"line":63,"column":5,"path":"subscribe/event-engine/happy-path.feature"},"text":"I subscribe","keyword":"When"},"1525":{"type":"step","id":"1525","scenarioId":"1534","location":{"line":64,"column":5,"path":"subscribe/event-engine/happy-path.feature"},"text":"I receive an error in my subscribe response","keyword":"Then"},"1532":{"type":"step","id":"1532","scenarioId":"1534","location":{"line":65,"column":5,"path":"subscribe/event-engine/happy-path.feature"},"text":"I observe the following:","keyword":"And"},"1535":{"type":"step","id":"1535","scenarioId":"1551","location":{"line":76,"column":5,"path":"subscribe/event-engine/happy-path.feature"},"text":"a linear reconnection policy with 3 retries","keyword":"Given"},"1536":{"type":"step","id":"1536","scenarioId":"1551","location":{"line":77,"column":5,"path":"subscribe/event-engine/happy-path.feature"},"text":"I subscribe","keyword":"When"},"1537":{"type":"step","id":"1537","scenarioId":"1551","location":{"line":78,"column":5,"path":"subscribe/event-engine/happy-path.feature"},"text":"I receive the message in my subscribe response","keyword":"Then"},"1549":{"type":"step","id":"1549","scenarioId":"1551","location":{"line":79,"column":5,"path":"subscribe/event-engine/happy-path.feature"},"text":"I observe the following:","keyword":"And"},"1552":{"type":"step","id":"1552","scenarioId":"1568","location":{"line":94,"column":5,"path":"subscribe/event-engine/happy-path.feature"},"text":"a linear reconnection policy with 3 retries","keyword":"Given"},"1553":{"type":"step","id":"1553","scenarioId":"1568","location":{"line":95,"column":5,"path":"subscribe/event-engine/happy-path.feature"},"text":"I subscribe","keyword":"When"},"1554":{"type":"step","id":"1554","scenarioId":"1568","location":{"line":96,"column":5,"path":"subscribe/event-engine/happy-path.feature"},"text":"I receive the message in my subscribe response","keyword":"Then"},"1566":{"type":"step","id":"1566","scenarioId":"1568","location":{"line":97,"column":5,"path":"subscribe/event-engine/happy-path.feature"},"text":"I observe the following:","keyword":"And"},"1571":{"type":"step","id":"1571","scenarioId":"1572","location":{"line":10,"column":5,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"text":"the demo keyset with event engine enabled","keyword":"Given"},"1573":{"type":"step","id":"1573","scenarioId":"1588","location":{"line":14,"column":5,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"text":"I subscribe","keyword":"When"},"1574":{"type":"step","id":"1574","scenarioId":"1588","location":{"line":15,"column":5,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"text":"I receive the message in my subscribe response","keyword":"Then"},"1586":{"type":"step","id":"1586","scenarioId":"1588","location":{"line":16,"column":5,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"text":"I observe the following:","keyword":"And"},"1589":{"type":"step","id":"1589","scenarioId":"1604","location":{"line":31,"column":5,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"text":"I subscribe with timetoken 12345678901234567","keyword":"When"},"1590":{"type":"step","id":"1590","scenarioId":"1604","location":{"line":32,"column":5,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"text":"I receive the message in my subscribe response","keyword":"Then"},"1602":{"type":"step","id":"1602","scenarioId":"1604","location":{"line":33,"column":5,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"text":"I observe the following:","keyword":"And"},"1605":{"type":"step","id":"1605","scenarioId":"1624","location":{"line":48,"column":5,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"text":"a linear reconnection policy with 3 retries","keyword":"Given"},"1606":{"type":"step","id":"1606","scenarioId":"1624","location":{"line":49,"column":5,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"text":"I subscribe with timetoken 12345678901234567","keyword":"When"},"1607":{"type":"step","id":"1607","scenarioId":"1624","location":{"line":50,"column":5,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"text":"I receive the message in my subscribe response","keyword":"Then"},"1622":{"type":"step","id":"1622","scenarioId":"1624","location":{"line":51,"column":5,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"text":"I observe the following:","keyword":"And"},"1625":{"type":"step","id":"1625","scenarioId":"1648","location":{"line":69,"column":5,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"text":"a linear reconnection policy with 3 retries","keyword":"Given"},"1626":{"type":"step","id":"1626","scenarioId":"1648","location":{"line":70,"column":5,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"text":"I subscribe","keyword":"When"},"1627":{"type":"step","id":"1627","scenarioId":"1648","location":{"line":71,"column":5,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"text":"I receive an error in my subscribe response","keyword":"Then"},"1646":{"type":"step","id":"1646","scenarioId":"1648","location":{"line":72,"column":5,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"text":"I observe the following:","keyword":"And"},"1649":{"type":"step","id":"1649","scenarioId":"1671","location":{"line":94,"column":5,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"text":"a linear reconnection policy with 3 retries","keyword":"Given"},"1650":{"type":"step","id":"1650","scenarioId":"1671","location":{"line":95,"column":5,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"text":"I subscribe","keyword":"When"},"1651":{"type":"step","id":"1651","scenarioId":"1671","location":{"line":96,"column":5,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"text":"I receive the message in my subscribe response","keyword":"Then"},"1669":{"type":"step","id":"1669","scenarioId":"1671","location":{"line":97,"column":5,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"text":"I observe the following:","keyword":"And"},"1672":{"type":"step","id":"1672","scenarioId":"1691","location":{"line":118,"column":5,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"text":"a linear reconnection policy with 3 retries","keyword":"Given"},"1673":{"type":"step","id":"1673","scenarioId":"1691","location":{"line":119,"column":5,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"text":"I subscribe","keyword":"When"},"1674":{"type":"step","id":"1674","scenarioId":"1691","location":{"line":120,"column":5,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"text":"I receive the message in my subscribe response","keyword":"Then"},"1689":{"type":"step","id":"1689","scenarioId":"1691","location":{"line":121,"column":5,"path":"subscribe/event-engine/happy-path_Legacy.feature"},"text":"I observe the following:","keyword":"And"},"1694":{"type":"step","id":"1694","scenarioId":"1705","location":{"line":7,"column":5,"path":"subscribe/events/file/receiving-file-event.feature"},"text":"undelivered messages contains a file event","keyword":"Given"},"1695":{"type":"step","id":"1695","scenarioId":"1705","location":{"line":8,"column":5,"path":"subscribe/events/file/receiving-file-event.feature"},"text":"the event is delivered","keyword":"When"},"1696":{"type":"step","id":"1696","scenarioId":"1705","location":{"line":9,"column":5,"path":"subscribe/events/file/receiving-file-event.feature"},"text":"the event information contains","keyword":"Then"},"1697":{"type":"step","id":"1697","scenarioId":"1705","location":{"line":10,"column":5,"path":"subscribe/events/file/receiving-file-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"1698":{"type":"step","id":"1698","scenarioId":"1705","location":{"line":11,"column":5,"path":"subscribe/events/file/receiving-file-event.feature"},"text":"the subscription is 'my_channel-pnpres'","keyword":"*"},"1699":{"type":"step","id":"1699","scenarioId":"1705","location":{"line":12,"column":5,"path":"subscribe/events/file/receiving-file-event.feature"},"text":"the publisher is 'my_uuid'","keyword":"*"},"1700":{"type":"step","id":"1700","scenarioId":"1705","location":{"line":13,"column":5,"path":"subscribe/events/file/receiving-file-event.feature"},"text":"the timetoken is not empty","keyword":"*"},"1701":{"type":"step","id":"1701","scenarioId":"1705","location":{"line":14,"column":5,"path":"subscribe/events/file/receiving-file-event.feature"},"text":"the message is empty","keyword":"*"},"1702":{"type":"step","id":"1702","scenarioId":"1705","location":{"line":15,"column":5,"path":"subscribe/events/file/receiving-file-event.feature"},"text":"the fileId is 'file1'","keyword":"*"},"1703":{"type":"step","id":"1703","scenarioId":"1705","location":{"line":16,"column":5,"path":"subscribe/events/file/receiving-file-event.feature"},"text":"the fileName is 'file 1'","keyword":"*"},"1704":{"type":"step","id":"1704","scenarioId":"1705","location":{"line":17,"column":5,"path":"subscribe/events/file/receiving-file-event.feature"},"text":"the fileUrl is 'http://pubnub.com/test-file'","keyword":"*"},"1706":{"type":"step","id":"1706","scenarioId":"1717","location":{"line":20,"column":5,"path":"subscribe/events/file/receiving-file-event.feature"},"text":"undelivered messages contains a file event","keyword":"Given"},"1707":{"type":"step","id":"1707","scenarioId":"1717","location":{"line":21,"column":5,"path":"subscribe/events/file/receiving-file-event.feature"},"text":"the event is delivered","keyword":"When"},"1708":{"type":"step","id":"1708","scenarioId":"1717","location":{"line":22,"column":5,"path":"subscribe/events/file/receiving-file-event.feature"},"text":"the event information contains","keyword":"Then"},"1709":{"type":"step","id":"1709","scenarioId":"1717","location":{"line":23,"column":5,"path":"subscribe/events/file/receiving-file-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"1710":{"type":"step","id":"1710","scenarioId":"1717","location":{"line":24,"column":5,"path":"subscribe/events/file/receiving-file-event.feature"},"text":"the subscription is 'my_channel-pnpres'","keyword":"*"},"1711":{"type":"step","id":"1711","scenarioId":"1717","location":{"line":25,"column":5,"path":"subscribe/events/file/receiving-file-event.feature"},"text":"the publisher is 'my_uuid'","keyword":"*"},"1712":{"type":"step","id":"1712","scenarioId":"1717","location":{"line":26,"column":5,"path":"subscribe/events/file/receiving-file-event.feature"},"text":"the timetoken is not empty","keyword":"*"},"1713":{"type":"step","id":"1713","scenarioId":"1717","location":{"line":27,"column":5,"path":"subscribe/events/file/receiving-file-event.feature"},"text":"the message is not empty","keyword":"*"},"1714":{"type":"step","id":"1714","scenarioId":"1717","location":{"line":28,"column":5,"path":"subscribe/events/file/receiving-file-event.feature"},"text":"the fileId is 'file1'","keyword":"*"},"1715":{"type":"step","id":"1715","scenarioId":"1717","location":{"line":29,"column":5,"path":"subscribe/events/file/receiving-file-event.feature"},"text":"the fileName is 'file 1'","keyword":"*"},"1716":{"type":"step","id":"1716","scenarioId":"1717","location":{"line":30,"column":5,"path":"subscribe/events/file/receiving-file-event.feature"},"text":"the fileUrl is 'http://pubnub.com/test-file'","keyword":"*"},"1719":{"type":"step","id":"1719","scenarioId":"1728","location":{"line":7,"column":5,"path":"subscribe/events/message/receiving-message-event.feature"},"text":"undelivered messages contains a message event","keyword":"Given"},"1720":{"type":"step","id":"1720","scenarioId":"1728","location":{"line":8,"column":5,"path":"subscribe/events/message/receiving-message-event.feature"},"text":"the event is delivered","keyword":"When"},"1721":{"type":"step","id":"1721","scenarioId":"1728","location":{"line":9,"column":5,"path":"subscribe/events/message/receiving-message-event.feature"},"text":"the event information contains","keyword":"Then"},"1722":{"type":"step","id":"1722","scenarioId":"1728","location":{"line":10,"column":5,"path":"subscribe/events/message/receiving-message-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"1723":{"type":"step","id":"1723","scenarioId":"1728","location":{"line":11,"column":5,"path":"subscribe/events/message/receiving-message-event.feature"},"text":"the message is not empty","keyword":"*"},"1724":{"type":"step","id":"1724","scenarioId":"1728","location":{"line":12,"column":5,"path":"subscribe/events/message/receiving-message-event.feature"},"text":"the timetoken is not empty","keyword":"*"},"1725":{"type":"step","id":"1725","scenarioId":"1728","location":{"line":13,"column":5,"path":"subscribe/events/message/receiving-message-event.feature"},"text":"the publisher is 'my_uuid'","keyword":"*"},"1726":{"type":"step","id":"1726","scenarioId":"1728","location":{"line":14,"column":5,"path":"subscribe/events/message/receiving-message-event.feature"},"text":"the subscription is 'my_channel-pnpres'","keyword":"*"},"1727":{"type":"step","id":"1727","scenarioId":"1728","location":{"line":15,"column":5,"path":"subscribe/events/message/receiving-message-event.feature"},"text":"the userMetadata is empty","keyword":"*"},"1729":{"type":"step","id":"1729","scenarioId":"1738","location":{"line":18,"column":5,"path":"subscribe/events/message/receiving-message-event.feature"},"text":"undelivered messages contains a file event","keyword":"Given"},"1730":{"type":"step","id":"1730","scenarioId":"1738","location":{"line":19,"column":5,"path":"subscribe/events/message/receiving-message-event.feature"},"text":"the event is delivered","keyword":"When"},"1731":{"type":"step","id":"1731","scenarioId":"1738","location":{"line":20,"column":5,"path":"subscribe/events/message/receiving-message-event.feature"},"text":"the event information contains","keyword":"Then"},"1732":{"type":"step","id":"1732","scenarioId":"1738","location":{"line":21,"column":5,"path":"subscribe/events/message/receiving-message-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"1733":{"type":"step","id":"1733","scenarioId":"1738","location":{"line":22,"column":5,"path":"subscribe/events/message/receiving-message-event.feature"},"text":"the message is not empty","keyword":"*"},"1734":{"type":"step","id":"1734","scenarioId":"1738","location":{"line":23,"column":5,"path":"subscribe/events/message/receiving-message-event.feature"},"text":"the timetoken is not empty","keyword":"*"},"1735":{"type":"step","id":"1735","scenarioId":"1738","location":{"line":24,"column":5,"path":"subscribe/events/message/receiving-message-event.feature"},"text":"the publisher is 'my_uuid'","keyword":"*"},"1736":{"type":"step","id":"1736","scenarioId":"1738","location":{"line":25,"column":5,"path":"subscribe/events/message/receiving-message-event.feature"},"text":"the subscription is 'my_channel-pnpres'","keyword":"*"},"1737":{"type":"step","id":"1737","scenarioId":"1738","location":{"line":26,"column":5,"path":"subscribe/events/message/receiving-message-event.feature"},"text":"the userMetadata is not empty","keyword":"*"},"1740":{"type":"step","id":"1740","scenarioId":"1750","location":{"line":7,"column":5,"path":"subscribe/events/message-action/receiving-message-action-added-event.feature"},"text":"undelivered messages contains a message action added event","keyword":"Given"},"1741":{"type":"step","id":"1741","scenarioId":"1750","location":{"line":8,"column":5,"path":"subscribe/events/message-action/receiving-message-action-added-event.feature"},"text":"the event is delivered","keyword":"When"},"1742":{"type":"step","id":"1742","scenarioId":"1750","location":{"line":9,"column":5,"path":"subscribe/events/message-action/receiving-message-action-added-event.feature"},"text":"the event information contains","keyword":"Then"},"1743":{"type":"step","id":"1743","scenarioId":"1750","location":{"line":10,"column":5,"path":"subscribe/events/message-action/receiving-message-action-added-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"1744":{"type":"step","id":"1744","scenarioId":"1750","location":{"line":11,"column":5,"path":"subscribe/events/message-action/receiving-message-action-added-event.feature"},"text":"the publisher is 'my_uuid'","keyword":"*"},"1745":{"type":"step","id":"1745","scenarioId":"1750","location":{"line":12,"column":5,"path":"subscribe/events/message-action/receiving-message-action-added-event.feature"},"text":"the event is 'added'","keyword":"*"},"1746":{"type":"step","id":"1746","scenarioId":"1750","location":{"line":13,"column":5,"path":"subscribe/events/message-action/receiving-message-action-added-event.feature"},"text":"the data has type 'action-type'","keyword":"*"},"1747":{"type":"step","id":"1747","scenarioId":"1750","location":{"line":14,"column":5,"path":"subscribe/events/message-action/receiving-message-action-added-event.feature"},"text":"the data has value 'action-value-is-here'","keyword":"*"},"1748":{"type":"step","id":"1748","scenarioId":"1750","location":{"line":15,"column":5,"path":"subscribe/events/message-action/receiving-message-action-added-event.feature"},"text":"the data has messageTimetoken not empty","keyword":"*"},"1749":{"type":"step","id":"1749","scenarioId":"1750","location":{"line":16,"column":5,"path":"subscribe/events/message-action/receiving-message-action-added-event.feature"},"text":"the data has actionTimetoken not empty","keyword":"*"},"1752":{"type":"step","id":"1752","scenarioId":"1762","location":{"line":7,"column":5,"path":"subscribe/events/message-action/receiving-message-action-removed-event.feature"},"text":"undelivered messages contains a message action removed event","keyword":"Given"},"1753":{"type":"step","id":"1753","scenarioId":"1762","location":{"line":8,"column":5,"path":"subscribe/events/message-action/receiving-message-action-removed-event.feature"},"text":"the event is delivered","keyword":"When"},"1754":{"type":"step","id":"1754","scenarioId":"1762","location":{"line":9,"column":5,"path":"subscribe/events/message-action/receiving-message-action-removed-event.feature"},"text":"the event information contains","keyword":"Then"},"1755":{"type":"step","id":"1755","scenarioId":"1762","location":{"line":10,"column":5,"path":"subscribe/events/message-action/receiving-message-action-removed-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"1756":{"type":"step","id":"1756","scenarioId":"1762","location":{"line":11,"column":5,"path":"subscribe/events/message-action/receiving-message-action-removed-event.feature"},"text":"the publisher is 'my_uuid'","keyword":"*"},"1757":{"type":"step","id":"1757","scenarioId":"1762","location":{"line":12,"column":5,"path":"subscribe/events/message-action/receiving-message-action-removed-event.feature"},"text":"the event is 'removed'","keyword":"*"},"1758":{"type":"step","id":"1758","scenarioId":"1762","location":{"line":13,"column":5,"path":"subscribe/events/message-action/receiving-message-action-removed-event.feature"},"text":"the data has type 'action-type'","keyword":"*"},"1759":{"type":"step","id":"1759","scenarioId":"1762","location":{"line":14,"column":5,"path":"subscribe/events/message-action/receiving-message-action-removed-event.feature"},"text":"the data has value 'action-value-is-here'","keyword":"*"},"1760":{"type":"step","id":"1760","scenarioId":"1762","location":{"line":15,"column":5,"path":"subscribe/events/message-action/receiving-message-action-removed-event.feature"},"text":"the data has messageTimetoken not empty","keyword":"*"},"1761":{"type":"step","id":"1761","scenarioId":"1762","location":{"line":16,"column":5,"path":"subscribe/events/message-action/receiving-message-action-removed-event.feature"},"text":"the data has actionTimetoken not empty","keyword":"*"},"1764":{"type":"step","id":"1764","scenarioId":"1773","location":{"line":7,"column":5,"path":"subscribe/events/object/channel-metadata-removed-event.feature"},"text":"undelivered messages contains a channel metadata removed event","keyword":"Given"},"1765":{"type":"step","id":"1765","scenarioId":"1773","location":{"line":8,"column":5,"path":"subscribe/events/object/channel-metadata-removed-event.feature"},"text":"the event is delivered","keyword":"When"},"1766":{"type":"step","id":"1766","scenarioId":"1773","location":{"line":9,"column":5,"path":"subscribe/events/object/channel-metadata-removed-event.feature"},"text":"the event information contains","keyword":"Then"},"1767":{"type":"step","id":"1767","scenarioId":"1773","location":{"line":10,"column":5,"path":"subscribe/events/object/channel-metadata-removed-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"1768":{"type":"step","id":"1768","scenarioId":"1773","location":{"line":11,"column":5,"path":"subscribe/events/object/channel-metadata-removed-event.feature"},"text":"the subscription is 'my_channel'","keyword":"*"},"1769":{"type":"step","id":"1769","scenarioId":"1773","location":{"line":12,"column":5,"path":"subscribe/events/object/channel-metadata-removed-event.feature"},"text":"the timetoken is not empty","keyword":"*"},"1770":{"type":"step","id":"1770","scenarioId":"1773","location":{"line":13,"column":5,"path":"subscribe/events/object/channel-metadata-removed-event.feature"},"text":"the message type is 'channel'","keyword":"*"},"1771":{"type":"step","id":"1771","scenarioId":"1773","location":{"line":14,"column":5,"path":"subscribe/events/object/channel-metadata-removed-event.feature"},"text":"the message event is 'delete'","keyword":"*"},"1772":{"type":"step","id":"1772","scenarioId":"1773","location":{"line":15,"column":5,"path":"subscribe/events/object/channel-metadata-removed-event.feature"},"text":"the message data has id not empty","keyword":"*"},"1774":{"type":"step","id":"1774","scenarioId":"1783","location":{"line":18,"column":5,"path":"subscribe/events/object/channel-metadata-removed-event.feature"},"text":"undelivered messages contains a channel metadata removed event","keyword":"Given"},"1775":{"type":"step","id":"1775","scenarioId":"1783","location":{"line":19,"column":5,"path":"subscribe/events/object/channel-metadata-removed-event.feature"},"text":"the event is delivered","keyword":"When"},"1776":{"type":"step","id":"1776","scenarioId":"1783","location":{"line":20,"column":5,"path":"subscribe/events/object/channel-metadata-removed-event.feature"},"text":"the event information contains","keyword":"Then"},"1777":{"type":"step","id":"1777","scenarioId":"1783","location":{"line":21,"column":5,"path":"subscribe/events/object/channel-metadata-removed-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"1778":{"type":"step","id":"1778","scenarioId":"1783","location":{"line":22,"column":5,"path":"subscribe/events/object/channel-metadata-removed-event.feature"},"text":"the subscription is 'my_channel'","keyword":"*"},"1779":{"type":"step","id":"1779","scenarioId":"1783","location":{"line":23,"column":5,"path":"subscribe/events/object/channel-metadata-removed-event.feature"},"text":"the timetoken is not empty","keyword":"*"},"1780":{"type":"step","id":"1780","scenarioId":"1783","location":{"line":24,"column":5,"path":"subscribe/events/object/channel-metadata-removed-event.feature"},"text":"the message type is 'channel'","keyword":"*"},"1781":{"type":"step","id":"1781","scenarioId":"1783","location":{"line":25,"column":5,"path":"subscribe/events/object/channel-metadata-removed-event.feature"},"text":"the message event is 'delete'","keyword":"*"},"1782":{"type":"step","id":"1782","scenarioId":"1783","location":{"line":26,"column":5,"path":"subscribe/events/object/channel-metadata-removed-event.feature"},"text":"the message data has id not empty","keyword":"*"},"1785":{"type":"step","id":"1785","scenarioId":"1797","location":{"line":7,"column":5,"path":"subscribe/events/object/channel-metadata-set-event.feature"},"text":"undelivered messages contains a channel metadata set event","keyword":"Given"},"1786":{"type":"step","id":"1786","scenarioId":"1797","location":{"line":8,"column":5,"path":"subscribe/events/object/channel-metadata-set-event.feature"},"text":"the event is delivered","keyword":"When"},"1787":{"type":"step","id":"1787","scenarioId":"1797","location":{"line":9,"column":5,"path":"subscribe/events/object/channel-metadata-set-event.feature"},"text":"the event information contains","keyword":"Then"},"1788":{"type":"step","id":"1788","scenarioId":"1797","location":{"line":10,"column":5,"path":"subscribe/events/object/channel-metadata-set-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"1789":{"type":"step","id":"1789","scenarioId":"1797","location":{"line":11,"column":5,"path":"subscribe/events/object/channel-metadata-set-event.feature"},"text":"the subscription is 'my_channel'","keyword":"*"},"1790":{"type":"step","id":"1790","scenarioId":"1797","location":{"line":12,"column":5,"path":"subscribe/events/object/channel-metadata-set-event.feature"},"text":"the timetoken is not empty","keyword":"*"},"1791":{"type":"step","id":"1791","scenarioId":"1797","location":{"line":13,"column":5,"path":"subscribe/events/object/channel-metadata-set-event.feature"},"text":"the message type is 'channel'","keyword":"*"},"1792":{"type":"step","id":"1792","scenarioId":"1797","location":{"line":14,"column":5,"path":"subscribe/events/object/channel-metadata-set-event.feature"},"text":"the message event is 'set'","keyword":"*"},"1793":{"type":"step","id":"1793","scenarioId":"1797","location":{"line":15,"column":5,"path":"subscribe/events/object/channel-metadata-set-event.feature"},"text":"the message data has id not empty","keyword":"*"},"1794":{"type":"step","id":"1794","scenarioId":"1797","location":{"line":16,"column":5,"path":"subscribe/events/object/channel-metadata-set-event.feature"},"text":"the message data has eTag not empty","keyword":"*"},"1795":{"type":"step","id":"1795","scenarioId":"1797","location":{"line":17,"column":5,"path":"subscribe/events/object/channel-metadata-set-event.feature"},"text":"the message data has updated not empty","keyword":"*"},"1796":{"type":"step","id":"1796","scenarioId":"1797","location":{"line":18,"column":5,"path":"subscribe/events/object/channel-metadata-set-event.feature"},"text":"the message data has custom not empty","keyword":"*"},"1798":{"type":"step","id":"1798","scenarioId":"1810","location":{"line":21,"column":5,"path":"subscribe/events/object/channel-metadata-set-event.feature"},"text":"undelivered messages contains a channel metadata set event","keyword":"Given"},"1799":{"type":"step","id":"1799","scenarioId":"1810","location":{"line":22,"column":5,"path":"subscribe/events/object/channel-metadata-set-event.feature"},"text":"the event is delivered","keyword":"When"},"1800":{"type":"step","id":"1800","scenarioId":"1810","location":{"line":23,"column":5,"path":"subscribe/events/object/channel-metadata-set-event.feature"},"text":"the event information contains","keyword":"Then"},"1801":{"type":"step","id":"1801","scenarioId":"1810","location":{"line":24,"column":5,"path":"subscribe/events/object/channel-metadata-set-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"1802":{"type":"step","id":"1802","scenarioId":"1810","location":{"line":25,"column":5,"path":"subscribe/events/object/channel-metadata-set-event.feature"},"text":"the subscription is 'my_channel'","keyword":"*"},"1803":{"type":"step","id":"1803","scenarioId":"1810","location":{"line":26,"column":5,"path":"subscribe/events/object/channel-metadata-set-event.feature"},"text":"the timetoken is not empty","keyword":"*"},"1804":{"type":"step","id":"1804","scenarioId":"1810","location":{"line":27,"column":5,"path":"subscribe/events/object/channel-metadata-set-event.feature"},"text":"the message type is 'channel'","keyword":"*"},"1805":{"type":"step","id":"1805","scenarioId":"1810","location":{"line":28,"column":5,"path":"subscribe/events/object/channel-metadata-set-event.feature"},"text":"the message event is 'set'","keyword":"*"},"1806":{"type":"step","id":"1806","scenarioId":"1810","location":{"line":29,"column":5,"path":"subscribe/events/object/channel-metadata-set-event.feature"},"text":"the message data has id not empty","keyword":"*"},"1807":{"type":"step","id":"1807","scenarioId":"1810","location":{"line":30,"column":5,"path":"subscribe/events/object/channel-metadata-set-event.feature"},"text":"the message data has eTag not empty","keyword":"*"},"1808":{"type":"step","id":"1808","scenarioId":"1810","location":{"line":31,"column":5,"path":"subscribe/events/object/channel-metadata-set-event.feature"},"text":"the message data has updated not empty","keyword":"*"},"1809":{"type":"step","id":"1809","scenarioId":"1810","location":{"line":32,"column":5,"path":"subscribe/events/object/channel-metadata-set-event.feature"},"text":"the message data has custom empty","keyword":"*"},"1812":{"type":"step","id":"1812","scenarioId":"1822","location":{"line":7,"column":5,"path":"subscribe/events/object/membership-removed-event.feature"},"text":"undelivered messages contains a membership removed event","keyword":"Given"},"1813":{"type":"step","id":"1813","scenarioId":"1822","location":{"line":8,"column":5,"path":"subscribe/events/object/membership-removed-event.feature"},"text":"the event is delivered","keyword":"When"},"1814":{"type":"step","id":"1814","scenarioId":"1822","location":{"line":9,"column":5,"path":"subscribe/events/object/membership-removed-event.feature"},"text":"the event information contains","keyword":"Then"},"1815":{"type":"step","id":"1815","scenarioId":"1822","location":{"line":10,"column":5,"path":"subscribe/events/object/membership-removed-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"1816":{"type":"step","id":"1816","scenarioId":"1822","location":{"line":11,"column":5,"path":"subscribe/events/object/membership-removed-event.feature"},"text":"the subscription is 'my_channel'","keyword":"*"},"1817":{"type":"step","id":"1817","scenarioId":"1822","location":{"line":12,"column":5,"path":"subscribe/events/object/membership-removed-event.feature"},"text":"the timetoken is not empty","keyword":"*"},"1818":{"type":"step","id":"1818","scenarioId":"1822","location":{"line":13,"column":5,"path":"subscribe/events/object/membership-removed-event.feature"},"text":"the message type is 'membership'","keyword":"*"},"1819":{"type":"step","id":"1819","scenarioId":"1822","location":{"line":14,"column":5,"path":"subscribe/events/object/membership-removed-event.feature"},"text":"the message event is 'delete'","keyword":"*"},"1820":{"type":"step","id":"1820","scenarioId":"1822","location":{"line":15,"column":5,"path":"subscribe/events/object/membership-removed-event.feature"},"text":"the message data has channel id not empty","keyword":"*"},"1821":{"type":"step","id":"1821","scenarioId":"1822","location":{"line":16,"column":5,"path":"subscribe/events/object/membership-removed-event.feature"},"text":"the message data has uuid id not empty","keyword":"*"},"1823":{"type":"step","id":"1823","scenarioId":"1833","location":{"line":19,"column":5,"path":"subscribe/events/object/membership-removed-event.feature"},"text":"undelivered messages contains a membership removed event","keyword":"Given"},"1824":{"type":"step","id":"1824","scenarioId":"1833","location":{"line":20,"column":5,"path":"subscribe/events/object/membership-removed-event.feature"},"text":"the event is delivered","keyword":"When"},"1825":{"type":"step","id":"1825","scenarioId":"1833","location":{"line":21,"column":5,"path":"subscribe/events/object/membership-removed-event.feature"},"text":"the event information contains","keyword":"Then"},"1826":{"type":"step","id":"1826","scenarioId":"1833","location":{"line":22,"column":5,"path":"subscribe/events/object/membership-removed-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"1827":{"type":"step","id":"1827","scenarioId":"1833","location":{"line":23,"column":5,"path":"subscribe/events/object/membership-removed-event.feature"},"text":"the subscription is 'my_channel'","keyword":"*"},"1828":{"type":"step","id":"1828","scenarioId":"1833","location":{"line":24,"column":5,"path":"subscribe/events/object/membership-removed-event.feature"},"text":"the timetoken is not empty","keyword":"*"},"1829":{"type":"step","id":"1829","scenarioId":"1833","location":{"line":25,"column":5,"path":"subscribe/events/object/membership-removed-event.feature"},"text":"the message type is 'membership'","keyword":"*"},"1830":{"type":"step","id":"1830","scenarioId":"1833","location":{"line":26,"column":5,"path":"subscribe/events/object/membership-removed-event.feature"},"text":"the message event is 'delete'","keyword":"*"},"1831":{"type":"step","id":"1831","scenarioId":"1833","location":{"line":27,"column":5,"path":"subscribe/events/object/membership-removed-event.feature"},"text":"the message data has channel id not empty","keyword":"*"},"1832":{"type":"step","id":"1832","scenarioId":"1833","location":{"line":28,"column":5,"path":"subscribe/events/object/membership-removed-event.feature"},"text":"the message data has uuid id not empty","keyword":"*"},"1835":{"type":"step","id":"1835","scenarioId":"1846","location":{"line":7,"column":5,"path":"subscribe/events/object/membership-set-event.feature"},"text":"undelivered messages contains a membership added event","keyword":"Given"},"1836":{"type":"step","id":"1836","scenarioId":"1846","location":{"line":8,"column":5,"path":"subscribe/events/object/membership-set-event.feature"},"text":"the event is delivered","keyword":"When"},"1837":{"type":"step","id":"1837","scenarioId":"1846","location":{"line":9,"column":5,"path":"subscribe/events/object/membership-set-event.feature"},"text":"the event information contains","keyword":"Then"},"1838":{"type":"step","id":"1838","scenarioId":"1846","location":{"line":10,"column":5,"path":"subscribe/events/object/membership-set-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"1839":{"type":"step","id":"1839","scenarioId":"1846","location":{"line":11,"column":5,"path":"subscribe/events/object/membership-set-event.feature"},"text":"the subscription is 'my_channel'","keyword":"*"},"1840":{"type":"step","id":"1840","scenarioId":"1846","location":{"line":12,"column":5,"path":"subscribe/events/object/membership-set-event.feature"},"text":"the timetoken is not empty","keyword":"*"},"1841":{"type":"step","id":"1841","scenarioId":"1846","location":{"line":13,"column":5,"path":"subscribe/events/object/membership-set-event.feature"},"text":"the message type is 'membership'","keyword":"*"},"1842":{"type":"step","id":"1842","scenarioId":"1846","location":{"line":14,"column":5,"path":"subscribe/events/object/membership-set-event.feature"},"text":"the message event is 'set'","keyword":"*"},"1843":{"type":"step","id":"1843","scenarioId":"1846","location":{"line":15,"column":5,"path":"subscribe/events/object/membership-set-event.feature"},"text":"the message data has channel id not empty","keyword":"*"},"1844":{"type":"step","id":"1844","scenarioId":"1846","location":{"line":16,"column":5,"path":"subscribe/events/object/membership-set-event.feature"},"text":"the message data has uuid id not empty","keyword":"*"},"1845":{"type":"step","id":"1845","scenarioId":"1846","location":{"line":17,"column":5,"path":"subscribe/events/object/membership-set-event.feature"},"text":"the message data has custom not empty","keyword":"*"},"1847":{"type":"step","id":"1847","scenarioId":"1858","location":{"line":20,"column":5,"path":"subscribe/events/object/membership-set-event.feature"},"text":"undelivered messages contains a membership added event","keyword":"Given"},"1848":{"type":"step","id":"1848","scenarioId":"1858","location":{"line":21,"column":5,"path":"subscribe/events/object/membership-set-event.feature"},"text":"the event is delivered","keyword":"When"},"1849":{"type":"step","id":"1849","scenarioId":"1858","location":{"line":22,"column":5,"path":"subscribe/events/object/membership-set-event.feature"},"text":"the event information contains","keyword":"Then"},"1850":{"type":"step","id":"1850","scenarioId":"1858","location":{"line":23,"column":5,"path":"subscribe/events/object/membership-set-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"1851":{"type":"step","id":"1851","scenarioId":"1858","location":{"line":24,"column":5,"path":"subscribe/events/object/membership-set-event.feature"},"text":"the subscription is 'my_channel'","keyword":"*"},"1852":{"type":"step","id":"1852","scenarioId":"1858","location":{"line":25,"column":5,"path":"subscribe/events/object/membership-set-event.feature"},"text":"the timetoken is not empty","keyword":"*"},"1853":{"type":"step","id":"1853","scenarioId":"1858","location":{"line":26,"column":5,"path":"subscribe/events/object/membership-set-event.feature"},"text":"the message type is 'membership'","keyword":"*"},"1854":{"type":"step","id":"1854","scenarioId":"1858","location":{"line":27,"column":5,"path":"subscribe/events/object/membership-set-event.feature"},"text":"the message event is 'set'","keyword":"*"},"1855":{"type":"step","id":"1855","scenarioId":"1858","location":{"line":28,"column":5,"path":"subscribe/events/object/membership-set-event.feature"},"text":"the message data has channel id not empty","keyword":"*"},"1856":{"type":"step","id":"1856","scenarioId":"1858","location":{"line":29,"column":5,"path":"subscribe/events/object/membership-set-event.feature"},"text":"the message data has uuid id not empty","keyword":"*"},"1857":{"type":"step","id":"1857","scenarioId":"1858","location":{"line":30,"column":5,"path":"subscribe/events/object/membership-set-event.feature"},"text":"the message data has custom not empty","keyword":"*"},"1860":{"type":"step","id":"1860","scenarioId":"1869","location":{"line":7,"column":5,"path":"subscribe/events/object/user-metadata-removed-event.feature"},"text":"undelivered messages contains a uuid metadata removed event","keyword":"Given"},"1861":{"type":"step","id":"1861","scenarioId":"1869","location":{"line":8,"column":5,"path":"subscribe/events/object/user-metadata-removed-event.feature"},"text":"the event is delivered","keyword":"When"},"1862":{"type":"step","id":"1862","scenarioId":"1869","location":{"line":9,"column":5,"path":"subscribe/events/object/user-metadata-removed-event.feature"},"text":"the event information contains","keyword":"Then"},"1863":{"type":"step","id":"1863","scenarioId":"1869","location":{"line":10,"column":5,"path":"subscribe/events/object/user-metadata-removed-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"1864":{"type":"step","id":"1864","scenarioId":"1869","location":{"line":11,"column":5,"path":"subscribe/events/object/user-metadata-removed-event.feature"},"text":"the subscription is 'my_channel'","keyword":"*"},"1865":{"type":"step","id":"1865","scenarioId":"1869","location":{"line":12,"column":5,"path":"subscribe/events/object/user-metadata-removed-event.feature"},"text":"the timetoken is not empty","keyword":"*"},"1866":{"type":"step","id":"1866","scenarioId":"1869","location":{"line":13,"column":5,"path":"subscribe/events/object/user-metadata-removed-event.feature"},"text":"the message type is 'uuid'","keyword":"*"},"1867":{"type":"step","id":"1867","scenarioId":"1869","location":{"line":14,"column":5,"path":"subscribe/events/object/user-metadata-removed-event.feature"},"text":"the message event is 'delete'","keyword":"*"},"1868":{"type":"step","id":"1868","scenarioId":"1869","location":{"line":15,"column":5,"path":"subscribe/events/object/user-metadata-removed-event.feature"},"text":"the message data has id not empty","keyword":"*"},"1870":{"type":"step","id":"1870","scenarioId":"1879","location":{"line":18,"column":5,"path":"subscribe/events/object/user-metadata-removed-event.feature"},"text":"undelivered messages contains a uuid metadata removed event","keyword":"Given"},"1871":{"type":"step","id":"1871","scenarioId":"1879","location":{"line":19,"column":5,"path":"subscribe/events/object/user-metadata-removed-event.feature"},"text":"the event is delivered","keyword":"When"},"1872":{"type":"step","id":"1872","scenarioId":"1879","location":{"line":20,"column":5,"path":"subscribe/events/object/user-metadata-removed-event.feature"},"text":"the event information contains","keyword":"Then"},"1873":{"type":"step","id":"1873","scenarioId":"1879","location":{"line":21,"column":5,"path":"subscribe/events/object/user-metadata-removed-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"1874":{"type":"step","id":"1874","scenarioId":"1879","location":{"line":22,"column":5,"path":"subscribe/events/object/user-metadata-removed-event.feature"},"text":"the subscription is 'my_channel'","keyword":"*"},"1875":{"type":"step","id":"1875","scenarioId":"1879","location":{"line":23,"column":5,"path":"subscribe/events/object/user-metadata-removed-event.feature"},"text":"the timetoken is not empty","keyword":"*"},"1876":{"type":"step","id":"1876","scenarioId":"1879","location":{"line":24,"column":5,"path":"subscribe/events/object/user-metadata-removed-event.feature"},"text":"the message type is 'uuid'","keyword":"*"},"1877":{"type":"step","id":"1877","scenarioId":"1879","location":{"line":25,"column":5,"path":"subscribe/events/object/user-metadata-removed-event.feature"},"text":"the message event is 'delete'","keyword":"*"},"1878":{"type":"step","id":"1878","scenarioId":"1879","location":{"line":26,"column":5,"path":"subscribe/events/object/user-metadata-removed-event.feature"},"text":"the message data has id not empty","keyword":"*"},"1881":{"type":"step","id":"1881","scenarioId":"1893","location":{"line":7,"column":5,"path":"subscribe/events/object/user-metadata-set-event.feature"},"text":"undelivered messages contains a uuid metadata set event","keyword":"Given"},"1882":{"type":"step","id":"1882","scenarioId":"1893","location":{"line":8,"column":5,"path":"subscribe/events/object/user-metadata-set-event.feature"},"text":"the event is delivered","keyword":"When"},"1883":{"type":"step","id":"1883","scenarioId":"1893","location":{"line":9,"column":5,"path":"subscribe/events/object/user-metadata-set-event.feature"},"text":"the event information contains","keyword":"Then"},"1884":{"type":"step","id":"1884","scenarioId":"1893","location":{"line":10,"column":5,"path":"subscribe/events/object/user-metadata-set-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"1885":{"type":"step","id":"1885","scenarioId":"1893","location":{"line":11,"column":5,"path":"subscribe/events/object/user-metadata-set-event.feature"},"text":"the subscription is 'my_channel'","keyword":"*"},"1886":{"type":"step","id":"1886","scenarioId":"1893","location":{"line":12,"column":5,"path":"subscribe/events/object/user-metadata-set-event.feature"},"text":"the timetoken is not empty","keyword":"*"},"1887":{"type":"step","id":"1887","scenarioId":"1893","location":{"line":13,"column":5,"path":"subscribe/events/object/user-metadata-set-event.feature"},"text":"the message type is 'uuid'","keyword":"*"},"1888":{"type":"step","id":"1888","scenarioId":"1893","location":{"line":14,"column":5,"path":"subscribe/events/object/user-metadata-set-event.feature"},"text":"the message event is 'set'","keyword":"*"},"1889":{"type":"step","id":"1889","scenarioId":"1893","location":{"line":15,"column":5,"path":"subscribe/events/object/user-metadata-set-event.feature"},"text":"the message data has id not empty","keyword":"*"},"1890":{"type":"step","id":"1890","scenarioId":"1893","location":{"line":16,"column":5,"path":"subscribe/events/object/user-metadata-set-event.feature"},"text":"the message data has eTag not empty","keyword":"*"},"1891":{"type":"step","id":"1891","scenarioId":"1893","location":{"line":17,"column":5,"path":"subscribe/events/object/user-metadata-set-event.feature"},"text":"the message data has updated not empty","keyword":"*"},"1892":{"type":"step","id":"1892","scenarioId":"1893","location":{"line":18,"column":5,"path":"subscribe/events/object/user-metadata-set-event.feature"},"text":"the message data has custom not empty","keyword":"*"},"1894":{"type":"step","id":"1894","scenarioId":"1906","location":{"line":21,"column":5,"path":"subscribe/events/object/user-metadata-set-event.feature"},"text":"undelivered messages contains a uuid metadata set event","keyword":"Given"},"1895":{"type":"step","id":"1895","scenarioId":"1906","location":{"line":22,"column":5,"path":"subscribe/events/object/user-metadata-set-event.feature"},"text":"the event is delivered","keyword":"When"},"1896":{"type":"step","id":"1896","scenarioId":"1906","location":{"line":23,"column":5,"path":"subscribe/events/object/user-metadata-set-event.feature"},"text":"the event information contains","keyword":"Then"},"1897":{"type":"step","id":"1897","scenarioId":"1906","location":{"line":24,"column":5,"path":"subscribe/events/object/user-metadata-set-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"1898":{"type":"step","id":"1898","scenarioId":"1906","location":{"line":25,"column":5,"path":"subscribe/events/object/user-metadata-set-event.feature"},"text":"the subscription is 'my_channel'","keyword":"*"},"1899":{"type":"step","id":"1899","scenarioId":"1906","location":{"line":26,"column":5,"path":"subscribe/events/object/user-metadata-set-event.feature"},"text":"the timetoken is not empty","keyword":"*"},"1900":{"type":"step","id":"1900","scenarioId":"1906","location":{"line":27,"column":5,"path":"subscribe/events/object/user-metadata-set-event.feature"},"text":"the message type is 'uuid'","keyword":"*"},"1901":{"type":"step","id":"1901","scenarioId":"1906","location":{"line":28,"column":5,"path":"subscribe/events/object/user-metadata-set-event.feature"},"text":"the message event is 'set'","keyword":"*"},"1902":{"type":"step","id":"1902","scenarioId":"1906","location":{"line":29,"column":5,"path":"subscribe/events/object/user-metadata-set-event.feature"},"text":"the message data has id not empty","keyword":"*"},"1903":{"type":"step","id":"1903","scenarioId":"1906","location":{"line":30,"column":5,"path":"subscribe/events/object/user-metadata-set-event.feature"},"text":"the message data has eTag not empty","keyword":"*"},"1904":{"type":"step","id":"1904","scenarioId":"1906","location":{"line":31,"column":5,"path":"subscribe/events/object/user-metadata-set-event.feature"},"text":"the message data has updated not empty","keyword":"*"},"1905":{"type":"step","id":"1905","scenarioId":"1906","location":{"line":32,"column":5,"path":"subscribe/events/object/user-metadata-set-event.feature"},"text":"the message data has custom empty","keyword":"*"},"1909":{"type":"step","id":"1909","scenarioId":"1918","location":{"line":7,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"undelivered messages contains a join announcement","keyword":"Given"},"1910":{"type":"step","id":"1910","scenarioId":"1918","location":{"line":8,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the event is delivered","keyword":"When"},"1911":{"type":"step","id":"1911","scenarioId":"1918","location":{"line":9,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the event information contains","keyword":"Then"},"1912":{"type":"step","id":"1912","scenarioId":"1918","location":{"line":10,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the action is 'join'","keyword":"*"},"1913":{"type":"step","id":"1913","scenarioId":"1918","location":{"line":11,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"1914":{"type":"step","id":"1914","scenarioId":"1918","location":{"line":12,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the timestamp is not empty","keyword":"*"},"1915":{"type":"step","id":"1915","scenarioId":"1918","location":{"line":13,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the subscribedChannel is 'my_channel-pnpres'","keyword":"*"},"1916":{"type":"step","id":"1916","scenarioId":"1918","location":{"line":14,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the occupancy is 2","keyword":"*"},"1917":{"type":"step","id":"1917","scenarioId":"1918","location":{"line":15,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the uuid is 'uuid1'","keyword":"*"},"1919":{"type":"step","id":"1919","scenarioId":"1927","location":{"line":18,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"undelivered messages contains a join interval","keyword":"Given"},"1920":{"type":"step","id":"1920","scenarioId":"1927","location":{"line":19,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the event is delivered","keyword":"When"},"1921":{"type":"step","id":"1921","scenarioId":"1927","location":{"line":20,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the event information contains","keyword":"Then"},"1922":{"type":"step","id":"1922","scenarioId":"1927","location":{"line":21,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the action is 'interval'","keyword":"*"},"1923":{"type":"step","id":"1923","scenarioId":"1927","location":{"line":22,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"1924":{"type":"step","id":"1924","scenarioId":"1927","location":{"line":23,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the timestamp is not empty","keyword":"*"},"1925":{"type":"step","id":"1925","scenarioId":"1927","location":{"line":24,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the subscribedChannel is 'my_channel-pnpres'","keyword":"*"},"1926":{"type":"step","id":"1926","scenarioId":"1927","location":{"line":25,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the occupancy is 21","keyword":"*"},"1928":{"type":"step","id":"1928","scenarioId":"1937","location":{"line":28,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"undelivered messages contains a join interval","keyword":"Given"},"1929":{"type":"step","id":"1929","scenarioId":"1937","location":{"line":29,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the event is delivered","keyword":"When"},"1930":{"type":"step","id":"1930","scenarioId":"1937","location":{"line":30,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the event information contains","keyword":"Then"},"1931":{"type":"step","id":"1931","scenarioId":"1937","location":{"line":31,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the action is 'interval'","keyword":"*"},"1932":{"type":"step","id":"1932","scenarioId":"1937","location":{"line":32,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"1933":{"type":"step","id":"1933","scenarioId":"1937","location":{"line":33,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the timestamp is not empty","keyword":"*"},"1934":{"type":"step","id":"1934","scenarioId":"1937","location":{"line":34,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the subscribedChannel is 'my_channel-pnpres'","keyword":"*"},"1935":{"type":"step","id":"1935","scenarioId":"1937","location":{"line":35,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the occupancy is 21","keyword":"*"},"1936":{"type":"step","id":"1936","scenarioId":"1937","location":{"line":36,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"join is 'uuid1,uuid2'","keyword":"*"},"1938":{"type":"step","id":"1938","scenarioId":"1947","location":{"line":39,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"undelivered messages contains a join interval","keyword":"Given"},"1939":{"type":"step","id":"1939","scenarioId":"1947","location":{"line":40,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the event is delivered","keyword":"When"},"1940":{"type":"step","id":"1940","scenarioId":"1947","location":{"line":41,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the event information contains","keyword":"Then"},"1941":{"type":"step","id":"1941","scenarioId":"1947","location":{"line":42,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the action is 'interval'","keyword":"*"},"1942":{"type":"step","id":"1942","scenarioId":"1947","location":{"line":43,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"1943":{"type":"step","id":"1943","scenarioId":"1947","location":{"line":44,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the timestamp is not empty","keyword":"*"},"1944":{"type":"step","id":"1944","scenarioId":"1947","location":{"line":45,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the subscribedChannel is 'my_channel-pnpres'","keyword":"*"},"1945":{"type":"step","id":"1945","scenarioId":"1947","location":{"line":46,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"the occupancy is 21","keyword":"*"},"1946":{"type":"step","id":"1946","scenarioId":"1947","location":{"line":47,"column":5,"path":"subscribe/events/presence/receiving-join-event.feature"},"text":"here_now_refresh is True","keyword":"*"},"1949":{"type":"step","id":"1949","scenarioId":"1958","location":{"line":7,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"undelivered messages contains a leave announcement","keyword":"Given"},"1950":{"type":"step","id":"1950","scenarioId":"1958","location":{"line":8,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the event is delivered","keyword":"When"},"1951":{"type":"step","id":"1951","scenarioId":"1958","location":{"line":9,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the event information contains","keyword":"Then"},"1952":{"type":"step","id":"1952","scenarioId":"1958","location":{"line":10,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the action is 'leave'","keyword":"*"},"1953":{"type":"step","id":"1953","scenarioId":"1958","location":{"line":11,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"1954":{"type":"step","id":"1954","scenarioId":"1958","location":{"line":12,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the timestamp is not empty","keyword":"*"},"1955":{"type":"step","id":"1955","scenarioId":"1958","location":{"line":13,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the subscribedChannel is 'my_channel-pnpres'","keyword":"*"},"1956":{"type":"step","id":"1956","scenarioId":"1958","location":{"line":14,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the occupancy is 2","keyword":"*"},"1957":{"type":"step","id":"1957","scenarioId":"1958","location":{"line":15,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the uuid is 'uuid1'","keyword":"*"},"1959":{"type":"step","id":"1959","scenarioId":"1967","location":{"line":18,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"undelivered messages contains a leave interval","keyword":"Given"},"1960":{"type":"step","id":"1960","scenarioId":"1967","location":{"line":19,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the event is delivered","keyword":"When"},"1961":{"type":"step","id":"1961","scenarioId":"1967","location":{"line":20,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the event information contains","keyword":"Then"},"1962":{"type":"step","id":"1962","scenarioId":"1967","location":{"line":21,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the action is 'interval'","keyword":"*"},"1963":{"type":"step","id":"1963","scenarioId":"1967","location":{"line":22,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"1964":{"type":"step","id":"1964","scenarioId":"1967","location":{"line":23,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the timestamp is not empty","keyword":"*"},"1965":{"type":"step","id":"1965","scenarioId":"1967","location":{"line":24,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the subscribedChannel is 'my_channel-pnpres'","keyword":"*"},"1966":{"type":"step","id":"1966","scenarioId":"1967","location":{"line":25,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the occupancy is 21","keyword":"*"},"1968":{"type":"step","id":"1968","scenarioId":"1977","location":{"line":28,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"undelivered messages contains a leave interval","keyword":"Given"},"1969":{"type":"step","id":"1969","scenarioId":"1977","location":{"line":29,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the event is delivered","keyword":"When"},"1970":{"type":"step","id":"1970","scenarioId":"1977","location":{"line":30,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the event information contains","keyword":"Then"},"1971":{"type":"step","id":"1971","scenarioId":"1977","location":{"line":31,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the action is 'interval'","keyword":"*"},"1972":{"type":"step","id":"1972","scenarioId":"1977","location":{"line":32,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"1973":{"type":"step","id":"1973","scenarioId":"1977","location":{"line":33,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the timestamp is not empty","keyword":"*"},"1974":{"type":"step","id":"1974","scenarioId":"1977","location":{"line":34,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the subscribedChannel is 'my_channel-pnpres'","keyword":"*"},"1975":{"type":"step","id":"1975","scenarioId":"1977","location":{"line":35,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the occupancy is 21","keyword":"*"},"1976":{"type":"step","id":"1976","scenarioId":"1977","location":{"line":36,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"leave is 'uuid1,uuid2'","keyword":"*"},"1978":{"type":"step","id":"1978","scenarioId":"1987","location":{"line":39,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"undelivered messages contains a leave interval","keyword":"Given"},"1979":{"type":"step","id":"1979","scenarioId":"1987","location":{"line":40,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the event is delivered","keyword":"When"},"1980":{"type":"step","id":"1980","scenarioId":"1987","location":{"line":41,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the event information contains","keyword":"Then"},"1981":{"type":"step","id":"1981","scenarioId":"1987","location":{"line":42,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the action is 'interval'","keyword":"*"},"1982":{"type":"step","id":"1982","scenarioId":"1987","location":{"line":43,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"1983":{"type":"step","id":"1983","scenarioId":"1987","location":{"line":44,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the timestamp is not empty","keyword":"*"},"1984":{"type":"step","id":"1984","scenarioId":"1987","location":{"line":45,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the subscribedChannel is 'my_channel-pnpres'","keyword":"*"},"1985":{"type":"step","id":"1985","scenarioId":"1987","location":{"line":46,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"the occupancy is 21","keyword":"*"},"1986":{"type":"step","id":"1986","scenarioId":"1987","location":{"line":47,"column":5,"path":"subscribe/events/presence/receiving-leave-event.feature"},"text":"here_now_refresh is True","keyword":"*"},"1989":{"type":"step","id":"1989","scenarioId":"2000","location":{"line":7,"column":5,"path":"subscribe/events/presence/receiving-state-change-event.feature"},"text":"undelivered messages contains a state-change event","keyword":"Given"},"1990":{"type":"step","id":"1990","scenarioId":"2000","location":{"line":8,"column":5,"path":"subscribe/events/presence/receiving-state-change-event.feature"},"text":"the event is delivered","keyword":"When"},"1991":{"type":"step","id":"1991","scenarioId":"2000","location":{"line":9,"column":5,"path":"subscribe/events/presence/receiving-state-change-event.feature"},"text":"the event information contains","keyword":"Then"},"1992":{"type":"step","id":"1992","scenarioId":"2000","location":{"line":10,"column":5,"path":"subscribe/events/presence/receiving-state-change-event.feature"},"text":"the action is 'state-change'","keyword":"*"},"1993":{"type":"step","id":"1993","scenarioId":"2000","location":{"line":11,"column":5,"path":"subscribe/events/presence/receiving-state-change-event.feature"},"text":"the state contains property 'isTyping' set to True","keyword":"*"},"1994":{"type":"step","id":"1994","scenarioId":"2000","location":{"line":12,"column":5,"path":"subscribe/events/presence/receiving-state-change-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"1995":{"type":"step","id":"1995","scenarioId":"2000","location":{"line":13,"column":5,"path":"subscribe/events/presence/receiving-state-change-event.feature"},"text":"the timestamp is not empty","keyword":"*"},"1996":{"type":"step","id":"1996","scenarioId":"2000","location":{"line":14,"column":5,"path":"subscribe/events/presence/receiving-state-change-event.feature"},"text":"the timetoken is not empty","keyword":"*"},"1997":{"type":"step","id":"1997","scenarioId":"2000","location":{"line":15,"column":5,"path":"subscribe/events/presence/receiving-state-change-event.feature"},"text":"the subscribedChannel is 'my_channel-pnpres'","keyword":"*"},"1998":{"type":"step","id":"1998","scenarioId":"2000","location":{"line":16,"column":5,"path":"subscribe/events/presence/receiving-state-change-event.feature"},"text":"the occupancy is 5","keyword":"*"},"1999":{"type":"step","id":"1999","scenarioId":"2000","location":{"line":17,"column":5,"path":"subscribe/events/presence/receiving-state-change-event.feature"},"text":"the uuid is 'uuid1'","keyword":"*"},"2002":{"type":"step","id":"2002","scenarioId":"2011","location":{"line":7,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"undelivered messages contains a timeout announcement","keyword":"Given"},"2003":{"type":"step","id":"2003","scenarioId":"2011","location":{"line":8,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the event is delivered","keyword":"When"},"2004":{"type":"step","id":"2004","scenarioId":"2011","location":{"line":9,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the event information contains","keyword":"Then"},"2005":{"type":"step","id":"2005","scenarioId":"2011","location":{"line":10,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the action is 'timeout'","keyword":"*"},"2006":{"type":"step","id":"2006","scenarioId":"2011","location":{"line":11,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"2007":{"type":"step","id":"2007","scenarioId":"2011","location":{"line":12,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the timestamp is not empty","keyword":"*"},"2008":{"type":"step","id":"2008","scenarioId":"2011","location":{"line":13,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the subscribedChannel is 'my_channel-pnpres'","keyword":"*"},"2009":{"type":"step","id":"2009","scenarioId":"2011","location":{"line":14,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the occupancy is 2","keyword":"*"},"2010":{"type":"step","id":"2010","scenarioId":"2011","location":{"line":15,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the uuid is 'uuid1'","keyword":"*"},"2012":{"type":"step","id":"2012","scenarioId":"2020","location":{"line":18,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"undelivered messages contains a timeout interval","keyword":"Given"},"2013":{"type":"step","id":"2013","scenarioId":"2020","location":{"line":19,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the event is delivered","keyword":"When"},"2014":{"type":"step","id":"2014","scenarioId":"2020","location":{"line":20,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the event information contains","keyword":"Then"},"2015":{"type":"step","id":"2015","scenarioId":"2020","location":{"line":21,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the action is 'interval'","keyword":"*"},"2016":{"type":"step","id":"2016","scenarioId":"2020","location":{"line":22,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"2017":{"type":"step","id":"2017","scenarioId":"2020","location":{"line":23,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the timestamp is not empty","keyword":"*"},"2018":{"type":"step","id":"2018","scenarioId":"2020","location":{"line":24,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the subscribedChannel is 'my_channel-pnpres'","keyword":"*"},"2019":{"type":"step","id":"2019","scenarioId":"2020","location":{"line":25,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the occupancy is 21","keyword":"*"},"2021":{"type":"step","id":"2021","scenarioId":"2030","location":{"line":28,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"undelivered messages contains a timeout interval","keyword":"Given"},"2022":{"type":"step","id":"2022","scenarioId":"2030","location":{"line":29,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the event is delivered","keyword":"When"},"2023":{"type":"step","id":"2023","scenarioId":"2030","location":{"line":30,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the event information contains","keyword":"Then"},"2024":{"type":"step","id":"2024","scenarioId":"2030","location":{"line":31,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the action is 'interval'","keyword":"*"},"2025":{"type":"step","id":"2025","scenarioId":"2030","location":{"line":32,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"2026":{"type":"step","id":"2026","scenarioId":"2030","location":{"line":33,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the timestamp is not empty","keyword":"*"},"2027":{"type":"step","id":"2027","scenarioId":"2030","location":{"line":34,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the subscribedChannel is 'my_channel-pnpres'","keyword":"*"},"2028":{"type":"step","id":"2028","scenarioId":"2030","location":{"line":35,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the occupancy is 21","keyword":"*"},"2029":{"type":"step","id":"2029","scenarioId":"2030","location":{"line":36,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"timeout is 'uuid1,uuid2'","keyword":"*"},"2031":{"type":"step","id":"2031","scenarioId":"2040","location":{"line":39,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"undelivered messages contains a timeout interval","keyword":"Given"},"2032":{"type":"step","id":"2032","scenarioId":"2040","location":{"line":40,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the event is delivered","keyword":"When"},"2033":{"type":"step","id":"2033","scenarioId":"2040","location":{"line":41,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the event information contains","keyword":"Then"},"2034":{"type":"step","id":"2034","scenarioId":"2040","location":{"line":42,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the action is 'interval'","keyword":"*"},"2035":{"type":"step","id":"2035","scenarioId":"2040","location":{"line":43,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"2036":{"type":"step","id":"2036","scenarioId":"2040","location":{"line":44,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the timestamp is not empty","keyword":"*"},"2037":{"type":"step","id":"2037","scenarioId":"2040","location":{"line":45,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the subscribedChannel is 'my_channel-pnpres'","keyword":"*"},"2038":{"type":"step","id":"2038","scenarioId":"2040","location":{"line":46,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"the occupancy is 21","keyword":"*"},"2039":{"type":"step","id":"2039","scenarioId":"2040","location":{"line":47,"column":5,"path":"subscribe/events/presence/receiving-timeout-event.feature"},"text":"here_now_refresh is True","keyword":"*"},"2042":{"type":"step","id":"2042","scenarioId":"2050","location":{"line":7,"column":5,"path":"subscribe/events/signal/receiving-signal-event.feature"},"text":"undelivered messages contains a signal event","keyword":"Given"},"2043":{"type":"step","id":"2043","scenarioId":"2050","location":{"line":8,"column":5,"path":"subscribe/events/signal/receiving-signal-event.feature"},"text":"the event is delivered","keyword":"When"},"2044":{"type":"step","id":"2044","scenarioId":"2050","location":{"line":9,"column":5,"path":"subscribe/events/signal/receiving-signal-event.feature"},"text":"the event information contains","keyword":"Then"},"2045":{"type":"step","id":"2045","scenarioId":"2050","location":{"line":10,"column":5,"path":"subscribe/events/signal/receiving-signal-event.feature"},"text":"the channel is 'my_channel'","keyword":"*"},"2046":{"type":"step","id":"2046","scenarioId":"2050","location":{"line":11,"column":5,"path":"subscribe/events/signal/receiving-signal-event.feature"},"text":"the message is not empty","keyword":"*"},"2047":{"type":"step","id":"2047","scenarioId":"2050","location":{"line":12,"column":5,"path":"subscribe/events/signal/receiving-signal-event.feature"},"text":"the timetoken is not empty","keyword":"*"},"2048":{"type":"step","id":"2048","scenarioId":"2050","location":{"line":13,"column":5,"path":"subscribe/events/signal/receiving-signal-event.feature"},"text":"the publisher is 'my_uuid'","keyword":"*"},"2049":{"type":"step","id":"2049","scenarioId":"2050","location":{"line":14,"column":5,"path":"subscribe/events/signal/receiving-signal-event.feature"},"text":"the subscription is 'my_channel-pnpres'","keyword":"*"},"2052":{"type":"step","id":"2052","scenarioId":"2062","location":{"line":7,"column":5,"path":"subscribe/events/status/receiving-status-event.feature"},"text":"undelivered messages contains a status event","keyword":"Given"},"2053":{"type":"step","id":"2053","scenarioId":"2062","location":{"line":8,"column":5,"path":"subscribe/events/status/receiving-status-event.feature"},"text":"the event is delivered","keyword":"When"},"2054":{"type":"step","id":"2054","scenarioId":"2062","location":{"line":9,"column":5,"path":"subscribe/events/status/receiving-status-event.feature"},"text":"the event information contains","keyword":"Then"},"2055":{"type":"step","id":"2055","scenarioId":"2062","location":{"line":10,"column":5,"path":"subscribe/events/status/receiving-status-event.feature"},"text":"the category is 'PNBadRequestCategory'","keyword":"*"},"2056":{"type":"step","id":"2056","scenarioId":"2062","location":{"line":11,"column":5,"path":"subscribe/events/status/receiving-status-event.feature"},"text":"the operation is 'PNTimeOperation'","keyword":"*"},"2057":{"type":"step","id":"2057","scenarioId":"2062","location":{"line":12,"column":5,"path":"subscribe/events/status/receiving-status-event.feature"},"text":"the affectedChannels is '[ \"my-channel\"]'","keyword":"*"},"2058":{"type":"step","id":"2058","scenarioId":"2062","location":{"line":13,"column":5,"path":"subscribe/events/status/receiving-status-event.feature"},"text":"the subscribedChannels is '[ \"my-channel\"]'","keyword":"*"},"2059":{"type":"step","id":"2059","scenarioId":"2062","location":{"line":14,"column":5,"path":"subscribe/events/status/receiving-status-event.feature"},"text":"the affectedChannelGroups is '[]'","keyword":"*"},"2060":{"type":"step","id":"2060","scenarioId":"2062","location":{"line":15,"column":5,"path":"subscribe/events/status/receiving-status-event.feature"},"text":"the lastTimetoken is not empty","keyword":"*"},"2061":{"type":"step","id":"2061","scenarioId":"2062","location":{"line":16,"column":5,"path":"subscribe/events/status/receiving-status-event.feature"},"text":"the currentTimetoken is not empty","keyword":"*"},"2064":{"type":"step","id":"2064","scenarioId":"2066","location":{"line":12,"column":5,"path":"subscribe/limit-unsuccessful-reconnection-attempts.feature"},"text":"A Fresh SDK Instance","keyword":"Given"},"2065":{"type":"step","id":"2065","scenarioId":"2066","location":{"line":13,"column":5,"path":"subscribe/limit-unsuccessful-reconnection-attempts.feature"},"text":"remaining reconnect attempts will be equal to the maximum reconnect attempts","keyword":"Then"},"2067":{"type":"step","id":"2067","scenarioId":"2070","location":{"line":16,"column":5,"path":"subscribe/limit-unsuccessful-reconnection-attempts.feature"},"text":"A subscribe REST api call with non-zero time token that has not completed","keyword":"Given"},"2068":{"type":"step","id":"2068","scenarioId":"2070","location":{"line":17,"column":5,"path":"subscribe/limit-unsuccessful-reconnection-attempts.feature"},"text":"The request completes with a HTTP 200 Status code","keyword":"When"},"2069":{"type":"step","id":"2069","scenarioId":"2070","location":{"line":18,"column":5,"path":"subscribe/limit-unsuccessful-reconnection-attempts.feature"},"text":"remaining reconnect attempts will be equal to the maximum reconnect attempts","keyword":"Then"},"2071":{"type":"step","id":"2071","scenarioId":"2073","location":{"line":21,"column":5,"path":"subscribe/limit-unsuccessful-reconnection-attempts.feature"},"text":"The manual reconnection operation is triggered","keyword":"When"},"2072":{"type":"step","id":"2072","scenarioId":"2073","location":{"line":22,"column":5,"path":"subscribe/limit-unsuccessful-reconnection-attempts.feature"},"text":"remaining reconnect attempts will be equal to the maximum reconnect attempts","keyword":"Then"},"2074":{"type":"step","id":"2074","scenarioId":"2077","location":{"line":25,"column":5,"path":"subscribe/limit-unsuccessful-reconnection-attempts.feature"},"text":"A completed subscribe REST api call with non-zero time token","keyword":"Given"},"2075":{"type":"step","id":"2075","scenarioId":"2077","location":{"line":26,"column":5,"path":"subscribe/limit-unsuccessful-reconnection-attempts.feature"},"text":"When a timer for reconnection is scheduled","keyword":"When"},"2076":{"type":"step","id":"2076","scenarioId":"2077","location":{"line":27,"column":5,"path":"subscribe/limit-unsuccessful-reconnection-attempts.feature"},"text":"remaining reconnect attempts will be one lower than previous value","keyword":"Then"},"2086":{"type":"step","id":"2086","scenarioId":"2089","location":{"line":8,"column":5,"path":"subscribe/reconnect.feature"},"text":"Automatic reconnection attempts are not allowed","keyword":"When"},"2087":{"type":"step","id":"2087","scenarioId":"2089","location":{"line":9,"column":5,"path":"subscribe/reconnect.feature"},"text":"The reconnect operation is triggered","keyword":"And"},"2088":{"type":"step","id":"2088","scenarioId":"2089","location":{"line":10,"column":5,"path":"subscribe/reconnect.feature"},"text":"Automatic reconnection attempts are allowed","keyword":"Then"},"2105":{"type":"step","id":"2105","scenarioId":"2107","location":{"line":10,"column":9,"path":"subscribe/state/get-connection-status.feature"},"text":"A freshly initialied SDK","keyword":"Given"},"2106":{"type":"step","id":"2106","scenarioId":"2107","location":{"line":11,"column":9,"path":"subscribe/state/get-connection-status.feature"},"text":"Status is Unsubscribed","keyword":"Then"},"2117":{"type":"step","id":"2117","scenarioId":"2119","location":{"line":11,"column":9,"path":"subscribe/state/get-reconnection-delay.feature"},"text":"A freshly initialized SDK","keyword":"Given"},"2118":{"type":"step","id":"2118","scenarioId":"2119","location":{"line":12,"column":9,"path":"subscribe/state/get-reconnection-delay.feature"},"text":"The automatic reconnection delay will be 0","keyword":"Then"},"2123":{"type":"step","id":"2123","scenarioId":"2125","location":{"line":10,"column":9,"path":"subscribe/state/get-subscribed-channel-groups.feature"},"text":"A freshly initialied SDK","keyword":"Given"},"2124":{"type":"step","id":"2124","scenarioId":"2125","location":{"line":11,"column":9,"path":"subscribe/state/get-subscribed-channel-groups.feature"},"text":"Subscribed Channel Groups is empty","keyword":"Then"},"2129":{"type":"step","id":"2129","scenarioId":"2131","location":{"line":10,"column":9,"path":"subscribe/state/get-subscribed-channels.feature"},"text":"A freshly initialied SDK","keyword":"Given"},"2130":{"type":"step","id":"2130","scenarioId":"2131","location":{"line":11,"column":9,"path":"subscribe/state/get-subscribed-channels.feature"},"text":"Subscribed Channels is empty","keyword":"Then"},"2135":{"type":"step","id":"2135","scenarioId":"2137","location":{"line":11,"column":9,"path":"subscribe/state/get-subscription-cursor.feature"},"text":"A freshly initialied SDK","keyword":"Given"},"2136":{"type":"step","id":"2136","scenarioId":"2137","location":{"line":12,"column":9,"path":"subscribe/state/get-subscription-cursor.feature"},"text":"Subscription cursor is a value that indicates missing","keyword":"Then"},"2141":{"type":"step","id":"2141","scenarioId":"2142","location":{"line":8,"column":5,"path":"subscribe/subscribe-custom-mssg-type.feature"},"text":"the demo keyset","keyword":"Given"},"2143":{"type":"step","id":"2143","scenarioId":"2147","location":{"line":12,"column":5,"path":"subscribe/subscribe-custom-mssg-type.feature"},"text":"I subscribe to 'some-channel' channel","keyword":"When"},"2144":{"type":"step","id":"2144","scenarioId":"2147","location":{"line":13,"column":5,"path":"subscribe/subscribe-custom-mssg-type.feature"},"text":"I receive 2 messages in my subscribe response","keyword":"Then"},"2145":{"type":"step","id":"2145","scenarioId":"2147","location":{"line":14,"column":5,"path":"subscribe/subscribe-custom-mssg-type.feature"},"text":"response contains messages with 'custom-message-type' and 'user-custom-message-type' types","keyword":"And"},"2156":{"type":"step","id":"2156","scenarioId":"2160","location":{"line":9,"column":5,"path":"utilities/time.feature"},"text":"I request current time","keyword":"When"},"2157":{"type":"step","id":"2157","scenarioId":"2160","location":{"line":10,"column":5,"path":"utilities/time.feature"},"text":"I receive successful response","keyword":"Then"}}}