Mailspring/app/spec/database-object-registry-spec.ts
Ben Gotow cff437e900
Upgrade to Electron 8, improve TS usage and TS errors outside calendar [requires re- npm install] (#2284)
* Shfit away from default exports and PropTypes for better TS support

* localize strings and expand use of types in WeekView, create new EventOccurence distinct from Event

* Remove calendar wrap, use TS enum for view type + consistent prop interface

* Bump Typescript to 3.8.3 and improve query / attribute / search typings

* Re-use the Autolinker for calendar event descriptions with aggressive phone detection

* Clean up WeekView and the editing popover, lots of cruft here

* Update ScrollRegion to initialize scrollbar provided by external ref

* Expose ScrollRegion’s resizeObserver to clean up tick interval tracking

* Simply tickGenerator and move it to a helper

* Bump to Electron 8.x for Chrome 75+ CSS features

* Bump Handlebars dep to fix annoying npm audit noise

* Remove electron-remote from electron-spellchecker

* Explicitly add node-gyp, why is this necessary?

* Fix lesslint issues

* Bump eslint and let it fix 133 issues

* Satisfy remaining eslint@2020 errors by hand

* Add tsc-watch npm script and fix all TS errors outside calendar

* Configure appveyor to publish all the pdb files it gets

* Log sync exit codes and signals for easier triage on Windows

* Upgrade npm, mark that the build process supports Node 11+ not just Node 11

* Resolve more errors

* Upgrade sqlite to be a context-aware native module

* Fix: Tab key no longer navigating into contenteditable because tabIndex not inferred

* Fix: Bad print styles because Chrome now adds more CSS of it’s own when doctype is missing

* Fix: before-navigate is now called after beforeunload
2021-02-14 15:58:22 -06:00

41 lines
1.4 KiB
TypeScript

/* eslint quote-props: 0 */
import _ from 'underscore';
import { Model } from '../src/flux/models/model';
import * as Attributes from '../src/flux/attributes';
import DatabaseObjectRegistry from '../src/registries/database-object-registry';
class GoodTest extends Model {
static attributes = {
...Model.attributes,
foo: Attributes.String({
modelKey: 'foo',
jsonKey: 'foo',
}),
};
}
describe('DatabaseObjectRegistry', function DatabaseObjectRegistrySpecs() {
beforeEach(() => DatabaseObjectRegistry.unregister('GoodTest'));
it('can register constructors', () => {
const testFn = () => GoodTest;
expect(() => DatabaseObjectRegistry.register('GoodTest', testFn)).not.toThrow();
expect(DatabaseObjectRegistry.get('GoodTest')).toBe(GoodTest);
});
it('Tests if a constructor is in the registry', () => {
DatabaseObjectRegistry.register('GoodTest', () => GoodTest);
expect(DatabaseObjectRegistry.isInRegistry('GoodTest')).toBe(true);
});
it('deserializes the objects for a constructor', () => {
DatabaseObjectRegistry.register('GoodTest', () => GoodTest);
const obj = DatabaseObjectRegistry.deserialize('GoodTest', { foo: 'bar' });
expect(obj instanceof GoodTest).toBe(true);
expect(obj.foo).toBe('bar');
});
it("throws an error if the object can't be deserialized", () =>
expect(() => DatabaseObjectRegistry.deserialize('GoodTest', { foo: 'bar' })).toThrow());
});