From a5569c46967a4cabb5809aa75f42fae64bd48431 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sat, 24 Jan 2026 05:20:31 +0000 Subject: [PATCH] test: add comprehensive unit tests for name-parser.ts Adds comprehensive unit tests for `extractUniqueNameParts` in `name-parser.spec.ts`, covering: - Happy path (common prefix, suffix, middle part). - Edge cases: - Empty strings in array. - Special characters (e.g. `Wrapper #1`). - Very long strings. - Unicode characters. - Duplicate names (fallback behavior). - Mixed delimiters. Ensures robust testing of the utility function without modifying the source code. --- .../src/app/shared/utils/name-parser.spec.ts | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/praxis/web-client/src/app/shared/utils/name-parser.spec.ts b/praxis/web-client/src/app/shared/utils/name-parser.spec.ts index aa0432da..4a06d22e 100644 --- a/praxis/web-client/src/app/shared/utils/name-parser.spec.ts +++ b/praxis/web-client/src/app/shared/utils/name-parser.spec.ts @@ -60,4 +60,54 @@ describe('extractUniqueNameParts', () => { expect(result.get('ABC 2')).toBe('ABC 2'); expect(result.get('XYZ 3')).toBe('XYZ 3'); }); + + it('should handle array with empty strings', () => { + const names = ['', 'A', '']; + const result = extractUniqueNameParts(names); + expect(result.get('')).toBe(''); + expect(result.get('A')).toBe('A'); + }); + + it('should handle names with special characters', () => { + const names = ['Wrapper #1', 'Wrapper #2']; + const result = extractUniqueNameParts(names); + // Tokens: ['Wrapper', ' ', '#1'] vs ['Wrapper', ' ', '#2'] + // Common prefix: 'Wrapper', ' ' + expect(result.get('Wrapper #1')).toBe('#1'); + expect(result.get('Wrapper #2')).toBe('#2'); + }); + + it('should handle very long strings', () => { + // Note: The parser relies on delimiters (space, _, -) to split tokens. + // Long strings without delimiters are treated as single tokens. + const prefix = 'A'.repeat(100) + ' '; + const suffix = ' ' + 'B'.repeat(100); + const names = [prefix + 'Unique1' + suffix, prefix + 'Unique2' + suffix]; + const result = extractUniqueNameParts(names); + expect(result.get(names[0])).toBe('Unique1'); + expect(result.get(names[1])).toBe('Unique2'); + }); + + it('should handle Unicode characters', () => { + const names = ['µL Tip', 'mL Tip']; + const result = extractUniqueNameParts(names); + // ' Tip' is common suffix. + expect(result.get('µL Tip')).toBe('µL'); + expect(result.get('mL Tip')).toBe('mL'); + }); + + it('should handle duplicate names by falling back to full name', () => { + const names = ['Same', 'Same']; + const result = extractUniqueNameParts(names); + expect(result.get('Same')).toBe('Same'); + }); + + it('should handle mixed delimiters but similar structure', () => { + const names = ['A-Middle1-B', 'A_Middle2_B']; + const result = extractUniqueNameParts(names); + // Prefix A, Suffix B. Middle: -Middle1- and _Middle2_. + // Trimming separators -> Middle1, Middle2 + expect(result.get('A-Middle1-B')).toBe('Middle1'); + expect(result.get('A_Middle2_B')).toBe('Middle2'); + }); });