68 lines
2.2 KiB
JavaScript
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");
|
|
});
|
|
});
|