late-sdk 0.0.908 → 0.0.910

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +32 -19
  3. data/docs/AdAccountsApi.md +92 -16
  4. data/docs/AdCampaignsApi.md +20 -20
  5. data/docs/AdCreativesApi.md +222 -0
  6. data/docs/AdInsightsApi.md +16 -16
  7. data/docs/AdTargetingApi.md +4 -4
  8. data/docs/CheckPhoneNumberAvailability200Response.md +1 -1
  9. data/docs/ConversionsApi.md +8 -8
  10. data/docs/GetAdComments200ResponseMeta.md +1 -1
  11. data/docs/ListPartnershipAdContent200Response.md +18 -0
  12. data/docs/ListPartnershipAdContent200ResponseMediaInner.md +30 -0
  13. data/docs/ListPartnershipAdPermissions200Response.md +18 -0
  14. data/docs/ListPartnershipAdPermissions200ResponsePermissionsInner.md +22 -0
  15. data/docs/ListPhoneNumberCountries200ResponseCountriesInnerTypesInner.md +1 -1
  16. data/docs/ListTikTokAdPixels200Response.md +20 -0
  17. data/docs/ListTikTokAdPixels200ResponsePixelsInner.md +26 -0
  18. data/docs/ListTikTokAdPixels200ResponsePixelsInnerEventDetailsInner.md +22 -0
  19. data/docs/ReachAndFrequencyApi.md +16 -16
  20. data/docs/SetPartnershipAdPermission200Response.md +18 -0
  21. data/docs/SetPartnershipAdPermissionRequest.md +22 -0
  22. data/docs/SubmitPhoneNumberKyc200Response.md +1 -1
  23. data/lib/zernio-sdk/api/ad_accounts_api.rb +89 -14
  24. data/lib/zernio-sdk/api/ad_campaigns_api.rb +10 -10
  25. data/lib/zernio-sdk/api/ad_creatives_api.rb +218 -0
  26. data/lib/zernio-sdk/api/ad_insights_api.rb +8 -8
  27. data/lib/zernio-sdk/api/ad_targeting_api.rb +2 -2
  28. data/lib/zernio-sdk/api/conversions_api.rb +4 -4
  29. data/lib/zernio-sdk/api/reach_and_frequency_api.rb +8 -8
  30. data/lib/zernio-sdk/models/check_phone_number_availability200_response.rb +1 -1
  31. data/lib/zernio-sdk/models/get_ad_comments200_response_meta.rb +1 -1
  32. data/lib/zernio-sdk/models/list_partnership_ad_content200_response.rb +149 -0
  33. data/lib/zernio-sdk/models/list_partnership_ad_content200_response_media_inner.rb +205 -0
  34. data/lib/zernio-sdk/models/list_partnership_ad_permissions200_response.rb +149 -0
  35. data/lib/zernio-sdk/models/list_partnership_ad_permissions200_response_permissions_inner.rb +165 -0
  36. data/lib/zernio-sdk/models/list_phone_number_countries200_response_countries_inner_types_inner.rb +1 -1
  37. data/lib/zernio-sdk/models/list_tik_tok_ad_pixels200_response.rb +158 -0
  38. data/lib/zernio-sdk/models/list_tik_tok_ad_pixels200_response_pixels_inner.rb +187 -0
  39. data/lib/zernio-sdk/models/list_tik_tok_ad_pixels200_response_pixels_inner_event_details_inner.rb +166 -0
  40. data/lib/zernio-sdk/models/set_partnership_ad_permission200_response.rb +147 -0
  41. data/lib/zernio-sdk/models/set_partnership_ad_permission_request.rb +219 -0
  42. data/lib/zernio-sdk/models/submit_phone_number_kyc200_response.rb +1 -1
  43. data/lib/zernio-sdk/version.rb +1 -1
  44. data/lib/zernio-sdk.rb +9 -0
  45. data/openapi.yaml +675 -171
  46. data/spec/api/ad_accounts_api_spec.rb +21 -7
  47. data/spec/api/ad_campaigns_api_spec.rb +5 -5
  48. data/spec/api/ad_creatives_api_spec.rb +40 -0
  49. data/spec/api/ad_insights_api_spec.rb +4 -4
  50. data/spec/api/ad_targeting_api_spec.rb +1 -1
  51. data/spec/api/conversions_api_spec.rb +2 -2
  52. data/spec/api/reach_and_frequency_api_spec.rb +4 -4
  53. data/spec/models/list_partnership_ad_content200_response_media_inner_spec.rb +72 -0
  54. data/spec/models/list_partnership_ad_content200_response_spec.rb +36 -0
  55. data/spec/models/list_partnership_ad_permissions200_response_permissions_inner_spec.rb +48 -0
  56. data/spec/models/list_partnership_ad_permissions200_response_spec.rb +36 -0
  57. data/spec/models/list_tik_tok_ad_pixels200_response_pixels_inner_event_details_inner_spec.rb +48 -0
  58. data/spec/models/list_tik_tok_ad_pixels200_response_pixels_inner_spec.rb +60 -0
  59. data/spec/models/list_tik_tok_ad_pixels200_response_spec.rb +42 -0
  60. data/spec/models/set_partnership_ad_permission200_response_spec.rb +36 -0
  61. data/spec/models/set_partnership_ad_permission_request_spec.rb +48 -0
  62. data/zernio-sdk-0.0.910.gem +0 -0
  63. metadata +38 -2
  64. data/zernio-sdk-0.0.908.gem +0 -0
@@ -93,7 +93,7 @@ describe 'AdAccountsApi' do
93
93
  end
94
94
 
95
95
  # unit tests for create_custom_conversion
