# This file was created automatically using mongodb-spec-converter.
# Please review the generated file, then remove this notice.

description: replaceOne-hint
schemaVersion: '1.0'
runOnRequirements:
  -
    minServerVersion: 4.2.0
createEntities:
  -
    client:
      id: &client0 client0
      observeEvents:
        - commandStartedEvent
  -
    database:
      id: &database0 database0
      client: client0
      databaseName: &database_name crud-v2
  -
    collection:
      id: &collection0 collection0
      database: database0
      collectionName: &collection_name test_replaceone_hint
initialData:
  -
    collectionName: *collection_name
    databaseName: *database_name
    documents:
      -
        _id: 1
        x: 11
      -
        _id: 2
        x: 22
tests:
  -
    description: 'ReplaceOne with hint string'
    operations:
      -
        object: *collection0
        name: replaceOne
        arguments:
          filter: &filter
            _id:
              $gt: 1
          replacement: &replacement
            x: 111
          hint: _id_
        expectResult: &result
          matchedCount: 1
          modifiedCount: 1
          upsertedCount: 0
    expectEvents:
      -
        client: *client0
        events:
          -
            commandStartedEvent:
              command:
                update: *collection_name
                updates:
                  -
                    q: *filter
                    u: *replacement
                    hint: _id_
                    multi: { $$unsetOrMatches: false }
                    upsert: { $$unsetOrMatches: false }
    outcome: &outcome
      -
        collectionName: *collection_name
        databaseName: *database_name
        documents:
          -
            _id: 1
            x: 11
          -
            _id: 2
            x: 111
  -
    description: 'ReplaceOne with hint document'
    operations:
      -
        object: *collection0
        name: replaceOne
        arguments:
          filter: *filter
          replacement: *replacement
          hint:
            _id: 1
        expectResult: *result
    expectEvents:
      -
        client: *client0
        events:
          -
            commandStartedEvent:
              command:
                update: *collection_name
                updates:
                  -
                    q: *filter
                    u: *replacement
                    hint:
                      _id: 1
                    multi: { $$unsetOrMatches: false }
                    upsert: { $$unsetOrMatches: false }
    outcome: *outcome
