Skip to content

Generating new test snapshots for feat/workflows-network-layer - ios-15#6654

Merged
vegaro merged 1 commit into
feat/workflows-network-layerfrom
generated_snapshots/feat/workflows-network-layer-538222-ios-15
Apr 21, 2026
Merged

Generating new test snapshots for feat/workflows-network-layer - ios-15#6654
vegaro merged 1 commit into
feat/workflows-network-layerfrom
generated_snapshots/feat/workflows-network-layer-538222-ios-15

Conversation

@RCGitBot

@RCGitBot RCGitBot commented Apr 21, 2026

Copy link
Copy Markdown
Contributor

Requested by @vegaro for feat/workflows-network-layer


Note

Low Risk
Only adds new unit test snapshot fixtures for BackendGetWorkflowTests, with no production code changes; risk is limited to potential test brittleness if headers/request formatting changes again.

Overview
Adds new iOS 15 snapshot JSON fixtures for BackendGetWorkflowTests covering getWorkflow request generation across inline responses, enrolled variants, caching behavior, CDN flow, and HTTP error propagation.

These snapshots lock in the expected headers and request URLs (e.g., GET /v1/subscribers/{user}/workflows/{id}) for the workflows network layer tests.

Reviewed by Cursor Bugbot for commit 2effeb3. Bugbot is set up for automated code reviews on this repo. Configure here.

@RCGitBot RCGitBot added the test label Apr 21, 2026
@RCGitBot RCGitBot requested a review from a team as a code owner April 21, 2026 10:17
@RCGitBot RCGitBot added the test label Apr 21, 2026
@RevenueCat-Danger-Bot

Copy link
Copy Markdown
1 Error
🚫 Label the PR using one of the change type labels. If you are not sure which label to use, choose pr:other.
Label Description
pr:feat A new feature. Use along with pr:breaking to force a major release.
pr:fix A bug fix. Use along with pr:force_minor to force a minor release.
pr:other Other changes. Catch-all for anything that doesn't fit the above categories. Releases that only contain this label will not be released. Use along with pr:force_patch, or pr:force_minor to force a patch or minor release.
pr:RevenueCatUI Use along any other tag to mark a PR that only contains RevenueCatUI changes
pr:next_release Preparing a new release
pr:dependencies Updating a dependency
pr:phc_dependencies Updating purchases-hybrid-common dependency
pr:changelog_ignore The PR will not be included in the changelog. This label doesn't determine the type of bump of the version and must be combined with pr:feat, pr:fix or pr:other.

Generated by 🚫 Danger

@emerge-tools

emerge-tools Bot commented Apr 21, 2026

Copy link
Copy Markdown

4 builds increased size

Name Version Download Change Install Change Approval
RevenueCat
com.revenuecat.PaywallsTester
1.0 (1) 17.7 MB ⬆️ 83.8 kB (0.48%) 63.3 MB ⬆️ 347.5 kB (0.55%) N/A
BinarySizeTest
com.revenuecat.binary-size-test.local-source
1.0 (1) 4.0 MB ⬆️ 30.4 kB (0.77%) 12.0 MB ⬆️ 87.7 kB (0.74%) ⏳ Needs approval
BinarySizeTest
com.revenuecat.binary-size-test.cocoapods
1.0 (1) 6.1 MB ⬆️ 41.6 kB (0.69%) 26.6 MB ⬆️ 183.7 kB (0.7%) ⏳ Needs approval
BinarySizeTest
com.revenuecat.binary-size-test.spm
1.0 (1) 4.1 MB ⬆️ 30.1 kB (0.74%) 10.5 MB ⬆️ 75.2 kB (0.73%) ⏳ Needs approval

RevenueCat 1.0 (1)
com.revenuecat.PaywallsTester

⚖️ Compare build
⏱️ Analyze build performance

Total install size change: ⬆️ 347.5 kB (0.55%)
Total download size change: ⬆️ 83.8 kB (0.48%)

Largest size changes

Item Install Size Change
DYLD.String Table ⬆️ 109.9 kB
Code Signature ⬆️ 8.8 kB
DYLD.Exports ⬆️ 7.8 kB
📝 RevenueCat.WorkflowsAPI.WorkflowsAPI ⬆️ 4.3 kB
RevenueCat.WebBillingAPI.WebBillingAPI ⬇️ -1.4 kB
View Treemap

Image of diff

BinarySizeTest 1.0 (1)
com.revenuecat.binary-size-test.local-source

⚖️ Compare build
📦 Install build
⏱️ Analyze build performance

Total install size change: ⬆️ 87.7 kB (0.74%)
Total download size change: ⬆️ 30.4 kB (0.77%)