96
- # Create or reuse a custom conversion
96
+ # Create custom conversion
97
97
  # Provision the Meta custom conversion an ads flow optimises toward, and hand back the `customConversionId` for `promotedObject.customConversionId` on POST /v1/ads/create. Removes the manual \"create it in Ads Manager first\" step. **Reuse is ours, not Meta's.** Meta's create is not idempotent, so a retried request would otherwise mint a duplicate carrying none of the original's optimisation history. A non-archived conversion with the same `name` on the same `pixelId` is returned instead of created, with `reused: true` and a 200 rather than a 201. `rule` is forwarded verbatim in Meta's own grammar (e.g. `{\"url\": {\"i_contains\": \"thank-you\"}}`); Meta validates it and rejects a malformed one with \"A conversion rule is required at creation time\".
98
98
  # @param account_id Meta ads SocialAccount id.
99
99
  # @param create_custom_conversion_request
@@ -131,7 +131,7 @@ describe 'AdAccountsApi' do
131
131
 
132
132
  # unit tests for delete_ad_comment
133
133
  # Delete an ad comment
134
- # Delete your own TikTok ad comment or reply. TikTok must return can_delete=true for the comment. Other users' comments can be hidden instead. Requires Ads access. The ad is resolved within the caller's accessible profiles. Before moderation, Zernio verifies that the comment belongs to this ad using TikTok's ad-group comment listing. The default search window is the last 30 days. Use since/until for older comments, with at most 30 days between the dates. Lookups scan at most 2,000 ad-group comments; narrow the date window if exceeded. Meta returns 501 feature_not_available with guidance to use the existing inbox comment endpoints and the account/post IDs from GET /v1/ads/{adId}/comments.
134
+ # Delete your own TikTok ad comment or reply. TikTok must return can_delete=true for the comment. Other users' comments can be hidden instead. Unknown identity and video item fields are resolved only when needed for this action, then persisted for reuse. Comment-specific fields take precedence. If TikTok no longer returns the ad needed to resolve identity, 404 ad_not_found directs you to check deletion or archival in TikTok Ads Manager. Listing can still succeed. Unsupported or unavailable identity returns 403 feature_not_available. Denied access to ad details returns 403 insufficient_permissions with reconnect guidance and the upstream platformError. Requires Ads access. The ad is resolved within the caller's accessible profiles. Before moderation, Zernio verifies that the comment belongs to this ad using TikTok's ad-group comment listing. The default search window is the last 30 days. Use since/until for older comments, with at most 30 days between the dates. Lookups scan at most 2,000 ad-group comments; narrow the date window if exceeded. Meta returns 501 feature_not_available with guidance to use the existing inbox comment endpoints and the account/post IDs from GET /v1/ads/{adId}/comments.
135
135
  # @param ad_id Internal Zernio ad ID or indexed platform ad ID.
136
136
  # @param comment_id TikTok comment ID from the ad comment listing.
137
137
  # @param [Hash] opts the optional parameters
@@ -187,7 +187,7 @@ describe 'AdAccountsApi' do
187
187
 
188
188
  # unit tests for get_ad_comments
189
189
  # List comments on an ad
190
- # Returns comments on an ad's underlying creative post. Useful for moderating or analyzing engagement on dark posts (ad creatives that never went live organically), which the regular GET /v1/inbox/comments/{postId} endpoint cannot serve because dark posts are not in Zernio's post database. An ad that runs on both Facebook feed and Instagram feed has two separate underlying posts with separate comment threads (the creative's effective_object_story_id and effective_instagram_media_id). Use the `placement` query param to pick one; with no param the Instagram side is returned when it exists, otherwise Facebook. The identifiers are read from the ad record (persisted during sync) with a Marketing-API fallback for ads that predate the field. For Instagram-placed comments, the Instagram account that runs the ad must be connected to Zernio, because those comments are read through that account's token. If no connected Instagram account on the profile can read the ad's media, the call returns ads_connection_required (the Facebook side, if any, is still readable via ?placement=facebook). TikTok uses the connected TikTok Ads advertiser token and supports both paid video ads and Spark Ads. `since` and `until` select a date window of at most 30 days; the default is the last 30 days. TikTok searches by ad group, so Zernio filters each page to this ad. A page can be empty while `pagination.hasMore` is true. Reuse `pagination.cursor` with the same `limit`; the cursor retains the date window. `placement` is Meta-only and returns a 400 for TikTok. TikTok returns replies as separate comments with `parentId`; nested reply fetching is not supported. `canReply` requires a first-level comment and an identity with comment-management permission. `canDelete` reflects TikTok's own-comment deletion capability. `canHide` is supported and `canLike` is false. Use the ad comment reply, hide and delete operations below to moderate TikTok comments. Other platforms return feature_not_available. Requires the Ads add-on. Response shape matches GET /v1/inbox/comments/{postId}. The `{adId}` path segment accepts any identifier dialect Zernio indexes for the ad: Zernio internal `_id` (24-char hex), the numeric `platformAdId` (the value shipped in `comment.received` webhooks as `comment.ad.id`), or the creative's `effective_object_story_id` / `effective_instagram_media_id`. Caller doesn't need a translation step.
190
+ # Returns comments on an ad's underlying creative post. Useful for moderating or analyzing engagement on dark posts (ad creatives that never went live organically), which the regular GET /v1/inbox/comments/{postId} endpoint cannot serve because dark posts are not in Zernio's post database. An ad that runs on both Facebook feed and Instagram feed has two separate underlying posts with separate comment threads (the creative's effective_object_story_id and effective_instagram_media_id). Use the `placement` query param to pick one; with no param the Instagram side is returned when it exists, otherwise Facebook. The identifiers are read from the ad record (persisted during sync) with a Marketing-API fallback for ads that predate the field. For Instagram-placed comments, the Instagram account that runs the ad must be connected to Zernio, because those comments are read through that account's token. If no connected Instagram account on the profile can read the ad's media, the call returns ads_connection_required (the Facebook side, if any, is still readable via ?placement=facebook). TikTok uses the connected TikTok Ads advertiser token and supports both paid video ads and Spark Ads. `since` and `until` select a date window of at most 30 days; the default is the last 30 days. TikTok searches by ad group, so Zernio filters each page to this ad. A page can be empty while `pagination.hasMore` is true. Reuse `pagination.cursor` with the same `limit`; the cursor retains the date window. `placement` is Meta-only and returns a 400 for TikTok. Listing needs no identity or video item ID. When the ad group is stored, each page makes one comment-list call and no ad-detail lookup, including for external ads that TikTok no longer returns from ad details. `meta.tiktokItemId: null` does not prevent listing. If the ad group is missing, Zernio fetches ad details; unavailable details return 404 ad_not_found, and no ad group returns 400 ad_not_commentable. TikTok returns replies as separate comments with `parentId`; nested reply fetching is not supported. `canReply` requires a first-level comment, comment-management permission, a video item ID and a supported TT_USER or CUSTOMIZED_USER identity. `canDelete` requires TikTok's own-comment deletion capability, a video item ID and a supported identity. Both flags are false when identity or item is unknown. Listing uses stored and comment-specific fields without fetching identity. A direct reply or delete request can lazily resolve missing fields and succeed even after a false flag. `canHide` is true because visibility changes need only advertiser and comment IDs. `canLike` is false. Use the ad comment reply, hide and delete operations below to moderate TikTok comments. Other platforms return feature_not_available. Requires the Ads add-on. Response shape matches GET /v1/inbox/comments/{postId}. The `{adId}` path segment accepts any identifier dialect Zernio indexes for the ad: Zernio internal `_id` (24-char hex), the numeric `platformAdId` (the value shipped in `comment.received` webhooks as `comment.ad.id`), or the creative's `effective_object_story_id` / `effective_instagram_media_id`. Caller doesn't need a translation step.
191
191
  # @param ad_id Internal Zernio ad ID or indexed platform ad/post ID.
