mirror of
https://github.com/lana-k/sqliteviz.git
synced 2025-12-06 18:18:53 +08:00
Tab refactor
This commit is contained in:
@@ -87,14 +87,14 @@ describe('storedInquiries.js', () => {
|
||||
|
||||
it('isTabNeedName returns false when the inquiry has a name and is not predefined', () => {
|
||||
const tab = {
|
||||
initName: 'foo'
|
||||
name: 'foo'
|
||||
}
|
||||
expect(storedInquiries.isTabNeedName(tab)).to.equal(false)
|
||||
})
|
||||
|
||||
it('isTabNeedName returns true when the inquiry has no name and is not predefined', () => {
|
||||
const tab = {
|
||||
initName: null,
|
||||
name: null,
|
||||
tempName: 'Untitled'
|
||||
}
|
||||
expect(storedInquiries.isTabNeedName(tab)).to.equal(true)
|
||||
@@ -102,7 +102,7 @@ describe('storedInquiries.js', () => {
|
||||
|
||||
it('isTabNeedName returns true when the inquiry is predefined', () => {
|
||||
const tab = {
|
||||
initName: 'foo',
|
||||
name: 'foo',
|
||||
isPredefined: true
|
||||
}
|
||||
|
||||
@@ -351,14 +351,13 @@ describe('storedInquiries.js', () => {
|
||||
query: 'select * from foo',
|
||||
viewType: 'chart',
|
||||
viewOptions: [],
|
||||
initName: null,
|
||||
$refs: {
|
||||
dataView: {
|
||||
getOptionsForSave () {
|
||||
return ['chart']
|
||||
}
|
||||
name: null,
|
||||
dataView: {
|
||||
getOptionsForSave () {
|
||||
return ['chart']
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
const value = storedInquiries.save(tab, 'foo')
|
||||
expect(value.id).to.equal(tab.id)
|
||||
@@ -376,19 +375,18 @@ describe('storedInquiries.js', () => {
|
||||
query: 'select * from foo',
|
||||
viewType: 'chart',
|
||||
viewOptions: [],
|
||||
initName: null,
|
||||
$refs: {
|
||||
dataView: {
|
||||
getOptionsForSave () {
|
||||
return ['chart']
|
||||
}
|
||||
name: null,
|
||||
dataView: {
|
||||
getOptionsForSave () {
|
||||
return ['chart']
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const first = storedInquiries.save(tab, 'foo')
|
||||
|
||||
tab.initName = 'foo'
|
||||
tab.name = 'foo'
|
||||
tab.query = 'select * from foo'
|
||||
storedInquiries.save(tab)
|
||||
const inquiries = storedInquiries.getStoredInquiries()
|
||||
@@ -409,12 +407,10 @@ describe('storedInquiries.js', () => {
|
||||
query: 'select * from foo',
|
||||
viewType: 'chart',
|
||||
viewOptions: [],
|
||||
initName: 'foo predefined',
|
||||
$refs: {
|
||||
dataView: {
|
||||
getOptionsForSave () {
|
||||
return ['chart']
|
||||
}
|
||||
name: 'foo predefined',
|
||||
dataView: {
|
||||
getOptionsForSave () {
|
||||
return ['chart']
|
||||
}
|
||||
},
|
||||
isPredefined: true
|
||||
|
||||
189
tests/lib/tab.spec.js
Normal file
189
tests/lib/tab.spec.js
Normal file
@@ -0,0 +1,189 @@
|
||||
import { expect } from 'chai'
|
||||
import sinon from 'sinon'
|
||||
import Tab from '@/lib/tab.js'
|
||||
|
||||
describe('tab.js', () => {
|
||||
it('Creates a tab for new inquiry', () => {
|
||||
const state = {
|
||||
untitledLastIndex: 5
|
||||
}
|
||||
|
||||
const newTab = new Tab(state)
|
||||
expect(newTab).to.include({
|
||||
name: null,
|
||||
tempName: 'Untitled 5',
|
||||
query: undefined,
|
||||
viewOptions: undefined,
|
||||
isPredefined: undefined,
|
||||
viewType: 'chart',
|
||||
result: null,
|
||||
isGettingResults: false,
|
||||
error: null,
|
||||
time: 0,
|
||||
isSaved: false,
|
||||
state: state
|
||||
})
|
||||
expect(newTab.layout).to.include({
|
||||
sqlEditor: 'above',
|
||||
table: 'bottom',
|
||||
dataView: 'hidden'
|
||||
})
|
||||
expect(newTab.id).to.have.lengthOf(21)
|
||||
})
|
||||
|
||||
it('Creates a tab for existing inquiry', () => {
|
||||
const state = {
|
||||
untitledLastIndex: 5
|
||||
}
|
||||
|
||||
const inquiry = {
|
||||
id: 'qwerty',
|
||||
query: 'SELECT * from foo',
|
||||
viewType: 'pivot',
|
||||
viewOptions: 'this is view options object',
|
||||
name: 'Foo inquiry',
|
||||
createdAt: '2022-12-05T18:30:30'
|
||||
}
|
||||
|
||||
const newTab = new Tab(state, inquiry)
|
||||
expect(newTab).to.include({
|
||||
id: 'qwerty',
|
||||
name: 'Foo inquiry',
|
||||
tempName: 'Foo inquiry',
|
||||
query: 'SELECT * from foo',
|
||||
viewOptions: 'this is view options object',
|
||||
isPredefined: undefined,
|
||||
viewType: 'pivot',
|
||||
result: null,
|
||||
isGettingResults: false,
|
||||
error: null,
|
||||
time: 0,
|
||||
isSaved: true,
|
||||
state: state
|
||||
})
|
||||
expect(newTab.layout).to.include({
|
||||
sqlEditor: 'above',
|
||||
table: 'bottom',
|
||||
dataView: 'hidden'
|
||||
})
|
||||
})
|
||||
|
||||
it('Set isGettingResults true when execute', async () => {
|
||||
let resolveQuering
|
||||
// mock store state
|
||||
const state = {
|
||||
currentTabId: 1,
|
||||
dbName: 'fooDb',
|
||||
db: {
|
||||
execute: sinon.stub().returns(new Promise(resolve => {
|
||||
resolveQuering = resolve
|
||||
})),
|
||||
refreshSchema: sinon.stub().resolves()
|
||||
}
|
||||
}
|
||||
|
||||
const newTab = new Tab(state, {
|
||||
id: 'qwerty',
|
||||
query: 'SELECT * FROM foo; CREATE TABLE bar(a,b);',
|
||||
viewType: 'cart',
|
||||
viewOptions: 'this is view options object',
|
||||
name: 'Foo inquiry',
|
||||
createdAt: '2022-12-05T18:30:30'
|
||||
})
|
||||
|
||||
expect(newTab.isGettingResults).to.equal(false)
|
||||
newTab.execute()
|
||||
expect(newTab.isGettingResults).to.equal(true)
|
||||
resolveQuering()
|
||||
})
|
||||
|
||||
it('Updates result with query execution result', async () => {
|
||||
const result = {
|
||||
columns: ['id', 'name'],
|
||||
values: {
|
||||
id: [1, 2],
|
||||
name: ['Harry', 'Drako']
|
||||
}
|
||||
}
|
||||
|
||||
// mock store state
|
||||
const state = {
|
||||
currentTabId: 1,
|
||||
dbName: 'fooDb',
|
||||
db: {
|
||||
execute: sinon.stub().resolves(result),
|
||||
refreshSchema: sinon.stub().resolves()
|
||||
}
|
||||
}
|
||||
|
||||
const newTab = new Tab(state, {
|
||||
id: 'qwerty',
|
||||
query: 'SELECT * FROM foo; CREATE TABLE bar(a,b);',
|
||||
viewType: 'cart',
|
||||
viewOptions: 'this is view options object',
|
||||
name: 'Foo inquiry',
|
||||
createdAt: '2022-12-05T18:30:30'
|
||||
})
|
||||
|
||||
await newTab.execute()
|
||||
expect(newTab.isGettingResults).to.equal(false)
|
||||
expect(newTab.result).to.eql(result)
|
||||
})
|
||||
|
||||
it('Updates error with query execution error', async () => {
|
||||
// mock store state
|
||||
const state = {
|
||||
currentTabId: 1,
|
||||
dbName: 'fooDb',
|
||||
db: {
|
||||
execute: sinon.stub().rejects(new Error('No such table')),
|
||||
refreshSchema: sinon.stub().resolves()
|
||||
}
|
||||
}
|
||||
|
||||
const newTab = new Tab(state, {
|
||||
id: 'qwerty',
|
||||
query: 'SELECT * FROM foo; CREATE TABLE bar(a,b);',
|
||||
viewType: 'cart',
|
||||
viewOptions: 'this is view options object',
|
||||
name: 'Foo inquiry',
|
||||
createdAt: '2022-12-05T18:30:30'
|
||||
})
|
||||
|
||||
await newTab.execute()
|
||||
expect(newTab.error.type).to.eql('error')
|
||||
expect(newTab.error.message.toString()).to.equal('Error: No such table')
|
||||
})
|
||||
|
||||
it('Updates schema after query execution', async () => {
|
||||
const result = {
|
||||
columns: ['id', 'name'],
|
||||
values: {
|
||||
id: [],
|
||||
name: []
|
||||
}
|
||||
}
|
||||
|
||||
// mock store state
|
||||
const state = {
|
||||
currentTabId: 1,
|
||||
dbName: 'fooDb',
|
||||
db: {
|
||||
execute: sinon.stub().resolves(result),
|
||||
refreshSchema: sinon.stub().resolves()
|
||||
}
|
||||
}
|
||||
|
||||
const newTab = new Tab(state, {
|
||||
id: 'qwerty',
|
||||
query: 'SELECT * FROM foo; CREATE TABLE bar(a,b);',
|
||||
viewType: 'cart',
|
||||
viewOptions: 'this is view options object',
|
||||
name: 'Foo inquiry',
|
||||
createdAt: '2022-12-05T18:30:30'
|
||||
})
|
||||
|
||||
await newTab.execute()
|
||||
expect(state.db.refreshSchema.calledOnce).to.equal(true)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user