Largest size changes

Item Install Size Change
📝 RevenueCat.WorkflowScreen.value witness ⬆️ 10.1 kB
📝 RevenueCat.PublishedWorkflow.__derived_struct_equals ⬆️ 8.3 kB
DYLD.String Table ⬆️ 7.9 kB
RevenueCat.UIConfig.Equatable ⬇️ -4.9 kB
RevenueCat.PaywallComponent.StackComponent.StackComponent ⬇️ -3.9 kB
View Treemap

Image of diff

BinarySizeTest 1.0 (1)
com.revenuecat.binary-size-test.cocoapods

⚖️ Compare build
📦 Install build
⏱️ Analyze build performance

Total install size change: ⬆️ 183.7 kB (0.7%)
Total download size change: ⬆️ 41.6 kB (0.69%)

Largest size changes

Item Install Size Change
DYLD.String Table ⬆️ 69.2 kB
📝 RevenueCat.WorkflowScreen.value witness ⬆️ 10.1 kB
📝 RevenueCat.PublishedWorkflow.__derived_struct_equals ⬆️ 8.1 kB
RevenueCat.UIConfig.Equatable ⬇️ -4.8 kB
Code Signature ⬆️ 4.8 kB
View Treemap

Image of diff

BinarySizeTest 1.0 (1)
com.revenuecat.binary-size-test.spm

⚖️ Compare build
📦 Install build
⏱️ Analyze build performance

Total install size change: ⬆️ 75.2 kB (0.73%)
Total download size change: ⬆️ 30.1 kB (0.74%)

Largest size changes

Item Install Size Change
📝 RevenueCat.WorkflowScreen.value witness ⬆️ 10.1 kB
📝 RevenueCat.PublishedWorkflow.__derived_struct_equals ⬆️ 8.3 kB
RevenueCat.UIConfig.Equatable ⬇️ -4.9 kB
RevenueCat.PaywallComponent.StackComponent.StackComponent ⬇️ -3.9 kB
RevenueCat.PaywallComponent.TextComponent.TextComponent ⬆️ 3.3 kB
View Treemap

Image of diff


🛸 Powered by Emerge Tools

Comment trigger: Size diff threshold of 100.00kB exceeded

@vegaro vegaro merged commit 09157cd into feat/workflows-network-layer Apr 21, 2026
6 of 17 checks passed
@vegaro vegaro deleted the generated_snapshots/feat/workflows-network-layer-538222-ios-15 branch April 21, 2026 10:21
vegaro added a commit that referenced this pull request Apr 21, 2026
* Add workflows network layer for multipage paywalls

- Add `getWorkflows` and `getWorkflow` endpoint paths
- Add `WorkflowsListResponse` and `PublishedWorkflow` response models
- Add `WorkflowDetailProcessor` to handle `inline`/`use_cdn` response actions
- Add `WorkflowCdnFetcher` protocol and `DirectWorkflowCdnFetcher` implementation
- Add `GetWorkflowsOperation` and `GetWorkflowOperation` cacheable network operations
- Add `WorkflowsAPI` facade and wire into `Backend`
- Add unit tests for all new components

iOS equivalent of RevenueCat/purchases-android#3300

Made-with: Cursor

* fix xcodeproj

* reset Package.resolved

* Update WorkflowStep models to match actual backend response

- Add WorkflowTrigger struct (name, type, action_id, component_id)
- Add triggers, outputs, and metadata fields to WorkflowStep
- Add metadata field to PublishedWorkflow
- Remove value field from WorkflowTriggerAction (backend uses step_id only)

Made-with: Cursor

* Update WorkflowResponseTests to match updated models

- Replace value/resolvedTargetStepId assertions with stepId
- Remove testDecodeWorkflowTriggerActionValueTakesPrecedence (value field removed)
- Add testDecodeWorkflowTrigger for new WorkflowTrigger struct
- Add testDecodePublishedWorkflowWithMetadata
- Update testDecodeWorkflowStepDefaults to cover triggers, outputs, metadata
- Add testDecodeWorkflowStepMatchingActualBackendResponse with real backend payload

Made-with: Cursor

* Disable file_length lint rule in HTTPRequestPath.swift

Made-with: Cursor

* Fix GetWorkflowOperation to compute result once before distributing to callbacks

CDN fetch and JSON decoding were running once per deduplicated callback.
Compute the Result<WorkflowFetchResult, BackendError> once outside the
performOnAllItemsAndRemoveFromCache loop, matching the pattern used by
GetOfferingsOperation and other operations in the codebase.

