chore: run format to resolve CI issues
This commit is contained in:
@@ -268,8 +268,8 @@ function hasTaggedStructure(data) {
|
|||||||
*/
|
*/
|
||||||
function normalizeTaskIds(tasks) {
|
function normalizeTaskIds(tasks) {
|
||||||
if (!Array.isArray(tasks)) return;
|
if (!Array.isArray(tasks)) return;
|
||||||
|
|
||||||
tasks.forEach(task => {
|
tasks.forEach((task) => {
|
||||||
// Convert task ID to number with validation
|
// Convert task ID to number with validation
|
||||||
if (task.id !== undefined) {
|
if (task.id !== undefined) {
|
||||||
const parsedId = parseInt(task.id, 10);
|
const parsedId = parseInt(task.id, 10);
|
||||||
@@ -277,10 +277,10 @@ function normalizeTaskIds(tasks) {
|
|||||||
task.id = parsedId;
|
task.id = parsedId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert subtask IDs to numbers with validation
|
// Convert subtask IDs to numbers with validation
|
||||||
if (Array.isArray(task.subtasks)) {
|
if (Array.isArray(task.subtasks)) {
|
||||||
task.subtasks.forEach(subtask => {
|
task.subtasks.forEach((subtask) => {
|
||||||
if (subtask.id !== undefined) {
|
if (subtask.id !== undefined) {
|
||||||
// Check for dot notation (which shouldn't exist in storage)
|
// Check for dot notation (which shouldn't exist in storage)
|
||||||
if (typeof subtask.id === 'string' && subtask.id.includes('.')) {
|
if (typeof subtask.id === 'string' && subtask.id.includes('.')) {
|
||||||
@@ -439,10 +439,13 @@ function readJSON(filepath, projectRoot = null, tag = null) {
|
|||||||
|
|
||||||
// Store reference to the raw tagged data for functions that need it
|
// Store reference to the raw tagged data for functions that need it
|
||||||
const originalTaggedData = JSON.parse(JSON.stringify(data));
|
const originalTaggedData = JSON.parse(JSON.stringify(data));
|
||||||
|
|
||||||
// Normalize IDs in all tags before storing as originalTaggedData
|
// Normalize IDs in all tags before storing as originalTaggedData
|
||||||
for (const tagName in originalTaggedData) {
|
for (const tagName in originalTaggedData) {
|
||||||
if (originalTaggedData[tagName] && Array.isArray(originalTaggedData[tagName].tasks)) {
|
if (
|
||||||
|
originalTaggedData[tagName] &&
|
||||||
|
Array.isArray(originalTaggedData[tagName].tasks)
|
||||||
|
) {
|
||||||
normalizeTaskIds(originalTaggedData[tagName].tasks);
|
normalizeTaskIds(originalTaggedData[tagName].tasks);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1465,4 +1468,4 @@ export {
|
|||||||
flattenTasksWithSubtasks,
|
flattenTasksWithSubtasks,
|
||||||
ensureTagMetadata,
|
ensureTagMetadata,
|
||||||
normalizeTaskIds
|
normalizeTaskIds
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -26,23 +26,31 @@ describe('Task Finder', () => {
|
|||||||
test('should find tasks when JSON contains string IDs (normalized to numbers)', () => {
|
test('should find tasks when JSON contains string IDs (normalized to numbers)', () => {
|
||||||
// Simulate tasks loaded from JSON with string IDs and mixed subtask notations
|
// Simulate tasks loaded from JSON with string IDs and mixed subtask notations
|
||||||
const tasksWithStringIds = [
|
const tasksWithStringIds = [
|
||||||
{ id: "1", title: 'First Task' },
|
{ id: '1', title: 'First Task' },
|
||||||
{ id: "2", title: 'Second Task', subtasks: [
|
{
|
||||||
{ id: "1", title: 'Subtask One' },
|
id: '2',
|
||||||
{ id: "2.2", title: 'Subtask Two (with dotted notation)' } // Testing dotted notation
|
title: 'Second Task',
|
||||||
]},
|
subtasks: [
|
||||||
{ id: "5", title: 'Fifth Task', subtasks: [
|
{ id: '1', title: 'Subtask One' },
|
||||||
{ id: "5.1", title: 'Subtask with dotted ID' }, // Should normalize to 1
|
{ id: '2.2', title: 'Subtask Two (with dotted notation)' } // Testing dotted notation
|
||||||
{ id: "3", title: 'Subtask with simple ID' } // Should stay as 3
|
]
|
||||||
]}
|
},
|
||||||
|
{
|
||||||
|
id: '5',
|
||||||
|
title: 'Fifth Task',
|
||||||
|
subtasks: [
|
||||||
|
{ id: '5.1', title: 'Subtask with dotted ID' }, // Should normalize to 1
|
||||||
|
{ id: '3', title: 'Subtask with simple ID' } // Should stay as 3
|
||||||
|
]
|
||||||
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
// The readJSON function should normalize these IDs to numbers
|
// The readJSON function should normalize these IDs to numbers
|
||||||
// For this test, we'll manually normalize them to simulate what happens
|
// For this test, we'll manually normalize them to simulate what happens
|
||||||
tasksWithStringIds.forEach(task => {
|
tasksWithStringIds.forEach((task) => {
|
||||||
task.id = parseInt(task.id, 10);
|
task.id = parseInt(task.id, 10);
|
||||||
if (task.subtasks) {
|
if (task.subtasks) {
|
||||||
task.subtasks.forEach(subtask => {
|
task.subtasks.forEach((subtask) => {
|
||||||
// Handle dotted notation like "5.1" -> extract the subtask part
|
// Handle dotted notation like "5.1" -> extract the subtask part
|
||||||
if (typeof subtask.id === 'string' && subtask.id.includes('.')) {
|
if (typeof subtask.id === 'string' && subtask.id.includes('.')) {
|
||||||
const parts = subtask.id.split('.');
|
const parts = subtask.id.split('.');
|
||||||
@@ -60,7 +68,7 @@ describe('Task Finder', () => {
|
|||||||
expect(result1.task.id).toBe(5);
|
expect(result1.task.id).toBe(5);
|
||||||
expect(result1.task.title).toBe('Fifth Task');
|
expect(result1.task.title).toBe('Fifth Task');
|
||||||
|
|
||||||
// Test finding tasks by string ID
|
// Test finding tasks by string ID
|
||||||
const result2 = findTaskById(tasksWithStringIds, '5');
|
const result2 = findTaskById(tasksWithStringIds, '5');
|
||||||
expect(result2.task).toBeDefined();
|
expect(result2.task).toBeDefined();
|
||||||
expect(result2.task.id).toBe(5);
|
expect(result2.task.id).toBe(5);
|
||||||
@@ -71,19 +79,19 @@ describe('Task Finder', () => {
|
|||||||
expect(result3.task.id).toBe(1);
|
expect(result3.task.id).toBe(1);
|
||||||
expect(result3.task.title).toBe('Subtask One');
|
expect(result3.task.title).toBe('Subtask One');
|
||||||
expect(result3.task.isSubtask).toBe(true);
|
expect(result3.task.isSubtask).toBe(true);
|
||||||
|
|
||||||
// Test subtask that was originally "2.2" (should be normalized to 2)
|
// Test subtask that was originally "2.2" (should be normalized to 2)
|
||||||
const result4 = findTaskById(tasksWithStringIds, '2.2');
|
const result4 = findTaskById(tasksWithStringIds, '2.2');
|
||||||
expect(result4.task).toBeDefined();
|
expect(result4.task).toBeDefined();
|
||||||
expect(result4.task.id).toBe(2);
|
expect(result4.task.id).toBe(2);
|
||||||
expect(result4.task.title).toBe('Subtask Two (with dotted notation)');
|
expect(result4.task.title).toBe('Subtask Two (with dotted notation)');
|
||||||
|
|
||||||
// Test subtask that was originally "5.1" (should be normalized to 1)
|
// Test subtask that was originally "5.1" (should be normalized to 1)
|
||||||
const result5 = findTaskById(tasksWithStringIds, '5.1');
|
const result5 = findTaskById(tasksWithStringIds, '5.1');
|
||||||
expect(result5.task).toBeDefined();
|
expect(result5.task).toBeDefined();
|
||||||
expect(result5.task.id).toBe(1);
|
expect(result5.task.id).toBe(1);
|
||||||
expect(result5.task.title).toBe('Subtask with dotted ID');
|
expect(result5.task.title).toBe('Subtask with dotted ID');
|
||||||
|
|
||||||
// Test subtask that was originally "3" (should stay as 3)
|
// Test subtask that was originally "3" (should stay as 3)
|
||||||
const result6 = findTaskById(tasksWithStringIds, '5.3');
|
const result6 = findTaskById(tasksWithStringIds, '5.3');
|
||||||
expect(result6.task).toBeDefined();
|
expect(result6.task).toBeDefined();
|
||||||
|
|||||||
Reference in New Issue
Block a user