mirror of
https://github.com/lana-k/sqliteviz.git
synced 2025-12-06 10:08:52 +08:00
354 lines
8.8 KiB
JavaScript
354 lines
8.8 KiB
JavaScript
import { expect } from 'chai'
|
|
import actions from '@/store/actions'
|
|
import sinon from 'sinon'
|
|
|
|
const { addTab, addInquiry, deleteInquiries, renameInquiry, saveInquiry } =
|
|
actions
|
|
|
|
describe('actions', () => {
|
|
it('addTab adds new blank tab', async () => {
|
|
const state = {
|
|
tabs: [],
|
|
untitledLastIndex: 0
|
|
}
|
|
|
|
let id = await addTab({ state })
|
|
expect(state.tabs[0]).to.include({
|
|
id,
|
|
name: null,
|
|
tempName: 'Untitled',
|
|
viewType: 'chart',
|
|
viewOptions: undefined,
|
|
isSaved: false,
|
|
updatedAt: undefined
|
|
})
|
|
expect(state.untitledLastIndex).to.equal(1)
|
|
|
|
id = await addTab({ state })
|
|
expect(state.tabs[1]).to.include({
|
|
id,
|
|
name: null,
|
|
tempName: 'Untitled 1',
|
|
viewType: 'chart',
|
|
viewOptions: undefined,
|
|
isSaved: false,
|
|
updatedAt: undefined
|
|
})
|
|
expect(state.untitledLastIndex).to.equal(2)
|
|
})
|
|
|
|
it('addTab adds tab from saved inquiries', async () => {
|
|
const state = {
|
|
tabs: [],
|
|
untitledLastIndex: 0
|
|
}
|
|
const inquiry = {
|
|
id: 1,
|
|
name: 'test',
|
|
query: 'SELECT * from foo',
|
|
viewType: 'chart',
|
|
viewOptions: 'an object with view options',
|
|
updatedAt: '2025-05-16T20:15:00Z'
|
|
}
|
|
await addTab({ state }, inquiry)
|
|
expect(state.tabs[0]).to.include(inquiry)
|
|
expect(state.untitledLastIndex).to.equal(0)
|
|
})
|
|
|
|
it("addTab doesn't add anything when the inquiry is already opened", async () => {
|
|
const tab1 = {
|
|
id: 1,
|
|
name: 'test',
|
|
tempName: null,
|
|
query: 'SELECT * from foo',
|
|
viewType: 'chart',
|
|
viewOptions: {},
|
|
isSaved: true
|
|
}
|
|
|
|
const tab2 = {
|
|
id: 2,
|
|
name: 'bar',
|
|
tempName: null,
|
|
query: 'SELECT * from bar',
|
|
viewType: 'chart',
|
|
viewOptions: {},
|
|
isSaved: true
|
|
}
|
|
|
|
const state = {
|
|
tabs: [tab1, tab2],
|
|
untitledLastIndex: 0
|
|
}
|
|
|
|
await addTab({ state }, tab1)
|
|
expect(state.tabs).to.have.lengthOf(2)
|
|
expect(state.untitledLastIndex).to.equal(0)
|
|
})
|
|
|
|
it('addInquiry', async () => {
|
|
const state = {
|
|
inquiries: [1, 2, 3]
|
|
}
|
|
|
|
await addInquiry({ state }, 4)
|
|
expect(state.inquiries).to.eql([1, 2, 3, 4])
|
|
})
|
|
|
|
it('deleteInquiries', async () => {
|
|
const state = {
|
|
inquiries: [{ id: 1 }, { id: 2 }, { id: 3 }],
|
|
tabs: [{ id: 3 }, { id: 2 }]
|
|
}
|
|
const commit = sinon.spy()
|
|
|
|
await deleteInquiries({ state, commit }, new Set().add(2))
|
|
expect(state.inquiries).to.eql([{ id: 1 }, { id: 3 }])
|
|
expect(commit.calledWith('deleteTab', { id: 2 })).to.equal(true)
|
|
})
|
|
|
|
it('renameInquiry', async () => {
|
|
const state = {
|
|
inquiries: [
|
|
{ id: 1, name: 'foo' },
|
|
{ id: 2, name: 'bar' },
|
|
{ id: 3, name: 'baz' }
|
|
],
|
|
tabs: [
|
|
{ id: 1, name: 'foo' },
|
|
{ id: 2, name: 'bar' }
|
|
]
|
|
}
|
|
const commit = sinon.spy()
|
|
|
|
await renameInquiry(
|
|
{ state, commit },
|
|
{ inquiryId: 2, newName: 'new name' }
|
|
)
|
|
expect(state.inquiries).to.eql([
|
|
{ id: 1, name: 'foo' },
|
|
{ id: 2, name: 'new name' },
|
|
{ id: 3, name: 'baz' }
|
|
])
|
|
expect(
|
|
commit.calledWith('updateTab', {
|
|
tab: { id: 2, name: 'bar' },
|
|
newValues: {
|
|
name: 'new name'
|
|
}
|
|
})
|
|
).to.equal(true)
|
|
})
|
|
|
|
it('saveInquiry adds new inquiry in the storage', async () => {
|
|
const now = new Date()
|
|
const nowPlusMinute = new Date(now.getTime() + 60 * 1000)
|
|
|
|
const tab = {
|
|
id: 1,
|
|
query: 'select * from foo',
|
|
viewType: 'chart',
|
|
viewOptions: [],
|
|
name: null,
|
|
dataView: {
|
|
getOptionsForSave() {
|
|
return ['chart']
|
|
}
|
|
}
|
|
}
|
|
const state = {
|
|
inquiries: [],
|
|
tabs: [tab]
|
|
}
|
|
|
|
const value = await saveInquiry(
|
|
{ state },
|
|
{
|
|
inquiryTab: tab,
|
|
newName: 'foo'
|
|
}
|
|
)
|
|
expect(value.id).not.to.equal(tab.id)
|
|
expect(value.name).to.equal('foo')
|
|
expect(value.query).to.equal(tab.query)
|
|
expect(value.viewOptions).to.eql(['chart'])
|
|
expect(value).to.have.property('createdAt')
|
|
expect(new Date(value.createdAt)).within(now, nowPlusMinute)
|
|
expect(new Date(value.updatedAt)).within(now, nowPlusMinute)
|
|
expect(state.inquiries).to.eql([value])
|
|
})
|
|
|
|
it('saveInquiry updates existing inquiry in the storage', async () => {
|
|
const now = new Date()
|
|
const nowPlusMinute = new Date(now.getTime() + 60 * 1000)
|
|
const tab = {
|
|
id: 1,
|
|
query: 'select * from foo',
|
|
viewType: 'chart',
|
|
viewOptions: [],
|
|
name: 'foo',
|
|
updatedAt: '2025-05-16T20:15:00Z',
|
|
dataView: {
|
|
getOptionsForSave() {
|
|
return ['chart']
|
|
}
|
|
}
|
|
}
|
|
|
|
const state = {
|
|
inquiries: [
|
|
{
|
|
id: 1,
|
|
query: 'select * from foo',
|
|
viewType: 'chart',
|
|
viewOptions: [],
|
|
name: 'foo',
|
|
createdAt: '2025-05-15T16:30:00Z',
|
|
updatedAt: '2025-05-16T20:15:00Z'
|
|
}
|
|
],
|
|
tabs: [tab]
|
|
}
|
|
|
|
tab.query = 'select * from bar'
|
|
await saveInquiry({ state }, { inquiryTab: tab, newName: '' })
|
|
const inquiries = state.inquiries
|
|
const updatedTab = inquiries[0]
|
|
expect(inquiries).has.lengthOf(1)
|
|
expect(updatedTab.id).to.equal(updatedTab.id)
|
|
expect(updatedTab.name).to.equal(updatedTab.name)
|
|
expect(updatedTab.query).to.equal(tab.query)
|
|
expect(updatedTab.viewOptions).to.eql(['chart'])
|
|
expect(updatedTab.createdAt).to.equal('2025-05-15T16:30:00Z')
|
|
expect(new Date(updatedTab.updatedAt)).to.be.within(now, nowPlusMinute)
|
|
})
|
|
|
|
it("saveInquiry adds a new inquiry with new id if it's based on predefined inquiry", async () => {
|
|
const now = new Date()
|
|
const nowPlusMinute = new Date(now.getTime() + 60 * 1000)
|
|
const tab = {
|
|
id: 1,
|
|
query: 'select * from foo',
|
|
viewType: 'chart',
|
|
viewOptions: [],
|
|
name: 'foo predefined',
|
|
dataView: {
|
|
getOptionsForSave() {
|
|
return ['chart']
|
|
}
|
|
},
|
|
isPredefined: true
|
|
}
|
|
|
|
const state = {
|
|
inquiries: [],
|
|
tabs: [tab]
|
|
}
|
|
|
|
await saveInquiry(
|
|
{ state },
|
|
{
|
|
inquiryTab: tab,
|
|
newName: 'foo'
|
|
}
|
|
)
|
|
|
|
const inquiries = state.inquiries
|
|
expect(inquiries).has.lengthOf(1)
|
|
expect(inquiries[0]).to.have.property('id').which.not.equal(tab.id)
|
|
expect(inquiries[0].name).to.equal('foo')
|
|
expect(inquiries[0].query).to.equal(tab.query)
|
|
expect(inquiries[0].viewOptions).to.eql(['chart'])
|
|
expect(new Date(inquiries[0].updatedAt)).to.be.within(now, nowPlusMinute)
|
|
expect(new Date(inquiries[0].createdAt)).to.be.within(now, nowPlusMinute)
|
|
})
|
|
|
|
it('saveInquiry adds new inquiry if newName is provided', async () => {
|
|
const now = new Date()
|
|
const nowPlusMinute = new Date(now.getTime() + 60 * 1000)
|
|
|
|
const tab = {
|
|
id: 1,
|
|
query: 'select * from foo',
|
|
viewType: 'chart',
|
|
viewOptions: [],
|
|
name: 'foo',
|
|
updatedAt: '2025-05-16T20:15:00Z',
|
|
dataView: {
|
|
getOptionsForSave() {
|
|
return ['chart']
|
|
}
|
|
}
|
|
}
|
|
const inquiry = {
|
|
id: 1,
|
|
query: 'select * from foo',
|
|
viewType: 'chart',
|
|
viewOptions: [],
|
|
name: 'foo',
|
|
createdAt: '2025-05-15T16:30:00Z',
|
|
updatedAt: '2025-05-16T20:15:00Z'
|
|
}
|
|
const state = {
|
|
inquiries: [inquiry],
|
|
tabs: [tab]
|
|
}
|
|
|
|
const value = await saveInquiry(
|
|
{ state },
|
|
{
|
|
inquiryTab: tab,
|
|
newName: 'foo_new'
|
|
}
|
|
)
|
|
expect(value.id).not.to.equal(tab.id)
|
|
expect(value.name).to.equal('foo_new')
|
|
expect(value.query).to.equal(tab.query)
|
|
expect(value.viewOptions).to.eql(['chart'])
|
|
expect(value).to.have.property('createdAt')
|
|
expect(new Date(value.createdAt)).within(now, nowPlusMinute)
|
|
expect(new Date(value.updatedAt)).within(now, nowPlusMinute)
|
|
expect(state.inquiries).to.eql([inquiry, value])
|
|
})
|
|
|
|
it('saveInquiry adds new inquiry if the inquiry is not in the storeage anymore', async () => {
|
|
const now = new Date()
|
|
const nowPlusMinute = new Date(now.getTime() + 60 * 1000)
|
|
|
|
const tab = {
|
|
id: 1,
|
|
query: 'select * from foo',
|
|
viewType: 'chart',
|
|
viewOptions: [],
|
|
name: 'foo',
|
|
updatedAt: '2025-05-16T20:15:00Z',
|
|
dataView: {
|
|
getOptionsForSave() {
|
|
return ['chart']
|
|
}
|
|
}
|
|
}
|
|
|
|
const state = {
|
|
inquiries: [],
|
|
tabs: [tab]
|
|
}
|
|
|
|
const value = await saveInquiry(
|
|
{ state },
|
|
{
|
|
inquiryTab: tab,
|
|
newName: ''
|
|
}
|
|
)
|
|
expect(value.id).to.equal(tab.id)
|
|
expect(value.name).to.equal('foo')
|
|
expect(value.query).to.equal(tab.query)
|
|
expect(value.viewOptions).to.eql(['chart'])
|
|
expect(value).to.have.property('createdAt')
|
|
expect(new Date(value.createdAt)).within(now, nowPlusMinute)
|
|
expect(new Date(value.updatedAt)).within(now, nowPlusMinute)
|
|
expect(state.inquiries).to.eql([value])
|
|
})
|
|
})
|