From a1224ffc20b504fb66c5c9fc6529494bc41ee6e6 Mon Sep 17 00:00:00 2001 From: Dave Rolsky Date: Mon, 23 Mar 2026 13:39:53 -0500 Subject: [PATCH] Convert `test/qa-tests/jstests/export/pretty.js` to Go --- mongoexport/mongoexport_test.go | 55 ++++++++++++++++++++++++++ test/qa-tests/jstests/export/pretty.js | 33 ---------------- 2 files changed, 55 insertions(+), 33 deletions(-) delete mode 100644 test/qa-tests/jstests/export/pretty.js diff --git a/mongoexport/mongoexport_test.go b/mongoexport/mongoexport_test.go index 055664036..849ec8cdc 100644 --- a/mongoexport/mongoexport_test.go +++ b/mongoexport/mongoexport_test.go @@ -551,3 +551,58 @@ func TestExportNoData(t *testing.T) { _, err = me2.Export(&buf) assert.Error(t, err, "export with --assertExists should fail on nonexistent collection") } + +// TestExportPretty verifies that mongoexport --pretty --jsonArray produces +// indented, parseable JSON with correct field values. +func TestExportPretty(t *testing.T) { + testtype.SkipUnlessTestType(t, testtype.IntegrationTestType) + log.SetWriter(io.Discard) + + const dbName = "mongoexport_pretty_test" + const collName = "source" + + sessionProvider, _, err := testutil.GetBareSessionProvider() + require.NoError(t, err) + client, err := sessionProvider.GetSession() + require.NoError(t, err) + t.Cleanup(func() { + if err := client.Database(dbName).Drop(context.Background()); err != nil { + t.Errorf("dropping test database: %v", err) + } + }) + + _, err = client.Database(dbName).Collection(collName).InsertMany(t.Context(), []any{ + bson.D{{"a", int32(1)}}, + bson.D{{"a", int32(1)}, {"b", int32(1)}}, + bson.D{{"a", int32(1)}, {"b", int32(2)}, {"c", int32(3)}}, + }) + require.NoError(t, err) + + toolOptions, err := testutil.GetToolOptions() + require.NoError(t, err) + toolOptions.Namespace = &options.Namespace{DB: dbName, Collection: collName} + me, err := New(Options{ + ToolOptions: toolOptions, + OutputFormatOptions: &OutputFormatOptions{ + Type: "json", + JSONFormat: "relaxed", + JSONArray: true, + Pretty: true, + }, + InputOptions: &InputOptions{}, + }) + require.NoError(t, err) + defer me.Close() + + var buf bytes.Buffer + _, err = me.Export(&buf) + require.NoError(t, err) + + var docs []map[string]any + require.NoError(t, json.Unmarshal(buf.Bytes(), &docs), "output should be valid JSON array") + require.Len(t, docs, 3, "should have 3 documents") + assert.Equal(t, float64(1), docs[0]["a"], "docs[0].a should be 1") + assert.Equal(t, float64(1), docs[1]["b"], "docs[1].b should be 1") + assert.Equal(t, float64(2), docs[2]["b"], "docs[2].b should be 2") + assert.Equal(t, float64(3), docs[2]["c"], "docs[2].c should be 3") +} diff --git a/test/qa-tests/jstests/export/pretty.js b/test/qa-tests/jstests/export/pretty.js deleted file mode 100644 index fbaad9582..000000000 --- a/test/qa-tests/jstests/export/pretty.js +++ /dev/null @@ -1,33 +0,0 @@ -(function() { - - if (typeof getToolTest === 'undefined') { - load('jstests/configs/plain_28.config.js'); - } - - var toolTest = getToolTest('fields_json'); - var commonToolArgs = getCommonToolArguments(); - var testDB = toolTest.db.getSiblingDB('test'); - var sourceColl = testDB.source; - - // insert some data - sourceColl.insert({a: 1}); - sourceColl.insert({a: 1, b: 1}); - sourceColl.insert({a: 1, b: 2, c: 3}); - - // export it with pretty - var ret = toolTest.runTool.apply(toolTest, ['export', - '--out', "pretty.json", - '--db', 'test', - '--collection', 'source', - '--pretty', - '--jsonArray'] - .concat(commonToolArgs)); - assert.eq(0, ret); - parsed = JSON.parse(cat('pretty.json')); - assert.eq(parsed[0].a, 1); - assert.eq(parsed[1].b, 1); - assert.eq(parsed[2].b, 2); - assert.eq(parsed[2].c, 3); - -}()); -