Feature: Database URL sanitisation — credentials must never be exposed

  As a CleverAgents operator
  I want database URLs in CLI output to have their credentials masked
  So that running ``agents info`` never leaks passwords or API tokens

@tdd_bug_8395
  Scenario Outline: PostgreSQL URL with user and password — all are masked
    Given the database url is "<url>"
    When I run sanitise_db_url
    Then the sanitised database url should be "<expected>"

    Examples:
      | url                                                                  | expected                                             |
      | postgresql://user:secret@localhost/mydb                              | postgresql://***:***@localhost/mydb                  |
      | postgresql://admin:p%40ssw0rd@db.example.com:5432/agents             | postgresql://***:***@db.example.com:5432/agents      |
      | postgresql://readonly:r0ad_only@pg.cluster.internal:5433/production  | postgresql://***:***@pg.cluster.internal:5433/production |

  Scenario Outline: MySQL URL with credentials — all are masked
    Given the database url is "<url>"
    When I run sanitise_db_url
    Then the sanitised database url should be "<expected>"

    Examples:
      | url                                                  | expected                                         |
      | mysql://app:s3cret@mysql.internal:3306/agents        | mysql://***:***@mysql.internal:3306/agents       |
      | mysql+pymysql://root:toor@localhost/testdb           | mysql+pymysql://***:***@localhost/testdb         |

  Scenario Outline: SQLite URLs — remain unchanged (no credentials)
    Given the database url is "<url>"
    When I run sanitise_db_url
    Then the sanitised database url should be "<expected>"

    Examples:
      | url                                    | expected                           |
      | sqlite:///data/cleveragents.db         | sqlite:///data/cleveragents.db     |
      | sqlite:////absolute/path/to/db.sqlite  | sqlite:////absolute/path/to/db.sqlite |
      | memory                                 | memory                             |

  Scenario: Username-only URL — password is still masked
    Given the database url is "postgres://deploy@db.example.com/prod"
    When I run sanitise_db_url
    Then the sanitised database url should be "postgres://***:***@db.example.com/prod"

  Scenario: SQLite URL without credentials remains unchanged
    Given the database url is "sqlite:///test.db"
    When I run sanitise_db_url
    Then the sanitised database url should be "sqlite:///test.db"

  Scenario: build_info_data returns sanitised database URL
    Given a mock settings object with database url "postgresql://admin:supersecret@host.example.com:5432/mydb"
    When I call build_info_data
    Then the database field in info data should be "postgresql://***:***@host.example.com:5432/mydb"