Made-with: Cursor

* Fix CDN fetcher: use URLSession instead of Data(contentsOf:), classify errors correctly

- Replace Data(contentsOf:) with URLSession.shared.dataTask + DispatchSemaphore
  in DirectWorkflowCdnFetcher; gets URLSession timeout, HTTP status validation,
  and proper network stack semantics
- Add WorkflowDetailProcessingError.cdnFetchFailed typed error so CDN I/O
  failures are distinguishable from envelope parsing failures
- Catch cdnFetchFailed in GetWorkflowOperation and map to NetworkError.networkError
  instead of NetworkError.decoding, fixing misleading error classification
- Update WorkflowDetailProcessorTests to assert the typed error is thrown

Made-with: Cursor

* Replace semaphore CDN fetch with async/await using withCheckedThrowingContinuation

- Make WorkflowCdnFetcher.fetchCompiledWorkflowData async throws; use
  withCheckedThrowingContinuation to bridge URLSession.dataTask into async,
  avoiding any thread-blocking
- Make WorkflowDetailProcessor.process async throws to propagate async
- Bridge into async in GetWorkflowOperation via Task {}; completion() is
  called inside the Task after CDN fetch and decoding complete
- Update WorkflowDetailProcessorTests to async throws with await

Made-with: Cursor

* Make CDN fetcher and processor completion-handler based for consistency

Avoids Task{} in GetWorkflowOperation and keeps all operations calling
completion() synchronously from within the HTTP callback, matching every
other operation in the codebase.

- WorkflowCdnFetcher.fetchCompiledWorkflowData now takes a completion handler;
  DirectWorkflowCdnFetcher uses URLSession.dataTask (non-blocking, no semaphore)
- WorkflowDetailProcessor.process now takes a completion handler; inline action
  completes synchronously, use_cdn fans out to the fetcher callback
- GetWorkflowOperation splits into getWorkflow/handleResponse/backendResult/
  distribute helpers to stay within line-length limits
- WorkflowDetailProcessorTests updated to use waitUntilValue pattern

Made-with: Cursor

* Fix ambiguous cache key delimiter in GetWorkflowOperation

Space-separated appUserID+workflowId could collide (e.g. user 'a b' + workflow 'c'
== user 'a' + workflow 'b c'). Use newline as delimiter, matching the precedent
set by GetWebBillingProductsOperation.

Made-with: Cursor

* PR comments

* remove cdn fetcher

* fix response in BackendGetWorkflowsTests.swift

* fix WorkflowResponseTests

* fix error

* [skip ci] Generating new test snapshots (#6584)

* [skip ci] Generating new test snapshots (#6585)

* [skip ci] Generating new test snapshots (#6586)

* [skip ci] Generating new test snapshots (#6587)

* [skip ci] Generating new test snapshots (#6588)

* [skip ci] Generating new test snapshots (#6589)

* [skip ci] Generating new test snapshots (#6590)

* Test CDN mock is not re-assignable per test

* [skip ci] Generating new test snapshots (#6597)

* [skip ci] Generating new test snapshots (#6598)

* [skip ci] Generating new test snapshots (#6599)

* [skip ci] Generating new test snapshots (#6600)

* [skip ci] Generating new test snapshots (#6601)

* [skip ci] Generating new test snapshots (#6602)

* [skip ci] Generating new test snapshots (#6603)

* getWorkflow is signed

* add type parameter

* add response verification for CDN response

* remove workflows list

* add value to WorkflowTriggerAction

* step id

* hash and filerepo

* missingCdnHash

* linter and project

* fix project

* revert Package.resolved

* @unchecked Sendable

* use hash in generateOrGetCachedFileURL

* fix compilation

* skip responseVerificationMode in cdn

* change basePath of caches

* remove reserialization

* Use explicit type in GetWorkflowOperation.createFactory for greppability

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Fix swiftlint identifier_name violation in WorkflowDetailProcessorTests

Rename short variable `d` to `doubleValue` in two `if case .double(let d)`
patterns to satisfy the identifier_name rule requiring names >= 3 characters.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* remove default FileRepositoryType

* fix project

* fix test

* test preserves camel case

* Generating new test snapshots for `feat/workflows-network-layer` - ios-15 (#6654)

* Generating new test snapshots for `feat/workflows-network-layer` - ios-14 (#6656)

---------

Co-authored-by: RevenueCat Git Bot <72824662+RCGitBot@users.noreply.github.com>
Co-authored-by: Facundo Menzella <facumenzella@gmail.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Facundo Menzella <facumenzella@users.noreply.github.com>
This was referenced Apr 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants