const {TimeChainDataSqliteRecord,ConnectToDatabase, TimeChainDataSqliteFile, TimeChainDataSqliteTag, TimeChainDataSqliteTagLink} = require('../src/data/sqlite'); const { nanoid } = require('nanoid'); const { unsubscribe } = require('pubsub-js'); let db = null; beforeAll(() => { db = ConnectToDatabase(__dirname + "/test.db"); }); afterAll(()=>{ db.close(); }) test("Should create a records table", ()=>{ const rec = new TimeChainDataSqliteRecord(); const st = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name=?"); const res = st.get('records'); expect(res).not.toBeNull(); expect(res.name).toEqual('records'); }); test("Should create a files table", ()=>{ const file = new TimeChainDataSqliteFile(); const st = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name=?"); const res = st.get('files'); expect(res).not.toBeNull(); expect(res.name).toEqual('files'); }); test("Should create a tags table", ()=>{ const tags = new TimeChainDataSqliteTag(); const st = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name=?"); const res = st.get('tags'); expect(res).not.toBeNull(); expect(res.name).toEqual('tags'); }); test("Should create a tags link table", ()=>{ const links = new TimeChainDataSqliteTagLink(); const st = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name=?"); const res = st.get('taglink'); expect(res).not.toBeNull(); expect(res.name).toEqual('taglink'); }); test("Should create a record in the database and then remove it",async ()=>{ const rec = new TimeChainDataSqliteRecord(); const id = nanoid(); const hash = "fakehash"; const content = "This is a test"; const mime = "text/plain"; const ts = Math.floor(Date.now()); return rec.add(id,ts,content,mime,hash).then(res=>{ expect(res).toEqual(1); return rec.get(id).then(res=>{ expect(res.uuid).toEqual(id); expect(res.timestamp).toEqual(ts); expect(res.mime).toEqual(mime); expect(res.content).toEqual(content); expect(res.hash).toEqual(hash); return rec.delete(id); }) }) })