192
192
  # @param [Hash] opts the optional parameters
193
193
  # @option opts [String] :placement Which side of the ad to return comments for. Omit to default to the Instagram side when present, else Facebook. Returns ad_not_commentable if the ad has no such placement.
@@ -249,7 +249,7 @@ describe 'AdAccountsApi' do
249
249
  end
250
250
 
251
251
  # unit tests for get_dsa_recommendations
252
- # List DSA beneficiary/payor suggestions
252
+ # Get DSA recommendations
253
253
  # Returns Meta's suggested beneficiary/payor names for an ad account, derived by Meta from the account's recent activity. Useful for prefilling `dsaBeneficiary`/`dsaPayor` inputs, or the defaults sent to `PATCH /v1/ads/accounts`, in your own UI. Meta returns a single flat list. Entries are not labeled as beneficiary or payor, and since these are legal disclosures Zernio never applies them automatically: let your user pick the right entity. The list may be empty for accounts with little activity. Meta accounts only.
254
254
  # @param account_id Account ID (metaads, or a facebook/instagram posting account)
255
255
  # @param ad_account_id Meta ad account ID (act_...)
@@ -290,7 +290,7 @@ describe 'AdAccountsApi' do
290
290
 
291
291
  # unit tests for hide_ad_comment
292
292
  # Hide or unhide an ad comment
293
- # Hide or restore a TikTok ad comment. Send hidden=true to hide it or hidden=false to make it public again. Requires Ads access. The ad is resolved within the caller's accessible profiles. Before moderation, Zernio verifies that the comment belongs to this ad using TikTok's ad-group comment listing. The default search window is the last 30 days. Use since/until for older comments, with at most 30 days between the dates. Lookups scan at most 2,000 ad-group comments; narrow the date window if exceeded. Meta returns 501 feature_not_available with guidance to use the existing inbox comment endpoints and the account/post IDs from GET /v1/ads/{adId}/comments.
293
+ # Hide or restore a TikTok ad comment. Send hidden=true to hide it or hidden=false to make it public again. Identity and video item ID are not required; no identity lookup is performed. Requires Ads access. The ad is resolved within the caller's accessible profiles. Before moderation, Zernio verifies that the comment belongs to this ad using TikTok's ad-group comment listing. The default search window is the last 30 days. Use since/until for older comments, with at most 30 days between the dates. Lookups scan at most 2,000 ad-group comments; narrow the date window if exceeded. Meta returns 501 feature_not_available with guidance to use the existing inbox comment endpoints and the account/post IDs from GET /v1/ads/{adId}/comments.
294
294
  # @param ad_id Internal Zernio ad ID or indexed platform ad ID.
295
295
  # @param comment_id TikTok comment ID from the ad comment listing.
296
296
  # @param hide_ad_comment_request
@@ -454,7 +454,7 @@ describe 'AdAccountsApi' do
454
454
  end
455
455
 
456
456
  # unit tests for list_high_demand_periods
457
- # High demand periods / budget schedules
457
+ # List high-demand periods
458
458
  # Scheduled budget increases (Meta's budget-scheduling API). The Graph edge lives on the campaign and ad-set nodes only, so exactly one of `campaignId` / `adSetId` (platform ids) is required. Rows returned verbatim (budget_value, budget_value_type, time window, recurrence).
459
459
  # @param account_id Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token.
460
460
  # @param [Hash] opts the optional parameters
@@ -483,6 +483,20 @@ describe 'AdAccountsApi' do
483
483
  end
484
484
  end
485
485
 
486
+ # unit tests for list_tik_tok_ad_pixels
487
+ # List TikTok ad pixels
488
+ # Lists pixels and their supported optimization events for a connected TikTok Ads account. The advertiser defaults to the first advertiser on the connection. Reconnect if Pixel Management permission has not been granted.
489
+ # @param account_id Zernio SocialAccount ID.
490
+ # @param [Hash] opts the optional parameters
491
+ # @option opts [String] :advertiser_id Advertiser belonging to this connection.
492
+ # @option opts [String] :code Filter by a Pixel Code.
493
+ # @return [ListTikTokAdPixels200Response]
494
+ describe 'list_tik_tok_ad_pixels test' do
495
+ it 'should work' do
496
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
497
+ end
498
+ end
499
+
486
500
  # unit tests for list_value_rule_sets
