description: "search index operations ignore read and write concern"
schemaVersion: "1.4"
createEntities:
  - client:
      id: &client0 client0
      useMultipleMongoses: false
      # Set a non-default read and write concern.
      uriOptions:
        readConcernLevel: local
        w: 1
      observeEvents:
        - commandStartedEvent
  - database:
      id: &database0 database0
      client: *client0
      databaseName: *database0
  - collection:
      id: &collection0 collection0
      database: *database0
      collectionName: *collection0

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

tests:
  - description: "createSearchIndex ignores read and write concern"
    operations:
      - name: createSearchIndex
        object: *collection0
        arguments:
          model: { definition: &definition { mappings: { dynamic: true } } }
        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:
                createSearchIndexes: *collection0
                indexes: [ { definition: *definition } ]
                $db: *database0
                # Expect no writeConcern or readConcern to be sent.
                writeConcern: { $$exists: false }
                readConcern: { $$exists: false }

  - description: "createSearchIndex ignores read and write concern"
    operations:
      - name: createSearchIndexes
        object: *collection0
        arguments: 
          models: []
        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:
                createSearchIndexes: *collection0
                indexes: []
                $db: *database0
                # Expect no writeConcern or readConcern to be sent.
                writeConcern: { $$exists: false }
                readConcern: { $$exists: false }

  - description: "dropSearchIndex ignores read and write concern"
    operations:
      - name: dropSearchIndex
        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:
                dropSearchIndex: *collection0
                name: *indexName
                $db: *database0
                # Expect no writeConcern or readConcern to be sent.
                writeConcern: { $$exists: false }
                readConcern: { $$exists: false }

  - description: "listSearchIndexes ignores read and write concern"
    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: {}
                # Expect no writeConcern or readConcern to be sent.
                writeConcern: { $$exists: false }
                readConcern: { $$exists: false }

  - description: "updateSearchIndex ignores the read and write concern"
    operations:
      - name: updateSearchIndex
        object: *collection0
        arguments:
          name: &indexName 'test index'
          definition: &definition {}
        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:
                updateSearchIndex: *collection0
                name: *indexName
                definition: *definition
                $db: *database0
                # Expect no writeConcern or readConcern to be sent.
                writeConcern: { $$exists: false }
                readConcern: { $$exists: false }