Ctrl K
ComunidadGuías…

test/filebrowser-large-file.test.js

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
var test = require("node:test");
var assert = require("node:assert");
var fs = require("node:fs");
var os = require("node:os");
var path = require("node:path");
var { attachFilesystem } = require("../lib/project-filesystem");

test("file browser reads text files larger than the live preview limit", function () {
  var tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "clay-large-file-"));
  var filePath = path.join(tempDir, "large.txt");
  var content = "x".repeat(768 * 1024);
  var response = null;
  fs.writeFileSync(filePath, content);

  try {
    var filesystem = attachFilesystem({
      cwd: tempDir,
      slug: "test",
      osUsers: null,
      sm: { sessions: new Map() },
      send: function () {},
      sendTo: function (ws, msg) { response = msg; },
      safePath: function (cwd, requestedPath) {
        return requestedPath === "large.txt" ? filePath : null;
      },
      safeAbsPath: function () { return null; },
      getOsUserInfoForWs: function () { return null; },
      startFileWatch: function () {},
      stopFileWatch: function () {},
      startDirWatch: function () {},
      usersModule: { getEffectivePermissions: function () { return { fileBrowser: true }; } },
      fsAsUser: function () {},
      validateEnvString: function () {},
      opts: {},
      IGNORED_DIRS: new Set(),
      BINARY_EXTS: new Set(),
      IMAGE_EXTS: new Set(),
      FS_MAX_SIZE: 5 * 1024 * 1024,
    });

    filesystem.handleFilesystemMessage({}, { type: "fs_read", path: "large.txt" });

    assert.equal(response.type, "fs_read_result");
    assert.equal(response.error, undefined);
    assert.equal(response.size, content.length);
    assert.equal(response.content, content);
  } finally {
    fs.rmSync(tempDir, { recursive: true, force: true });
  }
});

test("large file previews use a separate hard limit and lightweight rendering", function () {
  var projectSource = fs.readFileSync(path.join(__dirname, "../lib/project.js"), "utf8");
  var browserSource = fs.readFileSync(path.join(__dirname, "../lib/public/modules/filebrowser.js"), "utf8");

  assert.match(projectSource, /var FS_MAX_SIZE = 512 \* 1024;/);
  assert.match(projectSource, /var FS_VIEWER_MAX_SIZE = 5 \* 1024 \* 1024;/);
  assert.match(projectSource, /FS_MAX_SIZE: FS_VIEWER_MAX_SIZE/);
  assert.match(browserSource, /var FILE_RICH_PREVIEW_MAX_BYTES = 1024 \* 1024;/);
  assert.match(browserSource, /renderLargeTextFile\(bodyEl, msg\.content, msg\.size\)/);
  assert.match(fs.readFileSync(path.join(__dirname, "../lib/public/modules/file-viewer-source.js"), "utf8"), /showing plain text for performance/);
});