487
501
  # List value rule sets
488
502
  # Lists the ad account's value rule sets (Meta's `/act_X/value_rule_set`). A value rule set adjusts the auction bid up or down for audience segments you value differently; attach one to an ad set with `valueRuleSetId` on `POST /v1/ads/create` or `PUT /v1/ads/ad-sets/{adSetId}`. Rows are returned in the same camelCase shape the `PUT` body takes, ids included, so a set round-trips 1:1: **the update is a full replace, not a patch**, so you GET, mutate and send the whole thing back. Limits: 6 rule sets per ad account, 10 rules per set, 4 criteria per rule. **Rule order is semantic.** Rules are evaluated in array order and only the FIRST matching rule adjusts the bid for an overlapping audience. The order you send is the order that is stored and returned. Eligibility: value rule sets apply only to ad sets on the `LOWEST_COST_WITHOUT_CAP` (auto-bid) or `COST_CAP` bid strategies. Meta rejects the rest server-side.
@@ -549,7 +563,7 @@ describe 'AdAccountsApi' do
549
563
 
550
564
  # unit tests for reply_to_ad_comment
551
565
  # Reply to an ad comment
552
- # Reply to a first-level TikTok ad comment. Requires a TT_USER or CUSTOMIZED_USER identity with comment-management permission. Replies to replies are rejected. The response commentId identifies the new reply. This operation is not idempotent; do not blindly retry an uncertain response. Requires Ads access. The ad is resolved within the caller's accessible profiles. Before moderation, Zernio verifies that the comment belongs to this ad using TikTok's ad-group comment listing. The default search window is the last 30 days. Use since/until for older comments, with at most 30 days between the dates. Lookups scan at most 2,000 ad-group comments; narrow the date window if exceeded. Meta returns 501 feature_not_available with guidance to use the existing inbox comment endpoints and the account/post IDs from GET /v1/ads/{adId}/comments.
566
+ # Reply to a first-level TikTok ad comment. Requires a TT_USER or CUSTOMIZED_USER identity with comment-management permission. Replies to replies are rejected. The response commentId identifies the new reply. This operation is not idempotent; do not blindly retry an uncertain response. Unknown identity and video item fields are resolved only when needed for this action, then persisted for reuse. Comment-specific fields take precedence. If TikTok no longer returns the ad needed to resolve identity, 404 ad_not_found directs you to check deletion or archival in TikTok Ads Manager. Listing can still succeed. Unsupported or unavailable identity returns 403 feature_not_available. Denied access to ad details returns 403 insufficient_permissions with reconnect guidance and the upstream platformError. Requires Ads access. The ad is resolved within the caller's accessible profiles. Before moderation, Zernio verifies that the comment belongs to this ad using TikTok's ad-group comment listing. The default search window is the last 30 days. Use since/until for older comments, with at most 30 days between the dates. Lookups scan at most 2,000 ad-group comments; narrow the date window if exceeded. Meta returns 501 feature_not_available with guidance to use the existing inbox comment endpoints and the account/post IDs from GET /v1/ads/{adId}/comments.
553
567
  # @param ad_id Internal Zernio ad ID or indexed platform ad ID.
554
568
  # @param comment_id TikTok comment ID from the ad comment listing.
555
569
  # @param reply_to_ad_comment_request
@@ -33,7 +33,7 @@ describe 'AdCampaignsApi' do
33
33
  end
34
34
 
35
35
  # unit tests for add_ad_keywords
36
- # Add Search keywords to an ad group
36
+ # Add Search ad-group keywords
37
37
  # Adds one or more keyword criteria to an existing Google Search ad group, without touching the keywords already there (unlike the whole-set diff on `PUT /v1/ads/{adId}`, `keywords`/`negativeKeywords` in `platformSpecificData`, which replaces the set). Set `negative: true` to add ad-group-level negatives instead of positive keywords.
38
38
  # @param add_ad_keywords_request
39
39
  # @param [Hash] opts the optional parameters
@@ -122,7 +122,7 @@ describe 'AdCampaignsApi' do
122
122
  end
123
123
 
124
124
  # unit tests for create_bid_strategy
125
- # Create a Google Ads portfolio bid strategy
125
+ # Create portfolio bid strategy
126
126
  # Creates a standalone bid strategy shared across campaigns. Attach it to a campaign with `portfolioBidStrategyId` on POST /v1/ads/create, PUT /v1/ads/campaigns/{campaignId}, or PUT /v1/ads/ad-sets/{adSetId}. Attaching a strategy aligned to a shared budget fails there with a 400 (Google's `BIDDING_STRATEGY_AND_BUDGET_MUST_BE_ALIGNED`); this is not retryable.
127
127
  # @param create_bid_strategy_request
128
128
  # @param [Hash] opts the optional parameters
@@ -239,7 +239,7 @@ describe 'AdCampaignsApi' do
239
239
  end
240
240
 
241
241
  # unit tests for get_ad_set_details
242
- # Live ad-set details incl. learning phase
242
+ # Get live ad-set details
243
243
  # Reads the ad set live from Meta, returned verbatim. The default projection includes `learning_stage_info` (learning-phase status: LEARNING / SUCCESS / FAIL / WAIVING; Meta omits its `status` key on paused ad sets), delivery settings, budgets, schedule and targeting. `fields` is a raw-passthrough override; unknown fields return Meta's 400 verbatim.
244
244
  # @param ad_set_id Meta ad set id (platformAdSetId).
245
245
  # @param account_id Zernio SocialAccount id (posting or ads variant) used to resolve the Meta token.
@@ -427,7 +427,7 @@ describe 'AdCampaignsApi' do
427
427
  end
428
428
 
429
429
  # unit tests for list_bid_strategies
