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

description: bulkWrite-update-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_bulkwrite_update_hint
initialData:
  -
    collectionName: *collection_name
    databaseName: *database_name
    documents:
      -
        _id: 1
        x: 11
      -
        _id: 2
        x: 22
      -
        _id: 3
        x: 33
      -
        _id: 4
        x: 44
tests:
  -
    description: 'BulkWrite updateOne with update hints'
    operations:
      -
        object: *collection0
        name: bulkWrite
        arguments:
          requests:
            -
              updateOne:
                filter: &updateOne_filter
                  _id: 1
                update: &updateOne_update
                  $inc:
                    x: 1
                hint: &hint_string _id_
            -
              updateOne:
                filter: *updateOne_filter
                update: *updateOne_update
                hint: &hint_doc
                  _id: 1
          ordered: true
        expectResult:
          deletedCount: 0
          insertedCount: 0
          insertedIds: { $$unsetOrMatches: {} }
          matchedCount: 2
          modifiedCount: 2
          upsertedCount: 0
          upsertedIds: {  }
    expectEvents:
      -
        client: *client0
        events:
          -
            commandStartedEvent:
              command:
                update: *collection_name
                updates:
                  -
                    q: *updateOne_filter
                    u: *updateOne_update
                    multi: { $$unsetOrMatches: false }
                    upsert: { $$unsetOrMatches: false }
                    hint: *hint_string
                  -
                    q: *updateOne_filter
                    u: *updateOne_update
                    multi: { $$unsetOrMatches: false }
                    upsert: { $$unsetOrMatches: false }
                    hint: *hint_doc
                ordered: true
    outcome:
      -
        collectionName: *collection_name
        databaseName: *database_name
        documents:
          -
            _id: 1
            x: 13
          -
            _id: 2
            x: 22
          -
            _id: 3
            x: 33
          -
            _id: 4
            x: 44
  -
    description: 'BulkWrite updateMany with update hints'
    operations:
      -
        object: *collection0
        name: bulkWrite
        arguments:
          requests:
            -
              updateMany:
                filter: &updateMany_filter
                  _id:
                    $lt: 3
                update: &updateMany_update
                  $inc:
                    x: 1
                hint: *hint_string
            -
              updateMany:
                filter: *updateMany_filter
                update: *updateMany_update
                hint: *hint_doc
          ordered: true
        expectResult:
          deletedCount: 0
          insertedCount: 0
          insertedIds: { $$unsetOrMatches: {} }
          matchedCount: 4
          modifiedCount: 4
          upsertedCount: 0
          upsertedIds: {  }
    expectEvents:
      -
        client: *client0
        events:
          -
            commandStartedEvent:
              command:
                update: *collection_name
                updates:
                  -
                    q: *updateMany_filter
                    u: *updateMany_update
                    multi: true
                    upsert: { $$unsetOrMatches: false }
                    hint: *hint_string
                  -
                    q: *updateMany_filter
                    u: *updateMany_update
                    multi: true
                    upsert: { $$unsetOrMatches: false }
                    hint: *hint_doc
                ordered: true
    outcome:
      -
        collectionName: *collection_name
        databaseName: *database_name
        documents:
          -
            _id: 1
            x: 13
          -
            _id: 2
            x: 24
          -
            _id: 3
            x: 33
          -
            _id: 4
            x: 44
  -
    description: 'BulkWrite replaceOne with update hints'
    operations:
      -
        object: *collection0
        name: bulkWrite
        arguments:
          requests:
            -
              replaceOne:
                filter:
                  _id: 3
                replacement:
                  x: 333
                hint: *hint_string
            -
              replaceOne:
                filter:
                  _id: 4
                replacement:
                  x: 444
                hint: *hint_doc
          ordered: true
        expectResult:
          deletedCount: 0
          insertedCount: 0
          insertedIds: { $$unsetOrMatches: {} }
          matchedCount: 2
          modifiedCount: 2
          upsertedCount: 0
          upsertedIds: {  }
    expectEvents:
      -
        client: *client0
        events:
          -
            commandStartedEvent:
              command:
                update: *collection_name
                updates:
                  -
                    q:
                      _id: 3
                    u:
                      x: 333
                    multi: { $$unsetOrMatches: false }
                    upsert: { $$unsetOrMatches: false }
                    hint: *hint_string
                  -
                    q:
                      _id: 4
                    u:
                      x: 444
                    multi: { $$unsetOrMatches: false }
                    upsert: { $$unsetOrMatches: false }
                    hint: *hint_doc
                ordered: true
    outcome:
      -
        collectionName: *collection_name
        databaseName: *database_name
        documents:
          -
            _id: 1
            x: 11
          -
            _id: 2
            x: 22
          -
            _id: 3
            x: 333
          -
            _id: 4
            x: 444
