runOn:
  # These tests assert that the driver does not raise client-side errors and
  # instead relies on the server to raise an error. Server versions >= 4.1.10
  # raise errors for unknown findAndModify options (SERVER-40005), but the spec
  # requires client-side errors for < 4.2. Support for findAndModify hint was
  # added in 4.3.1 (SERVER-42099), so we'll allow up to 4.3.0 (inclusive).
  - { minServerVersion: "4.2.0", maxServerVersion: "4.3.0" }

data:
  - { _id: 1, x: 11 }
  - { _id: 2, x: 22 }

collection_name: &collection_name 'findOneAndReplace_hint'

tests:
  -
    description: "FindOneAndReplace with hint string unsupported (server-side error)"
    operations:
      -
        object: collection
        name: findOneAndReplace
        arguments:
          filter: &filter { _id: 1 }
          replacement: &replacement { x: 33 }
          hint: "_id_"
        error: true
    expectations:
      -
        command_started_event:
          command:
            findAndModify: *collection_name
            query: *filter
            update: *replacement
            hint: "_id_"
    outcome: &outcome
      collection:
        data:
          - { _id: 1, x: 11 }
          - { _id: 2, x: 22 }
  -
    description: "FindOneAndReplace with hint document unsupported (server-side error)"
    operations:
      -
        object: collection
        name: findOneAndReplace
        arguments:
          filter: *filter
          replacement: *replacement
          hint: { _id: 1 }
        error: true
    expectations:
      -
        command_started_event:
          command:
            findAndModify: *collection_name
            query: *filter
            update: *replacement
            hint: { _id: 1 }
    outcome: *outcome
