Initial commit: LinkSyncServer and LinkSyncExtension projects with complete documentation, models, API endpoints, tests, and extension implementation
This commit is contained in:
139
Linkding Browser Extension/LinkdingSync/tests/quick-test.js
Normal file
139
Linkding Browser Extension/LinkdingSync/tests/quick-test.js
Normal file
@@ -0,0 +1,139 @@
|
||||
/*
|
||||
* 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...');
|
||||
Reference in New Issue
Block a user