summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline/document_source_project_test.cpp
diff options
context:
space:
mode:
authorLucas de Castro Borges <lucas@gnuabordo.com.br>2025-02-18 17:02:53 -0300
committerLucas de Castro Borges <lucas@gnuabordo.com.br>2025-02-18 17:02:53 -0300
commit959575a5ca598bf5f37fb5cebe7ed1d80d3d71f7 (patch)
treeacc8d60aedb12b70048e676e8a7349deb0010db8 /src/mongo/db/pipeline/document_source_project_test.cpp
parent76588293975fc059cf076779e4283e6ffaf8afff (diff)
New upstream version 6.0.20upstream
Diffstat (limited to 'src/mongo/db/pipeline/document_source_project_test.cpp')
-rw-r--r--src/mongo/db/pipeline/document_source_project_test.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/mongo/db/pipeline/document_source_project_test.cpp b/src/mongo/db/pipeline/document_source_project_test.cpp
index ced99ce0200..bd25639ee3e 100644
--- a/src/mongo/db/pipeline/document_source_project_test.cpp
+++ b/src/mongo/db/pipeline/document_source_project_test.cpp
@@ -338,6 +338,46 @@ TEST_F(ProjectStageTest, CannotAddNestedDocumentExceedingDepthLimit) {
ErrorCodes::Overflow);
}
+/**
+ * A default redaction strategy that generates easy to check results for testing purposes.
+ */
+std::string transformIdentifiersForTest(StringData s) {
+ return str::stream() << "HASH<" << s << ">";
+}
+
+TEST_F(ProjectStageTest, ShapifyAndRedact) {
+ auto inclusionProject = DocumentSourceProject::create(
+ fromjson("{a: true, x: '$b', y: {$and: ['$c','$d']}, z: {$meta: 'textScore'}}"),
+ getExpCtx(),
+ "$project"_sd);
+
+ ASSERT_BSONOBJ_EQ_AUTO( // NOLINT
+ R"({
+ "$project": {
+ "HASH<_id>": true,
+ "HASH<a>": true,
+ "HASH<x>": "$HASH<b>",
+ "HASH<y>": {
+ "$and": [ "$HASH<c>", "$HASH<d>" ]
+ },
+ "HASH<z>": { "$meta": "textScore" }
+ }
+ })",
+ redact(*inclusionProject));
+
+ auto exclusionProject = DocumentSourceProject::create(
+ fromjson("{a: false, 'b.c': false}"), getExpCtx(), "$project"_sd);
+ ASSERT_BSONOBJ_EQ_AUTO( // NOLINT
+ R"({
+ "$project": {
+ "HASH<a>": false,
+ "HASH<b>": {
+ "HASH<c>": false },
+ "HASH<_id>": true }
+ })",
+ redact(*exclusionProject));
+}
+
TEST_F(UnsetTest, AcceptsValidUnsetSpecWithArray) {
auto spec = BSON("$unset" << BSON_ARRAY("a"
<< "b"