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

description: bulkWrite-arrayFilters
schemaVersion: '1.0'
runOnRequirements:
  -
    minServerVersion: 3.5.6
createEntities:
  -
    client:
      id: &client0 client0
      observeEvents:
        - commandStartedEvent
  -
    database:
      id: &database0 database0
      client: client0
      databaseName: &database_name crud-tests
  -
    collection:
      id: &collection0 collection0
      database: database0
      collectionName: &collection_name test
initialData:
  -
    collectionName: *collection_name
    databaseName: *database_name
    documents:
      -
        _id: 1
        'y':
          -
            b: 3
          -
            b: 1
      -
        _id: 2
        'y':
          -
            b: 0
          -
            b: 1
tests:
  -
    description: 'BulkWrite updateOne with arrayFilters'
    operations:
      -
        object: *collection0
        name: bulkWrite
        arguments:
          requests:
            -
              updateOne:
                filter: {  }
                update:
                  $set:
                    'y.$[i].b': 2
                arrayFilters:
                  -
                    i.b: 3
          ordered: true
        expectResult:
          deletedCount: 0
          insertedCount: 0
          insertedIds: { $$unsetOrMatches: {} }
          matchedCount: 1
          modifiedCount: 1
          upsertedCount: 0
          upsertedIds: {  }
    expectEvents:
      -
        client: *client0
        events:
          -
            commandStartedEvent:
              command:
                update: *collection_name
                updates:
                  -
                    q: {  }
                    u:
                      $set: { 'y.$[i].b': 2 }
                    multi: { $$unsetOrMatches: false }
                    upsert: { $$unsetOrMatches: false }
                    arrayFilters:
                      - { i.b: 3 }
                ordered: true
              commandName: update
              databaseName: *database_name
    outcome:
      -
        collectionName: *collection_name
        databaseName: *database_name
        documents:
          -
            _id: 1
            'y':
              -
                b: 2
              -
                b: 1
          -
            _id: 2
            'y':
              -
                b: 0
              -
                b: 1
  -
    description: 'BulkWrite updateMany with arrayFilters'
    operations:
      -
        object: *collection0
        name: bulkWrite
        arguments:
          requests:
            -
              updateMany:
                filter: {  }
                update:
                  $set:
                    'y.$[i].b': 2
                arrayFilters:
                  -
                    i.b: 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: {  }
                    u:
                      $set: { 'y.$[i].b': 2 }
                    multi: true
                    upsert: { $$unsetOrMatches: false }
                    arrayFilters:
                      - { i.b: 1 }
                ordered: true
              commandName: update
              databaseName: *database_name
    outcome:
      -
        collectionName: *collection_name
        databaseName: *database_name
        documents:
          -
            _id: 1
            'y':
              -
                b: 3
              -
                b: 2
          -
            _id: 2
            'y':
              -
                b: 0
              -
                b: 2
