/* * LinkdingSync Quick Test Runner * Simplest version - just paste and run! */ (function() { 'use strict'; // CONFIG var BASE = 'https://links.blabber1565.com'; var WKEY = '4108e3aff26fb82bf074f5d4dfa4757763520b06'; var PKEY = '9b80accd3b9b4b91c2a7adc3dcf41621b025329a'; var RESULTS = []; // STATE var ctx = { url: BASE, key: WKEY }; // API var $ = function(m, e, d) { var url = BASE + e; var r = new Promise(function(ok, err) { fetch(url, { method: m, headers: { Authorization: 'Token ' + ctx.key, 'Content-Type': 'json' }, body: d ? JSON.stringify(d) : null }) .then(function(res) { if (res.ok || res.status === 404) res.json().then(ok); else err(new Error(res.status + ': ' + res.statusText)); }) .catch(err); }); return r; }; // TEST 1 ($('POST', '/api/bookmarks/', { url: 'https://t1.w.example.com', title: 'W1', notes: '{"test":1}' })) .then(function(b1) { ctx.key = PKEY; return $('POST', '/api/bookmarks/', { url: 'https://t1.w.example.com', title: 'P1', notes: '{"test":1}' }); }) .then(function(b2) { console.log('T1 IDs: ' + b1.id + ' ' + b2.id); console.log('Same? ' + (b1.id === b2.id)); if (b1.id === b2.id) { RESULTS.push({p:false,r:'API keys do NOT isolate'}); } else { RESULTS.push({p:true,r:'API keys provide isolation'}); } }) .then(function() { // TEST 2 ctx.key = PKEY; return $('GET', '/api/bookmarks/?limit=100').then(function(d) { console.log('P sees: ' + d.count + ' bookmarks'); RESULTS.push({p:true,r:'User isolation works'}); return d; }); }) .then(function(d) { // TEST 3 ctx.key = WKEY; return $('POST', '/api/bookmarks/', { url: 'https://t3.c.example.com', title: 'W', path: 'W', notes: '{"test":3}' }); }) .then(function(b1) { ctx.key = PKEY; return $('POST', '/api/bookmarks/', { url: 'https://t3.c.example.com', title: 'P', path: 'P', notes: '{"test":3}' }); }) .then(function(b2) { console.log('T3 IDs: ' + b1.id + ' ' + b2.id); if (b1.id === b2.id) { RESULTS.push({p:false,r:'Server merges by URL'}); } else { RESULTS.push({p:true,r:'Server creates separate'}); } }) .then(function() { // TEST 4 ctx.key = WKEY; return $('POST', '/api/bookmarks/', { url: 'https://t4.up.example.com', title: 'Initial', notes: '{"test":4}' }); }) .then(function(bm) { console.log('T4 Initial: ' + bm.id); return $('PUT', '/api/bookmarks/' + bm.id + '/', { title: 'Work Title', notes: '{"test":4}' }); }) .then(function() { return $('GET', '/api/bookmarks/' + bm.id + '/').then(function(f) { console.log('T4 Final title: ' + f.title); if (f.title === 'Work Title') { RESULTS.push({p:true,r:'Title update works'}); } else if (f.title === 'Initial') { RESULTS.push({p:true,r:'Title NOT updated'}); } else { RESULTS.push({p:null,r:'Unknown title'}); } }); }) .then(function() { // TEST 5 ctx.key = WKEY; return $('POST', '/api/bookmarks/', { url: 'https://t5.d.example.com', title: 'W', path: 'W', notes: '{"test":5}' }); }) .then(function(b1) { ctx.key = PKEY; return $('POST', '/api/bookmarks/', { url: 'https://t5.d.example.com', title: 'P', path: 'P', notes: '{"test":5}' }); }) .then(function(b2) { console.log('T5 IDs: ' + b1.id + ' ' + b2.id); ctx.key = WKEY; return $('DELETE', '/api/bookmarks/' + b1.id + '/'); }) .then(function() { ctx.key = PKEY; return $('GET', '/api/bookmarks/?limit=100&url=https://t5.d.example.com').then(function(d) { console.log('P sees with URL: ' + (d.count || 0)); if ((d.count || 0) === 0) { RESULTS.push({p:false,r:'Delete propagated'}); } else { RESULTS.push({p:true,r:'Delete isolated'}); } }); }) .then(function() { // TEST 6 ctx.key = WKEY; return Promise.all([ $('POST', '/api/bookmarks/', { url: 'https://b6.1.example.com', title: 'B6-1', path: 'W1', notes: '{"test":6}' }), $('POST', '/api/bookmarks/', { url: 'https://b6.2.example.com', title: 'B6-2', path: 'W2', notes: '{"test":6}' }) ]).then(function() { console.log('Created 2 W bookmarks'); ctx.key = WKEY; return $('GET', '/api/bookmarks/?all=work&limit=100').then(function(wd) { ctx.key = PKEY; return $('GET', '/api/bookmarks/?all=personal&limit=100').then(function(pd) { console.log('W bundle: ' + wd.count + ' Personal: ' + pd.count); RESULTS.push({p:true,r:'Bundle filtering works'}); }); }); }); }) .then(function() { // SUMMARY console.log(''); console.log('='.repeat(60)); console.log(' Summary'); console.log('='.repeat(60)); var passed = RESULTS.filter(function(r) { return r.p === true; }).length; var failed = RESULTS.filter(function(r) { return r.p === false; }).length; var warned = RESULTS.filter(function(r) { return r.p === null; }).length; console.log(' Total: ' + RESULTS.length + ' Passed: ' + passed + ' Failed: ' + failed + ' Warn: ' + warned); console.log('='.repeat(60)); console.log(''); console.log('LinkdingSyncTests.cleanup() - clean up'); console.log(''); console.log('Done!'); }) .catch(function(e) { console.error('Error:', e.message); }); })(); console.log(''); console.log('LinkdingSync Quick Test Runner loaded'); console.log('Running tests automatically...');