discourse-ai/test/javascripts/unit/lib/diff-streamer-test.js

68 lines
2.2 KiB
JavaScript

import { module, test } from "qunit";
import DiffStreamer from "discourse/plugins/discourse-ai/discourse/lib/diff-streamer";
module("Unit | Lib | diff-streamer", function () {
test("streamingDiff correctly handles trivial cases", async function (assert) {
const originalText = "helo world";
const targetText = "hello world";
const diffStreamer = new DiffStreamer(this.originalTextContent);
await diffStreamer.loadJSDiff();
const diffResult = diffStreamer.streamingDiff(originalText, targetText);
const expectedDiff = [
{ count: 1, added: false, removed: true, value: "helo" },
{ count: 1, added: true, removed: false, value: "hello" },
{ count: 2, added: false, removed: false, value: " world" },
];
assert.deepEqual(
diffResult,
expectedDiff,
"Diff result should match the expected structure"
);
});
test("streamingDiff correctly consolidates and handles diff drift", async function (assert) {
const originalText =
"This is todone, but I want to can why.\n\nWe\n\nSEO Tags supports a `canonical_url` override. I tried a few possibilities there. The one I wanted to work, ex: `https://www.discourse.org/de`, appended an extra `/de` on the URL, only in the deploy b";
const targetText = "This is to-done";
const diffStreamer = new DiffStreamer(this.originalTextContent);
await diffStreamer.loadJSDiff();
const diffResult = diffStreamer.streamingDiff(originalText, targetText);
// Verify the diff result is an array with the expected structure
assert.true(Array.isArray(diffResult), "Diff result should be an array");
assert.strictEqual(
diffResult.length,
3,
"Expecting exactly three parts in the diff result"
);
assert.strictEqual(
diffResult[0].value,
"This is ",
"First part should be unchanged"
);
assert.strictEqual(
diffResult[1].value,
"to-done",
"Second part should be an insertion"
);
assert.true(diffResult[1].added, "Second part should be an insertion");
assert.strictEqual(
diffResult[2].value.length,
235,
"Third part should include all text"
);
assert.true(diffResult[2].removed, "Third part should be a removal");
});
});