Files
myworkspace/Linkding Browser Extension/LinkdingSync/tests/test-deletion.js

218 lines
6.1 KiB
JavaScript

/*
* Test Module: Delete Propagation
* Tests scenario 5
*/
'use strict';
const utils = require('../utils.js').LinkdingSyncTests;
const SCENARIO_NAME = 'Delete Propagation Tests';
// Test 5: Delete Propagation
async function test5_DeletePropagation() {
console.log('\n=== Test 5: Delete Propagation ===');
console.log('Purpose: Confirm if deleting affects all API keys');
try {
utils.SessionManager.setContext(
CONFIG.serverUrl,
CONFIG.workApiKey,
CONFIG.workUser,
CONFIG.workBundle
);
const testUrl = 'https://delete-propagation.example.com';
// Create via work
const workBookmark = await utils.Helpers.createBookmark(testUrl, {
title: 'Delete Prop Test',
path: 'Work/Dev'
});
console.log(` Work bookmark ID: ${workBookmark.id}`);
// Create same URL via personal
utils.SessionManager.setContext(
CONFIG.serverUrl,
CONFIG.personalApiKey,
CONFIG.personalUser,
CONFIG.personalBundle
);
const personalBookmark = await utils.Helpers.createBookmark(testUrl, {
title: 'Delete Prop Test',
path: 'Personal/Notes'
});
console.log(` Personal bookmark ID: ${personalBookmark.id}`);
const sameBookmark = workBookmark.id === personalBookmark.id;
console.log(` Same bookmark? ${sameBookmark}`);
// Delete via work
await utils.SessionManager.setContext(
CONFIG.serverUrl,
CONFIG.workApiKey,
CONFIG.workUser,
CONFIG.workBundle
);
await utils.Helpers.deleteBookmark(workBookmark.id);
console.log(' Deleted via Work key');
// Check via personal
utils.SessionManager.setContext(
CONFIG.serverUrl,
CONFIG.personalApiKey,
CONFIG.personalUser,
CONFIG.personalBundle
);
const personalList = await utils.Helpers.getAllBookmarks();
const deleted = personalList.find(b => b.url === testUrl);
if (!deleted) {
utils.Formatters.consoleResult('Test 5', 'FAIL', 'Delete propagated (same bookmark)');
console.log(' → Deleting via one key deletes all');
return { pass: false, propagated: true, sameBookmark };
} else {
utils.Formatters.consoleResult('Test 5', 'PASS', 'Delete did not propagate (separate bookmarks)');
console.log(' → Each bookmark exists independently');
console.log(' → Can delete via specific API key');
return { pass: true, propagated: false, sameBookmark };
}
} catch (error) {
utils.Formatters.consoleResult('Test 5', 'FAIL', error.message);
throw error;
}
}
// Test 6: Delete with Same User Different Keys
async function test6_DeleteSameUserDifferentKeys() {
console.log('\n=== Test 6: Delete - Same User, Different Keys ===');
console.log('Purpose: Verify delete behavior when same user, different API keys');
try {
utils.SessionManager.setContext(
CONFIG.serverUrl,
CONFIG.workApiKey,
CONFIG.workUser,
CONFIG.workBundle
);
const testUrl = 'https://delete-same-user.example.com';
// Create with first key
const bm1 = await utils.Helpers.createBookmark(testUrl, {
title: 'Same User Delete Test - Key 1'
});
console.log(` Created with Key 1: ID=${bm1.id}`);
// Create same URL with second key (personal)
utils.SessionManager.setContext(
CONFIG.serverUrl,
CONFIG.personalApiKey,
CONFIG.personalUser,
CONFIG.personalBundle
);
const bm2 = await utils.Helpers.createBookmark(testUrl, {
title: 'Same User Delete Test - Key 2'
});
console.log(` Created with Key 2: ID=${bm2.id}`);
// Check if same bookmark
if (bm1.id === bm2.id) {
utils.Formatters.consoleResult('Test 6', 'WARN', 'Same bookmark - delete propagates');
console.log(' → Same user means same bookmark');
console.log(' → Deleting via either key removes it');
// Delete via work
await utils.Helpers.deleteBookmark(bm1.id);
// Verify gone
utils.SessionManager.setContext(
CONFIG.serverUrl,
CONFIG.workApiKey,
CONFIG.workUser,
CONFIG.workBundle
);
const workList = await utils.Helpers.getAllBookmarks();
const exists = workList.find(b => b.url === testUrl);
if (!exists) {
console.log(' → Verified: bookmark deleted via both keys');
}
return { pass: true, same: true, propagates: true };
} else {
utils.Formatters.consoleResult('Test 6', 'PASS', 'Different bookmarks - delete is isolated');
console.log(' → Different API keys create different bookmarks');
console.log(' → Can delete independently');
// Delete via work
await utils.Helpers.deleteBookmark(bm1.id);
// Verify work side gone
const workList = await utils.Helpers.getAllBookmarks();
const workGone = !workList.find(b => b.url === testUrl);
// Verify personal still exists
utils.SessionManager.setContext(
CONFIG.serverUrl,
CONFIG.personalApiKey,
CONFIG.personalUser,
CONFIG.personalBundle
);
const personalList = await utils.Helpers.getAllBookmarks();
const personalExists = personalList.find(b => b.url === testUrl);
if (workGone && personalExists) {
console.log(' → Verified: work deleted, personal still exists');
}
return { pass: true, same: false, propagates: false };
}
} catch (error) {
utils.Formatters.consoleResult('Test 6', 'FAIL', error.message);
throw error;
}
}
// Run all tests
async function runDeletionTests() {
console.log('\n' + '='.repeat(60));
console.log(' ' + SCENARIO_NAME);
console.log('='.repeat(60));
const results = [];
try {
results[0] = await test5_DeletePropagation();
results[1] = await test6_DeleteSameUserDifferentKeys();
} catch (error) {
console.error('Test suite error:', error.message);
utils.Helpers.resetBookmarks();
}
console.log('\n' + '='.repeat(60));
console.log(' Deletion Tests Complete');
console.log('='.repeat(60));
return results;
}
// Export
window.LinkdingSyncTests.TestDeletion = {
run: runDeletionTests,
test5: test5_DeletePropagation,
test6: test6_DeleteSameUserDifferentKeys
};