Feature: Sandbox Manager Coverage Round 3
  Exercises uncovered lines in SandboxManager:
    - TransactionSandbox branch in commit_all (lines 287-295)
    - resolve_sandbox_key validation (lines 567, 569)
    - get_or_create_sandbox_for_resource validation (lines 606, 608, 610, 623)

  Background:
    Given smcov3 a sandbox factory instance
    And smcov3 a sandbox manager with the factory

  # -- TransactionSandbox non-rollbackable classification in commit_all ------

  Scenario: commit_all classifies a TransactionSandbox as non-rollbackable
    Given smcov3 a sandbox exists for plan "plan-t1" resource "res-t1" path "/tmp/r1" strategy "none"
    And smcov3 the sandbox for plan "plan-t1" resource "res-t1" is replaced with a transaction sandbox mock
    When smcov3 I commit all sandboxes for plan "plan-t1"
    Then smcov3 the commit results should contain 1 successful result
    And smcov3 no error should have been raised

  Scenario: commit_all orders TransactionSandbox after rollbackable sandboxes
    Given smcov3 a sandbox exists for plan "plan-t2" resource "res-r1" path "/tmp/r1" strategy "none"
    And smcov3 the sandbox for plan "plan-t2" resource "res-r1" is replaced with a committable mock
    And smcov3 a sandbox exists for plan "plan-t2" resource "res-t1" path "/tmp/t1" strategy "none"
    And smcov3 the sandbox for plan "plan-t2" resource "res-t1" is replaced with a transaction sandbox mock
    And smcov3 a sandbox exists for plan "plan-t2" resource "res-fail" path "/tmp/f1" strategy "none"
    And smcov3 the sandbox for plan "plan-t2" resource "res-fail" will fail on commit
    When smcov3 I commit all sandboxes for plan "plan-t2"
    Then smcov3 the transaction sandbox mock for plan "plan-t2" resource "res-t1" should not have been committed

  Scenario: commit_all with only a TransactionSandbox commits successfully
    Given smcov3 a sandbox exists for plan "plan-t3" resource "res-t1" path "/tmp/t1" strategy "none"
    And smcov3 the sandbox for plan "plan-t3" resource "res-t1" is replaced with a transaction sandbox mock
    When smcov3 I commit all sandboxes for plan "plan-t3"
    Then smcov3 the commit results should contain 1 successful result

  # -- resolve_sandbox_key validation ----------------------------------------

  Scenario: resolve_sandbox_key rejects None resource
    When smcov3 I call resolve_sandbox_key with None resource
    Then smcov3 a ValueError should have been raised with message "resource cannot be None"

  Scenario: resolve_sandbox_key rejects None resource_registry
    When smcov3 I call resolve_sandbox_key with None resource_registry
    Then smcov3 a ValueError should have been raised with message "resource_registry cannot be None"

  # -- get_or_create_sandbox_for_resource validation -------------------------

  Scenario: get_or_create_sandbox_for_resource rejects empty plan_id
    When smcov3 I call get_or_create_sandbox_for_resource with empty plan_id
    Then smcov3 a ValueError should have been raised with message "plan_id cannot be empty"

  Scenario: get_or_create_sandbox_for_resource rejects None resource
    When smcov3 I call get_or_create_sandbox_for_resource with None resource
    Then smcov3 a ValueError should have been raised with message "resource cannot be None"

  Scenario: get_or_create_sandbox_for_resource rejects None resource_registry
    When smcov3 I call get_or_create_sandbox_for_resource with None resource_registry
    Then smcov3 a ValueError should have been raised with message "resource_registry cannot be None"

  Scenario: get_or_create_sandbox_for_resource rejects boundary with no location
    When smcov3 I call get_or_create_sandbox_for_resource with a boundary that has no location
    Then smcov3 a ValueError should have been raised with message "has no location"
