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");
 | |
|   });
 | |
| });
 |