runOn:
  - { minServerVersion: "4.2.0" }

data:
  - {_id: 1, x: 11}
  - {_id: 2, x: 22}
  - {_id: 3, x: 33}
  - {_id: 4, x: 44}

collection_name: &collection_name 'test_bulkwrite_update_hint'

tests:
  -
    description: "BulkWrite updateOne with update hints"
    operations:
      -
        name: "bulkWrite"
        arguments:
          requests:
            -
              name: "updateOne"
              arguments:
                filter: &updateOne_filter { _id: 1 }
                update: &updateOne_update { $inc: { x: 1 } }
                hint: &hint_string "_id_"
            -
              name: "updateOne"
              arguments:
                filter: *updateOne_filter
                update: *updateOne_update
                hint: &hint_doc { _id: 1 }
          options: { ordered: true }
        result:
          deletedCount: 0
          insertedCount: 0
          insertedIds: {}
          matchedCount: 2
          modifiedCount: 2
          upsertedCount: 0
          upsertedIds: {}
    expectations:
      -
        command_started_event:
          command:
            update: *collection_name
            updates:
              -
                q: *updateOne_filter
                u: *updateOne_update
                hint: *hint_string
              -
                q: *updateOne_filter
                u: *updateOne_update
                hint: *hint_doc
            ordered: true
    outcome:
      collection:
        data:
          - {_id: 1, x: 13 }
          - {_id: 2, x: 22 }
          - {_id: 3, x: 33 }
          - {_id: 4, x: 44 }
  -
    description: "BulkWrite updateMany with update hints"
    operations:
      -
        name: "bulkWrite"
        arguments:
          requests:
            -
              name: "updateMany"
              arguments:
                filter: &updateMany_filter { _id: { $lt: 3 } }
                update: &updateMany_update { $inc: { x: 1 } }
                hint: *hint_string
            -
              name: "updateMany"
              arguments:
                filter: *updateMany_filter
                update: *updateMany_update
                hint: *hint_doc
          options: { ordered: true }
        result:
          deletedCount: 0
          insertedCount: 0
          insertedIds: {}
          matchedCount: 4
          modifiedCount: 4
          upsertedCount: 0
          upsertedIds: {}
    expectations:
      -
        command_started_event:
          command:
            update: *collection_name
            updates:
              -
                q: *updateMany_filter
                u: *updateMany_update
                multi: true
                hint: *hint_string
              -
                q: *updateMany_filter
                u: *updateMany_update
                multi: true
                hint: *hint_doc
            ordered: true
    outcome:
      collection:
        data:
          - {_id: 1, x: 13 }
          - {_id: 2, x: 24 }
          - {_id: 3, x: 33 }
          - {_id: 4, x: 44 }
  -
    description: "BulkWrite replaceOne with update hints"
    operations:
      -
        name: "bulkWrite"
        arguments:
          requests:
            -
              name: "replaceOne"
              arguments:
                filter: { _id: 3 }
                replacement: { x: 333 }
                hint: *hint_string
            -
              name: "replaceOne"
              arguments:
                filter: { _id: 4 }
                replacement: { x: 444 }
                hint: *hint_doc
          options: { ordered: true }
        result:
          deletedCount: 0
          insertedCount: 0
          insertedIds: {}
          matchedCount: 2
          modifiedCount: 2
          upsertedCount: 0
          upsertedIds: {}
    expectations:
      -
        command_started_event:
          command:
            update: *collection_name
            updates:
              -
                q: { _id: 3 }
                u: { x: 333 }
                hint: *hint_string
              -
                q: { _id: 4 }
                u: { x: 444 }
                hint: *hint_doc
            ordered: true
    outcome:
      collection:
        data:
          - {_id: 1, x: 11 }
          - {_id: 2, x: 22 }
          - {_id: 3, x: 333 }
          - {_id: 4, x: 444 }