430
- # List Google Ads portfolio bid strategies
430
+ # List portfolio bid strategies
431
431
  # Bidding strategy report: type, status, campaign count, clicks, cost, cost per conversion, impressions, average CPC and conversions over the date range (default last 30 days). Reads Google's `bidding_strategy` resource, cached for the quota window. Draws on the shared Google Ads operations budget. The response carries `cachedAt` and `stale`, set when a quota-exhausted call falls back to the last-good copy instead of a live read.
432
432
  # @param account_id Google ads SocialAccount id.
433
433
  # @param [Hash] opts the optional parameters
@@ -662,7 +662,7 @@ describe 'AdCampaignsApi' do
662
662
  end
663
663
 
664
664
  # unit tests for update_bid_strategy
665
- # Update a Google Ads portfolio bid strategy
665
+ # Update portfolio bid strategy
666
666
  # Renames or retargets a portfolio bid strategy. The strategy's status is output only on Google's side, so it cannot be changed here; remove a strategy in Google Ads. `type` is only needed alongside `targetCpa`/`targetRoas` to disambiguate the field Google writes to (TARGET_CPA and MAXIMIZE_CONVERSIONS both take a target CPA; TARGET_ROAS and MAXIMIZE_CONVERSION_VALUE both take a target ROAS); the strategy's family is otherwise immutable once created.
667
667
  # @param strategy_id Numeric Google Ads bid strategy id.
668
668
  # @param update_bid_strategy_request
@@ -196,6 +196,46 @@ describe 'AdCreativesApi' do
196
196
  end
197
197
  end
198
198
 
199
+ # unit tests for list_partnership_ad_content
200
+ # List partnership ad content
201
+ # Private beta. Lists creator Instagram posts available to the advertiser for Partnership Ads. Supply creatorUsername or postUrl. Requires instagram_branded_content_ads_brand permission and an advertiser Instagram Business Account.
202
+ # @param account_id Zernio SocialAccount ID.
203
+ # @param [Hash] opts the optional parameters
204
+ # @option opts [String] :creator_username Creator username. Required unless postUrl is supplied.
205
+ # @option opts [String] :post_url Instagram post permalink. Required unless creatorUsername is supplied.
206
+ # @option opts [Boolean] :only_allowlisted Return only creators with account-level permission.
207
+ # @return [ListPartnershipAdContent200Response]
208
+ describe 'list_partnership_ad_content test' do
209
+ it 'should work' do
210
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
211
+ end
212
+ end
213
+
214
+ # unit tests for list_partnership_ad_permissions
215
+ # List partnership permissions
216
+ # Private beta. Lists granted or pending creator permissions for the advertiser Instagram Business Account. Requires instagram_branded_content_ads_brand permission.
217
+ # @param account_id Zernio SocialAccount ID.
218
+ # @param [Hash] opts the optional parameters
219
+ # @option opts [String] :creator_username Filter by creator username.
220
+ # @return [ListPartnershipAdPermissions200Response]
221
+ describe 'list_partnership_ad_permissions test' do
222
+ it 'should work' do
223
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
224
+ end
225
+ end
226
+
227
+ # unit tests for set_partnership_ad_permission
228
+ # Set partnership permission
229
+ # Private beta. Requests permission from a creator or revokes it when revoke is true. Requests require the creator to approve in Instagram. Requires instagram_branded_content_ads_brand permission.
230
+ # @param set_partnership_ad_permission_request
231
+ # @param [Hash] opts the optional parameters
232
+ # @return [SetPartnershipAdPermission200Response]
233
+ describe 'set_partnership_ad_permission test' do
234
+ it 'should work' do
235
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
236
+ end
237
+ end
238
+
199
239
  # unit tests for update_ad_creative
200
240
  # Rename a creative
201
241
  # Renames a creative. Creatives are immutable on Meta beyond `name`. For content changes create a new creative (POST /v1/ads/creatives) and swap it onto the ad (PUT /v1/ads/{adId} with `creative`).
@@ -33,7 +33,7 @@ describe 'AdInsightsApi' do
33
33
  end
34
34
 
35
35
  # unit tests for create_ad_insights_report
36
- # Submit an async insights report run
36
+ # Submit async insights report
37
37
  # Submits an asynchronous Meta insights report. Same query surface as GET /v1/ads/insights, but in the JSON body; Meta processes the report server-side, which is the right choice for long ranges or large accounts where the sync query is slow or rate-limited. Returns a `reportRunId` to poll via GET /v1/ads/insights/reports/{reportRunId}.
38
38
  # @param create_ad_insights_report_request
39
39
  # @param [Hash] opts the optional parameters
@@ -45,7 +45,7 @@ describe 'AdInsightsApi' do
45
45
  end
46
46
 
47
47
  # unit tests for generate_keyword_historical_metrics
48
- # Historical keyword metrics (Google Keyword Planner)
48
+ # Get historical keyword metrics
49
49
  # Google Ads only. Runs Keyword Planner's generateKeywordHistoricalMetrics for up to 1,000 exact keywords: historical search volume, competition and top-of-page bid ranges, plus averageCpcMicros when includeAverageCpc is set. Rows come back verbatim; counters are int64s encoded as strings, bid/CPC values are micros of the account currency.
50
50
  # @param generate_keyword_historical_metrics_request
51
51
  # @param [Hash] opts the optional parameters
@@ -57,7 +57,7 @@ describe 'AdInsightsApi' do
57
57
  end
58
58
 
59
59
  # unit tests for generate_keyword_ideas
60
- # Generate keyword ideas (Google Keyword Planner)
60
+ # Generate keyword ideas
61
61
  # Google Ads only. Runs Keyword Planner's generateKeywordIdeas from seed keywords, a seed URL, or both, returning idea rows verbatim (avgMonthlySearches, competition, competitionIndex, top-of-page bid micros, monthlySearchVolumes). Counters are int64s encoded as strings; bid values are micros of the account currency. Omitting `countries` targets worldwide.
62
62
  # @param generate_keyword_ideas_request
63
63
  # @param [Hash] opts the optional parameters
@@ -133,7 +133,7 @@ describe 'AdInsightsApi' do
133
133
  end
134
134
 
