- 
                Notifications
    You must be signed in to change notification settings 
- Fork 119
[Local catalog] Feature eligibility checker #16276
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
          
     Merged
      
      
            joshheald
  merged 18 commits into
  trunk
from
woomob-1287-woo-poslocal-catalog-high-level-feature-eligibility-checker
  
      
      
   
  Oct 24, 2025 
      
    
  
     Merged
                    Changes from all commits
      Commits
    
    
            Show all changes
          
          
            18 commits
          
        
        Select commit
          Hold shift + click to select a range
      
      cf1753c
              
                Add POSLocalCatalogEligibilityService
              
              
                joshheald e25a69e
              
                Tests for POSLocalCatalogEligibilityService
              
              
                joshheald 38a326c
              
                Integrate the new catalog eligibility checker
              
              
                joshheald 6046dc5
              
                Check eligibility when choosing item controller
              
              
                joshheald d598372
              
                Use eligibility service without passing result
              
              
                joshheald 93c5cdc
              
                Remove delay for catalog eligibility on open POS
              
              
                joshheald 8571ccd
              
                Ensure we recover from cached ineligible states
              
              
                joshheald 081b6f0
              
                Move catalog eligibility service to App target
              
              
                joshheald 071e1a4
              
                Include POS Tab in local catalog eligibility
              
              
                joshheald beba51b
              
                Avoid rechecking results which are unlikely to change
              
              
                joshheald ae8b3e0
              
                Remove unsupported syntax for Xcode 16
              
              
                joshheald 08e30f5
              
                Fix test
              
              
                joshheald 8fbe34b
              
                Periphery fixes
              
              
                joshheald 1a3ca53
              
                Include catalog eligibilty checker in protocol
              
              
                joshheald 15b717f
              
                Use service for catalog eligibility in settings
              
              
                joshheald 8d9a123
              
                Rename catalog service variable for clarity
              
              
                joshheald d402747
              
                Pass catalog eligibility value when presenting POS
              
              
                joshheald 1ba7a70
              
                Use POS visibility for catalog checks
              
              
                joshheald File filter
Filter by extension
Conversations
          Failed to load comments.   
        
        
          
      Loading
        
  Jump to
        
          Jump to file
        
      
      
          Failed to load files.   
        
        
          
      Loading
        
  Diff view
Diff view
There are no files selected for viewing
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
        
          
          
            41 changes: 41 additions & 0 deletions
          
          41 
        
  Modules/Sources/PointOfSale/Protocols/POSLocalCatalogEligibilityServiceProtocol.swift
  
  
      
      
   
        
      
      
    
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              | Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,41 @@ | ||
| import Foundation | ||
|  | ||
| /// Eligibility state for local catalog feature | ||
| /// Provides diagnostic information for UI display and decision-making | ||
| public enum POSLocalCatalogEligibilityState: Equatable { | ||
| /// Local catalog is eligible for use | ||
| case eligible | ||
|  | ||
| /// Local catalog is not eligible | ||
| case ineligible(reason: POSLocalCatalogIneligibleReason) | ||
| } | ||
|  | ||
| /// Reasons why local catalog is ineligible | ||
| public enum POSLocalCatalogIneligibleReason: Equatable { | ||
| case posTabNotVisible | ||
| case featureFlagDisabled | ||
| case catalogSizeTooLarge(totalCount: Int, limit: Int) | ||
| case catalogSizeCheckFailed(underlyingError: String) | ||
| } | ||
|  | ||
| /// Service that provides eligibility information for local catalog feature | ||
| /// | ||
| /// Other services can query this for eligibility state and reasons: | ||
| /// - Sync coordinator can check if catalog is eligible | ||
| /// - Settings UI can display eligibility status and reasons | ||
| /// - Analytics can track why stores are ineligible | ||
| /// | ||
| /// NOTE: This service checks catalog-related eligibility (size limits) and feature flag state. | ||
| /// The service performs an initial eligibility check during initialization. | ||
| public protocol POSLocalCatalogEligibilityServiceProtocol { | ||
| /// Current eligibility state (synchronously accessible on main thread) | ||
| var eligibilityState: POSLocalCatalogEligibilityState { get } | ||
|  | ||
| /// Update the POS tab visibility state and refresh eligibility | ||
| /// - Parameter isPOSTabVisible: Whether the POS tab is visible | ||
| func updateVisibility(isPOSTabVisible: Bool) async | ||
|  | ||
| /// Force refresh eligibility (bypasses cache and updates eligibilityState) | ||
| /// - Returns: Fresh eligibility state with reason if ineligible | ||
| @discardableResult func refreshEligibilityState() async -> POSLocalCatalogEligibilityState | ||
| } | ||
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
        
          
          
            20 changes: 20 additions & 0 deletions
          
          20 
        
  Modules/Tests/PointOfSaleTests/Mocks/MockPOSLocalCatalogEligibilityService.swift
  
  
      
      
   
        
      
      
    
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              | Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,20 @@ | ||
| import Foundation | ||
| @testable import PointOfSale | ||
|  | ||
| /// Mock implementation of POSLocalCatalogEligibilityServiceProtocol for testing | ||
| @MainActor | ||
| public final class MockPOSLocalCatalogEligibilityService: POSLocalCatalogEligibilityServiceProtocol { | ||
| public var eligibilityState: POSLocalCatalogEligibilityState | ||
| public var refreshCallCount = 0 | ||
|  | ||
| public init(eligibilityState: POSLocalCatalogEligibilityState = .eligible) { | ||
| self.eligibilityState = eligibilityState | ||
| } | ||
|  | ||
| public func refreshEligibilityState() async -> POSLocalCatalogEligibilityState { | ||
| refreshCallCount += 1 | ||
| return eligibilityState | ||
| } | ||
|  | ||
| public func updateVisibility(isPOSTabVisible: Bool) async { } | ||
| } | 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
      
      Oops, something went wrong.
        
    
  
  Add this suggestion to a batch that can be applied as a single commit.
  This suggestion is invalid because no changes were made to the code.
  Suggestions cannot be applied while the pull request is closed.
  Suggestions cannot be applied while viewing a subset of changes.
  Only one suggestion per line can be applied in a batch.
  Add this suggestion to a batch that can be applied as a single commit.
  Applying suggestions on deleted lines is not supported.
  You must change the existing code in this line in order to create a valid suggestion.
  Outdated suggestions cannot be applied.
  This suggestion has been applied or marked resolved.
  Suggestions cannot be applied from pending reviews.
  Suggestions cannot be applied on multi-line comments.
  Suggestions cannot be applied while the pull request is queued to merge.
  Suggestion cannot be applied right now. Please check back later.
  
    
  
    
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍 This is good and tidy, we will be able to include all the ineligibility cases here.