File: aggregate-let.yml

package info (click to toggle)
golang-mongodb-mongo-driver 1.17.1%2Bds1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 25,988 kB
  • sloc: perl: 533; ansic: 491; python: 432; sh: 327; makefile: 174
file content (138 lines) | stat: -rw-r--r-- 4,248 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
description: "aggregate-let"

schemaVersion: "1.4"

createEntities:
  - client:
      id: &client0 client0
      observeEvents: [ commandStartedEvent ]
  - database:
      id: &database0 database0
      client: *client0
      databaseName: &database0Name crud-tests
  - collection:
      id: &collection0 collection0
      database: *database0
      collectionName: &collection0Name coll0
  - collection:
      id: &collection1 collection1
      database: *database0
      collectionName: &collection1Name coll1

initialData: &initialData
  - collectionName: *collection0Name
    databaseName: *database0Name
    documents:
      - { _id: 1 }
  - collectionName: *collection1Name
    databaseName: *database0Name
    documents: [ ]

tests:
  - description: "Aggregate with let option"
    runOnRequirements:
      - minServerVersion: "5.0"
    operations:
      - name: aggregate
        object: *collection0
        arguments:
          pipeline: &pipeline0
            # $match takes a query expression, so $expr is necessary to utilize
            # an aggregate expression context and access "let" variables.
            - $match: { $expr: { $eq: ["$_id", "$$id"] } }
            - $project: { _id: 0, x: "$$x", y: "$$y", rand: "$$rand" }
          # Values in "let" must be constant or closed expressions that do not
          # depend on document values. This test demonstrates a basic constant
          # value, a value wrapped with $literal (to avoid expression parsing),
          # and a closed expression (e.g. $rand).
          let: &let0
            id: 1
            x: foo
            y: { $literal: "$bar" }
            rand: { $rand: {} }
        expectResult:
          - { x: "foo", y: "$bar", rand: { $$type: "double" } }
    expectEvents:
      - client: *client0
        events:
          - commandStartedEvent:
              command:
                aggregate: *collection0Name
                pipeline: *pipeline0
                let: *let0

  - description: "Aggregate with let option unsupported (server-side error)"
    runOnRequirements:
      - minServerVersion: "2.6.0"
        maxServerVersion: "4.4.99"
    operations:
      - name: aggregate
        object: *collection0
        arguments:
          pipeline: &pipeline1
            - $match: { _id: 1 }
          let: &let1
            x: foo
        expectError:
          # Older server versions may not report an error code, but the error
          # message is consistent between 2.6.x and 4.4.x server versions.
          errorContains: "unrecognized field 'let'"
          isClientError: false
    expectEvents:
      - client: *client0
        events:
          - commandStartedEvent:
              command:
                aggregate: *collection0Name
                pipeline: *pipeline1
                let: *let1

  - description: "Aggregate to collection with let option"
    runOnRequirements:
      - minServerVersion: "5.0"
        serverless: "forbid"
    operations:
      - name: aggregate
        object: *collection0
        arguments:
          pipeline: &pipeline2
            - $match: { $expr: { $eq: ["$_id", "$$id"] } }
            - $project: { _id: 1 }
            - $out: *collection1Name
          let: &let2
            id: 1
    expectEvents:
      - client: *client0
        events:
          - commandStartedEvent:
              command:
                aggregate: *collection0Name
                pipeline: *pipeline2
                let: *let2
    outcome:
      - collectionName: *collection1Name
        databaseName: *database0Name
        documents:
          - { _id: 1 }

  - description: "Aggregate to collection with let option unsupported (server-side error)"
    runOnRequirements:
      - minServerVersion: "2.6.0"
        maxServerVersion: "4.4.99"
    operations:
      - name: aggregate
        object: *collection0
        arguments:
          pipeline: *pipeline2
          let: *let2
        expectError:
          errorContains: "unrecognized field 'let'"
          isClientError: false
    expectEvents:
      - client: *client0
        events:
          - commandStartedEvent:
              command:
                aggregate: *collection0Name
                pipeline: *pipeline2
                let: *let2