bson/testdata/versioned-api/crud-api-version-1-strict.yml
2025-03-17 20:58:26 +01:00

420 lines
12 KiB
YAML

description: "CRUD Api Version 1 (strict)"
schemaVersion: "1.4"
runOnRequirements:
- minServerVersion: "4.9"
createEntities:
- client:
id: &client client
observeEvents:
- commandStartedEvent
serverApi:
version: "1"
strict: true
- database:
id: &database database
client: *client
databaseName: &databaseName versioned-api-tests
- database:
id: &adminDatabase adminDatabase
client: *client
databaseName: &adminDatabaseName admin
- collection:
id: &collection collection
database: *database
collectionName: &collectionName test
_yamlAnchors:
versions:
- &expectedApiVersion
apiVersion: "1"
apiStrict: true
apiDeprecationErrors: { $$unsetOrMatches: false }
initialData:
- collectionName: *collectionName
databaseName: *databaseName
documents:
- { _id: 1, x: 11 }
- { _id: 2, x: 22 }
- { _id: 3, x: 33 }
- { _id: 4, x: 44 }
- { _id: 5, x: 55 }
tests:
- description: "aggregate on collection appends declared API version"
operations:
- name: aggregate
object: *collection
arguments:
pipeline: &pipeline
- $sort: { x : 1 }
- $match: { _id: { $gt: 1 } }
expectEvents:
- client: *client
events:
- commandStartedEvent:
command:
aggregate: *collectionName
pipeline: *pipeline
<<: *expectedApiVersion
- description: "aggregate on database appends declared API version"
runOnRequirements:
# serverless does not support either of the current database-level aggregation stages ($listLocalSessions and
# $currentOp)
- serverless: "forbid"
operations:
- name: aggregate
object: *adminDatabase
arguments:
pipeline: &pipeline
- $listLocalSessions: {}
- $limit: 1
expectError:
errorCodeName: "APIStrictError"
expectEvents:
- client: *client
events:
- commandStartedEvent:
command:
aggregate: 1
pipeline: *pipeline
<<: *expectedApiVersion
- description: "bulkWrite appends declared API version"
operations:
- name: bulkWrite
object: *collection
arguments:
requests:
- insertOne:
document: { _id: 6, x: 66 }
- updateOne:
filter: { _id: 2 }
update: { $inc: { x: 1 } }
- deleteMany:
filter: { x: { $nin: [ 24, 34 ] } }
- updateMany:
filter: { _id: { $gt: 1 } }
update: { $inc: { x: 1 } }
- deleteOne:
filter: { _id: 7 }
- replaceOne:
filter: { _id: 4 }
replacement: { _id: 4, x: 44 }
upsert: true
ordered: true
expectEvents:
- client: *client
events:
- commandStartedEvent:
command:
insert: *collectionName
documents:
- { _id: 6, x: 66 }
<<: *expectedApiVersion
- commandStartedEvent:
command:
update: *collectionName
updates:
- q: { _id: 2 }
u: { $inc: { x: 1 } }
multi: { $$unsetOrMatches: false }
upsert: { $$unsetOrMatches: false }
<<: *expectedApiVersion
- commandStartedEvent:
command:
delete: *collectionName
deletes:
- { q: { x: { $nin: [ 24, 34 ] } }, limit: 0 }
<<: *expectedApiVersion
- commandStartedEvent:
command:
update: *collectionName
updates:
- q: { _id: { $gt: 1 } }
u: { $inc: { x: 1 } }
multi: true
upsert: { $$unsetOrMatches: false }
<<: *expectedApiVersion
- commandStartedEvent:
command:
delete: *collectionName
deletes:
- { q: { _id: 7 }, limit: 1 }
<<: *expectedApiVersion
- commandStartedEvent:
command:
update: *collectionName
updates:
- q: { _id: 4 }
u: { _id: 4, x: 44 }
multi: { $$unsetOrMatches: false }
upsert: true
<<: *expectedApiVersion
- description: "countDocuments appends declared API version"
operations:
- name: countDocuments
object: *collection
arguments:
filter: &filter
x : { $gt: 11 }
expectEvents:
- client: *client
events:
- commandStartedEvent:
command:
aggregate: *collectionName
pipeline:
- { $match: *filter }
- { $group: { _id: 1, n: { $sum: 1 } } }
<<: *expectedApiVersion
- description: "deleteMany appends declared API version"
operations:
- name: deleteMany
object: *collection
arguments:
filter: { x: { $nin: [ 24, 34 ] } }
expectEvents:
- client: *client
events:
- commandStartedEvent:
command:
delete: *collectionName
deletes:
- { q: { x: { $nin: [ 24, 34 ] } }, limit: 0 }
<<: *expectedApiVersion
- description: "deleteOne appends declared API version"
operations:
- name: deleteOne
object: *collection
arguments:
filter: { _id: 7 }
expectEvents:
- client: *client
events:
- commandStartedEvent:
command:
delete: *collectionName
deletes:
- { q: { _id: 7 }, limit: 1 }
<<: *expectedApiVersion
# distinct will fail until drivers replace it with an alternative
# implementation
- description: "distinct appends declared API version"
operations:
- name: distinct
object: *collection
arguments:
fieldName: x
filter: {}
expectError:
isError: true
errorContains: "command distinct is not in API Version 1"
errorCodeName: "APIStrictError"
expectEvents:
- client: *client
events:
- commandStartedEvent:
command:
distinct: *collectionName
key: x
<<: *expectedApiVersion
- description: "estimatedDocumentCount appends declared API version"
# See: https://jira.mongodb.org/browse/SERVER-63850
runOnRequirements:
- minServerVersion: "5.0.9"
maxServerVersion: "5.0.99"
- minServerVersion: "5.3.2"
operations:
- name: estimatedDocumentCount
object: *collection
arguments: {}
expectEvents:
- client: *client
events:
- commandStartedEvent:
command:
count: *collectionName
<<: *expectedApiVersion
- description: "find and getMore append API version"
operations:
- name: find
object: *collection
arguments:
filter: {}
sort: { _id: 1 }
batchSize: 3
expectResult:
- { _id: 1, x: 11 }
- { _id: 2, x: 22 }
- { _id: 3, x: 33 }
- { _id: 4, x: 44 }
- { _id: 5, x: 55 }
expectEvents:
- client: *client
events:
- commandStartedEvent:
command:
find: *collectionName
<<: *expectedApiVersion
- commandStartedEvent:
command:
getMore: { $$type: [ int, long ] }
<<: *expectedApiVersion
- description: "findOneAndDelete appends declared API version"
operations:
- name: findOneAndDelete
object: *collection
arguments:
filter: &filter { _id: 1 }
expectEvents:
- client: *client
events:
- commandStartedEvent:
command:
findAndModify: *collectionName
query: *filter
remove: true
<<: *expectedApiVersion
- description: "findOneAndReplace appends declared API version"
operations:
- name: findOneAndReplace
object: *collection
arguments:
filter: &filter { _id: 1 }
replacement: &replacement { x: 33 }
expectEvents:
- client: *client
events:
- commandStartedEvent:
command:
findAndModify: *collectionName
query: *filter
update: *replacement
<<: *expectedApiVersion
- description: "findOneAndUpdate appends declared API version"
operations:
- name: findOneAndUpdate
object: collection
arguments:
filter: &filter { _id: 1 }
update: &update { $inc: { x: 1 } }
expectEvents:
- client: *client
events:
- commandStartedEvent:
command:
findAndModify: *collectionName
query: *filter
update: *update
<<: *expectedApiVersion
- description: "insertMany appends declared API version"
operations:
- name: insertMany
object: *collection
arguments:
documents:
- { _id: 6, x: 66 }
- { _id: 7, x: 77 }
expectEvents:
- client: *client
events:
- commandStartedEvent:
command:
insert: *collectionName
documents:
- { _id: 6, x: 66 }
- { _id: 7, x: 77 }
<<: *expectedApiVersion
- description: "insertOne appends declared API version"
operations:
- name: insertOne
object: *collection
arguments:
document: { _id: 6, x: 66 }
expectEvents:
- client: *client
events:
- commandStartedEvent:
command:
insert: *collectionName
documents:
- { _id: 6, x: 66 }
<<: *expectedApiVersion
- description: "replaceOne appends declared API version"
operations:
- name: replaceOne
object: *collection
arguments:
filter: { _id: 4 }
replacement: { _id: 4, x: 44 }
upsert: true
expectEvents:
- client: *client
events:
- commandStartedEvent:
command:
update: *collectionName
updates:
- q: { _id: 4 }
u: { _id: 4, x: 44 }
multi: { $$unsetOrMatches: false }
upsert: true
<<: *expectedApiVersion
- description: "updateMany appends declared API version"
operations:
- name: updateMany
object: *collection
arguments:
filter: { _id: { $gt: 1 } }
update: { $inc: { x: 1 } }
expectEvents:
- client: *client
events:
- commandStartedEvent:
command:
update: *collectionName
updates:
- q: { _id: { $gt: 1 } }
u: { $inc: { x: 1 } }
multi: true
upsert: { $$unsetOrMatches: false }
<<: *expectedApiVersion
- description: "updateOne appends declared API version"
operations:
- name: updateOne
object: *collection
arguments:
filter: { _id: 2 }
update: { $inc: { x: 1 } }
expectEvents:
- client: *client
events:
- commandStartedEvent:
command:
update: *collectionName
updates:
- q: { _id: 2 }
u: { $inc: { x: 1 } }
multi: { $$unsetOrMatches: false }
upsert: { $$unsetOrMatches: false }
<<: *expectedApiVersion