description: "disambiguatedPaths"
schemaVersion: "1.4"
createEntities:
  - client:
      id: &client0 client0
      useMultipleMongoses: false
  - database:
      id: &database0 database0
      client: *client0
      databaseName: *database0
  - collection:
      id: &collection0 collection0
      database: *database0
      collectionName: *collection0

runOnRequirements:
  - minServerVersion: "6.1.0"
    # TODO(DRIVERS-2323): Run all possible tests against sharded clusters once we know the
    # cause of unexpected command monitoring events.
    topologies: [ replicaset ]
    serverless: forbid

initialData:
  - collectionName: *collection0
    databaseName: *database0
    documents: []

tests:
  - description: "disambiguatedPaths is present on updateDescription when an ambiguous path is present"
    operations:
      - name: insertOne
        object: *collection0
        arguments:
          document: { _id: 1, 'a': { '1': 1 } }
      - name: createChangeStream
        object: *collection0
        arguments: { pipeline: [], showExpandedEvents: true }
        saveResultAsEntity: &changeStream0 changeStream0
      - name: updateOne
        object: *collection0
        arguments:
          filter: { _id: 1 }
          update: { $set: { 'a.1': 2 } }
      - name: iterateUntilDocumentOrError
        object: *changeStream0
        expectResult:
          operationType: "update"
          ns: { db: *database0, coll: *collection0 }
          updateDescription:
            updatedFields: { $$exists: true }
            removedFields: { $$exists: true }
            truncatedArrays: { $$exists: true }
            disambiguatedPaths: { 'a.1': ['a', '1'] }

  - description: "disambiguatedPaths returns array indices as integers"
    operations:
      - name: insertOne
        object: *collection0
        arguments:
          document: { _id: 1, 'a': [{'1': 1 }] }
      - name: createChangeStream
        object: *collection0
        arguments: { pipeline: [], showExpandedEvents: true }
        saveResultAsEntity: &changeStream0 changeStream0
      - name: updateOne
        object: *collection0
        arguments:
          filter: { _id: 1 }
          update: { $set: { 'a.0.1': 2 } }
      - name: iterateUntilDocumentOrError
        object: *changeStream0
        expectResult:
          operationType: "update"
          ns: { db: *database0, coll: *collection0 }
          updateDescription:
            updatedFields: { $$exists: true }
            removedFields: { $$exists: true }
            truncatedArrays: { $$exists: true }
            disambiguatedPaths: { 'a.0.1': ['a', { $$type: 'int' },  '1'] }
