data:
    - {_id: 1, x: 11}
    - {_id: 2, x: 'ping'}
    - {_id: 3, x: 'pINg'}
    - {_id: 4, x: 'pong'}
    - {_id: 5, x: 'pONg'}

minServerVersion: '3.4'
serverless: 'forbid'

# See: https://mongodb.com/docs/manual/reference/collation/#collation-document
tests:
    -
        description: "BulkWrite with delete operations and collation"
        operation:
            name: "bulkWrite"
            arguments:
                requests:
                    -
                        # matches two documents but deletes one
                        name: "deleteOne"
                        arguments:
                            filter: { x: "PING" }
                            collation: { locale: "en_US", strength: 2 }
                    -
                        # matches the remaining document and deletes it
                        name: "deleteOne"
                        arguments:
                            filter: { x: "PING" }
                            collation: { locale: "en_US", strength: 2 }
                    -
                        # matches two documents and deletes them
                        name: "deleteMany"
                        arguments:
                            filter: { x: "PONG" }
                            collation: { locale: "en_US", strength: 2 }
                options: { ordered: true }
        outcome:
            result:
                deletedCount: 4
                insertedCount: 0
                insertedIds: {}
                matchedCount: 0
                modifiedCount: 0
                upsertedCount: 0
                upsertedIds: {}
            collection:
                data:
                    - {_id: 1, x: 11 }
    -
        description: "BulkWrite with update operations and collation"
        operation:
            name: "bulkWrite"
            arguments:
                requests:
                    -
                        # matches only one document due to strength and updates
                        name: "updateMany"
                        arguments:
                            filter: { x: "ping" }
                            update: { $set: { x: "PONG" } }
                            collation: { locale: "en_US", strength: 3 }
                    -
                        # matches one document and updates
                        name: "updateOne"
                        arguments:
                            filter: { x: "ping" }
                            update: { $set: { x: "PONG" } }
                            collation: { locale: "en_US", strength: 2 }
                    -
                        # matches no document due to strength and upserts
                        name: "replaceOne"
                        arguments:
                            filter: { x: "ping" }
                            replacement: { _id: 6, x: "ping" }
                            upsert: true
                            collation: { locale: "en_US", strength: 3 }
                    -
                        # matches two documents and updates
                        name: "updateMany"
                        arguments:
                            filter: { x: "pong" }
                            update: { $set: { x: "PONG" } }
                            collation: { locale: "en_US", strength: 2 }
                options: { ordered: true }
        outcome:
            result:
                deletedCount: 0
                insertedCount: 0
                insertedIds: {}
                matchedCount: 6
                modifiedCount: 4
                upsertedCount: 1
                upsertedIds: { 2: 6 }
            collection:
                data:
                    - {_id: 1, x: 11 }
                    - {_id: 2, x: "PONG" }
                    - {_id: 3, x: "PONG" }
                    - {_id: 4, x: "PONG" }
                    - {_id: 5, x: "PONG" }
                    - {_id: 6, x: "ping" }
