mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
* Introduce injection token as competition for injectable setup to have better control of timing of different setups Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Switch to using competition to setup app paths Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Switch to using competition for setupping IPC channel listeners Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Stop running setups in unit tests without need Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Switch to running injection token based setups over legacy DI setups in unit tests Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Consolidate naming for running setups Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Switch to running injection token based setups over legacy DI setups in application roots Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Adapt to typing changes in injectable Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Update injectable Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Introduce concept of runnable as a way to delegate runs to Open Closed Principle compliant runnables Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Deprecate vars in favor of injectables Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Consolidate loading of extensions to injectable instead of setup-code Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Flag injectable causing side effects Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Adapt injectable to auto register using a plugin instead of internal feature that no longer exists Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Simplify late registrations Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Introduce tokens for runnables of specific application events for Open Closed Principle Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Consolidate setup events to more granular timeslots Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Reimplement setup for catalog syncing using runnables instead of non-OCP in index.ts Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Reimplement setup for application menu using runnables instead of non-OCP in index.ts Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Reimplement setup for electron application name using runnables instead of non-OCP in index.ts Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Reimplement setup for immer using runnables instead of non-OCP in index.ts Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Reimplement setup for MobX strictness using runnables instead of non-OCP in index.ts Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Reimplement setup for application proxy using runnables instead of non-OCP in index.ts Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Reimplement setup for system certifications using runnables instead of non-OCP in index.ts Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Reimplement setup for system shutdown using runnables instead of non-OCP in index.ts Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Reimplement setup for main window visibility using runnables instead of non-OCP in index.ts Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Reimplement setup for application quit using runnables instead of non-OCP in index.ts Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Reimplement setup for after application is ready using runnables instead of non-OCP in index.ts Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Reimplement setup for application tray using runnables instead of non-OCP in index.ts Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Reimplement setup for deep linking using runnables instead of non-OCP in index.ts Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Reimplement setup for root frame using runnables instead of non-OCP in index.ts Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Remove multiple usages of shared global state Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Remove recently reimplemented stuff from index.ts Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Extract implementation for intent over technical phenomena (here electron events) Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Consolidate naming of event timing window Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Move directories for timing windows among peers Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Consolidate event naming Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Introduce function to remove duplication from things that are startable and stoppable Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Consolidate implementation of something startable and stoppable Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Consolidate naming Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Consolidate more startables and stoppables Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Introduce abstractions for electron application events Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Introduce more abstractions for electron Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Abstract even more Electron specifics to make them overridable in unit tests Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Override dependency for causing side effects Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Make running of many delegatees able to be hierarchical Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Bump async-fn Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Make startable-stoppable also restartable Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Extract "isIntegrationTesting" as dependency for having a side-effect Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Make temporal dependency apparent Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Consolidate all setupping related to single feature to same runnable Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Abstract command line arguments to make them overridable in tests Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Deprecate some globals Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Introduce injectable for __static directory to eliminate side effect on import Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Extract responsibilities from electron Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Extract async initialization from sync-injectable Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Accumulate more global overrides Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Make lifecycle of injectable store work as expected Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Extract responsibilities to delegatees Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Rename delegate for accuracy Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Rename another delegate for accuracy Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Rename yet another delegate for accuracy Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Add new global overrides Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Consolidate variable naming Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Rename injectable for accuracy Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Make difference between soft and hard quit of application apparent Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Make quit triggered by auto update manifest as hard quit instead of just soft quit Soft quit is the stand-by quit where only the renderer quits. Hard quit is the full quit of also main. Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Introduce abstraction for publishing and subscribing between processes Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Revert "Introduce abstraction for publishing and subscribing between processes" This reverts commit 46f2d5a5f28bddcf5ffe124b1c590b19e7b9a15f. Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Adapt code and unit tests to recent changes in application setup and event handling Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Group overrides by category Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Abstract event of application activation from electron Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Abstract event of device shutdown from electron Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Consolidate runnables related to Electron Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Make startableStoppables have ID for better error logging Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Make navigating to Helm Charts not blow up Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Add general override for behavioural tests Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Update snapshot Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Adapt vars after merge Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Fix code style Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Fix error about multiple states for React Router being present at once Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Kludge around test setup which is difficult because of circular dependencies Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Fix setupping of sentry after rebase Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Ensure that LensProxy is setupped before starting the main window Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Remove redundant import Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Consolidate to use injectable instead of var for static file directory Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Deprecate another var with injectable Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Tweak timing of runnables Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Extract tray icon path as injectable Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Make splash screen not blow up by providing compile-time environment variables Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Introduce a way to run many synchronous runnables Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Make runnables for before application is ready synchronous as this is technical limitation of Electron See: https://github.com/electron/electron/issues/21370 Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Kill dead code Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Fix application quit by calling Electron's event.preventDefault in a very specific way and preventing async Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Fix missing injectable postfix in file name Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Tweak timeslot of a runnable Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Make it possible to not stop something that was never started Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Make quit of hidden Lens not blow up Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Extract responsibilities of WindowManager as injectables Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Consolidate code for application window Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Simplify directory structures for runnables Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Flag injectable causing side-effect Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Extract helpers for testing promises to test-utils Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Make script for running unit tests support targeting Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Make startable stoppable support async starting Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Introduce reactive way to get theme from operating system Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Update yarn.lock after rebase Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Fix code style Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Remove code-style changes that are not welcome Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Switch to using dependency over using explicit side-effect Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Simplify naming Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Kill dead code Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Add empty mocks comply to lint Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Remove global state Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Extract responsibility of setting dependencies to own injectable Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Flag injectable causing side effects Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Extract responsibility to injectable Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Tweak typing Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Tweak naming of runnables Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Revert code-style changes Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Tweak types Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Extract injectable with side-effect for exact overriding Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Tweak name of timeslot to make it more apparent that new content for application load can be added Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Tweak name of the splash window for loading to avoid confusion with similarly named phenomenon Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Tweak comment Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Rename injectable for brevity Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Consolidate LensProxy related stuff to directory Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Rename injectables for accuracy Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Remove usage of extension for injectable for being YAGNI Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Prevent restarting a startableStoppable when already being started Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Rename callback in ApplicationBuilder for accuracy Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Fix conflicts after rebase Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Fix merge conflicts Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Revert switch to react-router-dom by installing history as dependency Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Make test more strict Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Make runnable give friendly error about incorrect hierarchy for easier debugging Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Fix code-style Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Fix code style Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Switch to using dependency instead of legacy-di Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Fix timing of injects Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> Co-authored-by: Iku-turso <mikko.aspiala@gmail.com>
384 lines
12 KiB
TypeScript
384 lines
12 KiB
TypeScript
/**
|
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
|
*/
|
|
|
|
import { anyObject } from "jest-mock-extended";
|
|
import mockFs from "mock-fs";
|
|
import type { CatalogEntity, CatalogEntityData, CatalogEntityKindData } from "../catalog";
|
|
import { getDiForUnitTesting } from "../../main/getDiForUnitTesting";
|
|
import getConfigurationFileModelInjectable from "../get-configuration-file-model/get-configuration-file-model.injectable";
|
|
import appVersionInjectable from "../get-configuration-file-model/app-version/app-version.injectable";
|
|
import type { DiContainer } from "@ogre-tools/injectable";
|
|
import hotbarStoreInjectable from "../hotbars/store.injectable";
|
|
import type { HotbarStore } from "../hotbars/store";
|
|
import catalogEntityRegistryInjectable from "../../main/catalog/entity-registry.injectable";
|
|
import { computed } from "mobx";
|
|
import hasCategoryForEntityInjectable from "../catalog/has-category-for-entity.injectable";
|
|
import catalogCatalogEntityInjectable from "../catalog-entities/general-catalog-entities/implementations/catalog-catalog-entity.injectable";
|
|
import loggerInjectable from "../logger.injectable";
|
|
import type { Logger } from "../logger";
|
|
import directoryForUserDataInjectable from "../app-paths/directory-for-user-data/directory-for-user-data.injectable";
|
|
|
|
function getMockCatalogEntity(data: Partial<CatalogEntityData> & CatalogEntityKindData): CatalogEntity {
|
|
return {
|
|
getName: jest.fn(() => data.metadata?.name),
|
|
getId: jest.fn(() => data.metadata?.uid),
|
|
getSource: jest.fn(() => data.metadata?.source ?? "unknown"),
|
|
isEnabled: jest.fn(() => data.status?.enabled ?? true),
|
|
onContextMenuOpen: jest.fn(),
|
|
onSettingsOpen: jest.fn(),
|
|
metadata: {},
|
|
spec: {},
|
|
status: {},
|
|
...data,
|
|
} as CatalogEntity;
|
|
}
|
|
|
|
describe("HotbarStore", () => {
|
|
let di: DiContainer;
|
|
let hotbarStore: HotbarStore;
|
|
let testCluster: CatalogEntity;
|
|
let minikubeCluster: CatalogEntity;
|
|
let awsCluster: CatalogEntity;
|
|
let loggerMock: jest.Mocked<Logger>;
|
|
|
|
beforeEach(async () => {
|
|
di = getDiForUnitTesting({ doGeneralOverrides: true });
|
|
|
|
(di as any).unoverride(hotbarStoreInjectable);
|
|
|
|
testCluster = getMockCatalogEntity({
|
|
apiVersion: "v1",
|
|
kind: "Cluster",
|
|
status: {
|
|
phase: "Running",
|
|
},
|
|
metadata: {
|
|
uid: "some-test-id",
|
|
name: "my-test-cluster",
|
|
source: "local",
|
|
labels: {},
|
|
},
|
|
});
|
|
minikubeCluster = getMockCatalogEntity({
|
|
apiVersion: "v1",
|
|
kind: "Cluster",
|
|
status: {
|
|
phase: "Running",
|
|
},
|
|
metadata: {
|
|
uid: "some-minikube-id",
|
|
name: "my-minikube-cluster",
|
|
source: "local",
|
|
labels: {},
|
|
},
|
|
});
|
|
awsCluster = getMockCatalogEntity({
|
|
apiVersion: "v1",
|
|
kind: "Cluster",
|
|
status: {
|
|
phase: "Running",
|
|
},
|
|
metadata: {
|
|
uid: "some-aws-id",
|
|
name: "my-aws-cluster",
|
|
source: "local",
|
|
labels: {},
|
|
},
|
|
});
|
|
|
|
di.override(hasCategoryForEntityInjectable, () => () => true);
|
|
|
|
loggerMock = {
|
|
warn: jest.fn(),
|
|
debug: jest.fn(),
|
|
error: jest.fn(),
|
|
info: jest.fn(),
|
|
silly: jest.fn(),
|
|
};
|
|
|
|
di.override(loggerInjectable, () => loggerMock);
|
|
|
|
di.override(directoryForUserDataInjectable, () => "some-directory-for-user-data");
|
|
|
|
const catalogEntityRegistry = di.inject(catalogEntityRegistryInjectable);
|
|
const catalogCatalogEntity = di.inject(catalogCatalogEntityInjectable);
|
|
|
|
catalogEntityRegistry.addComputedSource("some-id", computed(() => [
|
|
testCluster,
|
|
minikubeCluster,
|
|
awsCluster,
|
|
catalogCatalogEntity,
|
|
]));
|
|
|
|
di.permitSideEffects(getConfigurationFileModelInjectable);
|
|
di.permitSideEffects(appVersionInjectable);
|
|
di.permitSideEffects(hotbarStoreInjectable);
|
|
});
|
|
|
|
afterEach(() => {
|
|
mockFs.restore();
|
|
});
|
|
|
|
describe("given no previous data in store, running all migrations", () => {
|
|
beforeEach(() => {
|
|
mockFs();
|
|
|
|
hotbarStore = di.inject(hotbarStoreInjectable);
|
|
|
|
hotbarStore.load();
|
|
});
|
|
|
|
describe("load", () => {
|
|
it("loads one hotbar by default", () => {
|
|
expect(hotbarStore.hotbars.length).toEqual(1);
|
|
});
|
|
});
|
|
|
|
describe("add", () => {
|
|
it("adds a hotbar", () => {
|
|
hotbarStore.add({ name: "hottest" });
|
|
expect(hotbarStore.hotbars.length).toEqual(2);
|
|
});
|
|
});
|
|
|
|
describe("hotbar items", () => {
|
|
it("initially creates 12 empty cells", () => {
|
|
expect(hotbarStore.getActive().items.length).toEqual(12);
|
|
});
|
|
|
|
it("initially adds catalog entity as first item", () => {
|
|
expect(hotbarStore.getActive().items[0]?.entity.name).toEqual("Catalog");
|
|
});
|
|
|
|
it("adds items", () => {
|
|
hotbarStore.addToHotbar(testCluster);
|
|
const items = hotbarStore.getActive().items.filter(Boolean);
|
|
|
|
expect(items.length).toEqual(2);
|
|
});
|
|
|
|
it("removes items", () => {
|
|
hotbarStore.addToHotbar(testCluster);
|
|
hotbarStore.removeFromHotbar("some-test-id");
|
|
hotbarStore.removeFromHotbar("catalog-entity");
|
|
const items = hotbarStore.getActive().items.filter(Boolean);
|
|
|
|
expect(items).toStrictEqual([]);
|
|
});
|
|
|
|
it("does nothing if removing with invalid uid", () => {
|
|
hotbarStore.addToHotbar(testCluster);
|
|
hotbarStore.removeFromHotbar("invalid uid");
|
|
const items = hotbarStore.getActive().items.filter(Boolean);
|
|
|
|
expect(items.length).toEqual(2);
|
|
});
|
|
|
|
it("moves item to empty cell", () => {
|
|
hotbarStore.addToHotbar(testCluster);
|
|
hotbarStore.addToHotbar(minikubeCluster);
|
|
hotbarStore.addToHotbar(awsCluster);
|
|
|
|
expect(hotbarStore.getActive().items[6]).toBeNull();
|
|
|
|
hotbarStore.restackItems(1, 5);
|
|
|
|
expect(hotbarStore.getActive().items[5]).toBeTruthy();
|
|
expect(hotbarStore.getActive().items[5]?.entity.uid).toEqual("some-test-id");
|
|
});
|
|
|
|
it("moves items down", () => {
|
|
hotbarStore.addToHotbar(testCluster);
|
|
hotbarStore.addToHotbar(minikubeCluster);
|
|
hotbarStore.addToHotbar(awsCluster);
|
|
|
|
// aws -> catalog
|
|
hotbarStore.restackItems(3, 0);
|
|
|
|
const items = hotbarStore.getActive().items.map(item => item?.entity.uid || null);
|
|
|
|
expect(items.slice(0, 4)).toEqual(["some-aws-id", "catalog-entity", "some-test-id", "some-minikube-id"]);
|
|
});
|
|
|
|
it("moves items up", () => {
|
|
hotbarStore.addToHotbar(testCluster);
|
|
hotbarStore.addToHotbar(minikubeCluster);
|
|
hotbarStore.addToHotbar(awsCluster);
|
|
|
|
// test -> aws
|
|
hotbarStore.restackItems(1, 3);
|
|
|
|
const items = hotbarStore.getActive().items.map(item => item?.entity.uid || null);
|
|
|
|
expect(items.slice(0, 4)).toEqual(["catalog-entity", "some-minikube-id", "some-aws-id", "some-test-id"]);
|
|
});
|
|
|
|
it("logs an error if cellIndex is out of bounds", () => {
|
|
hotbarStore.add({ name: "hottest", id: "hottest" });
|
|
hotbarStore.setActiveHotbar("hottest");
|
|
|
|
hotbarStore.addToHotbar(testCluster, -1);
|
|
expect(loggerMock.error).toBeCalledWith("[HOTBAR-STORE]: cannot pin entity to hotbar outside of index range", anyObject());
|
|
|
|
hotbarStore.addToHotbar(testCluster, 12);
|
|
expect(loggerMock.error).toBeCalledWith("[HOTBAR-STORE]: cannot pin entity to hotbar outside of index range", anyObject());
|
|
|
|
hotbarStore.addToHotbar(testCluster, 13);
|
|
expect(loggerMock.error).toBeCalledWith("[HOTBAR-STORE]: cannot pin entity to hotbar outside of index range", anyObject());
|
|
});
|
|
|
|
it("throws an error if getId is invalid or returns not a string", () => {
|
|
expect(() => hotbarStore.addToHotbar({} as any)).toThrowError(TypeError);
|
|
expect(() => hotbarStore.addToHotbar({ getId: () => true } as any)).toThrowError(TypeError);
|
|
});
|
|
|
|
it("throws an error if getName is invalid or returns not a string", () => {
|
|
expect(() => hotbarStore.addToHotbar({ getId: () => "" } as any)).toThrowError(TypeError);
|
|
expect(() => hotbarStore.addToHotbar({ getId: () => "", getName: () => 4 } as any)).toThrowError(TypeError);
|
|
});
|
|
|
|
it("does nothing when item moved to same cell", () => {
|
|
hotbarStore.addToHotbar(testCluster);
|
|
hotbarStore.restackItems(1, 1);
|
|
|
|
expect(hotbarStore.getActive().items[1]?.entity.uid).toEqual("some-test-id");
|
|
});
|
|
|
|
it("new items takes first empty cell", () => {
|
|
hotbarStore.addToHotbar(testCluster);
|
|
hotbarStore.addToHotbar(awsCluster);
|
|
hotbarStore.restackItems(0, 3);
|
|
hotbarStore.addToHotbar(minikubeCluster);
|
|
|
|
expect(hotbarStore.getActive().items[0]?.entity.uid).toEqual("some-minikube-id");
|
|
});
|
|
|
|
it("throws if invalid arguments provided", () => {
|
|
// Prevent writing to stderr during this render.
|
|
const { error, warn } = console;
|
|
|
|
console.error = jest.fn();
|
|
console.warn = jest.fn();
|
|
|
|
hotbarStore.addToHotbar(testCluster);
|
|
|
|
expect(() => hotbarStore.restackItems(-5, 0)).toThrow();
|
|
expect(() => hotbarStore.restackItems(2, -1)).toThrow();
|
|
expect(() => hotbarStore.restackItems(14, 1)).toThrow();
|
|
expect(() => hotbarStore.restackItems(11, 112)).toThrow();
|
|
|
|
// Restore writing to stderr.
|
|
console.error = error;
|
|
console.warn = warn;
|
|
});
|
|
|
|
it("checks if entity already pinned to hotbar", () => {
|
|
hotbarStore.addToHotbar(testCluster);
|
|
|
|
expect(hotbarStore.isAddedToActive(testCluster)).toBeTruthy();
|
|
expect(hotbarStore.isAddedToActive(awsCluster)).toBeFalsy();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("given data from 5.0.0-beta.3 and version being 5.0.0-beta.10", () => {
|
|
beforeEach(() => {
|
|
const configurationToBeMigrated = {
|
|
"some-directory-for-user-data": {
|
|
"lens-hotbar-store.json": JSON.stringify({
|
|
__internal__: {
|
|
migrations: {
|
|
version: "5.0.0-beta.3",
|
|
},
|
|
},
|
|
hotbars: [
|
|
{
|
|
id: "3caac17f-aec2-4723-9694-ad204465d935",
|
|
name: "myhotbar",
|
|
items: [
|
|
{
|
|
entity: {
|
|
uid: "some-aws-id",
|
|
},
|
|
},
|
|
{
|
|
entity: {
|
|
uid: "55b42c3c7ba3b04193416cda405269a5",
|
|
},
|
|
},
|
|
{
|
|
entity: {
|
|
uid: "176fd331968660832f62283219d7eb6e",
|
|
},
|
|
},
|
|
{
|
|
entity: {
|
|
uid: "61c4fb45528840ebad1badc25da41d14",
|
|
name: "user1-context",
|
|
source: "local",
|
|
},
|
|
},
|
|
{
|
|
entity: {
|
|
uid: "27d6f99fe9e7548a6e306760bfe19969",
|
|
name: "foo2",
|
|
source: "local",
|
|
},
|
|
},
|
|
null,
|
|
{
|
|
entity: {
|
|
uid: "c0b20040646849bb4dcf773e43a0bf27",
|
|
name: "multinode-demo",
|
|
source: "local",
|
|
},
|
|
},
|
|
null,
|
|
null,
|
|
null,
|
|
null,
|
|
null,
|
|
],
|
|
},
|
|
],
|
|
}),
|
|
},
|
|
};
|
|
|
|
mockFs(configurationToBeMigrated);
|
|
|
|
di.override(appVersionInjectable, () => "5.0.0-beta.10");
|
|
|
|
hotbarStore = di.inject(hotbarStoreInjectable);
|
|
|
|
hotbarStore.load();
|
|
});
|
|
|
|
it("allows to retrieve a hotbar", () => {
|
|
const hotbar = hotbarStore.findById("3caac17f-aec2-4723-9694-ad204465d935");
|
|
|
|
expect(hotbar?.id).toBe("3caac17f-aec2-4723-9694-ad204465d935");
|
|
});
|
|
|
|
it("clears cells without entity", () => {
|
|
const items = hotbarStore.hotbars[0].items;
|
|
|
|
expect(items[2]).toBeNull();
|
|
});
|
|
|
|
it("adds extra data to cells with according entity", () => {
|
|
const items = hotbarStore.hotbars[0].items;
|
|
|
|
expect(items[0]).toEqual({
|
|
entity: {
|
|
name: "my-aws-cluster",
|
|
source: "local",
|
|
uid: "some-aws-id",
|
|
},
|
|
});
|
|
});
|
|
});
|
|
});
|