mirror of
https://github.com/standardnotes/web.git
synced 2024-10-27 16:31:40 +03:00
110 lines
3.8 KiB
JavaScript
110 lines
3.8 KiB
JavaScript
/* eslint-disable no-unused-expressions */
|
|
/* eslint-disable no-undef */
|
|
import WebDeviceInterface from './lib/web_device_interface.js'
|
|
import * as Factory from './lib/factory.js'
|
|
chai.use(chaiAsPromised)
|
|
const expect = chai.expect
|
|
|
|
describe('application group', function () {
|
|
const globalDevice = new WebDeviceInterface(setTimeout.bind(window), setInterval.bind(window))
|
|
|
|
beforeEach(async function () {
|
|
localStorage.clear()
|
|
})
|
|
|
|
afterEach(async function () {
|
|
localStorage.clear()
|
|
})
|
|
|
|
it('initializing a group should result with primary application', async function () {
|
|
const group = new SNApplicationGroup(globalDevice)
|
|
await group.initialize({
|
|
applicationCreator: (descriptor, deviceInterface) => {
|
|
return Factory.createApplicationWithFakeCrypto(descriptor.identifier, deviceInterface)
|
|
},
|
|
})
|
|
expect(group.primaryApplication).to.be.ok
|
|
expect(group.primaryApplication.identifier).to.be.ok
|
|
|
|
await Factory.safeDeinit(group.primaryApplication)
|
|
})
|
|
|
|
it('initializing a group should result with proper descriptor setup', async function () {
|
|
const group = new SNApplicationGroup(globalDevice)
|
|
await group.initialize({
|
|
applicationCreator: (descriptor, deviceInterface) => {
|
|
return Factory.createApplicationWithFakeCrypto(descriptor.identifier, deviceInterface)
|
|
},
|
|
})
|
|
const identifier = group.primaryApplication.identifier
|
|
expect(group.descriptorRecord[identifier].identifier).to.equal(identifier)
|
|
|
|
await Factory.safeDeinit(group.primaryApplication)
|
|
})
|
|
|
|
it('should persist descriptor record after changes', async function () {
|
|
const group = new SNApplicationGroup(globalDevice)
|
|
await group.initialize({
|
|
applicationCreator: (descriptor, device) => {
|
|
return Factory.createInitAppWithFakeCryptoWithOptions({
|
|
device: device,
|
|
identifier: descriptor.identifier,
|
|
})
|
|
},
|
|
})
|
|
const identifier = group.primaryApplication.identifier
|
|
|
|
const descriptorRecord = await group.device.getJsonParsedRawStorageValue(RawStorageKey.DescriptorRecord)
|
|
expect(descriptorRecord[identifier].identifier).to.equal(identifier)
|
|
expect(descriptorRecord[identifier].primary).to.equal(true)
|
|
|
|
await group.unloadCurrentAndCreateNewDescriptor()
|
|
const descriptorRecord2 = await globalDevice.getJsonParsedRawStorageValue(RawStorageKey.DescriptorRecord)
|
|
expect(Object.keys(descriptorRecord2).length).to.equal(2)
|
|
|
|
expect(descriptorRecord2[identifier].primary).to.equal(false)
|
|
})
|
|
|
|
it('adding new application should incrememnt total descriptor count', async function () {
|
|
const group = new SNApplicationGroup(globalDevice)
|
|
await group.initialize({
|
|
applicationCreator: (descriptor, device) => {
|
|
return Factory.createInitAppWithFakeCryptoWithOptions({
|
|
device: device,
|
|
identifier: descriptor.identifier,
|
|
})
|
|
},
|
|
})
|
|
|
|
await group.unloadCurrentAndCreateNewDescriptor()
|
|
|
|
expect(group.getDescriptors().length).to.equal(2)
|
|
})
|
|
|
|
it('should be notified when application changes', async function () {
|
|
const group = new SNApplicationGroup(globalDevice)
|
|
let notifyCount = 0
|
|
const expectedCount = 2
|
|
// eslint-disable-next-line no-async-promise-executor
|
|
return new Promise(async (resolve) => {
|
|
group.addEventObserver(() => {
|
|
notifyCount++
|
|
if (notifyCount === expectedCount) {
|
|
resolve()
|
|
}
|
|
})
|
|
await group.initialize({
|
|
applicationCreator: (descriptor, device) => {
|
|
return Factory.createInitAppWithFakeCryptoWithOptions({
|
|
device: device,
|
|
identifier: descriptor.identifier,
|
|
})
|
|
},
|
|
})
|
|
await group.unloadCurrentAndCreateNewDescriptor()
|
|
}).then(() => {
|
|
expect(notifyCount).to.equal(expectedCount)
|
|
})
|
|
}).timeout(1000)
|
|
})
|