135
135
  # unit tests for list_local_services_lead_conversations
136
- # Conversations of a Local Services lead
136
+ # List lead conversations
137
137
  # Conversation entries of one Local Services lead: phone calls (duration, recording URL) and messages (text, attachment URLs), oldest first. Read live from `local_services_lead_conversation`, always scoped to a single lead. Call-recording URLs require read access on the Google Ads account. Draws on the shared Google Ads operations budget.
138
138
  # @param lead_id Numeric lead id from /v1/ads/local-services/leads.
139
139
  # @param account_id Google ads SocialAccount id.
@@ -57,7 +57,7 @@ describe 'AdTargetingApi' do
57
57
  end
58
58
 
59
59
  # unit tests for get_linked_in_supply_forecast
60
- # Impressions, clicks and spend forecast
60
+ # Forecast ad delivery
61
61
  # LinkedIn-only. Forecasted impressions, clicks, spend and ~20 other metrics for a targeting spec over a time range. Wraps LinkedIn's `adSupplyForecasts` finder. Each returned series carries a `metricType` (IMPRESSION, CLICK, SPENDING, MAX_POTENTIAL_BUDGET, COST_PER_MILLION_IMPRESSIONS, ...) and a `granularity` (DAILY, SEVEN_DAY, THIRTY_DAY, CUSTOM). LinkedIn caps the daily spending forecast at 1.2x the daily budget and returns 0 once the total budget is exhausted. Non-LinkedIn accounts return `available: false`.
62
62
  # @param get_linked_in_supply_forecast_request
63
63
  # @param [Hash] opts the optional parameters
@@ -59,7 +59,7 @@ describe 'ConversionsApi' do
59
59
  end
60
60
 
61
61
  # unit tests for create_conversion_action
62
- # Create a website conversion action
62
+ # Create website conversion action
63
63
  # Creates a `WEBPAGE` conversion action (category `DEFAULT`) and returns it with its tag snippets, read back after creation since Google never returns them on the create response itself. Invalidates the cached list `GET` on this resource would otherwise keep serving. Google-only; other platforms return `501`. Requires the Ads add-on.
64
64
  # @param create_conversion_action_request
65
65
  # @param [Hash] opts the optional parameters
@@ -142,7 +142,7 @@ describe 'ConversionsApi' do
142
142
  end
143
143
 
144
144
  # unit tests for list_conversion_actions
145
- # List conversion actions and their tag snippets
145
+ # List conversion actions
146
146
  # Lists Google Ads conversion actions on the resolved customer, all types by default. Each action's `tagSnippets` (global site tag + event snippet) is included when Google has them for that action's type, e.g. `WEBPAGE`. Google-only; other platforms return `501`. Requires the Ads add-on. `customerId` is optional: when omitted, it is resolved from the connection's accessible Google Ads customers, and the call fails with `400` when more than one is accessible (pass `customerId` to disambiguate). The list itself is cached for the quota window (1 hour fresh, up to 7 days last-good; the cache key does not vary on `type`). The response carries `cachedAt` and `stale`, set when a quota-exhausted call falls back to the last-good copy instead of a live read.
147
147
  # @param account_id SocialAccount _id (must be a googleads account).
148
148
  # @param [Hash] opts the optional parameters
@@ -33,7 +33,7 @@ describe 'ReachAndFrequencyApi' do
33
33
  end
34
34
 
35
35
  # unit tests for cancel_rf_reservation
36
- # Cancel a Reach & Frequency reservation
36
+ # Cancel reach-frequency booking
37
37
  # Releases a RESERVATION's locked price and inventory. Unreserved predictions expire on their own.
38
38
  # @param prediction_id
39
39
  # @param account_id
@@ -47,7 +47,7 @@ describe 'ReachAndFrequencyApi' do
47
47
  end
48
48
 
49
49
  # unit tests for create_rf_prediction
50
- # Create a Reach & Frequency prediction
50
+ # Create reach-frequency prediction
51
51
  # Creates an R&F prediction. This is a QUOTE, nothing is bought and no ad entities are created. Provide a date range plus exactly one of `budgetAmount` (Meta predicts reach) or `reach` (Meta predicts the budget). The response carries the estimate and its allowed bounds (min/max budget and reach). Predictions expire on their own; to buy, reserve one via POST /v1/ads/rf-predictions/{predictionId}/reserve and pass the RESERVED id to POST /v1/ads/create with `buyingType: \"RESERVED\"`. Reservation campaigns reject automatic placements. Top-level `placements` wins; when it is omitted, `targeting.placements` is used; when neither is set, placements default to Facebook feed (+ Instagram stream when a linked IG professional account resolves). Instagram placements require that IG account.
52
52
  # @param create_rf_prediction_request
53
53
  # @param [Hash] opts the optional parameters
@@ -59,7 +59,7 @@ describe 'ReachAndFrequencyApi' do
59
59
  end
60
60
 
61
61
  # unit tests for get_rf_prediction
62
- # Read a Reach & Frequency prediction
62
+ # Get reach-frequency prediction
63
63
  # @param prediction_id
64
64
  # @param account_id
65
65
  # @param ad_account_id
@@ -72,7 +72,7 @@ describe 'ReachAndFrequencyApi' do
72
72
  end
73
73
 
74
74
  # unit tests for reserve_rf_prediction
75
- # Reserve a Reach & Frequency prediction
75
+ # Reserve reach-frequency inventory
76
76
  # Locks the quoted price + inventory until the returned `expiresAt` and mints a NEW prediction id. Pass that RESERVED id (not the original) as `rfPredictionId` on POST /v1/ads/create. Release an unused reservation via DELETE.
77
77
  # @param prediction_id
78
78
  # @param reserve_rf_prediction_request
