description: "listSearchIndexes"
schemaVersion: "1.4"
createEntities:
  - client:
      id: &client0 client0
      useMultipleMongoses: false
      observeEvents:
        - commandStartedEvent
  - database:
      id: &database0 database0
      client: *client0
      databaseName: *database0
  - collection:
      id: &collection0 collection0
      database: *database0
      collectionName: *collection0

initialData:
  - collectionName: *collection0
    databaseName: *database0
    documents:
      - x: 1

runOnRequirements:
  - minServerVersion: "7.0.0"
    topologies: [ replicaset, load-balanced, sharded ]
    serverless: forbid

tests:
  - description: "when no name is provided, it does not populate the filter"
    operations:
      - name: listSearchIndexes
        object: *collection0
        expectError:
          # This test always errors in a non-Atlas environment.  The test functions as a unit test  by asserting
          # that the driver constructs and sends the correct command.
          # The expected error message was changed in SERVER-83003. Check for the substring "Atlas" shared by both error messages.
          isError: true
          errorContains: Atlas
    expectEvents:
      - client: *client0
        events:
          - commandStartedEvent:
              command:
                aggregate: *collection0
                pipeline:
                  - $listSearchIndexes: {}

  - description: "when a name is provided, it is present in the filter"
    operations:
      - name: listSearchIndexes
        object: *collection0
        arguments: 
          name: &indexName "test index"
        expectError:
          # This test always errors in a non-Atlas environment.  The test functions as a unit test  by asserting
          # that the driver constructs and sends the correct command.
          # The expected error message was changed in SERVER-83003. Check for the substring "Atlas" shared by both error messages.
          isError: true
          errorContains: Atlas
    expectEvents:
      - client: *client0
        events:
          - commandStartedEvent:
              command:
                aggregate: *collection0
                pipeline:
                  - $listSearchIndexes: { name: *indexName }
                $db: *database0

  - description: aggregation cursor options are supported
    operations:
      - name: listSearchIndexes
        object: *collection0
        arguments: 
          name: &indexName "test index"
          aggregationOptions: 
            batchSize: 10
        expectError:
          # This test always errors in a non-Atlas environment.  The test functions as a unit test  by asserting
          # that the driver constructs and sends the correct command.
          # The expected error message was changed in SERVER-83003. Check for the substring "Atlas" shared by both error messages.
          isError: true
          errorContains: Atlas
    expectEvents:
      - client: *client0
        events:
          - commandStartedEvent:
              command:
                aggregate: *collection0
                cursor: { batchSize: 10 }
                pipeline:
                  - $listSearchIndexes: { name: *indexName }
                $db: *database0