@@ -0,0 +1,72 @@
1
+ =begin
2
+ #Zernio API
3
+
4
+ #API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api Versioning and deprecation: all endpoints are versioned in the URL path (current version: /v1). Breaking changes only ship in a new path version; existing versions keep working. Deprecated operations are marked 'deprecated: true' in this spec and announced in the changelog (https://zernio.com/changelog) before removal. Errors: every 4xx/5xx response is application/json with a machine-readable 'code' and a human-readable 'error' message (see the ErrorResponse schema).
5
+
6
+ The version of the OpenAPI document: 1.0.4
7
+ Contact: support@zernio.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.19.0
10
+
11
+ =end
12
+
13
+ require 'spec_helper'
14
+ require 'json'
15
+ require 'date'
16
+
17
+ # Unit tests for Zernio::ListPartnershipAdContent200ResponseMediaInner
18
+ # Automatically generated by openapi-generator (https://openapi-generator.tech)
19
+ # Please update as you see appropriate
20
+ describe Zernio::ListPartnershipAdContent200ResponseMediaInner do
21
+ #let(:instance) { Zernio::ListPartnershipAdContent200ResponseMediaInner.new }
22
+
23
+ describe 'test an instance of ListPartnershipAdContent200ResponseMediaInner' do
24
+ it 'should create an instance of ListPartnershipAdContent200ResponseMediaInner' do
25
+ # uncomment below to test the instance creation
26
+ #expect(instance).to be_instance_of(Zernio::ListPartnershipAdContent200ResponseMediaInner)
27
+ end
28
+ end
29
+
30
+ describe 'test attribute "id"' do
31
+ it 'should work' do
32
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
33
+ end
34
+ end
35
+
36
+ describe 'test attribute "permalink"' do
37
+ it 'should work' do
38
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
39
+ end
40
+ end
41
+
42
+ describe 'test attribute "owner_id"' do
43
+ it 'should work' do
44
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
45
+ end
46
+ end
47
+
48
+ describe 'test attribute "has_permission_for_partnership_ad"' do
49
+ it 'should work' do
50
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
51
+ end
52
+ end
53
+
54
+ describe 'test attribute "is_creator_allowlisted"' do
55
+ it 'should work' do
56
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
57
+ end
58
+ end
59
+
60
+ describe 'test attribute "eligibility_errors"' do
61
+ it 'should work' do
62
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
63
+ end
64
+ end
65
+
66
+ describe 'test attribute "recommended_campaign_objectives"' do
67
+ it 'should work' do
68
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
69
+ end
70
+ end
71
+
72
+ end
@@ -0,0 +1,36 @@
1
+ =begin
2
+ #Zernio API
3
+
4
+ #API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api Versioning and deprecation: all endpoints are versioned in the URL path (current version: /v1). Breaking changes only ship in a new path version; existing versions keep working. Deprecated operations are marked 'deprecated: true' in this spec and announced in the changelog (https://zernio.com/changelog) before removal. Errors: every 4xx/5xx response is application/json with a machine-readable 'code' and a human-readable 'error' message (see the ErrorResponse schema).
5
+
6
+ The version of the OpenAPI document: 1.0.4
7
+ Contact: support@zernio.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.19.0
10
+
11
+ =end
12
+
13
+ require 'spec_helper'
14
+ require 'json'
15
+ require 'date'
16
+
17
+ # Unit tests for Zernio::ListPartnershipAdContent200Response
18
+ # Automatically generated by openapi-generator (https://openapi-generator.tech)
19
+ # Please update as you see appropriate
20
+ describe Zernio::ListPartnershipAdContent200Response do
21
+ #let(:instance) { Zernio::ListPartnershipAdContent200Response.new }
22
+
23
+ describe 'test an instance of ListPartnershipAdContent200Response' do
24
+ it 'should create an instance of ListPartnershipAdContent200Response' do
25
+ # uncomment below to test the instance creation
26
+ #expect(instance).to be_instance_of(Zernio::ListPartnershipAdContent200Response)
27
+ end
28
+ end
29
+
30
+ describe 'test attribute "media"' do
31
+ it 'should work' do
32
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
33
+ end
34
+ end
35
+
36
+ end
@@ -0,0 +1,48 @@
1
+ =begin
2
+ #Zernio API
3
+
4
+ #API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api Versioning and deprecation: all endpoints are versioned in the URL path (current version: /v1). Breaking changes only ship in a new path version; existing versions keep working. Deprecated operations are marked 'deprecated: true' in this spec and announced in the changelog (https://zernio.com/changelog) before removal. Errors: every 4xx/5xx response is application/json with a machine-readable 'code' and a human-readable 'error' message (see the ErrorResponse schema).
5
+
6
+ The version of the OpenAPI document: 1.0.4
7
+ Contact: support@zernio.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.19.0
10
+
11
+ =end
12
+
13
+ require 'spec_helper'
14
+ require 'json'
15
+ require 'date'
16
+
17
+ # Unit tests for Zernio::ListPartnershipAdPermissions200ResponsePermissionsInner
18
+ # Automatically generated by openapi-generator (https://openapi-generator.tech)
19
+ # Please update as you see appropriate
20
+ describe Zernio::ListPartnershipAdPermissions200ResponsePermissionsInner do
21
+ #let(:instance) { Zernio::ListPartnershipAdPermissions200ResponsePermissionsInner.new }
22
+
23
+ describe 'test an instance of ListPartnershipAdPermissions200ResponsePermissionsInner' do
24
+ it 'should create an instance of ListPartnershipAdPermissions200ResponsePermissionsInner' do
25
+ # uncomment below to test the instance creation
26
+ #expect(instance).to be_instance_of(Zernio::ListPartnershipAdPermissions200ResponsePermissionsInner)
27
+ end
28
+ end
29
+
30
+ describe 'test attribute "id"' do
31
+ it 'should work' do
32
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
33
+ end
34
+ end
35
+
36
+ describe 'test attribute "permission_type"' do
37
+ it 'should work' do
38
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
39
+ end
40
+ end
41
+
42
+ describe 'test attribute "status"' do
43
+ it 'should work' do
44
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
45
+ end
46
+ end
47
+
48
+ end
@@ -0,0 +1,36 @@
1
+ =begin
2
+ #Zernio API
3
+
4
+ #API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api Versioning and deprecation: all endpoints are versioned in the URL path (current version: /v1). Breaking changes only ship in a new path version; existing versions keep working. Deprecated operations are marked 'deprecated: true' in this spec and announced in the changelog (https://zernio.com/changelog) before removal. Errors: every 4xx/5xx response is application/json with a machine-readable 'code' and a human-readable 'error' message (see the ErrorResponse schema).
5
+
6
+ The version of the OpenAPI document: 1.0.4
7
+ Contact: support@zernio.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.19.0
10
+
11
+ =end
12
+
13
+ require 'spec_helper'
14
+ require 'json'
15
+ require 'date'
16
+
17
+ # Unit tests for Zernio::ListPartnershipAdPermissions200Response
18
+ # Automatically generated by openapi-generator (https://openapi-generator.tech)
19
+ # Please update as you see appropriate
20
+ describe Zernio::ListPartnershipAdPermissions200Response do
21
+ #let(:instance) { Zernio::ListPartnershipAdPermissions200Response.new }
22
+
23
+ describe 'test an instance of ListPartnershipAdPermissions200Response' do
24
+ it 'should create an instance of ListPartnershipAdPermissions200Response' do
25
+ # uncomment below to test the instance creation
26
+ #expect(instance).to be_instance_of(Zernio::ListPartnershipAdPermissions200Response)
27
+ end
28
+ end
29
+
30
+ describe 'test attribute "permissions"' do
31
+ it 'should work' do
32
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
33
+ end
34
+ end
35
+
36
+ end
@@ -0,0 +1,48 @@
1
+ =begin
2
+ #Zernio API
3
+
4
+ #API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api Versioning and deprecation: all endpoints are versioned in the URL path (current version: /v1). Breaking changes only ship in a new path version; existing versions keep working. Deprecated operations are marked 'deprecated: true' in this spec and announced in the changelog (https://zernio.com/changelog) before removal. Errors: every 4xx/5xx response is application/json with a machine-readable 'code' and a human-readable 'error' message (see the ErrorResponse schema).
5
+
6
+ The version of the OpenAPI document: 1.0.4
7
+ Contact: support@zernio.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.19.0
10
+
11
+ =end
12
+
13
+ require 'spec_helper'
14
+ require 'json'
15
+ require 'date'
16
+
17
+ # Unit tests for Zernio::ListTikTokAdPixels200ResponsePixelsInnerEventDetailsInner
18
+ # Automatically generated by openapi-generator (https://openapi-generator.tech)
19
+ # Please update as you see appropriate
20
+ describe Zernio::ListTikTokAdPixels200ResponsePixelsInnerEventDetailsInner do
21
+ #let(:instance) { Zernio::ListTikTokAdPixels200ResponsePixelsInnerEventDetailsInner.new }
22
+
23
+ describe 'test an instance of ListTikTokAdPixels200ResponsePixelsInnerEventDetailsInner' do
24
+ it 'should create an instance of ListTikTokAdPixels200ResponsePixelsInnerEventDetailsInner' do
25
+ # uncomment below to test the instance creation
26
+ #expect(instance).to be_instance_of(Zernio::ListTikTokAdPixels200ResponsePixelsInnerEventDetailsInner)
27
+ end
28
+ end
29
+
30
+ describe 'test attribute "name"' do
31
+ it 'should work' do
32
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
33
+ end
34
+ end
35
+
36
+ describe 'test attribute "optimization_event"' do
37
+ it 'should work' do
38
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
39
+ end
40
+ end
41
+
42
+ describe 'test attribute "custom"' do
43
+ it 'should work' do
44
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
45
+ end
46
+ end
47
+
48
+ end
@@ -0,0 +1,60 @@
1
+ =begin
2
+ #Zernio API
3
+
4
+ #API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api Versioning and deprecation: all endpoints are versioned in the URL path (current version: /v1). Breaking changes only ship in a new path version; existing versions keep working. Deprecated operations are marked 'deprecated: true' in this spec and announced in the changelog (https://zernio.com/changelog) before removal. Errors: every 4xx/5xx response is application/json with a machine-readable 'code' and a human-readable 'error' message (see the ErrorResponse schema).
5
+
6
+ The version of the OpenAPI document: 1.0.4
7
+ Contact: support@zernio.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.19.0
10
+
11
+ =end
12
+
13
+ require 'spec_helper'
14
+ require 'json'
15
+ require 'date'
16
+
17
+ # Unit tests for Zernio::ListTikTokAdPixels200ResponsePixelsInner
18
+ # Automatically generated by openapi-generator (https://openapi-generator.tech)
19
+ # Please update as you see appropriate
20
+ describe Zernio::ListTikTokAdPixels200ResponsePixelsInner do
21
+ #let(:instance) { Zernio::ListTikTokAdPixels200ResponsePixelsInner.new }
22
+
23
+ describe 'test an instance of ListTikTokAdPixels200ResponsePixelsInner' do
24
+ it 'should create an instance of ListTikTokAdPixels200ResponsePixelsInner' do
25
+ # uncomment below to test the instance creation
26
+ #expect(instance).to be_instance_of(Zernio::ListTikTokAdPixels200ResponsePixelsInner)
27
+ end
28
+ end
29
+
30
+ describe 'test attribute "pixel_id"' do
31
+ it 'should work' do
32
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
33
+ end
34
+ end
35
+
36
+ describe 'test attribute "pixel_code"' do
37
+ it 'should work' do
38
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
39
+ end
40
+ end
41
+
42
+ describe 'test attribute "name"' do
43
+ it 'should work' do
44
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
45
+ end
46
+ end
47
+
48
+ describe 'test attribute "events"' do
49
+ it 'should work' do
50
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
51
+ end
52
+ end
53
+
54
+ describe 'test attribute "event_details"' do
55
+ it 'should work' do
56
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
57
+ end
58
+ end
59
+
60
+ end