* add filename argument and update default name
* add filename argument and update default name
* allow the invoke function to accept a filename to pass to the view actions
* tests
* remove invalid chars from filenames, another test for that
* replace periods with underscores as they may be useful in a name
* added getTypes to types api, modifying which tabs are shown, working on annoatation tab
* moving hasNumericTelemetry to an api method
* updated types api to return all types, updated annotations api to return annotatable types, cleaned up use of hasNumericTelemetry elsewhere in the code
* Changes for tabs visibility and priority
- Alphanumeric formatting tab set to default priority while editing, low priority during browse.
- Good styling for Format tab contents in browse mode.
- Properties tab set to low priority during editing, default during browse.
- Make Elements pool visible in browse mode, omit edit capabilities.
- Edit and browse mode priorities for Properties and Elements.
- Adjusted edit and browse mode priorities for Properties and Elements.
- Priority set for Gantt view.
- Priorities set for Graph, Lad Table, Scatter Plot, Telem Tables and Time List views.
- Changed several Inspector tab names to 'Config'; tests and other code changed to target `key` instead of `name`:
- LAD Table
- Time List - will need regression testing for change noted re. `key` above.
- Created browse mode read-only Inspector views:
- LAD Table, Lad Table set.
- Telemetry Table.
and `showTab` functions; `showTab` has just been set to true for now.
to prevent it from displaying when no filters can be set.
- Plot plugin.js now adds configuration.objectStyles {} for overlay and stacked plots on initialize.
- FiltersView now displays a message for telem sources that don't have filter criteria available.
- Annotations tab now set to never display when a view is being edited.
- Added `objectStyles: {}` to initialize functions for multiple objects:
- Condition Widget
- Gauge
- LAD Table
---------
Co-authored-by: Charles Hacskaylo <charlesh88@gmail.com>
Co-authored-by: Andrew Henry <akhenry@gmail.com>
* Remove short-circuit logic
* Revert change to remove short-circuit logic
* Restore short-circuit evaluation, pass in current values
* V2, restore short-circuit eval
* Added timestamp checking for individual criteria
* Some optimizations
* Co-authored-by: Pranaykarvi<pranaykarvi@gmail.com>
* Fixed bug that prevented test data from working at all
* Fixed bug introduced by refactor. Oops.
* Fixed bug with test data
* Provided clarification in test description
* Replaced legacy tests with new e2e test of correct telemetry evaluation
* some markup changes to improve testability
* Address review comments
* Fixed linting error
* Fixed broken tests
* Fixed long-standing bug with evaluating enums
* Fixed broken tests
* Fixed linting error
* remove commented code
test name grammar fix
---------
Co-authored-by: David Tsay <3614296+davetsay@users.noreply.github.com>
* Defined search index for object names. Add index for searching by object type
* Feature detect if views are defined to support optimized search. If not, fall back on filter-based search
* Suppress github codedcov annotations for now, they are not accurate and generate noise.
* Allow nested describes. They're good.
* Add a noop search function to couch search folder object provider. Actual search is provided by Couch provider, but need a stub to prevent in-memory indexing
* Adhere to our own interface and ensure identifiers are always returned by default composition provider
* Update all remaining dependencies in one go
* Support changed marked API
* Adapt to use new library
* Removed commented code
* Fixed typo in anchor tag
* Account for right y-axes when calculating now line position.
Don't show the now line if it's out of bounds of the time axis
* Add test for now marker in realtime and out of bounds modes
* Ensure that the mode set when independent time conductor is enabled/disabled is propagated correctly.
Also ensure that global time conductor changes are not picked up by the independent time conductor when the user has enabled it at least once before
* Use structuredClone instead of deep copy
* Add e2e test
* Assert that you're in fixed mode after sync time conductor
* Comment explaining new time context test
* Change test to be a little less complicated
* Fix linting errors
* Allow highlights and locking highlight points for plots in compact mode, but still disallow pan and zoom.
* Remove unnecessary watch on cursor guides and grid lines
* Test for cursor guides in compact mode
* moving rename methods to appActions
* importing back into original test
* reverting
* add the ability to change the name in the browse bar
* add test to verify entries are not being lost
* addding aria labels for tests
* when an object is changed, store the whole new object, not just the name
* typo!
* initial implementation
* cleaning up a bit
* adding the hash method back as we dont want gigantic keys
* adding a line
* added filtering to state generator, updated filters readme to fix error, more robust hash function
* removing unnecessary changes in wrong file
* adding a test to confirm each endpoint has a separate subscription based of filtering
* lint
* adding back in hints, accidentally removed
* remove some redundant code and convert sanitization method into a replacer function for stringify
* tweaking serialize replacer to handle arrays correctly, adding more determinative row addition check to test
* more focused selector for the table
* simplified the serialization method even further and added some more docs
* checking if the metadata exists before acting on it
* added a test to catch missing object errors in gauges
* remove waitForTimeout and add in check for time conductor successful start offset update
* hardening the test by checking for the time before the time change
* add "pageerror" to cspell
* Use the disabled attribute on a valid tag - the button.
* Add e2e test to check for add criteria button being enabled
* Improve test
* Check for add criteria button to have attribute disabled
* Remove focused test
* Add new utility to encode urls.
Use the encode urls utility to encode all background images in css
* need a commit to pull exampleimagery from
* skip and fix on otherside
---------
Co-authored-by: John Hill <john.c.hill@nasa.gov>
* Initialize alignment offset to 0. (it was undefined). Also handle a small bug with swimlane configuration not getting replaced when the plan used by a gantt chart was changed
* lint: fix
* test: update visual tests to mock clock and show now line
---------
Co-authored-by: Mazzella, Jesse D. (ARC-TI)[KBR Wyle Services, LLC] <jesse.d.mazzella@nasa.gov>
* Use the planObject to get ordered swimlane names
* If there is no plan object, don't try to render the chart
---------
Co-authored-by: Jamie V. <jamie.j.vigliotta@nasa.gov>
* refactor: `Indefinite` -> `Unlimited`
* refactor: remove unused const
* fix: use the selected shelveDuration
* fix: set and use default if none selected
* fix: bad optional chaining
* fix: handle the case of no provider
* fix: don't assign defaults if no provider
* Script for locking an object tree
* Show lock button if locked
* Do not allow properties editing of locked objects
* Remove package-lock.json
* Added p-debounce
* Allow duplication of locked objects
* Better user feedback
* Add semaphores to prevent file handle exhaustion
* Leverage official Apache Couch library - nano. Clean up dependencies. Default to environment variables for couch config. Simplify batching mechanism to make it synchronouse
* Added lock user attribution
* Remove unused code
* Modify open script for adding auth design doc
* Added script for creating auth design doc
* Add css class for disallow unlock
* Add user attribution to lock button
* Fix import
* Typo
* User it was locked by, not current user. Wow.
* Closes#7877
- Front-end sanding and shimming: displays <span> instead of button when domainObject.disallowUnlock.
* Fixed bug where lock is shown even if object is not locked
---------
Co-authored-by: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* Issue where immutable objects sort order was not being set correctly in telemetry tables.
* Configuration couldn't be saved and the sort order was not being saved in memory.
* Telemetry was not being re-requested when the sort order of a table was changed and the table was in performance (limited) mode.
* We've moved sort order to both configuration and in-memory and we will re-request telemetry if changing sort order in performance mode.
---------
Co-authored-by: Andrew Henry <akhenry@gmail.com>
* feat: add function to generate a seeded random value
* fix: produce the same compass orientation per timestamp
- helps for consistent visual tests
---------
Co-authored-by: John Hill <john.c.hill@nasa.gov>
Clock
* pass in default timeContext in request options
* observe for clock tick, instead of polling, to determine if clock has time set
Progress Bars
* use scale instead of move animation
Plan
* use a ResizeObserver instead of polling for size changes
---------
Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
Co-authored-by: Charles Hacskaylo <charlesh88@gmail.com>
Co-authored-by: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Co-authored-by: Andrew Henry <akhenry@gmail.com>
When adding sorted arrays to the beginning, make sure to insert them in the same order and not accidentally reverse them while inserting.
Co-authored-by: Andrew Henry <akhenry@gmail.com>
Co-authored-by: John Hill <john.c.hill@nasa.gov>
* adding telemetry collections to condition manager
* handling telemetry collection data not datum
* adding from maaster
* addressing PR comments
* update unit test to work with telemetry collections
* fixing tests
* removing unnecessary addition
* removing focused describe
* removing focused it
* fix weird test bleed
* adding test for conditional styling
* removing some auto fix es-lint
* got a bit overzealous
* clarification
* using raf utility which handles it correctly and moving visiblity handling into the raf for consistency and performance
* using raf correctly
* removing raf, was causing issues
* move the test and add some determinism
* oops only
* missed lint
* got it!
* fix comments
* test(condStyling): stabilize test
---------
Co-authored-by: John Hill <john.c.hill@nasa.gov>
Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
* refactor: clean up FaultManagementView code
* feat: providers can now provide "Shelve Duration" options
* fix(exampleFaultSource): support `getShelveDurations`
* a11y: aria label for fault management list item
* a11y(FaultManagement): more labels
* refactor: eliminate some faultUtils and refactor locator() out of tests
* docs: add some more docs to fault management api
* refactor: make for loop more readable
* test: use static faults when testing
* fix: set a timestamp for static faults and subtract so we get faults in order
* refactor: autoformat
* chore: add missing copyright header
* fix: use as default parameter to get value as method is called
* refactor: make magic number a const
* fix(codecov): use codecov github action to upload
* fix: generate the report
* build: update circleci yml to use codecov orb
* build: remove codecov scripts and package
* build: don't use the orb because things can't be easy
- nasa org disallows "third party" orbs
* build: only use `sudo` if we ain't da root user
---------
Co-authored-by: Andrew Henry <akhenry@gmail.com>
* Simplifies the implementation of telemetry buffering in Open MCT.
* Switches from per-parameter buffering to a shared queue. Per-parameter buffering is too easily overwhelmed by bursts of telemetry from high-frequency parameters. A single shared buffer has more overhead to grow when a burst arrives without overflowing, because the buffer is shared across all parameters.
* Removes the need for plugins to pass serialized code to a worker.
* Switched to a "one-size-fits-all" batching strategy removing the need for plugins to define a batching strategy at all.
* Captures buffering statistics for display in the PerformanceIndicator.
* Closes#7820
- Fix 0 opacity fill in theme constants files for Gauge type needle.
* move gauge plugin to its own suite
* add two more snapshots
* driveby: fix some flake
* bug: update linting rule
---------
Co-authored-by: John Hill <john.c.hill@nasa.gov>
Co-authored-by: Andrew Henry <akhenry@gmail.com>
* more readable
* unpause explicitly
* fix jsdoc
* e2e testing multiple image removal
* prettier
* fix to remove multiple images from history
* move tests that use playwright clock api into own file
* fix playwright clock tests
* add aria-label to element
* prevent straggler debounced function call on unmount
* clean up and fix tests
* update paths
* lint fix
* lint fix
---------
Co-authored-by: John Hill <john.c.hill@nasa.gov>
* Only as for latest historical telemetry
* Add test for size 1 request when a bar graph is loaded
* Use strategy latest instead of size 1 for historical request
* Fix linting issues
* Add size and strategy
* Remove bar graph tests
---------
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* bugfix: update tsconfig to set module to NodeNext and exclude openmct/e2e
* chore: remove unnecessary paths from exclude
- the `exclude` option only excludes files in the context of the `include` paths, if there are any. We can remove some of these because they don't match anything in the include paths.
* chore: fix capitalization for consistency
---------
Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
* adding an option to no swap order to initiatSort
* debug
* defaulting to desc order for requests if there is not saved order
* adding some common constants
* replace all got into a comment
---------
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* fix: apply `is-style-invisible` className to image and alphanumeric items
* test: generate storagestate file with basic condition set
* refactor: small a11y additions for Toolbars
* test: add suite for display layout conditional styling
* fix: make condition true half of the time
* fix: use a period of 5 so tests are more stable
* test: mark as slow
* test: use inline base64 image text instead of a url
* fix: use vue reactivity system to conditionally show these objects
* test: use tiny base64 image
* fix: condition for v-show
* fix: use both v-if and v-show to toggle visibility
* refactor: convert to ES6 class
* fix: remove focused test
* fix: switch back to a div due to visual artifacts. settle for an aria role instead
- IT'S CALLED COMPROMISE!
* test: fix broken locator in imagery perf test
* Prevent this from happening
* make rule explicit
* test: maintain `locator()` pattern for contract tests
* test(couchdb): try some new techniques to stabilize the test
* Revert "test(couchdb): try some new techniques to stabilize the test"
This reverts commit 9aa1ea95a1.
* chore: revert to `networkidle` and disable eslint rule
* test: add `@network` annotation for tests with real network requests
---------
Co-authored-by: Hill, John (ARC-TI)[KBR Wyle Services, LLC] <john.c.hill@nasa.gov>
* fix: update broken locator
* update eslint package
* first pass of lint fixes
* update package
* change ruleset
* update component tests to match linting rules
* driveby
* start to factor out bad locators
* update gauge component
* update notebook snapshot drop area
* Update plot aria
* add draggable true to tree items
* update package
* driveby to remove dead code
* unneeded
* unneeded
* tells a screenreader that this is a row and a cell
* adds an id for dragondrops
* this should be a button
* first pass at fixing tooltip selectors
* review comments
* Updating more tests
* update to remove expect expect given our use of check functions
* add expand component
* move role around
* update more locators
* force
* new local storage
* remove choochoo steps
* test: do `lint:fix` and also add back accidentally removed code
* test: add back more removed code
* test: remove `unstable` annotation from tests which are not unstable
* test: remove invalid test-- the "new" time conductor doesn't allow for millisecond changes in fixed time
* test: fix unstable gauge test
* test: remove useless asserts-- this was secretly non-functional. now that we've fixed it, it makes no sense and just fails
* test: add back accidentally removed changes
* test: revert changes that break test
* test: more fixes
* Remove all notion of the unstable/stable e2e tests
* test: eviscerate the flake with FACTS and LOGIC
* test: fix anotha one
* lint fixes
* test: no need to wait for save dialog
* test: fix more tests
* lint: fix more warnings
* test: fix anotha one
* test: use `toHaveLength` instead of `.length).toBe()`
* test: stabilize tabs view example imagery test
* fix: more tests be fixed
* test: more `toHaveCount()`s please
* test: revert more accidentally removed fixes
* test: fix selector
* test: fix anotha one
* update lint rules to clean up bad locators in shared fixtures
* update and remove bad appActions
* test: fix some restricted notebook tests
* test: mass find/replace to enforce `toHaveCount()` instead of `.count()).toBe()`
* Remove some bad appActions and update text
* test: fix da tree tests
* test: await not await await
* test: fix upload plan appAction and add a11y
* Updating externalFixtures with best practice locators and add missing appAction framework tests
* test: fix test
* test: fix appAction test for plans
* test: yum yum fix'em up and get rid of some dragon drops
* fix: alas, a `.only()` got my hopes up that i was done fixing tests
* test: add `setTimeConductorMode` test "suite" which covers most TC related appActions
* test: fix arg
* test(couchdb): fix some network tests via expect polling
* Stabalize visual test
* getCanasPixels
* test: stabilize tooltip telemetry table test, better a11y for tooltips
* chore: update to use `docker compose` instead of `docker-compose`
* New rules, new tests, new me
* fix sort order
* test: add `waitForPlotsToRender` framework test, passthru timeout override
* test: remove `clockOptions` test as we have `page.clock` now
* test: refactor out `overrideClock`
* test: use `clock.install` instead
* test: use `clock.install` instead
* time clock fix
* test: fix timer tests
* remove ever reference to old base fixture
* test: stabilize restricted notebook test
* lint fixes
* test: use clock.install
* update timelist
* test: update visual tests to use `page.clock()`, update snapshots
* test: stabilize tree renaming/reordering test
* a11y: add aria-label and role=region to object view
* refactor: use `dragTo`
* refactor: use `dragTo`, other small fixes
* test: use `page.clock()` to stabilize tooltip telemetry table test
* test: use web-first assertion to stabilize staleness test
* test: knock out a few more `page.click`s
* test: destroy all `page.click()`s
* refactor: consistently use `'Ok'` instead of `'OK'` and `'Ok'` mixed
* test: remove gauge aria label
* test: more test fixes
* test: more fixes and refactors
* docs: add comment
* test: refactor all instances of `dragAndDrop`
* test: remove redundant test (covered in previous test steps)
* test: stabilize imagery operations tests for display layout
* chore: remove bad unicorn rule
* chore(lint): remove unused disable directives
---------
Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
* docs: fix type imports in openmct.js
* docs: fix type imports
* docs: fix types for eventHelpers
* docs: types for TypeRegistry
* docs: types for StatusAPI
* docs: fix ObjectAPI types and docs
* docs: more types
* docs: improved types for main entry
* docs: improved types
* fix: unbreak the linting
* chore: remove EventEmitter webpack alias as it hide types
* fix: return type
* fix: parameter type
* fix: types for composables
* chore: add webpack consts to eslintrc
* fix: remove usage of deprecated timeAPI methods and add a ton of docs and types
* docs: update README.md
* lint: clean up API.md
* chore: upgrade eventemitter to v5.0.2
* refactor: update imports for EventEmitter to remove alias
* format: lint
* docs: update types for Views and ViewProviders
* docs: expose common types at the base import level
* docs(types): remove unnecessary tsconfig options
* docs: ActionAPI
* docs: AnnotationAPI
* docs: import common types from the same origin
* docs: FormsAPI & TelemetryAPI types
* docs: FormController, IndicatorAPI
* docs: MenuAPI, ActionsAPI
* docs: `@memberof` is not supported by `tsc` and JSDoc generation so remove it
* docs: RootRegistry and RootObjectProvider
* docs: Transaction + Overlay
* lint: words for the word god
* fix: review comments
* fix(#7791): tc form shouldn't submit bounds changes on dismiss
* test(e2e): add tests for validating time conductor popup
- update appAction for setting time conductor in fixed mode
- add a11y to time conductor in fixed mode
- update tests using `setTimeConductorBounds`
* fix(#7791): actually fix the problem. Also, add a test.
* test: add annotation to regression test
* docs: comments
* test: fix the reset image button flake ONCE AND FOR ALL
- wait for the rightmost image thumbnail to be in the viewport :D
* test: add tests for `setTimeConductorMode` and `setTimeConductorBounds`
* DRAFT - alignment for axes
* Use alignmentContext to manage tick widths instead of passing around as props
* Remove log statements
* Add ability to remove alignment widths for a given y axis
* Fix computation of left margin and width of plan when in the timestrip
* Remove excess padding when there is no left y axis
* Use alignment composable to adjust left margin and width of time system axis
* Fix now marker visibility
* refactor: use built in `Map()` data structure
* refactor: improve readability and conciseness
* docs: improve jsdocs
* refactor: move jsdoc typedefs to bottom of file
* refactor: axis to use vue reactivity
* fix: return alignment as an object of refs
* alignmentMap needs to be shared state, move it out of the useAlignment composable.
* Fix now marker offset
* Add new visual test for time strips
* update with animation stabilization
* Fix failing test due to changed injected property (path -> objectPath)
* change injected property from path to objectPath
* Fix spelling
* Remove unused arguments to function call
---------
Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
Co-authored-by: Hill, John (ARC-TI)[KBR Wyle Services, LLC] <john.c.hill@nasa.gov>
* For telemetry that cannot have it's own configuration, ensure that it is correct initialized by the parent.
* stacked plot test checks that config properties for immutable telemetry points are applied correctly
* add tab navigation to inspector tabs
* add accessibility metadata to this component
* Update title to be on the correct component. Add expand/collapse logic
* clean up test
* refactor: better a11y for plot forms, fix "expand by default" test, refactor out `plotActions.js`
* a11y: aria label for plotOptionsItem
* refactor(a11y): PlotOptionsBrowse structure to have better a11y
* fixed tests
* address comment
* reverted to match previous commit
---------
Co-authored-by: Hill, John (ARC-TI)[KBR Wyle Services, LLC] <john.c.hill@nasa.gov>
Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* update imagery to be static
* bump versions
* doesn't do anything
* does this do anything
* undo only
* update the hardcoded urls
* add ignore CI logs push
* downgrade to test
* update the package lock
* Add some more noise reduction
* move to elements tab so that there is no time-based component
* stability
* re-enable main test
* Enable tests and fix some failing ones
* revert accidental changes
* test(a11y): on failure, take a screenshot to disk
* test(visual): wait for the snapshot indicator to stop flashing
* Fix all failing tests
* test: disable a11y checks for planning suite
* lint:fix
* fix pathing issues
* build: increase visual-a11y parallelism from 2 to 4
* test: darkmatter theme a11y checks + snapshots-- ACTIVATE!
* test: fix file name and path
* fix(#7317): scott bell prophecy
* jk no credit for u
* chore: disable parallelism until we figure out what's going on
* chore: set parallelism to 2 in hopes it fixes percy
---------
Co-authored-by: Hill, John (ARC-TI)[KBR Wyle Services, LLC] <john.c.hill@nasa.gov>
Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
* Use setMode API to set the time span as well as the bounds instead of the old bounds time API.
* Add test for synchronized time conductor via plots
* Fix linting issue
* If we're paused, don't purge data out of bounds
* Refactor auto scale utility functions for reuse
* Create new test spec for plot controls
* Move plot related actions into it's own file
* Fix typo for imports
* Remove named exposedFunction as it is causing errors when the method is used on the same page more than once.
* Fix spelling
* clear any staleness subscriptions before viewing a new object
* add checkbox to options for createDomainObjectWithDefaults, update swg staleness provider to use new time api, add test
* revert
* modified for simplification and to remove the need to update helper methods
* consistent naming convention
* Update e2e/tests/functional/staleness.e2e.spec.js
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* adding back vars that were removed
---------
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* chore: upgrade eventemitter to v5.0.2
* fix: pass context to eventHelpers
* fix: no need to destroy router as it is destroyed during openmct teardown
* fix: register `CreateAction` and retrieve it from the registry
* test: fix tests
* refactor: import action key consts
* fix: update usage. don't use getters
Co-authored-by: David Tsay <3614296+davetsay@users.noreply.github.com>
---------
Co-authored-by: David Tsay <3614296+davetsay@users.noreply.github.com>
* run scroll method to scroll to top after initial load of historical data
* clarifying comment
* added e2e test to make sure tables auto scroll on mount
* adding descriptive comments
* adding in ascending check as well
* added new appAction for navigating to/in realtime, using it in table scroll test
* lint
---------
Co-authored-by: David Tsay <3614296+davetsay@users.noreply.github.com>
* this is 2024. `*` observers no more.
* add edit and save domain object helper functions
* add aria-labels and fix e2e tests to use new labels
* generate and save in local storage a condition set with telemetry and condition
* rename const
* move creation code out of generateLocalStorage since it is immutable
* remove function abstractions
* remove @localStorage test label
* Update e2e/tests/functional/plugins/conditionSet/conditionSet.e2e.spec.js
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* Update e2e/tests/functional/plugins/conditionSet/conditionSet.e2e.spec.js
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* Update e2e/tests/functional/plugins/conditionSet/conditionSet.e2e.spec.js
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* Update e2e/tests/functional/plugins/conditionSet/conditionSet.e2e.spec.js
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* remove unneccesary aria text
* remove unneccessary aria text
* use recommended playwright locators
* lint fix
* remove unneccesary steps now that child created directly in parent
---------
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* initial theme plugin setup, changes to layout frames
* update visual tests
* Changes to gauge, layout borders, and background
* Make background image a DIY theme variable. Fixes made to gauges. Deleted custom font.
* More changes to overall background colors. Added glass layer effect to menus
* changes to menu
* Fix to make theme easy to run
* Fix tab colors and add glass background to menus
* make highlightd corners longer
* Initial changes to font styles
* Add temporary numeric font style. Test numeric font in gauges.
* Initial changes to alphanumerics in layouts
* Updated variables
* update plugin.js file
* Fix highlighted corners on frames such that it uses outermost frame
* renaming theme plugin and rename branch
* fix button colors to be more readable
* change background image
* Fix bad merges from other theme files. Fix gauge and alphanumerics such that they dont have darkmatter borders
* more fixes
* Fix where mixin is used such that when an object's frame is hidden, highlgihts disappear
* remove blur from meter gauges
* Add comment about this theme being in beta mode
* Delete draft .scss file that is no longer needed
* Fix major accessibility issues
* Fix PR review comments
* ✨ fix: Correct import file name for DarkMatter theme.
* Fix other theme code that was failing e2e tests
* Revert index.html
* Fix linting error
* Fix for failing percy test regarding padding
* Fix for failing percy test regarding padding part 2
* Fix for failing percy test regarding padding part 3
* Remove mixin that may be causing percy issue
* Another fix to resolve percy issue
* Add back some code that was deleted during debugging, and create new variables for the object padding
* Fix gradient clipping in inspector
* Restructure all constants-.scss files
* Change bg image to be square and NASA official picture
* Final fixes to darkmatter variable layouts
* Address PR comments
* Change darkmatter to darkmatterTheme
---------
Co-authored-by: John Hill <john.c.hill@nasa.gov>
Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
* Closes#7635
- More specific approach to CSS class application for column vs. row layouts.
- Added layout direction CSS classing to `c-fl-container__frames-holder`.
- Switched toolbar icon and titling for better parity with
'toggle' approach used elsewhere.
- Cleaned up duped property def in mixin.
* Addressing PR change requests
- Updated e2e test.
- New computed properties for layout direction.
- CSS code cleanup.
* fix selector in test
* fix more bad selectors
* fix changed title
---------
Co-authored-by: David Tsay <david.e.tsay@nasa.gov>
* add progress bar
* improves performance a lot
* fix test
* remove old function
* fix legit bug from test - well done tests
* add constant, better comments
---------
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* chore: remove all usage of deprecated Time API methods
* test: update unit test
* docs: Fix spacing and add clarity to TimeConductorBounds definition.
* test: add unit test coverage for new time api methods
* enable eval source maps for debugging
* split image and text paste handling
better event handling
* change back source maps
* image takes precedence over text
* break up notebook entry functions for re-use
* create hotkeys utils
add clipboard functions
* add notebook paste test
* add test for pasting to selected but not editing entry
* link tests to issue
* jsdoc addition
* jsdocs
* no need to import then export
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* fix changed path
---------
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* Handle the case where the pasted data is not an image or it is image AND text
* Change method name for paste handling
---------
Co-authored-by: Andrew Henry <akhenry@gmail.com>
* source maps
* do not persist if obj is not persistable
* nope
* prevent mutation of configuration
* static roots are read only by nature
* helps to use functions correctly
* update persistModeChange logic
* remove debug
* remove unnecessary change
* fix: remove mystery webpack code
* fix: remove type:module and specify exports
- we aren't a module... yet
* fix: rename webpack*.js to webpack*.mjs so we can use import/export. fix imports
* fix: exports format
* fix: woops, need to add `start` script back
* chore: split e2e into its own module
* fix: use normal Painterro import
* fix: update e2e pathing
* fix: copy over helper functions
* chore: specify `cwd` for playwright configs so that openmct npm commands work as intended in any environment
* chore: add pretest script to e2e package.json
* chore: don't package e2e
* refactor: tidy up webpack common config
* chore: compile types to a single file
* chore: fix visual test npm scripts
* chore: fix import pathing
* chore: define package exports, move test specific dependencies to the subpackage
* chore: export test framework from openmct-e2e
* chore: export baseFixtures also
* chore: let `openmct` and `openmct-e2e` share `node_modules/`
* chore: use `--workspace`, remove pretest script
* Revert "fix: remove mystery webpack code"
This reverts commit eb14d52569ffa27ab1a090b883694f4707b59cd0.
* chore: update package-lock
* chore: add `.npmignore`
* fix: *js -> mjs
* fix: resize conductor properly
* refactor: more computed properties, unregister listener
* fix: beforeUnmounted hook
* test(visual): add time conductor visual test for fixed mode
* fix: initialize to `null`
* feat: extend the base `screenshot` function to mask elements which will always create variance in an Open MCT screenshot
* docs: add types for fixtures
* fix: remove unneeded await
* chore: add sinon timers types package back
* docs: remove unused docs
* doc: remove unused docs
* test: add visual realtime url, update imports
* feat: provide wrapped page.screenshot fixture that applies defaults
* test: add basic timeConductor snapshot tests
* chore: update eslint config
* lint: remove unused disable directives
* test: remove redundant navigation
* fix: remove listeners
* fix: maybe stabilize unit tests
* docs: remove
* fix: provide sourcemaps in unit tests
* test: add regression snapshot test for time conductor axis
* lint: remove unused imports
* feat(e2e): add fixture to manually tick the clock and use it
* test: reactivate test now that we don't use deploysentinel :(
* test: update snapshots
* test: add test for clockOptions and tick fixtures
* test: add afterEach stub and fixme
* test: try and stabilize fault management flake
* lint: defy the word gods
* chore: ignore `*-darwin.png` screenshots
* chore: remove darwin screenshot binaries
* docs: markdownlint
* docs: remove MacOS specific instructions from snapshot testing
* fix: remove a11y
* chore: update tsconfig to target modern ES
* docs: update UserProvider
* docs: update UserAPI, make openmct private
* docs: update StatusAPI
* refactor: convert ViewRegistry to ES6 class
* docs: finish type imports for openmct api
* docs: minor doc improvements
* docs: add UserIndicator readme
* docs: add User API section to API docs
* docs: document Mission Status
* docs(JSDoc): primitive types should be lowercase, otherwise TitleCase
* request telemetry when subscribing to data in case we have cached subscription
* change back to >=
* revert
* update tests
* fixing tests
* add metadata
* fix test
* another mock required
* one more function needed
* attempt to fix some afterall errors
* add fixme for e2e test
* fail fast on request
---------
Co-authored-by: Andrew Henry <akhenry@gmail.com>
* source maps
* any tables without configuration will default to either default options or configured options
* prevent double unsubscribese
* remove source maps
* update coment
* moving defaults to plugin level
* whoops
* missed a spot, updated omment
* adding config values
* lint
* typos
* fixing broken ref
* fixing broken ref
* actually fixing ref
* setting rowLimit so initial change does not trigger a resubscribe of telemetry that was not subscribed yet
* include package lock
* migrate to npm ci
* remove cache busting doc and replace with npm run clean
---------
Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
Co-authored-by: Andrew Henry <akhenry@gmail.com>
https://github.com/nasa/openmct/pull/7565 Modified Stacked Plots to not show Missing Objects. Added a check in Telemetry Collections for missing objects before displaying telemetry metadata time system error.
* fix: painterro import
* test(snapshotAnnotation): add minimal e2e test
* chore: add e2e test annotation
* fix: notebook snapshot test
* refactor: put `v-else` on template
* small changes to the test and a visual one
* additional a11y
* fix: html structure
* test(e2e): fix notebook snapshot tests
* Update documentation for file download and JSON testing
* Update stubs and add jpg/png export
* refactor(TimelistComponent): tidy up
---------
Co-authored-by: John Hill <john.c.hill@nasa.gov>
* allow content to scroll vertically
* add framework for inspector content scrollable e2e test
* fix paths and spelling error
* add aria-label to properties list
* add scroll check to test
* use click, which scrolls if needed
* use scrollbar to scroll
* Closes#7566
- Fixed scrolling to only apply to the area below the Inspector tabs.
- Removed unneeded padding in pane.scss.
- Alignment fixes to related scroll elements in tree.
* cspell: ignore this file because it doesn't understand latin
* fix selectors and test
* lint fix
* driveby: wait for thumbnail bar to finish scrolling before taking snapshot
---------
Co-authored-by: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
* refactor: url tools use named exports
* fix: refactor method and remove customUrlParams
* test(e2e): verify bounds are preserved in data pivoting
* test: remove test as feature is no longer needed
- dataVisualization logic has moved from MMGIS plugin to the open source. As such, we can just use the time conductor bounds
* refactor: autoformat keeps changing this so i'mma just commit it
* refactor: remove unnecessary code
* refactor: simplify, add docs
* Revert "refactor: remove unnecessary code"
This reverts commit 87aef35c510230835fb682b80e89a6006ef2d923.
* a11y: improve aria labels for ITC
* fix: simplify url method
* fix: update ITC app actions
* test: add test to generate test data for display layout w/ overlay plot + ITC enabled
* test(e2e): add suite + test for open in new tab from subobject
- needs cleanup
* a11y: various a11y improvement drivebys
* a11y: clock indicator needs to be quiet
* a11y: add `aria-live` to SuperMenu details
* a11y: greatly improve a11y of Menus and SuperMenus
* test(e2e): clean up test
* fix: improve a11y for context menus, fix test
* chore: remove nop-longer-recommended extension
* feat: provide one more bound option for example data viz
* fix: no need for `mount`, use dynamic rendering instead
* Revert "fix: simplify url method"
This reverts commit b24c7dabc783a9a1c3f2460eada99f452259f566.
* fix: correct time conductor bounds when opening in a new tab from a plot in the inspector
* test: fix e2e tests
* Revert "test: remove test as feature is no longer needed"
This reverts commit 759ebd4667bffb1979d5f62af6b47f349dcd9f77.
* test: move 2p annotation to test
* test: fix e2e
* fix: no words for the word god today
* test: fix e2e
* fix: e2e test
* test: fix test
* driveby: fix perf test
* fix: revert required prop change
---------
Co-authored-by: David Tsay <3614296+davetsay@users.noreply.github.com>
Co-authored-by: John Hill <john.c.hill@nasa.gov>
* Initial changes to refactor Time Conductor
* Finish refactor using grid-template
* Finish total refactor of Time Conductor
* Initial mobile changes
* Fix TC on mobile by changing grid template
* Fix more mobile stuff
* Add ellipsize to TC popup options and rearrange popup inputs and labels
* Small final changes so TC is adaptive to extreme cases
* Add e2e mobile test
---------
Co-authored-by: John Hill <john.c.hill@nasa.gov>
* refactor: merge FaultManagementListView into FaultManagementView
* refactor: make `selectedFaults` a computed property
* refactor: use named exports
* fix: reset fault map AFTER selectedFaults have been acknowledged
* a11y: add aria labels for fault management toolbar buttons
* refactor: use named import/exports
* a11y: add label
* a11y: add aria label for checkboxes
* fix: acknowledging or shelving single fault from context menu should only apply to selected fault
* refactor: use change event instead of input event for checkbox
* test: fix e2e tests, remove expect.softs
* test: stabilize fault management e2e tests
* d3 implementation of progress pie chart
* Handle 0% and 100% cases
* PR #7485
- Minor tweaks to `s-selected` styling.
* add in-progress class for compact view
* Fix issue where updating progress for pie chart wasn't working till at least one clock tick.
Write tests for progress pie
* update documentation for clock annotation
* Update clock annotation in tests
* split long testfile
* driveby missing test
* driveby fix flake
* temp: fix flake and prep for visual test
* Fix linting errors
* this should be resolved
* these keep popping up
* moving some of this around
* moving this around
* the test
* Fix imports for tests
* no longer need constant
* move to front
* Stabalize name
* test(missionStatus): fix visual test
---------
Co-authored-by: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
Co-authored-by: John Hill <john.c.hill@nasa.gov>
Co-authored-by: Andrew Henry <akhenry@gmail.com>
Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
* Fix error when removing staleness subscription due to incorrect parameter
* On resize, clear the drawing API to reset the height and width for point calculation.
* Add e2e test to test limit lines after resizing the plot view.
* We need to update viewport when drawing limits in case there is no data for plots.
* Address review comments. change event naming convention and reduce debounce time.
* Use limit line and label seriesKeys to make ids unique
* Improve locator for limit lines checkbox
* Add a check for network requests when limit lines are redrawn
* Make overlay messages centered
* Fix changes so that only dialogs and not forms are affected
* Fix buttons such that they are right-aligned
* Reduce to one worker for stability
* Add test to cover new capabilities
* lint fixes
* Closes#7343
- Fixed an oversight that caused the top of form dialogs to
be scrolled out of view by default.
- Fixed approach to vertical centering for `-fit` type confirmation dialogs.
- Reduced size of confirmation dialog icons.
- Smoke tested in Chrome mobile emulator in a large variety of mobile
viewport sizes and orientations.
* Closes#7343
- Removes extra margin unintentionally added to `l-overlay-large`.
---------
Co-authored-by: John Hill <john.c.hill@nasa.gov>
Co-authored-by: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
* Add the disabled class instead of the disabled property
* Add test for condition set test data
* Use computed property for css class
* Use array syntax for class instead of computed value
* Fix .getByTitle locators to use .getByLabel instead
---------
Co-authored-by: Scott Bell <scott@traclabs.com>
Co-authored-by: John Hill <john.c.hill@nasa.gov>
* fix(#7456): check if object is an identifier
* refactor: use v-show, remove unnecessary deep copy, set yAxes array to empty in a way that preserves reactivity
* refactor: use ESM exports
* refactor: use ESM imports
* test(e2e): add test for element item removal from overlay plot
* a11y: add accessible name for object labels
* refactor: move overlayPlot creation to beforeAll, use getByLabel
* Add status area back to mobile
* Make search results responsive to width
* Make clear search button always visible, regardless of hover
* Make clear search button visible, and fix weird margin in top left corner
* Fix input width, add logic to make close button work properly, fix margin on results so there is room for close button, fix various landscape mode issues
* update mobile testing
* Fix dropdown sizes, remove shadows and corners to make it look less like a popup and more full screen
* Add animation and persist search bar in mobile
* Fix linting issues
* Fix padding in Desktop
* fix padding in status area
* fix bad merge
* lint fixes
* fix bad merge... again
* again
* fixes to mobile
* update tests
* lint fix
* test fixes
---------
Co-authored-by: John Hill <john.c.hill@nasa.gov>
* chore: upgrade prettier and eslint libraries to latest
- upgrade prettier
- upgrade eslint
- upgrade eslint-plugin-prettier
- upgrade eslint-config-prettier
* chore: run lint:fix
* chore: add `prettier-eslint` devDependency
- The `prettier-eslint` vscode plugin sinc v6.0.0 no longer provides this package so we must install it as a devDependency so that autoformat works.
* chore: add recommended extensions file for vscode users
* Update extensions.json
* Revert "Update extensions.json"
This reverts commit 942f341a75.
---------
Co-authored-by: John Hill <john.c.hill@nasa.gov>
* feat: enable mission status in example user
* test: add initial missionStatus suite
* test(WIP): mission status e2e suite
* test(e2e): add e2e and visual tests for mission status + a11y
* test(a11y): scan for a11y violations
* a11y: remove labels for non-interactive elements
* fix large view in tree
* remove existing view concept
* fix plots in overlays
* remove debug and actually remove overlays when dismissed
* add test
* improve tests
* move test
* Push the value of a property to the activity as a string if it is not undefined.
* Add documentation for sourceMap filterMetadata
* Allow . for filtering. Check for null values
* refactor: `UserIndicator` use vue component directly
* style(WIP): filler styles for user-indicator
* feat(WIP): working on mission status indicators
* feat: support mission statuses
* feat(WIP): can display mission statuses now
* feat(WIP): add composables and dynamically calculate popup position
* feat(WIP): dismissible popup, use moar compositionAPI
* Closes#7420
- Styling and markup for mission status control panel.
- Tweaks and additions to some common style elements.
* feat: set/unset mission status for role
* refactor: rename some functions
* feat: more renaming, get mission role statuses working
* refactor: more method renaming
* fix: remove dupe method
* feat: hook up event listeners
* refactor: convert to CompositionAPI and listen to events
* fix: add that back in, woops
* test: fix some existing tests
* lint: words for the word god
* refactor: rename
* fix: setting mission statuses
* style: fix go styling
* style: add mission status button
* refactor: rename `MissionRole` -> `MissionAction`
* test: fix most existing tests
* test: remove integration tests already covered by e2e
- These tests are going to be wonky since they depend on the View. Any unit tests depending on Vue / the View will become increasingly volatile over time as we migrate more of the app into the main Vue app. Since these LOC are already covered by e2e, I'm going to remove them. We will need to move towards a more component / Vue-friendly testing framework to stabilize all of this.
* docs: add documentation
* refactor: rename
* fix: a comma
* refactor: a word
* fix: emit parameter format
* fix: correct emit for `missionStatusActionChange`
---------
Co-authored-by: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Co-authored-by: John Hill <john.c.hill@nasa.gov>
* Add activity states domain object and interceptor to auto create one
* Add activity state inspector option
* Only save status if we have a unique ids for activities
* Include the id in the activity properties
* Don't show activity state section in the inspector if multiple activities are selected
* Display activity properties when an activity row is selected in the timelist
* Add compact view for timelist
* Add inspector configuration for compact view
* Set colors based on time relation of activity
* Use activity id as key if it is available
* Ensure the correct option is selected for activity states
* Closes#7377
- Markup and CSS sanding and polishing.
- Still WIP!
* Closes#7377
- Markup and CSS sanding and polishing.
- Still WIP!
* Add status label
* Rename to Expanded view and isExpanded as properties. Add display style dropdown configuration in the inspector.
* Refactor activity selection. Display activity properties
* Closes#7377
- Label formatting Todo notes about states.
- Computed values and `v-ifs` added to control display for progress pie and countdown 'hero'.
- Still WIP!
* Closes#7377
- Add svg icons and some stubbed in logic.
- Still WIP!
* Remove activity states plugin. Move the activity states interceptor to the plan plugin.
* Change activity states interceptor parameters to options
* Rename constants
* Fix activity states test
* Addresses review comments making code more readable.
* Closes#7377
- Significant adds for large Time List element styling for activity states.
- `$color*` Time List-related theme constants remapped and significantly enhanced.
- Code cleanup and removal of stubbed-in SCSS vars.
* Closes#7377
- Unit testing and colors in Snow in progress.
- Fixed erroneous checkin in ExpandedViewItem.vue.
* Remove ExpandedView component and pull the ExpandedViewItem up to the top level.
Same for ListView, pulling the ListItem up one level.
* Fix sorting for compact view.
Hardcode options for switching compact/expanded views.
* Closes#7377
- Snow Time List colors finalized and smoke tested.
- New graphic SVG for skipped activity.
- Added aria labels to SVG graphics.
* Closes#7377
- Fixed div with no class.
* Add e2e test for activity states feature.
* Address review comments. Rename variables, documentation.
* No shallow copy
* Merge updates to activity-state
* Sync with activity states PR
* Draft of progress-pie
* - Add `s-selected` styling for Expanded Time List elements.
* Add 2 new date formats
* Look and feel enhancements for pie, zero duration events and start and end time formats
* Fix pie show/hide condition
* Final touches to the pie and labels
* Refactor label logic
* Closes#7377
- Added `sweep-hand` animation element to progress pie graphic SVG.
* Remove use of ListView - no point passing arrays around since we are already using sortedItems and itemProperties for expandedViewItems
* We addded a new column for duration and changed the previous duration to countdown. This required adjustment of the test
* Fix expanded view for timelist tests
* Closes#7377
- Fixed display logic for inferred execution states.
* Closes#7377
- Fixed a bug that threw console errors when a value was undefined.
* Optimize rendering of timelist activities
* Remove focused test
* Address review comments
* Remove reactive selection for plan activities
* destructure props into individual item properties for render performance benefits
* Use local variables and remove JSON utility methods
* Change cancelled to skipped
* Focus the activity tab when shown
* Fix label updates
* Add countup to cspell
* Remove progress pie due to licensing unknowns
---------
Co-authored-by: Charles Hacskaylo <charlesh88@gmail.com>
Co-authored-by: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
* flakefinder gha
* Update e2e-flakefinder.yml
* driveby
* skip visual
* first attempt at sharding with circle
* Updated config.yml
* fixes
* missing quote
* re-enable old jobs and update to 7x
* max failures
* destructure the npm script
* missing quote
* revert
* uncomment and re-add 7 parallel
* add unit tests
* add p flag
* skip the flaky test
* Closes#7304
- Change colors to increase contrast.
- New base level theme color var: `$colorBodyFgSubtle`.
- Minor CSS cleanups.
- WARNING: this appears to have added a regression in selects
that colors the arrow black in Espresso.
* Closes#7304
- Fix dropdown arrow colors, whew.
- Normalize font sizes in Status area.
- More color changes for contrast, including new theme constants.
- TODO: compare and sync Espresso with other themes.
- TODO: check for regressions!
* disable ruleset
* Closes#7304
- Normalize font sizes in multiple spots.
- More color changes for contrast, including more new theme constants.
- TODO: compare and sync Espresso with other themes.
- TODO: check for regressions!
* Closes#7304
- Reorganize CSS files for more uniformity.
* Closes#7304
- CSS normalized across all themes via Google Sheet at https://docs.google.com/spreadsheets/d/1SEEtuNSq6I7gvVHKpHW8_fp8Ltc-HOAWxrSAkUzS6Kw/edit?usp=sharing
* Closes#7304
- Color tweaks, normalization.
* Closes#7304
- Color tweaks, normalization.
- Search layout, contrast and font-size improvements.
- Added '+' icons to collapsed pane buttons.
* Closes#7304
- Shell head layout improvements.
* Update ColorKey for Take Snapshot Failures and Opacity labels. Also fix create menu
* Closes#7410
- CHERRY PICK FROM event-colors-7410.
- Event display approach modified to include background color.
- Theme colors modified and constrast verified via Wave a11y browser plugin.
* Closes#7304
- Set back to install Espresso theme by default.
* temporarily skip
* remove comment
* lint
* Update default colors
* update snapshot
* missed
---------
Co-authored-by: John Hill <john.c.hill@nasa.gov>
Co-authored-by: Shefali Joshi <simplyrender@gmail.com>
* attempt to fix
* reenable test
* going to revert most of this, but works
* slowly reverting changes
* further reversions to the mean
* reversion to the mean
* revert
* change to use openmct element
* reference issue
* reference issue
---------
Co-authored-by: John Hill <john.c.hill@nasa.gov>
* Support subscription batching from API, Tables, and Plots
* Added batching worker
* Added configurable batch size and throttling rate
* Support batch size based throttling
* Default to latest strategy
* Don't hide original error
* Added copyright statement
* Renamed BatchingWebSocketProvider to BatchingWebSocket
* Adding docs
* renamed class. changed throttling strategy to be driven by the main thread
* Renamed classes
* Added more documentation
* Fixed broken tests
* Addressed review comments
* Clean up and reconnect on websocket close
* Better management of subscription strategies
* Add tests to catch edge cases where two subscribers request different strategies
* Ensure callbacks are invoked with telemetry in the requested format
* Remove console out. Oops
* Fix linting errors
* convert tabs plugin to use es6 import/export
* default of eager load is false but configurable
* change true/false select to toggleSwitch
* add and clean up unit tests
* Update test
---------
Co-authored-by: John Hill <john.c.hill@nasa.gov>
* Add activity states domain object and interceptor to auto create one
* Add activity state inspector option
* Only save status if we have a unique ids for activities
* Include the id in the activity properties
* Don't show activity state section in the inspector if multiple activities are selected
* Display activity properties when an activity row is selected in the timelist
* Use activity id as key if it is available
* Ensure the correct option is selected for activity states
* Add status label
* Refactor activity selection. Display activity properties
* Remove activity states plugin. Move the activity states interceptor to the plan plugin.
* Change activity states interceptor parameters to options
* Rename constants
* Fix activity states test
* Add e2e test for activity states feature.
* Address review comments. Rename variables, documentation.
* No shallow copy
* Suppress lint warning for conditionals
* Remove check for abort controller
* Move classes to components
* number primitive
* Closes#7369
- WIP tweaks to simplify the Inspector view.
* Ensure 'notStarted' is the default state for activities
* Remove extra quotes
* Closes#7369
- Mod to `s-selected` styling to allow selection visiblity on Time List rows.
* Use generated key for vue
* Fix e2e tests
* Fix timelist test
---------
Co-authored-by: Charles Hacskaylo <charlesh88@gmail.com>
Co-authored-by: John Hill <john.c.hill@nasa.gov>
* Add filtering by metadata. Add new sourceMap property to get a list of properties for metadata filtering.
* Change filter label names
* Add aria-labels
* Closes#7389
- Added a "No filters applied" message for both input areas.
- Added additional detail about how it works in the hint text visible while editing.
* Restore valid state if there is an error
* Fix linting error
* Tests for filtering by metadata
---------
Co-authored-by: Charles Hacskaylo <charlesh88@gmail.com>
* Closes#7322
- New CSS for `aria-disabled = true` property.
- Changed multiple items to use aria-disabled instead of .disabled, including:
- Action menu
- Super menu
- Notebook drag area
- Tree item style modded to only italicize when is-navigated and is being edited.
* Closes#7322
- New CSS for `aria-disabled = true` property.
- Changed multiple items to use aria-disabled instead of .disabled, including:
- Action menu
- Super menu
- Notebook drag area
- Tree item style modded to only italicize when is-navigated and is being edited.
- Create button sets itself to `disabled` when the editor is in use.
* Closes#7322
- Create button now _actually_ sets itself to `aria-disabled` when the editor is in use.
- CSS removes selector for `.is-editing`.
* fix conflict
---------
Co-authored-by: John Hill <john.c.hill@nasa.gov>
* dereactifying the row before passing it to the commponent
* debouncin
* i mean... throttle
* initial
* UI functionality, switching between modes, prevention of export in performance mode, respect size option in swgs
* added limit maintenance in table row collectins, autoscroll respecting sort order
* updating the logic to work correctly :)
* added handling for overflow rows, this way if an object is removed, we can go back to the most recent rows for all remaining items and repopulate the table if necessary
* removing debug row numbers
* Closes#7268
- Layout and style sanding and polishing.
- Added title to button.
- More direct button labeling.
* Closes#7268
Partially closes#7147
- Removed footer hover behavior: table footer now always visible.
- Tweaks to style, margin etc. to make footer more compact.
* moved row limiting out of table row collections and into telemetry collections, table row collections will only limit what they return in getRows, handling sorting when in different modes
* have swgs return enough data to fill the requested bounds
* support minmax in swgs
* using undefined for more clarity
* clearing up boolean typo
* Address lint fixes
* removing autoscroll for descending, it is not necessary
* update snapshots
* lint
---------
Co-authored-by: Charles Hacskaylo <charlesh88@gmail.com>
Co-authored-by: John Hill <john.c.hill@nasa.gov>
* Get actions collection on Preview Container update
* Added fixme and link to initial ticket
* Stubbed out preview mode e2e test
* Lint fix
---------
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* add reload action plugin
* checking for domain object before reloading
* check if objects are equal before refreshing
* add test
* lint
* change to label
* ensure object styles are initialized
* resubscribe to staleness too
* add better labels for tabels
* ensure tab uses exact for label now due to table aria changes
* fix table tests
* make tabs exact
* update conflicts
---------
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* feat(IndicatorAPI): accept Vue components
- Adds a new property to Indicators, `component`, which is a synchronous or asynchronous Vue component.
- Adds `wrapHtmlElement` utility function to create anonymous Vue components out of `HTMLElement`s (for backwards compatibility)
- Refactors StatusIndicators.vue to use dynamic components, allowing us to dynamically render indicators (and keep it all within Vue's ecosystem).
* refactor(indicators): use dynamic Vue components instead of `mount()`
- Refactors some indicators to use Vue components directly as async components
* refactor: use Vue reactivity for timestamps in clock indicator
* fix(test): fix unit tests and remove some console logs
* test(e2e): stabilize ladSet e2e test
* test: mix in some Vue indicators in indicatorSpec
* refactor: cleanup variable names
* docs: update IndicatorAPI docs
* fix(e2e): wait for async status bar components to load before snapshot
* a11y(e2e): add aria-labels and wait for status bar to load
* test(e2e): add exact: true
* fix: initializing indicators
* fix(typo): uhhh.. how did that get there? O_o
* fix: use synchronous components for default indicators
* test: clean up, remove unnecessary `nextTick()`s
* test: remove more `nextTick()`s
* refactor: lint:fix
* fix: `on` -> `off`
* test(e2e): stabilize tabs test
* test(e2e): attempt to stabilize limit lines tests with `toHaveCount()` assertion
* Provide renderWhenVisible for LadTables
* fix open in new tab
* add test for open in new tab
* fix test to include renderWhenVisible
* refactor test
* fix tests
* fix tests
* having timing issues now
* if role is removed from user, reprompt
* add some basic user login tests
* add more robust user tests
* add more robust user tests
* resolve PR comments
* setup event listener earlier
* Add double click event to expand image view
* Add performance tests for large view and close
button
* Add example imagery in flexible layout to test double-click functionality
* Remove click event listener in ImageryView.vue
* Move test to 'Example Imagery in Flexible layout'
* Refactor exampleImagery.e2e.spec.js
* Remove unnecessary code for opening and closing
large view in imagery.contract.per.spec.js
* Replace pageSelector with getByRole on double-click image test
* Add role and aria-label to focused image
* Remove unnecessary code and role attribute from ImageryView.vue
---------
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* Change the centering algorithm for timelist
Make duration formatting better
* test: add time list countdown and countup test
* test: respond to comments
* chore: lint fix
* fix: lint errors and visual suite failures
* Change parameters to options object
* Fix regression with auto scroll. Improve code readability
* Add defaults for getPreciseDuration options object
* Defaults for options
* Add missing await
---------
Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
* refactor to es6 class
* change URL on path or params change
* add test for url
* put into edit mode for test
* es6 module export
* a11y: add `status` role to clock component
* a11y: add label to overlay
* a11y: update roles for search results
* a11y: add `dialog` role and label for PreviewContainer
* refactor(e2e): get rid of a bunch of `page.locator()`s
* refactor(e2e): spruce up locators
* test: fix unit tests
* fix tests with new aria labels
* fix tests with new aria labels
* fix tests with new aria labels
---------
Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
* refactor: move package.json to type: module
this is where the fun begins
* chore: move webpack common and prod to esm
* chore: move webpack to esm, eslint to explicit cjs
* refactor: migrate all files to esm
* style: lint
* refactor: begin moving karma to cjs, use dynamic esm import
* refactor: move index-test to cjs
* refactor: begin moving e2e to ESM
this was manual. I'm committing this because I'm about to try the `cjstoesm` tool
* refactor: move all to esm
* fix: make all e2e tests use .js imports
* refactor: begin moving exports to esm
* refactor: use URL transforms instead of __dirname
* fix: use libraryExport: default to properly handle openmct
* fix: export all playwright configs as modules
* refactor: move all instances of __dirname to import.meta.url
* refactor: lint, drop unnecessary URL call
* fix: use correct URL path on helper/addNoneditableObject.js
* fix: more incorrect URL resolve issues
* fix: parse json after reading it
* refactor: fix issues arose from #7029
* refactor: move replaceAll -> replace in makeKeyString
* fix: move order of escape to backslash first
* style: lint
* chore: use ESModule imports for d3 libraries
* chore: add d3 types
* chore: use minified plotly
* chore: use ESModule style imports for printj
* chore: use `terser-webpack-plugin` to minimize
* Revert "chore: use minified plotly"
This reverts commit 0ae9b39d41b6e38f0fe38cd89a2cd73869f31c36.
* Revert "Revert "chore: use minified plotly""
This reverts commit 08973a2d2e6675206907f678d447717ac6526613.
* fix: use default minification options
* test: stabilize notebook image drop e2e test
* test(fix): remove .only()
* refactor: convert TelemetryValueFormatter to es6 class
---------
Co-authored-by: Scott Bell <scott@traclabs.com>
* Add a VISUAL_URL constant and remove all vestiges of hide inspector and tree
* hide timer and add concurrency
* turn off concurrency
* factor out old appAction
* Add expand button to panes
* remove old slow annotations
* fix fault
* update domcontentloaded
* missed refactor
* driveby: setTimeBounds private
* add comments to the percyCSS
* suggest MISSION_TIME
* more notes
* regen
* clean up test
* driveby: clean up order
* restructure
* add new suite now that i'ts hidden
* use mission time everywhere possible
* driveby
* rerun generatedata
* comments
* lint fix
* add inital pass of a11y tests
* first pass for fixing a11y problems
* update build
* add copyright
* check for slashes
* rename files
* update testcases
* update to latest
* updates
* section 508
* final version
* remove leftover
* comments
* documentation
* bad merge
* comment
* use current ruleset
* typo
* feedback
* remove time conductor due to false positives
* default to closed tabs
* add some more accessiblity checking
* change to a condition widget and update search
* lint fix
* turns this into a single function
* update doc to match single function
* update to single function
* update to new function
* lint
* update locator for search input
* fix extra page
* why
* comments
* comments
* refacotr
* wrong paths and fixes
* inspector view needs renderWhenVisible function
* add a default visualization source
* add plugin to exercise data pivotting
* use correct key string
* test skeleton
* add e2e test
---------
Co-authored-by: David Tsay <david.e.tsay@nasa.gov>
Co-authored-by: David Tsay <3614296+davetsay@users.noreply.github.com>
* add new objects for navigation testing
* add test for remaining objects
* cleanup plotly on dismount
* lint
* remove vestigial object
* do not need to call destroy here
* do not need to call destroy here
* refactor: ensure path to test file always resolves
* refactor: better locators
---------
Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
Closes#7105
- Removed `:not(:focus)` CSS check for hover.
- New theme constant for a more subdued hover effect to differentiate
from active editing mode.
Co-authored-by: Scott Bell <scott@traclabs.com>
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* Use specified group order for plans
* Allow groupIds to be a function
* Fix typo in if statement
* Check that activities are present for a given group
* Change refresh to emit the new model
* Update domainobject on change
* Revert changes for domainObject
* Revert groupIds as functions. Check if groups are objects with names instead.
* Add e2e test for plan swim lane order
* Address review comments - improve if statement
* Move function to right util helper
* Fix path for imported code
* Remove focused test
* Change the name of the ordered group configuration
* fix opacity issue
* wip, though selection still weird
* remove debugging
* plots still have issue with last tag
* add some better tests
* Apply suggestions from code review
Co-authored-by: David Tsay <3614296+davetsay@users.noreply.github.com>
* remove hardlined classnames
* case sensitivity
* good job tests finding issue
---------
Co-authored-by: David Tsay <3614296+davetsay@users.noreply.github.com>
Co-authored-by: John Hill <john.c.hill@nasa.gov>
* wrote an e2e test for can create a notebook object
* made suggested changes to notebook.e2e.spec.js
* made suggested changes to notebook.e2e.spec.js
* made changes to newly created notebook
---------
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* first draft
* add some more debugging
* add test and remove debug
* Remove debug function
* consolidate destroy
* add better canvas name and handle if gl has gone missing
* extra check for extension
* fix: use the correct event name for frame deletion
* test: add test for frame removal
* refactor: update test locators, add a11y
* test: upgrade locator
* test: assert dialog text
* Closes#5536, #5538
- Significant changes to code flow for better handling of missing telemetry values; closes#5538.
- Changes to flow to handle range display when updating composition and when ranges are set by limits.
- Added `GaugeCompositionPolicy.js`; closes#5536.
* Closes#5536, #5538
- Code cleanup, linting.
* Closes#5538
- Linting fixes.
* Closes#5538
- Added test for 'Gauge does not display NaN when data not available'.
* Closes#5538
- Refined test.
* Closes#5538
- Refined 'NaN' test.
- Added test for 'Gauge enforces composition policy';
* Closes#5538
- Fix linting issues.
* Closes#5538
- Suggested changes from PR review.
* Closes#5538
- Suggested changes from PR review.
* Update e2e/tests/functional/plugins/gauge/gauge.e2e.spec.js
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* chore: lint:fix
---------
Co-authored-by: Andrew Henry <akhenry@gmail.com>
Co-authored-by: David Tsay <3614296+davetsay@users.noreply.github.com>
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
* only show marquee for selected item
* Revert "only show marquee for selected item"
This reverts commit d17af210c2.
* revert change made in #6767
* create framework for displayLayout visual test
* WIP create display layout for test
* only show marquee for selected
* fix selection of object in nested layout
* fix grid and code cleanup
* add child layouts side by side
* code cleanup
* externalize setup for reuse in multiple tests
* write marquee and grid tests
* fix object in layout locator
* fix nested layout selector
* add aria label to layouts
* fix layout locator
* add jsdoc for test setup function
* make test more efficient
* cleanup and linting
* update locator
* update locators
---------
Co-authored-by: John Hill <john.c.hill@nasa.gov>
* simple prototype
* add a few examples
* revert to original
* only check first element
* only print when we're firing
* need to return status
* ignore polling logic if not visible
* convert to es6 classes
* add private variables
* remove debug code
* revert on this branch webgl changes
* fix draw loader import
* do not use v-model for search component
* remove flakey unit tests and add e2e tests for same behavior
* remove fdescribe
* add test word
* add simple functional test for tabs
* add performance test for tabs
* make tab selection more explict
* better describe expects
* lint
* switch back to fixed time
* fix perf test for webpacked version
* lint
* relax condition
* relax condition
* resolve PR comments
* address PR review comments
* typo on role vs locator
* limits shown
* use more verbose way for uniqueness
* when adding items, check for what columns we need
* make header logic much simpler
* add test coverage
* fix test and lint
* Update e2e/tests/functional/plugins/lad/lad.e2e.spec.js
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* Update e2e/tests/functional/plugins/lad/lad.e2e.spec.js
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* change to getByTitle
* lint and change to getByLabel
---------
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* refactor: convert to ES6 function
* fix: include `keyString` in event name
- This negates the need for complicated logic in determining which objectView the action was intended for
* fix: handle the case of currentView being null
* fix: add keyString to flexibleLayout toolbar events
* fix: properly unregister listeners
* fix: remove unused imports
* fix: revert parameter reorder
* refactor: replace usage of `arguments` with `...args`
* fix: add a11y to display layout + toolbar
* test: add first cut of layout toolbar suite
* test: cleanup a bit and add Image test
* test: add stubs
* fix: remove unused variable
* refactor(DisplayLayoutToolbar): convert to ES6 class
* test: generate localStorage data for display layout tests
* fix: clarify "Add" button label
* test: cleanup and don't parameterize tests
* test: fix path for recycled_local_storage.json
* fix: path to local storage file
* docs: add documentation for
utilizing localStorage in e2e
* fix: path to recycled_local_storage.json
* docs: add note hyperlink
* Apply sort settings immediately - even when in edit mode.
* Adds test for sort order
* Enable independent time conductor for time list view
* Remove time frame duration options.
* Remove immediate sorting in edit mode.
* Closes#7113
- Color of current events changed to bring more in-line with color conventions.
- Changed Time List rgba colors to solids.
- Removed bolding on current events text.
* Fix tests to include new changes
---------
Co-authored-by: Charles Hacskaylo <charlesh88@gmail.com>
* WIP
* guaranteeing float32breaking values for swgs when option is set
* cleaning up and clarity
* more clarity
* removing randomization of float breaking number, as it is not necessary
* logging the values that could not be plotted for awareness
* remving auto-added imports
---------
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* chore: remove custom `compatConfig` settings
* chore: remove `vue-compat` and adjust webpack config
* chore: explicitly define Vue feature flags
* fix: `_data` property moved to `_.data`
* fix(e2e): revert to original test procedures
* refactor: replace final instances of `$set`
* refactor: remove `Vue` imports from tests
* refactor: `Vue.ref()` -> `ref()`
* refactor: actually push the changes...
* test: replace unit test with e2e test
* test: remove test as it's already covered by e2e
* fix(test): use `$ref`s instead of `$children`
* test(fix): more `$refs`
* fix(test): more `$refs`
* fix(test): use `$refs` in InspectorStyles tests
* fix(SearchComponent): use `$attrs` correctly
---------
Co-authored-by: Scott Bell <scott@traclabs.com>
* handle unknown files and deal with copy/paste
* add some nice errors if couch pukes
* added how to adjust couchdb limits
* throw error on anntotation change
* keep blockquotes
* add test for blockquotes
* allow multi-file drop of images too
* add test for big files
* spell check
* check for null
* need to ignore console errors
* reorder tests so we can ignore console errors
* when creating new entry, ready it for editing
* fix tests and empty embeds
* fix tests
* found similar issue from notebooks in plots
* Update staleness mixin
* Fix listeners and add guard
* Add check to make sure staleness only shows for correct clock
* Add guard for time api
* Cleanup the setting of isStale in ObjectView
* Cleanup use of combinedKey on LadTableSet
* Revert Date.now() purge change
Check that the request is using realtime before using the remote-clock start and end timestamps for telemetry requests
* docs: clarify comment
---------
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
Listen to ALL changes for a plan since couchdb feed updates does not trigger a property only event. It triggers a catchall '*' event.
Co-authored-by: Scott Bell <scott@traclabs.com>
* try marked out
* fix url validation
* now rendering blockquotes properly
* add abbrv, link titles, and strikethrough
* fix tests and lint
* Closes#6060
- CSS resets and styling for markdown-related HTML markup in Notebook entries.
- Better styling and cursor affordances for Notebook entry selection and editing interaction flow.
* add line breaks option
* Closes#6060
- Tab
* Closes#6060
- Conversion of contenteditable-div to textarea started.
- Stubbed in textarea with styles.
* have it markdown with a textarea and adjust size automatically
* Closes#6060
- Padding added back to text `div` area.
* Closes#6060
- Styles added to support Shift Log and hover behavior for entries on locked pages.
- Removed `--major` styling from Shift Log Commit Entries button
to reduce confusion with entry commit button.
- CSS code cleanups.
* two step focus/edit. also scroll into view for editing
* add markdown, strip all tags, and truncate
* lint
* remove unneeded code
* fix notebook entry, selected page may also be null
* fix existing notebook tests
* lint
* fix whitelist
* readd whitelist
* lint
* fix link tests
* fix tests
* fix tagging test
* add some markdown test
* get rid of pause
* add another sanitization step
---------
Co-authored-by: Charles Hacskaylo <charlesh88@gmail.com>
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* add script
* add package.json and script to delete annotations
* amend help
* fix issues
* added explicit runs
* add design document and index creation to script
* update tests to wait for url to change
* i think we can remove this deprecated function now
* migrating to new structure - wip
* notebooks work, now to plots and images
* resolve conflicts
* fix search
* add to readme
* spelling
* fix unit test
* add search by view for big search speedup
* spelling
* fix out of order search
* improve reliability of plot tagging tests
* Change the mount utility to use Vue's createApp and defineComponent methods
* Fix display layout memory leaks caused by `getSelectionContext`
* fix some display layout leaks due to use of slots
* Fix imagery memory leak (removed span tag). NOTE: CompassRose svg leaks memory - must test on firefox to see if this is a Chrome leak.
* Fix ActionsAPI action collection and applicable actions leak.
* Fix flexible layout memory leaks - remove listeners on unmount. NOTE: One type of overlay plot (Rover Yaw) is still leaking.
* pass in the el on mount
* e2e test config and spec changes
* Remove mounting of limit lines. Use components directly
* test: remove `.only()`
* Fix display layout memory leaks
* Enable passing tests
* e2e README and appActions should be what master has.
* lint: add word to cspell list
* lint: fixes
* lint:fix
* fix: revert `el` change
* fix: remove empty span
* fix: creating shapes in displayLayout
* fix: avoid `splice` as it loses reactivity
* test: reduce timeout time
* quick fixes
* add prod mode and convert the test config to select the correct mode
* Fix webpack prod config
* Add launch flag for exposing window.gc
* never worked
* explicit naming
* rename
* We don't need to destroy view providers
* test: increase timeout time
* test: unskip all mem tests
* fix(vue-loader): disable static hoisting
* chore: run `test:perf:memory`
* Don't destroy view providers
* Move context menu once listener to beforeUnmount instead.
* Disconnect all resize observers on unmount
* Delete Test vue component
* Use beforeUnmount and remove splice(0) in favor of [] for emptying arrays
* re-structure
* fix: unregister listener in pane.vue
* test: tweak timeouts
* chore: lint:fix
* test: unskip perf tests
* fix: unregister events properly
* fix: unregister listener
* fix: unregister listener
* fix: unregister listener
* fix: use `unmounted()`
* fix: unregister listeners
* fix: unregister listener properly
* chore: lint:fix
* test: fix imagery layer toggle test
* test: increase timeout
* Don't use anonymous functions for listeners
* Destroy objects and event listeners properly
* Delete config stores that are created by components
* Use the right unmount hook. Destroy mounted view on unmount.
* Use unmounted, not beforeUnmounted
* Lint fixes
* Fix time strip memory leak
* Undo unneeded change for memory leaks.
* chore: combine common webpack configs
---------
Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
Co-authored-by: John Hill <john.c.hill@nasa.gov>
* initial drag drop, wip
* images work as snapshots, but need to disable navigate to actions
* embed image name
* works now with images, need to be refactor so can duplicate code for entries too
* works dropping on entries too
* handle remote images too
* add e2e test
* spelling
* address most PR comments
* Add a VISUAL_URL constant and remove all vestiges of hide inspector and tree
* hide timer and add concurrency
* turn off concurrency
* factor out old appAction
* Add expand button to panes
* remove old slow annotations
* fix fault
* update domcontentloaded
* missed refactor
* driveby: setTimeBounds private
* add comments to the percyCSS
* suggest MISSION_TIME
* more notes
* regen
* clean up test
* driveby: clean up order
* restructure
* add new suite now that i'ts hidden
* use mission time everywhere possible
* driveby
* rerun generatedata
* comments
* lintfix
* remove series object from highlights
* remove series models from legend reactive data
* drawing all annotations at once is way faster
* fix multi annotations
* lots of reactive things depending on config
* make annotation lookup faster
* lint
* readd perf test
* address PR comments
* fix highlight typo
---------
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
Co-authored-by: Shefali Joshi <simplyrender@gmail.com>
* fix: register event listeners etc in `created()` hook
* fix: initialize `stalenessSubscription` before composition load and in `created()` hook
* refactor(test): make `openmct` const
* refactor: update overlayPlot spec to Vue 3 and fix tests
* refactor: fix eslint errors
* refactor: move initialization steps to `created()` hook
* test: re-enable and fix stackedPlot test suite
* fix: `hideTree=true` hides the tree again
* fix: add back in check on mount
* test: fix Layout tests
* fix: BarGraph test
* fix: plot inspector tests
* fix: reenable grand search tests
* fix: inspectorStyles test suite
* fix: re-enable most timeline tests
* fix: no need to hideTree in appactions
* fix: re-enable more tests
* test: re-enable more tests
* test: re-enable most plot tests
* chore: `lint:fix`
* test: re-enable timelist suite
* fix(#7016): timers count down or up to a target date
* test: add regression tests to cover disabled unit tests
* refactor: lint:fix
* refactor: no need for momentjs here
* fix: timerAction missed refactor
* fix: ensure timestamp is always UTC string
* test: use role selectors
* docs: add instructions for clock override in e2e
* docs: update
* Update readme
* lint
* spelling fixes
---------
Co-authored-by: Scott Bell <scott@traclabs.com>
Co-authored-by: John Hill <john.c.hill@nasa.gov>
* debug
* abort any pending requests on router "change:path" event, this should catch cases where the UI is bogged down and doesnt destroy the tc first
* english
* cant always be on
* adding abort to limits requests
* finally-ing off the promise
* need to just return the object not the property
* sticking with the try/catch structure we use elsewhere
* removing abort on nav, as views should be calling destroy
---------
Co-authored-by: John Hill <john.c.hill@nasa.gov>
Co-authored-by: Shefali Joshi <simplyrender@gmail.com>
* Fix getTelemetryPath to handle cases where parent is the same as the child, handle yamcs aggregate telemetry, and fix how identifiers are passed in
* Cleanup getTelemetryPath
* Switch to filter instead of forEach
* Get path item names
* Remove tooltips on scroll of tree
* Remove handing for scroll
* Allow break-words
* Cleanup
* fix tree name issue
* add name to key, and name observers to recent objects
* no need to change key
* make more of app reactive to name changes
* fix browse bar and document title
* listen in properties for name changes
* add tests for renaming
* yeah spelling linter
* add semantic tags to forms and fixup tests
* change purpose
* actually delete the listener
* ensuring deletion
---------
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* refactor: use `getBounds()` instead of `bounds()`
* fix: use `loadDelay` in generator subscription
* refactor: fix up e2e test
* fix: remove `.only()`
* refactor: lint
* Start to fix up conditionSet test with comments
* test: edit conditionSet to add delay value
* test: tests the case where telemetry is available
* fix: remove `.only()`
* test: add comments, clarify assertion
* refactor: lint:fix
* test: fix conditionSet default condition name test
* test: add assertions to stabilize tags tests
---------
Co-authored-by: Scott Bell <scott@traclabs.com>
Co-authored-by: John Hill <john.c.hill@nasa.gov>
* Don't set conductor popup to null unless the view is being destroyed
* Replace beforeDestroy with beforeUnmount
* Propagate plot tick widths to timeline view
* Check if conductor popup exists before trying to remove it from the dom
* Fix imagery e2e test
* Revert accidental commit
---------
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* Closes#6864
- CSS fixes to remove problematic duplicate overflow handling.
* fix(e2e): stabilize autoscale test
* fix(e2e): mark overlay plot tagging test as slow
* fix(e2e): stabilize ITC e2e test
* fix(e2e): don't use hard wait
* fix: remove .only 😳
---------
Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* fix annotations load to not happen on start
* remove range checking per annotated point
* back to local variable
* reduce tagging size to improve reliability of test
* remove .only
* remove .only
* reduce hz rate for functional test and keep high frequency test in performance
* remove console.debugs
* this test runs pretty fast now
* fix network request tests to match new behavior
* created a throttle util and using it in timer plugin to throttle refreshing the timer domain object
* Simplify timer logic
* Clarify code a little
* refactor: lint:fix
* Fix linting issue
---------
Co-authored-by: Jamie V <jamie.j.vigliotta@nasa.gov>
Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* Set the raw series limits so that we can get the raw series limits
* fix: `toRaw()` the other gets/sets/deletes
---------
Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
* Reset and re-request telemetry only after receiving bounds following a mode change
* Don't check for tick - just in case the mode is set without bounds
* Use the imagery view timeContext to get related telemetry.
---------
Co-authored-by: Khalid Adil <khalidadil29@gmail.com>
* fix: remove `tree-item-destroyed` event
- Composition listeners should only be removed if the item has been deleted or its parent has been collapsed. Both are handled by `mct-tree` already, so doing this additionally when tree-items unmount is redundant.
- In addition to that, any time the `visibleTreeItems` array changes, all tree-items will unmount, so this just doesn't work as intended-- it will unregister all composition listeners whenever the tree changes!
* test: stabilize imagery test
- Use keyboard gestures to navigate
* fix: lint:fix
* Use the width and height of the container of the plan to set the activity widths and now markers
* Use the right parent to determine height and width
---------
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* Use the current timestamp from the global clock. Use mode changes to set if the view is fixed time or real time
* Reload the page after adding a plan and then change the url params.
* clock, timeConductor and appActions fixes
* Ensure realtime uses upstream context when available
Eliminate ambiguity when looking for time conductor locator
* Fix log plot e2e tests
* Fix displayLayout e2e tests
* Specify global time conductor to fix issues with duplicate selectors with independent time contexts
* a11y: ARIA for conductor and independent time conductor
* a11y: fix label collisions, specify 'Menu' in label
* Add watch mode
* fix(e2e): update appActions and tests to use a11y locators for ITC
* Don't remove the itc popup from the DOM. Just show/hide it once it's added the first time.
* test(e2e): disable one imagery test due to known bug
* Add fixme to tagging tests, issue described in 6822
* Fix locator for time conductor popups
* Improve how time bounds are set in independent time conductor.
Fix tests for flexible layout and timestrip
* Fix some tests for itc for display layouts
* Fix Inspector tabs remounting on change
* fix autoscale test and snapshot
* Fix telemetry table test
* Fix timestrip test
* e2e: move test info annotations to within test
* 6826: Fixes padStart error due to using it on a number rather than a string
* fix(e2e): update snapshots
* fix(e2e): fix restricted notebook locator
* fix(restrictedNotebook): fix issue causing sections not to update on lock
* fix(restrictedNotebook): fix issue causing snapshots to not be able to be deleted from a locked page
- Using `this.$delete(arr, index)` does not update the `length` property on the underlying target object, so it can lead to bizarre issues where your array is of length 4 but it has 3 objects in it.
* fix: replace all instances of `$delete` with `Array.splice()` or `delete`
* fix(e2e): fix grand search test
* fix(#3117): can remove item from displayLayout via tree context menu while viewing another item
* fix: remove typo
* Wait for background image to load
* fix(#6832): timelist events can tick down
* fix: ensure that menuitems have the raw objects so emits work
* fix: assign new arrays instead of editing state in-place
* refactor(timelist): use `getClock()` instead of `clock()`
* Revert "refactor(timelist): use `getClock()` instead of `clock()`"
This reverts commit d888553112.
* refactor(timelist): use new timeAPI
* Stop ticking when the independent time context is disabled (#6833)
* Turn off the clock ticket for independent time conductor when it is disabled
* Fix linting issues
---------
Co-authored-by: Khalid Adil <khalidadil29@gmail.com>
* test: update couchdb notebook test
* fix: codeQL warnings
* fix(tree-item): infinite spinner issue
- Using `indexOf()` with an object was failing due to some items in the tree being Proxy-wrapped and others not. So instead, use `findIndex()` with a predicate that compares the navigationPaths of both objects
* [Timer] Remove "refresh" call, it is not needed (#6841)
* removing an unneccessary refresh that waas causing many get requests
* lets just pretend this never happened
* fix(mct-tree): maintain reactivity of all tree items
* Hide change role button in the indicator in cases where there is only… (#6840)
Hide change role button in the indicator in cases where there is only a single role available for the current user
---------
Co-authored-by: Shefali <simplyrender@gmail.com>
Co-authored-by: Khalid Adil <khalidadil29@gmail.com>
Co-authored-by: John Hill <john.c.hill@nasa.gov>
Co-authored-by: David Tsay <david.e.tsay@nasa.gov>
Co-authored-by: Jamie V <jamie.j.vigliotta@nasa.gov>
* Replacing all instances of the new Vue() component creation pattern
* In Vue 3, components cannot be created on the fly and mounted off-DOM. The suggested fix from Vue is to use createApp, but in the context of Open MCT this means dozens of Vue apps being created and destroyed at any given moment. Instead, we have used a community hack for creating individual components.
* beforeDestroy() -> beforeUnmount()
* destroyed() -> unmounted()
* The addition of deep: true option on Array listeners is now required to detect Array changes
* Open MCT is now mounted on a child div instead of directly on document.body
---------
Co-authored-by: Scott Bell <scott@traclabs.com>
Co-authored-by: Andrew Henry <akhenry@gmail.com>
Co-authored-by: John Hill <john.c.hill@nasa.gov>
* Fixed#4975 - Compact Time Conductor styling
* Fixed#5773 - Ubiquitous global clock
* Mode functionality added to TimeAPI
* TimeAPI modified to always have a ticking clock
* Mode dropdown added to independent and regular time conductors
* Overall conductor appearance modifications and enhancements
* TimeAPI methods deprecated with warnings
* Significant updates to markup, styling and behavior of main Time Conductor and independent version.
---------
Co-authored-by: Charles Hacskaylo <charlesh88@gmail.com>
Co-authored-by: Shefali <simplyrender@gmail.com>
Co-authored-by: Andrew Henry <akhenry@gmail.com>
Co-authored-by: John Hill <john.c.hill@nasa.gov>
Co-authored-by: Scott Bell <scott@traclabs.com>
* Add subscription for limits for domain objects
---------
Co-authored-by: John Hill <john.c.hill@nasa.gov>
Co-authored-by: Andrew Henry <akhenry@gmail.com>
* cherry-pick(#6602) : [ExportAsJson] Multiple Aliases in Export and Co… (#6658)
cherry-pick(#6602) : [ExportAsJson] Multiple Aliases in Export and Conditional Styles Fixes (#6602)
Fixes issues that prevent import and export from being completed successfully. Specifically:
* if multiple aliases are detected, the first is created as a new object and and added to it's parent's composition, any subsequent aliases of the same object will not be recreated, but the originally created one will be added to the current parent's composition, creating an alias.
* Also, there are cases were conditionSetIdentifiers are stored in an object keyed by an item id in the configuration.objectstyles object, this fix will handle these as well.
* Replaces an errant `return` statement with a `continue` statement to prevent early exit from a recursive function.
---------
Co-authored-by: Andrew Henry <akhenry@gmail.com>
* chore: bump version to `2.2.3` (#6685)
* Add configuration detection to update table rows in place
* Fix typo for datum access
* First add new rows to the table and then update rows in place
* Each row much be checked for in place updates and inserted as needed
* Fix typo. Remove unused code.
* Update datum only. And don't allow undefined values for columns
* Fix typo
* Rename function for clarity
* Use telemetry metadata to indicate datum property to use for in place updates
* Fix typo for method call
* Fix typo for return value
* fullDatum is the datum BEFORE normalizing.
---------
Co-authored-by: Jamie V <jamie.j.vigliotta@nasa.gov>
Co-authored-by: Andrew Henry <akhenry@gmail.com>
Co-authored-by: John Hill <john.c.hill@nasa.gov>
* Selectively filter activities only for realtime
* Remove unnecessary logic
* Adjust hideAll and showAll flags for non-realtime mode
* Filter out past events for fixed time
* Set the timestamp on bounds change
* Cleanup
* Removed duplicated listing since handled by different method
* Inverted variable
* removed setting showAll flag
* Remove unusued showAll value
* Removed noCurrent state and isCurrent logic check based on noCurrent
* Set formatted start / end to utc mode to synchronize with current time counductor value
* Add missed file
* Lint fixes
* Formatter improvements to use the Time API and lint fix
* Updated test to use Time API formatter instead of moment directly
* Linting fix to pluginSpec
* Prettier one line
---------
Co-authored-by: Shefali Joshi <simplyrender@gmail.com>
* Add additional test roles to example user
* Add session storage and role to user indicator
* Update example user provider
* Added selection dialog to overlays and implemented for operator status
* Display role in user indicator
* Updates to broadcast channel lifecycle
* Update comment
* Comment width
* UserAPI role updates and UserIndicator improvement
* Moved prompt to UserIndicator
* Reconnect channel on error and UserIndicator updates
* Updates to status api canPRovideStatusForRole
* Cleanup
* Store status roles in an array instead of a singular value
* Added success notification and cleanup
* Lint
* Removed unused role param from status api call
* Remove default status role from example user plugin
* Removed status.getStatusRoleForCurrentUser
* Cleanup
* Cleanup
* Moved roleChannel to private field
* Separated input value from active role value
* More flight like status role names and parameter names
* Update statusRole parameter name
* Update default selection for roles if input is not chosen
* Update OperatorStatusIndicator install to hide if an observer
* console.log
* Return null instead of undefined
* Remove unneccesary filter on allRoles
* refactor: format with prettier
* Undid merge error
* Merge conflict extra line
* Copyright statement
* RoleChannelProvider to RoleChannel
* Throw error on no provider
* Change RoleChannel to ActiveRoleSynchronizer and update method calls to match
* iconClass to alert
* Add role selection step to beforeEach
* example-role to flight
* Dismiss overlay from exampleUser plugin which affected menu api positioning
---------
Co-authored-by: Scott Bell <scott@traclabs.com>
* adding abortSignal back to composition load
* suppress AbortError console.errors from couch, delay requests for test to trigger abort
---------
Co-authored-by: John Hill <john.c.hill@nasa.gov>
Co-authored-by: Andrew Henry <akhenry@gmail.com>
* Add tooltip api, extend object api to add telemetry composition lookups, and add tooltips to gauges/notebook embeds/plot legends/object frames/object names/time strips/recent objects/search results/object tree
* Add tooltips to telemetry/lad tables
* Styling normalization, sanding and polishing.
* Add tooltips for Conditional widgets and Tab Views
* Add tests
* Switch to using enum-ish consts for tooltip locations
* Trim LAD table row name to account for spacing required by linting rules
---------
Co-authored-by: Charles Hacskaylo <charlesh88@gmail.com>
* Fix CouchDBSearchFolder plugin to have unique identifiers.
Allow ttt-reports to be viewed as web pages
* Remove ttt-report type from WebPage view provider. This is being moved to the viper-openmct repo instead
* Adds check for classList
* Add WebPage to the components list
* Remove uuid and use the folder name as the identifier instead
* Remove focused test
---------
Co-authored-by: John Hill <john.c.hill@nasa.gov>
Co-authored-by: Jamie V <jamie.j.vigliotta@nasa.gov>
* New option to show/hide stacked plot aggregate legend - defaulted to not show.
Use the Plot component in the StackedPlotItem component for simplicity and show/hide sub-legends as needed.
* Fix position and expanded classes when children are showing their legends
* Fix broken tests and ensure gridlines and cursorguides work.
* Adds e2e test for new legend configuration for stacked plot
* Address review comments - Remove commented out code, optimize property lookup, fix bug with staleness
* Remove the isStale icon in the legend when a plot is inside a stacked plot.
---------
Co-authored-by: Jamie V <jamie.j.vigliotta@nasa.gov>
* Run nightly, fix triggers
* contains
* driveby: remove github reporter
* update tests to match
* redo opened logic
* don't run pr:e2e and pr:platform
* de-dupe method
* there can be only one... input per label
* there can be only one... id but we need none
* there can be only one... input
* create test and add multiple images to display
* WIP test written but not passing
* fix test
* Update e2e/tests/functional/plugins/imagery/exampleImagery.e2e.spec.js
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* Update e2e/tests/functional/plugins/imagery/exampleImagery.e2e.spec.js
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* remove await from synchronous code
* linting
---------
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* Ensure timelist scrolling happens correctly for clock as well as fixed time
* If an activity has already started, show the duration as time to/since the end of the activity
* Addresses review comments: Reverse +/- indicators, removes milliseconds from times.
* Fix linting issues
* Add e2e test for timelist display
* Scroll to 'now' if available
* feat: `getAnnotations` can take an `abortSignal`
* feat: add `MAP` annotationType
* fix: handle `MAP` annotations in search results
* fix: have `loadAnnotationForTargetObject` take an `abortSignal`
* fix(#5646): abort pending annotations requests on nav away from notebooks or plots
* fix: handle AbortErrors gracefully
* fix: remove redundant `MAP` annotation type
* docs: add comment
* fix: navigate before selection for geospatial results
* feat: comparators for annotation target equality
- Adds `addTargetComparator()` to the Annotation API, allowing plugins to define additional comparators for certain annotation types.
- Update usage of `_.isEqual()` for targets to use the `areAnnotationTargetsEqual()` method, which uses any additional comparators before falling back to a deep equality check.
- Handle aborted `getAnnotations()` calls gracefully in the AnnotationInspectorView
* test: add unit tests for target comparators
---------
Co-authored-by: Scott Bell <scott@traclabs.com>
* add time context for telemetry collections
* move time context to options
* clean up jsdoc
* clean up jsdoc
* Update src/api/telemetry/TelemetryAPI.js
* clean up comments
* use time context bounds if defined for start and end
* refactor: format with prettier
* hide tab if not editing and fix issue where configuration is null
* show filters tab if editing
* works with dropdown
* add a none filter to remove 'filters applied' styling'
* pass appropriate comparator
* openmct side is ready
* clear filter still not working
* fix clearing of procedures
* add filters
* add some basic documentation
* add some basic documentation
* add some basic documentation
* fix grammar issues and convert away from amd pattern
* convert to permanent links
* refactor: format with prettier
* add aria labels for selects
Fixes issues that prevent import and export from being completed successfully. Specifically:
* if multiple aliases are detected, the first is created as a new object and and added to it's parent's composition, any subsequent aliases of the same object will not be recreated, but the originally created one will be added to the current parent's composition, creating an alias.
* Also, there are cases were conditionSetIdentifiers are stored in an object keyed by an item id in the configuration.objectstyles object, this fix will handle these as well.
* Replaces an errant `return` statement with a `continue` statement to prevent early exit from a recursive function.
---------
Co-authored-by: Andrew Henry <akhenry@gmail.com>
* fix: setStatus when add/replace a plan in composition
* test: add regression test
* chore: lint:fix
* test: add visual tests for plan and gantt chart drafts
* fix: trigger e2e-couchdb run on sync
* fix: remove `e2e-couchdb` label if present after run
* fix: remove `synchronize` trigger
- this is intended behavior
* refactor: update GHA to use octokit action
* docs: add note about GHA warnings
* fix: remove `pr:e2e` label after run
* fix: use github-script
* chore: bump version to `2.2.2` (#6615)
* persisting lad configuration in the view when it changes
---------
Co-authored-by: Shefali Joshi <simplyrender@gmail.com>
* fix spelling error
* apply changes after dynamic component updates
* remove * listener
* react to url change
* es6 mode
* fix html structure
* Closes#6614
- CSS fixes for revised widget approach.
* include url prop for vue component reactivity
* disable a tag overriding font color
* provide a reactive object for component reactivity
Co-authored-by: Charles Hacskaylo <charlesh88@gmail.com>
* test: add appActions, stabilize overlayPlot test
- Adds `waitForPlotsToRender`, a function that waits for all active `.plot` elements on the page to load and draw their series data
- Adds `getCanvasPixels`, a function that takes a canvas selector and retrieves an array of canvas pixel data.
- Modifies `getCanvasPixels` to use `page.evaluateHandle()` so that the canvas handle lifetime exists throughout the test (this was causing flakiness before)
* test: refactor and stabilize `plotRendering` tests
* test: remove redundant test suite
* test: stabilize plot legend color swatch test
* docs: mention `waitForPlotsToLoad()` in e2e docs
* refactor: have getCanvasPixels return actual rgba values
* docs: fix typo
* test: use appAction and fix reload wait condition
* docs: add additional context for `waitForPlotsToRender()`
* refactor: one-liner
* docs: tidy up docs
* fix: preserve truthy namespaces and unmapped values
- Fixes the issue of the Static Root provider overriding existing namespaces, such as those from a telemetry dictionary
- Fixes the issue of keys of child objects NOT present in the idMapping (such as those from a telemetry dictionary) being overwritten as undefined
- TODO: This will not work for objects exported from an environment that has the "MyItems" namespace defined to anything other than an empty string. Need to figure out how to handle this.
* fix: handle the case of rootId having a namespace !== ""
* refactor: use `parseKeyString`
* fix: StaticRootPlugin object mapping for non-empty namespaces
* fix: use index, fix location identifiers
* tets: add non-empty namespace tests (wip)
* refactor: rename and move test files
* test: update StaticModelProvider tests
* fix: remap to identifiers for config, not keystring
---------
Co-authored-by: Khalid Adil <khalidadil29@gmail.com>
* test(visual): add theme to notification banner test name
* test: rename file
* test: switch to small example plan
* test: snapshot object-view only
* test: fix selectors
* refactor: chain locators together
* add e2e test
* fix: remove slow function
* test: After deactivating the button, new objects must be inserted and the button becomes active again
* test: ensure clear recent objects button is active or inactive
* add an event to notify when an object is inserted in the recents list
* add an event to notify when an object is inserted in the recents list
* fix: adjusting function name and add validation for triggering the event
* fix: add event to disable button only when user click ok to clear list of recents
* test: fix failing e2e + better assertions
---------
Co-authored-by: Jesse Mazzella <jessemazzella@gmail.com>
* Refactor string to stream
* add to restricted notebooks and allow for blank users
* forgot to add notebook
* use better types and fix test
* move streamToString
* add export group
* catch blank pages
* add simple prototype
* tags and metadata now exported
* add form for options
* revert notebook
* add simple e2e test
* add test stubs
* death to debug
* Remove ticker for timelist and rename a function for readability
* Use formatting for remote clock if available.
* throttle updates to the timestamp and listing activities
---------
Co-authored-by: Andrew Henry <akhenry@gmail.com>
* Closes#6321
- Set `user-select: none` on LAD Table td elements.
- Added hover effect to LAD Table rows as affordance of the Action
menu's availability.
* Add test to ensure rows cannot be selected but do show context menus
---------
Co-authored-by: Shefali Joshi <simplyrender@gmail.com>
* call update style after view is update with current style rule manager styles for components (namely condition widget) that have DOM changes after the element is grabbed to style
* target blank yo
---------
Co-authored-by: Shefali Joshi <simplyrender@gmail.com>
* Change logic so that the rectangle is only drawn on one axis
* Filter firstDrawableAxis before the rest of the logic
* Update to filter yAxisIds by the canDraw function
Splits the parent and child navigationPaths into arrays of keystrings and then checks to ensure that every keystring in the parent path is included in the child path in order
* Don't initialize the selected condition style when a view is loaded
* Ensure selection of styles in Edit mode works as expected. When out of edit mode, only a computed style should be chosen to display.
* Add a view action buttons to toggle on class to control fixed layout
* Add configuration watcher and initial view action
* Added next tick in mount and updated action key
* Updated the view action key
* fix(#6455): fix infinite loop
- When the Create modal is opened, it defaults the object selected in the tree to the parent of the currently selected object. However, if this object is static, it can sometimes have a weird navigationPath and an edge case where we try to infinitely walk up the path to find the parent.
- This adds a fail-safe to verify that the navigationPath by this point contains `/browse/mine` (thus is within a creatable path). If not, it sets the default selected tree item to the "My Items" folder
---------
Co-authored-by: Andrew Henry <akhenry@gmail.com>
* free plot on search selection and remove rectangles when resuming
* add test
* remove rectanges
* update test
* more reliable way to load annotations
* use event to wait for axes and update tests
* restore test
* cancel selection in plots if clicking outside plot
* Revert "cancel selection in plots if clicking outside plot"
This reverts commit 82ea50152b.
* Listen to the navigation triggered selection of the target object before selecting the annotations for the object
* remove commented out code
* check if we've already navigated to the object
---------
Co-authored-by: Khalid Adil <khalidadil29@gmail.com>
Co-authored-by: Shefali <simplyrender@gmail.com>
* Only use default if we've evaluated as default
* Add e2e test for conditional sets
---------
Co-authored-by: Shefali Joshi <simplyrender@gmail.com>
Co-authored-by: Andrew Henry <akhenry@gmail.com>
* Allow move action for locked shift logs.
* Allow remove action for links to locked shift logs.
---------
Co-authored-by: Andrew Henry <akhenry@gmail.com>
* refactor: convert Type API to ES6 module
- Another AMD module bites the dust 🧹
* feat: add initial configurable plan type
- Name change TBD
* feat: add `clipActivityNames` property
- refactor: initialize data to `null`
* refactor: general code cleanup
* feat(WIP): name clipping via clipPath elements
* feat: compose a Gantt Chart using a Plan
- Allows Plans to be dragged into Gantt Charts (name tentative) to create a configurable Activity View
- Clip/Unclip activity names by editing domainObject property
* feat: replace Plan if another is dragged in
- SImilar to Gauges or Scatter Plots, launch a confirmation dialog to replace the existing Plan with another, if another Plan is dragged into the chart.
* test: fix tests, add basic tests for gantt
* tes(e2e): fix plan test
* docs: add TODO
* refactor: clean up more string literals
* style: remove `rx`, increase min width
- round widths to nearest integer
* refactor: extract timeline creation logic
- extracts the logic for creating the timeline into its own component, `ActivityTimeline.vue`. This will save us a lot of re-renders, as we were manually creating elements / clearing them on each tick
* style: fix text y-pos and don't round
* fix: make activities clickable again
* docs: add copyright docs
* feat: swimlane visibility
- configure plan view from inspector
fix: update plans when file changes
- fix gantt chart display in time strips
- code cleanup
* fix: gantt chart embed in time strip
* remove viewBox for now
* fix: make `clipPath` ids more unique
* refactor: more code cleanup
* refactor: more code cleanup
* test: fix existing Plan unit tests
* refactor: rename variables
* fix: respond to code review comments
- Move config manipulation to PlanViewConfiguration.js/.vue
- Variable renames, code refactoring
* fix: unique, reproducible clipPathIds
* fix: only mutate swimlaneVisibility once on init
* fix: really make clipPathId unique this time
* refactor: use default config
* Closes#6113
- Refined CSS class naming and application.
- Set cursor to pointer for Activity elements.
- Added <title> node to Activity elements.
- Styling for selected Activities.
- Better Inspector tab name.
* fix: make Plan creatability configurable and false by default
* test: fix existing tests and add a couple new ones
* Closes#6113
- Now uses SVG <symbol> instead of rect within Activity element.
- Passes in `rowHeight` as a prop from Plan.vue.
- SWIMLANE_PADDING const added and used to create margin at top and bottom
edges of swimlanes.
- Refined styling for selected activities.
- New `$colorGanttSelectedBorder` theme constant.
- Smoke tested in Espresso and Snow themes.
* fix: default swimlaneWidth to clientWidth
* test: fix test
* feat: display selected activity name as header
* fix: remove redundant listener
* refactor: move `examplePlans.js` into `test-data/`
* docs: remove copyright header
* refactor: move `helper.js` into `helper/`
* refactor: `helper.js` -> `planningUtils.js`
* fix: update pathing
* test: add tests for gantt/plan
- add visual tests for gantt / plan
- add test for clicking a single activity and verifying its contents in the inspector
---------
Co-authored-by: Charles Hacskaylo <charlesh88@gmail.com>
* do not show loaded tabs before showing current tab
* clean up logic to show added tabs
* fix unit tests
* remove unnecessary mocks
* handle objects current tab when last tab removed
---------
Co-authored-by: Shefali Joshi <simplyrender@gmail.com>
* fix: inspector view tab priority
- fixes issue where inspector view priorities were not being passed to the view registry
* chore: run lint:fix
- eslint sez no danglin' commas! EVER!
* fix: update more viewProviders
---------
Co-authored-by: Shefali Joshi <simplyrender@gmail.com>
* fix(#6391): refresh composition on treeItem open
- On treeItem open, gets the latest composition from persistence
- Composition was being refreshed, but only within the same instance (mutables)
* test: regression tests for localStorage and couch
---------
Co-authored-by: Scott Bell <scott@traclabs.com>
* Changed tooltip text to be Shift+Alt drag to pan
* Updated e2e test to match alt text change
* Updated panHotKey to match changed alt text
---------
Co-authored-by: John Hill <john.c.hill@nasa.gov>
* allow lad tables rows to be selected
* rows now clickable and previewable
* trying to add type column
* aggregate and telemetry
* if aggregate, use blank for value and timestamps
* remove extraneous path lookup
* cleanup css
* add tests
* allow hiding of type column
* adjust tests to include type column
* Add minimize to the notification model and minimize missing object notifications
* Add test
* Short circuit telemetry api functions if passed in domainObject is missing/type unknown
* Clear notifications properly after test
* adding lad table configuration, specifically column visibility
* making sure units column checkbox is updated when lad tables are removed from lad table sets
* fixes based on PR feedback, copyright, consts, code, oh my!
* added a test for column hiding
* remove .only
* add a notification for inspector view that must be editing, move selection logic to vue component as it was not being triggered after navigating away in the inspector tabs
* Closes#6354 Notebook Enter key adds new lines
- Removed enter key handlers from Vue component.
- Added "Save" button.
* entry must be selected before editing
* focus on newly created entry
* Closes#6354 Notebook Enter key adds new lines
- Removed enter key handlers from Vue component.
- Added "Save" button.
* do not allow edit unless entry is selected
* remove css for disabled cass
---------
Co-authored-by: David Tsay <david.e.tsay@nasa.gov>
* framework for all inspector views being provided
* move elements view to plugin
* move location view into plugin
* move styles view into plugin
* move properties view into plugin
* install inspector views in index.html
* rename filters inspector view provider for tab
* finish elements view as plugin
* finish location view as plugin
* finish properties view as plugin
* finish styles view as plugin
* point main styles to new plugins
* finish inspector tab and views components
* fix paths for styles views
* fix path issues
* rename fault management inspector view
fix unit test
* fix paths for unit tests
* rename bar graph inspector view
fix unit test
* rename plots inspector view
fix unit test
* inspector views installed in mct.js
* sort inspector views by priority
* make name required for inspector tabs
* priority changes
* only show filters tab if filters exist
* object renamed to domainObject
* remove dead code
* select first tab if selected tab becomes hidden
* bandaid fix to get e2e working
* also apply bandaid to this test
* [a11y] Basic ARIA tab role for Inspector panels
* test(e2e): better selectors for scatterPlot test
* test(e2e): fix search test selector
* pass key and glyph to views
* use key for tabs identification
* high + 1 priority for object specific views
* Closes#6118
- Significant layout and behavior refinements to Inspector tabs.
- New theme constants for tabs.
- Tabs in Tab Views updated to use theme constants.
* Closes#6118
- Refinement to look of Inspector tabs.
- Shortened names in many *InspectorViewProvider.js files.
- WIP adding glyph capability, display not yet wired up.
* Closes#6118
- Tightened H2 spacing in Inspector.
* move annotations into plugin
* register annotations view provider
* move tags inside annotations
* fix paths
* move element item group into plugin
* move PlotElementsPool view into plugin
* plots has a different element view
* fix paths for plot elements pool
* fix: `role=` instead of `aria-role=` 🤦♂️
* test(e2e): fix tab locators
* move location views into properties tab view
* include location.scss
* move location into properties tab
* fix html for location within properties view
* retain selected tab on new selection
* refresh view of same tab with new selection
* add browse mode inspector view for alphanumerics
* fix prop passing
* removed vestigial code
* fix inspector tab selection
* remove timeouts and unnessecary awaits
* test: assert checkbox status before checking
* add selectInspectorTab to general app actions
* use selectInspectorTabs from appActions
* need to pass page to playwright function
* select the correct tab
* fix plan unit test
* fix plots tests by clicking on correct tab
---------
Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
Co-authored-by: Charles Hacskaylo <charlesh88@gmail.com>
Co-authored-by: John Hill <john.c.hill@nasa.gov>
Co-authored-by: Scott Bell <scott@traclabs.com>
* fix: Transaction-ify the CreateAction
* test: add regression test and update tree locators
* test: make object search test less flaky
* test: revert locator
* freeze if annotation is selected
* add test
* add stacked plot test
* actually test ticket issue
* wait for canvas to stabalize
* wait for canvas to stabalize
* address PR comments
* fix: ensure Vue can react to stacked plot item reorders
- Use Vue.$set instead of assignment so Vue can pick up StackedPlot composition reorders immediately
* test(e2e): add test for stacked plot item reorder
* docs: specify plot item order in comments
* fix: correct page.goto() url
* throttle search results to one a second
* changed to use custom debounce due to async
* attempt to fix flakey test
* attempt to fix flakey test
* revert test changes
* reduce debounce time and add e2e test
* allow canceling of timeout
* removed debug
* make search result e2e tests more stable
* make drop down selector a constant
* address pr comments
* Decouple removing the context for a view from refreshing the context of views to get their upstream contexts
* Add test for clicking on an item in the elements pool for a preview
* Add test to ensure independent time context for items with no parents works as expected
* won't mount if cameraAngleOfView undefined
* fix non-gimbling camera azimuth
correct pan to azimuth
* reorganize shared props passing
* enable hud for non-gimbling cameras
* fix unit tests
* rotate function needs to work with numbers
* avoid -0
* fix: don't delete imagery size, update related telemetry on focusedImage change
* refactor: remove unused prop
* fix: ensure thumbnail key is unique
* fix: watch `focusedImage`, not `focusedImageIndex`
- Corrects a false assumption that if the `focusedImageIndex` changes, the `focusedImage` has changed. This was causing us to mistakenly reset a lot of display props that control whether or not the Compass shows.
- For example, if an image falls out of bounds, the `focusedImageIndex` will change as the old image is removed from the array.
---------
Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
Co-authored-by: Andrew Henry <akhenry@gmail.com>
- Fixes an inconsistency in the docs with regards to the docker command for spinning up a Playwright container
- Closes an unclosed markdown code block
* adding urlWhitelist to data so when/if it is updated it triggers link formatting
* removing dupe notebook and restricted notebook checks and just moving it to base notebook functionality install checks
* nullthing to see here
* Fix independent time context to check first object in path (self) for upstream content instead of last object in path
* Revert changes that don't allow unregistering independent time context
---------
Co-authored-by: Shefali <simplyrender@gmail.com>
* fix: show yAxis properties when series is moved
- Shows the correct yAxis properties immediately when a series is moved to another yAxis
* test: check for correct yAxis properties
- refactor test to use unique autogenerated object names
- update Elements pool pane handle selector
* test: fix goto and move to beforeEach
* test: ☠️ disable GrandSearch and ApplicationRouterSpec ☠️
---------
Co-authored-by: Shefali Joshi <simplyrender@gmail.com>
Co-authored-by: Andrew Henry <akhenry@gmail.com>
* Fix typo when saving the user specified range
* Ensure range is specified when autoscale is turned off
* Don't redraw unless absolutely necessary
* Add 'stats' to the handled attributes for redrawing plots
* Handle x axis displayRange, marker shape and size to redraw
* If there are is no closest data point for a plot, skip annotation gathering
* Ensure that min and max user defined ranges are valid when autoscale is disabled. Otherwise, enable autoscale to true.
* Fix autoscale e2e test
* updated snapshot
* Update e2e/README.md
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
Co-authored-by: John Hill <john.c.hill@nasa.gov>
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* Add cancel adding tag mechanism and fix persistent options visible
* Add functional test for cancel adding a tag
* Create addtag.visual.spec.js and move createNotebookAndEntry to appActions.js
* Remove createDomainObjectWithDefaults function from tags.e2e.spec.js
* Integrate Percy snapshots and remove assertions
* Move createNotebookAndEntry function back to tags.e2e.spec.js
* Update locator of Annotations tab, split helper function and add test.beforeEach
* add handling for composition items (ex overlay plot) in stacked plots, fix swg staleness provider isStale method response
* typo
* removing staleness listeners when ladtable is remove
* addressing pr comments for this component
* address changes requested for lad table sets
* had to update is-stale for the row since we used combined keys in lad table sets now
* test(e2e): add test for recent objects target
* test(e2e): Add RecentObjects tests
- Test for 'target button' scroll and animation
- Test for persistence on refresh
- Test for displaying objects and aliases uniquely
* test(e2e): add test for recent objects limit
* refactor: compress to a single line
* test(e2e): recents max limit test nests objects
- Do deep nesting of objects instead of flat objects
- Collapse the tree completely and then test the "target" button for the most deeply nested item
* test(e2e): update locator to not use `nth(i)`
* Fix selections for different scenarios
* Ensure plot selection in stacked plots works when there are no selected or found annotations
* Adds e2e test for stacked plot selection and fixes the old e2e test which was testing overlay plots instead.
* Fix selection of plots while in Edit mode
* Improve tests for stacked plots
* refactor: remove unnecessary `await`s
* a11y: move aria-label to StackedPlotItem
* refactor(e2e): combine like tests, unique object names
- Use unique object names in `text=` selectors
- Combine like tests to reduce execution time
- Use `getByRole` selectors where able
* docs(e2e): add comments to test
* fix: add class back for unit test selector
---------
Co-authored-by: Scott Bell <scott@traclabs.com>
Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
* fixing error from plots when removing swg and making methods and props private for swg staleness provider
* removing unsubscribes from destroy hooks if the item has been removed already and reverting an unneccesary change
* checking for undefined staleness response
* removed un-neccesary code
* Ensure enabling log mode does not reset series that don't belong to that yaxis.
propagate both left and right y axes widths so that plots can adjust accordingly
* Revert code
Handle second axis resizing
* Fixes issue where logMode was getting initialized incorrectly for multiple y axes
* Get the yAxisId of the series from the model.
* Address review comments - rename params for readability
* Fix number of log ticks expected and the tick values since we reduced the number of secondary ticks
* Fix log plot test
* Add guard code during destroy
* Add missing remove callback
* removing dupe nb install, adding whitelist nb init script, testing whitelist urls
* updating from copy
* addressing PR comments for cleaner tests
* removing .only
* added a secure url test and a subdomain url test and simplified some code
* not messin with protocols atm
* update variable name
* Add listeners to remove stacked plot series and make keys unique
* don't add overlay plots to stacked plot legends
* Ensure series colors are drawn correctly in the plot legend
* Remove legend from mct plot. Remove series reactivity from stackd plot and add them to the legend instead.
* Clean up stacked plots so that the plot legend needs fewer props
Also make sure that plot selection inside a stacked plot works - this had regressed due to plot annotations
* Fix console error in plot elements pool and plot legend - reset arrays to empty
* Ensure color in the y axis swatch updates correctly
* Fix small issues with removing objects from STacked plots
* Fix selection for annotations and also select stacked plot child items
* fix notebook tagging
* remove unused annotation editor and change selection to single object
* remove reference to deleted css
* fix e2e tests
* Fix small typos into the selection context for Notebooks.
* Add a typ that identifies that an annotation selection is coming from a search result
---------
Co-authored-by: Scott Bell <scott@traclabs.com>
- Markup cleanups, CSS placement improvements for tags.
- Better approach to tag layout.
- CSS prop migrated to _constants.scss.
- Style and layout improvements for `.c-autocomplete*` input.
Co-authored-by: Scott Bell <scott@traclabs.com>
* fix: provide hashUrl for ObjectPath breadcrumbs
* a11y: add `navigation` role and aria-label to breadcrumb
* test(e2e): add regression test for breadcrumb nav
---------
Co-authored-by: Scott Bell <scott@traclabs.com>
* Fixed composition
* Remove unnecessary guard code
* Removing deprecated code
* Use valid key for stacked plot v-for
* Fixed object API specs to expect old values as well as new values in mutation callbacks
* Fixed existing tests
* Added E2E test
* Fixed linting error
---------
Co-authored-by: Shefali Joshi <simplyrender@gmail.com>
* style: add `visibility` to tree expand triangles
- The purpose of this is so that Playwright can perform actionability checks on the tree items. This will make operations involving expanding tree items much easier to perform in e2e.
* feat(e2e): Add AppAction to expand the entire tree
* fix: wait for loading indicator
* test: add test for `expandEntireTree`
* test: update `expandEntireTree` and tree selectors
- Use dynamic aria-label for different tree implementations
- Get rid of CSS ids which are only for testing
- Update percy tree scope selector
* chore(lint): remove unused variable
* refactor(e2e): update tree locators
Co-authored-by: John Hill <john.c.hill@nasa.gov>
* First pass
* Get bounding box min and max values based on the y axis that a series belongs to.
Handle removal of telemetry from an overlay plot
Handle addition of telemetry after annotations have been saved to an overlay plot
* Fix showing the rectangle for a given target's bounding box.
* remove invalid comment
Co-authored-by: Scott Bell <scott@traclabs.com>
* initial telemetry api updates for staleness support
* modifying staleness to a subsription style
* fixing variable name
* debuggin
* put the subscribe in the wrong place
* stale class for object views
* temp cyan border for testing
* added staleness to swg, working on stacked plot staleness
* WIP: stacked plot staleness
* reverting, going a different route
* staleness on stacked plots
* plot legend staleness
* remove debug code
* staleness for alphanumerics
* lad table and table set staleness
* overlay plot staleness
* remove debug code
* hardened lad staleness functionality fixed plots without composition bug
* adding staleness to gauges
* renaming telemetry age check functionality so it does not conflict with new staleness functionality
* couple one-off fixes here and there, and WIP for condition sets, moving to telemetry tables to facilitate styling of completed components
* small fix on lad tables, added staleness functionality to tables
* finishing up condition sets
* some cleaning up
* adding border to condition sets when an item is stale
* fixing dub sub
* addressing PR comment, moving repeated code to a function
* robustified the SWG stalenes provider, little fixes here and there as far as cleaning up listeners and... whatnot
* removing debug code
* typo fixes
* cleanin up debug code
* created a simple stalenes mixin for more basic usage in components
* more robustification, if a new staleness subscription happens, will now send the current staleness value if we have it, beefed up example stalenes swg provider
* beefed up staleness mixin a bit to give it more use
* copyright
* cleanin up ladtable code
* cleanin up ladtable code
* cleaning up lad table sets
* some minor updates
* Closes#6109
- New staleness glyph and font CSS added.
* Closes#6109
- Normalized staleness colors as theme constants.
- New mixins for staleness application to view elements.
- Applied staleness styling to all relevant view elements.
- TODO: smoke-test in Show theme.
* adding staleness utils helper, mixin and isStale functionalirty for telemtry api
* Closes#6109
- Refined style for Snow theme.
* need to have one domainObject per stalenes utility
* making sure we handle domains correctly while dealing with staleness
* couple fixes
* moving abort controller logic to a spot where it makes more sense
* added some more info for the StalenesProvider interface docs
* returning undefinded for ifStale requests with no provider
* debuggin
* debuggin
* missed "isStale" call in condtioncollections
* removing debug code and using mixin unsubscribe in gauge
* fixing tests
* more targeted tree item click
Co-authored-by: Charles Hacskaylo <charlesh88@gmail.com>
Co-authored-by: Andrew Henry <akhenry@gmail.com>
Co-authored-by: Scott Bell <scott@traclabs.com>
* fix: get image thumbnail formatter
* refactor: ImageryView cleanup
* docs: add comment
* feat: Support thumbnails in ImageryView
- Prefer an image's thumbnail URL if its available
* feat: Support thumbnails in ImageryTimeView
* refactor: rename variable
* test(WIP): add thumbnail unit test, not working yet
* test: temp disable test
* feat: imagery thumbnail urls for example imagery
* test: add unit test for imagery thumbnails
* test(e2e): check for thumbnail urls
- Update imagery view tests to check for use of thumbnail urls
* Fixes 6139
- Markup changes and improvements in CompassRose.vue.
- Improved sun and edge gradients.
- Related CSS styles updated.
- Changed compass key color from cyan to white to avoid conflict with staleness color.
* change var def to avoid collision
* compass rose should size itself based on image
* allow heading or camera pan for fixed cameras
* suppress HUD if no camera pan
* allow image to display compass rose for other cams
* update example imagery to accept transformations
* remove comments
Co-authored-by: David Tsay <david.e.tsay@nasa.gov>
Co-authored-by: David Tsay <3614296+davetsay@users.noreply.github.com>
* added new menu and actions to notebook embed as well as new information on embed
* fix method name case
* Add action messages. Fix margins
* Added bg icons. Change sizing of icons and thumbnails. Add scrolling to overflow embeds
* Rename embed wrapper
* adding dynamce class for scrolling the embeds wrapper based on need
* Add styling to embed scrolling container
* Change tag margin for better spacing between rows. Class rename. Minor styling changes to embed container. Change supermenu icon size
* Change action menu size
* Fix inner shadows. Revert tag code change. Create new theme constants. Make embed container constant
* Fix scroll and snow theme colors
* Fix overflow bug in entries and embed container. Refactor code so that containers optimize space of each entry
* Fix lint error
* Fix so embed container goes full width
* Fix input container to extend full width. Fix margin between notebook elements
* Addressed PR review comments.
* Address PR changes. Fix text overflow for long words.
* address pr review comments
* fixing tests
* first pass
* i've wasted too much time on this
Co-authored-by: Rukmini Bose <rukmini.bose15@gmail.com>
Co-authored-by: rukmini-bose <48999852+rukmini-bose@users.noreply.github.com>
Co-authored-by: John Hill <john.c.hill@nasa.gov>
* Implement new search and tagging for notebooks
* Add inspector and plot annotations
* Clean up inspector for plots and other views
* Bump webpack defaults for windows
* Notebook annotations are shown in inspector now
* Only allow annotations if plot is paused or in fixed time. also do not mutate if immutable
* Key off local events instead of remote (for now)
* Added clear poll button to clear all statuses
* Clear current poll question
* Added table for operator status
Co-authored-by: Michael Rogers <contact@mhrogers.com>
Co-authored-by: Andrew Henry <akhenry@gmail.com>
* get imagery view context and externally set pause and thumbnail index
* Test pause/play state in realtime mode
* Created an onPreviewMode change handler to be invoked from view large
* Add optional chaining to method invocation
* Change onItemClicked to invoke to resolve repeat large view action error
* Show NotificationIndicator also if NotificationsList is shown
* Create Notification Overlay Regression Test
* Move notification regression test under notification.e2e.spec.js
* Update selector of Notification Banner
* Rename test to "Notification Overlay"
* making a revert on failed save more clear
* only notify conflicts for non sync items in object api, spruce up notebook with better transaction tracking and observing and unobserving during transactions, structuredClone backup in monkeypatch
* WIP
* WIP debuggin
* fresh start
* dont observe in transaction objects, small changes to notebook vue to indicate saving/prevent spamming, added forceRemote flag to objects.get
* updating readability of code as well as fix issue of stuck transaction for same value entry edits
* once entry is created, click out to blur
* quick revert
;
* click outside of entry to blur and commit
* switched to enter... as suggested :)
* removing unused variable
* initializing transaction to null as we are using that now for no transaction
* fix: ensure EventSource is closed so it recovers
- Make sure to close the CouchDB EventSource as well, so that it can recover in the case where two tabs or windows are on Open MCT and one refreshes. The check on line 81 was preventing recovery since the EventSource was not closed properly.
* enhance, enhance, enhance readability
Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
* fix: use ephemeral timeContext for thumbnail metadata requests
* fix(TEMP): use `eval-source-map`
- **!!! REVERT THIS CHANGE BEFORE MERGE !!!**
* fix: only mutate if object supports mutation
* fix: pass identifier instead of whole domainObject
* fix: add start and end bounds to request
* Revert "fix(TEMP): use `eval-source-map`"
This reverts commit 7972d8c33a.
* docs: add comments
* fix: refresh object after conflict error
* fix: recover from error thrown during create
- Ensure that the "Saving" modal dialog is closed
- Notify user of the error, and also print to console to catch in e2e
* fix: default selector tree item to 'mine' folder
- If create fails due to a conflict or otherwise, and the user immediately tries to "Create" again, default the selector tree's selected item to the "mine" folder (which we know exists).
* fix: don't listen to composition if Selector Tree
* refactor: remove dead code
* fix: use MutableDomainObjects in the tree
- Only use mutables and observers if NOT a SelectorTree
- Properly clean up observers and mutables when a parent item is removed from the tree
* test: verify conflicts don't break object creation
* test: verify dialog closes and object is created
* refactor(e2e): update test
- Error notification on 'My Items' folder missing was removed, so don't check for it
* test: increase timeout
* refactor(e2e): use Promise.any()
* refactor(e2e): use Promise instead of polling
* test: add 2p annotation
* test: use `waitForRequest` instead of promise
- tidy up test, add comments describing our pattern
* docs(e2e): add best practices for network tests
* refactor(e2e): avoid using Promise.any
* fix: de-reactify observer and mutable maps
* fix: destroy by path on treeItem close
* fix: don't refresh for synchronized objects
* docs: fix a typo 🔥
* fix: remove existing mutable before adding
* fix: fail fast if these aren't functions
- Remove check for typeof 'function' to not hide any potential coding errors
* fix: walk up navigationPath if item not found
* chore: fix lint errors
* fix: parse conflicted object name correctly
* fix: re-throw conflict error
* fix: Cancel edit mode on conflict
* Setup a scroll handler to avoid using scrollIntoView when in a layout
* Implement a separate scroll to action when in layouts
* Simplified scroll reset event and logic
* Adjust test to capture new scroll handler
* Remove done invocation after converting to async fn
* Prevent default for arrow keys to avoid scrolling layoyut
* await scrollToFocused
* Logical or to nullish coalescing
* Removed set in favor of using isNavigatedObject api
* Apply animation style after image history has length
* Lint fixes
Co-authored-by: Scott Bell <scott@traclabs.com>
* Change approach to filter positive and negative infinity values when updating stats
* Change filter when there are no plot stats and a positive/negative infinity value occurs
* Add check for negative infinity
* Name the unplottable values array and move it to the constructor
* Add option to render infinity values
* Add e2e test to render plot with infinity values
* Add accessibility labels to help locate items in tests
Refactor tests
* refactor(e2e): stabilize plotRendering test
Co-authored-by: Shefali <simplyrender@gmail.com>
Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
* Expose overlay plot so that it can be imported by an external plugin
* If the current object has an independentContext, ignore any upstream independentContext
* Accept any custom url param in open in new tab action
* Bump version to `2.1.3` (#5973)
* Preserve Gauge configuration changes on create/edit (#5986)
* fix(#5985): deep merge on create/edit properties
- Perform a deep merge of old and new properties on Create/Edit properties actions
* refactor(e2e): improve selector in appActions
* test(e2e): add tests for gauges
- test creating a non-default gauge (checks only for console errors)
- test updating a gauge (checks only for console errors)
* fix(e2e): use pluginFixtures for gauge tests
* fix(e2e): prevent fail if testNotes is undefined
* Make the tree key unique (#5989)
Co-authored-by: Shefali Joshi <simplyrender@gmail.com>
* Use composition API in RemoveAction
* refactor: ScatterPlotView to use composition API
* fix: initialize transaction to null and reset
* fix: remove seriesKey and correct found condition
* refactor: Gauge to use composition API
* refactor: DisplayLayout to use composition API
* test: RemoveAction starts and ends transactions
* test: add ScatterPlot add/remove telemetry test
* test: fix e2e test and add annotation
* test: remove unnecessary awaits
* test: make some displayLayout tests stable
* test{displayLayout}: navigate to objects via url
* test(gauge): add test for add/remove telemetry
* fix(#3117): init layoutItems within transaction
* refactor: add clearSelection() method
* test: remove unstable tag
* fix(#3117): init frames and use transactions
- fixes#3117 for flexible layouts by syncing frames and composition
- also uses transactions now to avoid race condition
* test(flexibleLayout): removing items via context menu
- add test for removing items via context menu while focusing the layout
- add test for removing items via context menu while not focusing the layout
* fix(e2e): use pluginFixtures
* refactor(e2e): improve selectors
* refactor: use async/await for saving transactions
* docs(e2e): fix comments
* test: use soft expects
Co-authored-by: Jamie V <jamie.j.vigliotta@nasa.gov>
* feat: sort interceptors by priority
* fix(#5914): high priority for MyItemsInterceptor
* fix: create myItems if object is falsy
* test(e2e): update snapshots
Co-authored-by: Scott Bell <scott@traclabs.com>
* [e2e][couchdb] Add test for mct5616
- Add test to verify that modifying object properties generates a single persistence operation with CouchDB
* [e2e] Poll for 1 sec to allow time for request
* [e2e] ignore expected console error
* add comments
* add `aria-label`s to form select fields
* add `aria-label` for clock format select
* [e2e] Improve selector
* make property name less ambiguous
* refactor(e2e): use default object name
* feat(e2e): default unique names for new objects
* refactor(e2e): reference generated object names
- Fixes the tests that were locating "Unnamed <object_type>" to use the generated unique names
* feat(e2e): add testInfo into domainObject notes
- adds info about the currently running test and its project to notes
* fix(e2e): fix selector for notes section
* feat: ARIA: menu role for menus and SuperMenus
- Implements the [ARIA: menu role](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/roles/menu_role) for Menus and SuperMenus,
* refactor(e2e): use role selectors for menu items
* refactor(e2e): better selectors for "OK" button
* refactor(e2e): better selectors for menu items
* refactor(e2e): improve selector
* refactor(e2e): update test to use appActions
* refactor(e2e): update test to use object name
* refactor(e2e): improve selectors for menu items
* test(e2e): fix search test
* refactor(e2e): update more plain 'text=' selectors
* fix: resolve codeQL error
- remove superfluous argument
* refactor(e2e): move testNotes to `pluginFixtures` and update imports
* refactor(e2e): remove unused fixture from test
* refactor: add dynamic id to form textareas
* refactor(e2e): improve notes textarea selector
* refactor(e2e): remove unused fixture
* Bump version to `2.1.2`
* Ensure properties stay in sync and are committed only once (#5717)
* Ensure form properties stay in sync
* Separate out overlay based forms and custom forms
* Use a transaction to save properties
* Fix GaugeController to not depend on event emitted from FormsAPI
* refactor showForms to call showCustomForm
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Andrew Henry <akhenry@gmail.com>
* Fix persistence timestamp (#5916)
* Calculate persisted timestamp last
* Added regression tests
* Correct transaction handling code
* Code cleanup
* Fix typo for publish (#5936)
* Add e2e tests to npm package (#5930)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Shefali Joshi <simplyrender@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Andrew Henry <akhenry@gmail.com>
Co-authored-by: John Hill <john.c.hill@nasa.gov>
* add typescript
* update tsconfig
* convert to es6 class
* Convert more stuff to es6 class
* skip checking libs, test files
* more es6 classes!
* Fix some jsdocs
* Rename file
* Improve jsdoc types
* Rename references as well
* more types
* types for CompositionAPI
* Types for CompositionCollection
* Types for CompositionProvider
* type
* types for api
* nvm
* cleanup MCT
* Fix API type definition
* Generate types before publish
* fix openmct 👀
* rename PublicAPI -> OpenMCT and document methods
* try and fix visual test ?
* Make private methods private
* more private methods!!
* import all es6 api's so we get more types for free
* convert Selection to es6 class
* remove redundant docs
* fix Branding types
* fix openmct.start() types
* Remove useless `@memberof`
* Add parameter name
* [docs] Add a section on Types
* markdownlint
* word
* Add section on limitations / contibuting types
* Let these methods be private
* make private members private, fix a type
* fix another type
* Make method private
* Update docs for `skipMutate` and related methods
* Rename file and fix references
* `DefaultCompositionProvider` extends `CompositionProvider`
* Make private members private
* Type for `AbortSignal`
* `domainObject` must be accessible for perf tests
Co-authored-by: Andrew Henry <akhenry@gmail.com>
* initial changes adding modified and created by fields to domain objects and updating properties inspector
* adding created date to object creation
* added a test for created timestamp
* updating remove action to hold the transaction and disregard edit state when handling transactions, also updated object api to return transaction when starting and ignore edit state when determining if transaction is active
* updating docs for object api "startTransaction"
* updating incorrect use of edit and transaction in our appActions for testing
Co-authored-by: Andrew Henry <akhenry@gmail.com>
Co-authored-by: Shefali <simplyrender@gmail.com>
* [ConditionWidget] Center label text
Addresses #5799
* [ConditionWidget] Wrap label text
Addresses #5799
* [ConditionWidget] Add padding to label
Addresses #5799
* [ConditionWidget] Use interiorMargin value for padding
Addresses #5799
* add time context to telemetry requests
* change to empty array
* refactor telemetry api to use time context
* removed unused function
* add tests
* add test, rename function
* make function public
* Update version
* Don't delete annotations if there aren't any (#5829)
* don't delete annotations if there aren't any
* add test and align playwright-test
* align core with test
* added annotation describing test
* Add `aria-label` for time conductor history button (#5830)
* [Overlay Plot] Inspector series and legend sync fix (#5835)
* fixed overlay plots to react to series removals correctly, added alias visual to elements pool aliased items
* Keep transaction open on failed editor save (#5840)
* do not end a transaction on a failed editor save
* add unit tests for successful editor save and unsuccessful editor save
* If no matching tags, do not attempt tag search (#5839)
* do not attempt search if no matching tags
* fix timing on test
* commit again in hopes that github will run checks
* add back null tag check
* add some better documentation to tests
Co-authored-by: Andrew Henry <akhenry@gmail.com>
* Update version for master
Co-authored-by: Scott Bell <scott@traclabs.com>
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
Co-authored-by: Jamie V <jamie.j.vigliotta@nasa.gov>
Co-authored-by: David Tsay <3614296+davetsay@users.noreply.github.com>
Co-authored-by: Andrew Henry <akhenry@gmail.com>
* Add release to codeql and queries to match lgtm
* Add lgtm config file
* Custom codeQL config to ignore app.js
* Custom config for lgtm
* Remove query filter for lgtm
* Updated the security test docs
* Remove lgtm.yml and delete app.js references
* Update codeql-config.yml
Co-authored-by: Alize Nguyen <alizenguyen@gmail.com>
Co-authored-by: Andrew Henry <akhenry@gmail.com>
* Implementation of user attribution of object changes
* Adds created date to object creation
* Updating remove action to wait for save before navigationg
Co-authored-by: Andrew Henry <akhenry@gmail.com>
* Imagery thumbnail regression fixes - 5327 (#5591)
* Add an active class to thumbnail to indicate current focused image
* Differentiate bg color between real-time and fixed
* scrollIntoView inline: center
* Added watcher for bounds change to trigger thumbnail scroll
* Resolve merge conflict with requestHistory change to telemetry collection
* Split thumbnail into sub component
* Monitor isFixed value to unpause playback status
Co-authored-by: Khalid Adil <khalidadil29@gmail.com>
* [e2e] Improve appActions (#5592)
* update selectors to use aria labels
* Update appActions
- Create new function `getHashUrlToDomainObject` to get the browse url to a given object given its uuid
- Create new function `getFocusedObjectUuid`... self explanatory :)
- Update `createDomainObjectWIthDefaults` to make use of the new url generation
- Update `createDomainObject...`'s arguments to be more organized, and accept a parent object
- Update some docs, still need to clarify some
* Update appActions e2e tests
- Refactor for organization
- Test our new appActions in one go
* Update existing usages of `createDomainObject...` to match the new API
* fix accidental renamed export
* Fix jsdoc return types
* refactor telemetryTable test to use appActions
* Improve selectors
* Refactor test
* improve selector
* add clock mode appActions
* lint
* Fix jsdoc
* Code review comments
* mark failing visual tests as fixme temporarily
* Update package.json (#5601)
* Fix menu style in Snow theme (#5557)
* Include the plan source map when generating the time list/plan hybrid object (#5604)
* Search should indicate in progress and no results states, filter orphaned results (#5599)
* no matching result implemented
* now filtering annotations that are orphaned
* filter object results without valid paths
* add progress bar
* added e2e tests
* removed extraneous click
* fix typos
* fix unit tests
* lint
* address pr comments
* fix tests
* fix tests, centralize logic to object api, check for root instead
* remove debug statement
* lint
* fix documentation
* lint
* fix doc
* made some optimizations after talking with akhenry
* fix test
* update docs
* fix docs
* Have in-memory search indexer use composition API (#5578)
* need to remove tags and objects on composition removal
* had to separate out emits from load as it was causing memory indexer to loop upon itself
* Add parsing for areIdsEqual util to consistently remove folders (#5589)
* Add parsing util to identifier for ID comparison
* Moved firstIdentifier to top of function
* Lint fix
Co-authored-by: Andrew Henry <akhenry@gmail.com>
* Revert "Have in-memory search indexer use composition API (#5578)" (#5609)
This reverts commit 7cf11e177c.
* [e2e] Tests for Display Layout and LAD Tables and telemetry (#5607)
* Check for circular references in originalPath - 5615 (#5619)
* check for circular references
* add test
* fix test
* address PR comments by making comments better
* fix docs...again
* Don't request data if there is a mouse click with no action
Don't request data if width gets smaller or if the change is less than the threshold of 50.
* Update version number
* Prevent cyclic references in link & move actions (#5635)
* do not create circular refs
* add negative validation test
* move to plugin
* add link test too
* fix docs
* refactored per john request
* fix path
* use appAction lib
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* [Fault Management] New Example Provider, Unit and e2e tests (#5579)
* added unit tests for fault management plugin
* modified the example fault provider to work out of the box
* updating for new e2e folder structure
* part of the e2e tests
* WIP
* Imagery thumbnail regression fixes - 5327 (#5569)
* Add an active class to thumbnail to indicate current focused image
* Differentiate bg color between real-time and fixed
* scrollIntoView inline: center
* Added watcher for bounds change to trigger thumbnail scroll
* Resolve merge conflict with requestHistory change to telemetry collection
* Split thumbnail into sub component
* Monitor isFixed value to unpause playback status
* updated search to include name, namespace and description added some more e2e tests
* added rest of e2e tests
* fixed my init script, had to disable lint for no-force because it was not working without it, saw online this may be a pw bug
* fix: removing maelstrom theme from application (#5600)
* added some tests for no faults
* visual tests
* added visual tests for fault management
* created utils file for shared functionality between function and visual tests
* updating to 2.0.8
* tryin to remove imagery changes from master
* trying to trigger a refresh
* tryin to refresh
* updated search to include name, namespace and description added some more e2e tests
* added rest of e2e tests
* fix: removing maelstrom theme from application (#5600)
* fixed my init script, had to disable lint for no-force because it was not working without it, saw online this may be a pw bug
* added some tests for no faults
* visual tests
* added visual tests for fault management
* created utils file for shared functionality between function and visual tests
* updating to 2.0.8
* no clue
* still no clue
* removing imports and chaning to requires
* updating utils file to work with require
* fixing paths
* fixing a test I had messed up when adding static exmaple faults
* ONE LAST PATH FIX... hopefully
* typo in files fix
* fix folder typo
* thought I got this one, but apparently not, well I did now! who is laughing now!?
Co-authored-by: Michael Rogers <contact@mhrogers.com>
Co-authored-by: Vitor Henckel <vitor@henckel.com.br>
* Sort tree items locally on rename (#5643)
* fix typo
* Sort the tree items locally on object rename
* Use the navigationPath as a key
- This ensures that objects AND linked objects will be sorted
* add 'tree' and 'treeitem' roles to mct-tree
* WIP tree item reordering test
* Select the first object that matches
* Test that all object links are also reordered
* Get the final uuid before queryParams as notebook sections have uuids
* Make `openObjectTreeContextMenu` more deterministic and update usage
* Add `expandPathToTreeItem` and `expandTreeItemByName` appActions
* add `#tree-pane` id for the tree view
* Add tree visual component test suite and bump percy-cli
* Remove tree appActions
* Better variable name
Co-authored-by: Scott Bell <scott@traclabs.com>
* Mct5549 fix indexer composition error (#5610)
* [Display Layout] Composition and configuration sync (#5669)
LGTM
* [e2e] Stabilize notebook tag tests (#5681)
* Use more deterministic selector
* Hover first to "slow down" e2e actions while in headless mode
* Moves condition set fix into 2.0.8 (#5673)
* Remove flag that determines if data should be reloaded on interactions.
Separate logic to clear history and reload data.
* Rename method to clarify intention
* Set Focused Image index after a imagery is selected from a timestrip - 5632 (#5664)
* Set focused image when timestamp prop is passed in
* Unused var
* Create timestrip with imagery child
* Add equality check for hovered image and view large image url
* Cleanup
* Time List 5534 for release/2.0.8 (#5678)
* Changes to Time List view. Closes#5534.
- Compacted table row spacing.
- Set all timeframes to display by default when creating a new Time List.
- Removed 'Upload plan' file button from properties.
* Changes to Time List view. Closes#5534.
- Better hint text for editing Timeframe Inspector section.
Co-authored-by: Andrew Henry <akhenry@gmail.com>
* [CI] Enable couchdb e2e testing in open source (#5655)
* Reduce threshold to 10px - Chrome resizes to about 7 pixes and Firefox to 0.
* boilerplate for coverage
* add stubs
* Update version
* Remove debugging code
* [Flexible Layout] Fix draggable status for layout items while in browse mode (#5750)
* Modify flexible layout pages to make them not draggable in browse mode and add e2e test
* Don't destroy mutable if the domain object is not ready yet (#5695)
* Check if the domain object is set (mounted is done) before trying to destroy the mutable
* Use optional chaining. Add mutable promise check to prevent memory leaks
* Don't request data if there is a mouse click with no action
Don't request data if width gets smaller or if the change is less than the threshold of 50.
* Remove flag that determines if data should be reloaded on interactions.
Separate logic to clear history and reload data.
* Rename method to clarify intention
* Reduce threshold to 10px - Chrome resizes to about 7 pixes and Firefox to 0.
* boilerplate for coverage
* add stubs
* Remove debugging code
* Remove unused import
* Request priority (#5737)
* Set priority of couch requests to high
* Set priority of image requests to low
* Add e2e test for low-priority images
* Add test for re-requests on clicking a plot
* Adding new tests for testing plot requests for historical data
* Clean up e2e test for plot requesting historical data
* Write tests to ensure resizing the plot makes requests for data appropriately
* Remove fdescribe
* Fix resizing plot tests
Co-authored-by: Michael Rogers <contact@mhrogers.com>
Co-authored-by: Khalid Adil <khalidadil29@gmail.com>
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
Co-authored-by: John Hill <john.c.hill@nasa.gov>
Co-authored-by: Charles Hacskaylo <charlesh88@gmail.com>
Co-authored-by: Andrew Henry <akhenry@gmail.com>
Co-authored-by: Scott Bell <scott@traclabs.com>
Co-authored-by: Alize Nguyen <alizenguyen@gmail.com>
Co-authored-by: Jamie V <jamie.j.vigliotta@nasa.gov>
Co-authored-by: Vitor Henckel <vitor@henckel.com.br>
* trying this again
* wip
* wip
* wip
* one annotation per tag
* fixed too many events firing
* syncing works mostly
* syncing properly across existing annotations
* search with multiple tags
* resolve conflicts between different tag editors
* resolve conflicts
* fix annotation tests
* combine search results
* modify tests
* prevent infinite loop creating annotation
* add modified and deleted
* revert index checkin
* change to standard couch deleted flag
* revert throwing of error
* resolve conflict issues
* work in progress, but load annotations once from notebook
* works to add
* attempt 1
* wip
* last changes
* listening works, though still getting conflicts
* rename to annotationLastCreated
* use local mutable again
* works with new tags syncing
* listeners wont fire if modification is null
* clean up code
* fixed local search
* cleaned up log messages
* remove on more log
* add e2e test for network traffic
* lint
* change to use good old for each
* add some local variables for clarity
* Update src/api/objects/ObjectAPI.js
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* Update src/api/objects/ObjectAPI.js
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* Update src/plugins/notebook/components/Notebook.vue
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* press enter for last entry
* add test explanation of numbers
* fix spread typo
* add some nice jsdoc
* throw some errors
* use really small integer instead
* remove unneeded binding
* make method public and jsdoc it
* use mutables
* clean up tests
* clean up tests
* use aria labels for tests
* add some proper tsdoc to annotation api
* add undelete test
Co-authored-by: John Hill <john.c.hill@nasa.gov>
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* Reviewer to smoke test PRs before merge
* Update PULL_REQUEST_TEMPLATE.md
* Update PULL_REQUEST_TEMPLATE.md
* Update PULL_REQUEST_TEMPLATE.md
Changes based on feedback
* Update PULL_REQUEST_TEMPLATE.md
Tweaking the language slightly for clarity.
* Update PULL_REQUEST_TEMPLATE.md
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
* Closes#5640
- Layout frame edit handle visually tweaked, no longer resizes frame contents on hover when editing.
- Gauge now centers in its container instead of left flush.
- Added large bg-icon for aggregate telemetry.
- Removed 'no class' single wrapper div in mct-tree.vue.
- Refinements to appearance of locator in save/edit overlay dialog.
- Better styling for search in progress and 'no results' messaging.
- Revised art and glyph for `icon-tabular-scrolling`.
- Change TelemetryTableType to use icon-tabular-scrolling icon and bg-icon.
- Fix bad/erroneous descriptions for Telemetry Table, LAD Table and LAD Table Set.
- Fix descriptions for multiple view types.
- Removed unused .bg-icon class.
- Fixed bad value check that was causing panes not to collapse when dragged
(by design) to a very narrow width.
- Visual style for grippy adjusted for better clarity on some monitors.
- Normalize size of alphanumeric's labels and values in Display Layouts.
- Fix margin strategy for object label in main view.
- Fixed Locator to dynamically size itself to use available vertical space.
- Added new `l-overlay-dialog` size parameter.
- Better approach to overlay sizing to make Properties dialogs larger vertically
and fullscreen overlays more apparent to the user.
- Normalized approach to numeric inputs to fix cross-browser
inconsistency with input spinners.
- Fixed layout problem in `Datetime.vue` component due to
numeric input spinners changes.
- Added object types for Display Layout drawing objects.
- Code modded in `ObjectName.vue` to grab layout object cssClass from
layoutItem.type.
- Big thanks to @jvigliotta for the assist with this!
- update snapshots
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
Co-authored-by: Andrew Henry <akhenry@gmail.com>
* notebook embed visual test initial
* waiting for createNewEmbed util function to finish before adding embed
* removing debug code
* adding unstable tag to visual test
* added e2e embed tests for existing and new entriesupdated some test utils as well
* removing test artifacts
* removing more test artifacts
* adding test data back in
* removing debug code
* adding back in test artifacts
* updated test I broke
* removing focused test
* removing unsed variable
* fix lint issues
* adding unstable tag for new e2e tests
* Update version
* [Flexible Layout] Fix draggable status for layout items while in browse mode (#5750)
* Modify flexible layout pages to make them not draggable in browse mode and add e2e test
* Don't destroy mutable if the domain object is not ready yet (#5695)
* Check if the domain object is set (mounted is done) before trying to destroy the mutable
* Use optional chaining. Add mutable promise check to prevent memory leaks
* Request priority (#5737)
* Set priority of couch requests to high
* Set priority of image requests to low
* Add e2e test for low-priority images
* Timelist views support fixed time - 5629 (#5726)
* Initialize full view for fixed time
* Clean up
* Add back in ticker after merge
* Check for undefined clock instead of timestamp
* Cleanup
* Initialize full view for fixed time
* Clean up
* Add back in ticker after merge
* Check for undefined clock instead of timestamp
* Cleanup
* Update timestamp method and remove from beforeDestroy
* Shorten ternary to optional chaining
* Cleanup unused var
* Moved duplicated logic to method
* Reorder methods
* Update Timelist.vue
Set timestamp to clock start when in fixed time
* Added blank line
* Lint fix
* Update pluginSpec.js
* Invoke currentValue method properly
Co-authored-by: Khalid Adil <khalidadil29@gmail.com>
Co-authored-by: Andrew Henry <akhenry@gmail.com>
Co-authored-by: Michael Rogers <contact@mhrogers.com>
* docs for chrome
* Tidy up formatting, spelling/grammar, update snippet
* more readme fixes
* Update example test suite
Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
Co-authored-by: Jesse Mazzella <ozyx@users.noreply.github.com>
- Fixes erroneous TS language server warnings showing up in the VSCode terminal
- Ensures TypeScript language server features (such as refactor) are able to work properly by excluding build files
equal:[42,42]# Always generate version artifacts regardless of test failure https://discuss.circleci.com/t/make-custom-command-run-always-with-when-always/38957/2
echo "$TESTFILES" | circleci tests run --command="xargs npm run test:e2e:<<parameters.suite>>" --verbose --split-by=timings
- when:
condition:
equal:[42,42]# Always run codecov reports regardless of test failure https://discuss.circleci.com/t/make-custom-command-run-always-with-when-always/38957/2
equal:[42,42]# Always generate version artifacts regardless of test failure https://discuss.circleci.com/t/make-custom-command-run-always-with-when-always/38957/2
equal:[42,42]# Always run codecov reports regardless of test failure https://discuss.circleci.com/t/make-custom-command-run-always-with-when-always/38957/2
steps:
- generate_e2e_code_cov_report:
suite:full
- store_test_results:
path:test-results/results.xml
- store_artifacts:
path:test-results
- store_artifacts:
path:coverage
- store_artifacts:
path:html-test-results
- when:
condition:
equal:[42,42]# Always generate version artifacts regardless of test failure https://discuss.circleci.com/t/make-custom-command-run-always-with-when-always/38957/2
- run:sh src/plugins/persistence/couch/replace-localstorage-with-couchdb-indexhtml.sh#Replace LocalStorage Plugin with CouchDB
- run:npm run test:e2e:couchdb
- when:
condition:
equal:[42,42]# Always run codecov reports regardless of test failure https://discuss.circleci.com/t/make-custom-command-run-always-with-when-always/38957/2
steps:
- generate_e2e_code_cov_report:
suite:full#add to full suite
- store_test_results:
path:test-results/results.xml
- store_artifacts:
path:test-results
- store_artifacts:
path:coverage
- store_artifacts:
path:html-test-results
- when:
condition:
equal:[42,42]# Always generate version artifacts regardless of test failure https://discuss.circleci.com/t/make-custom-command-run-always-with-when-always/38957/2
equal:[42,42]# Always run codecov reports regardless of test failure https://discuss.circleci.com/t/make-custom-command-run-always-with-when-always/38957/2
equal:[42,42]# Always run codecov reports regardless of test failure https://discuss.circleci.com/t/make-custom-command-run-always-with-when-always/38957/2
equal:[42,42]# Always generate version artifacts regardless of test failure https://discuss.circleci.com/t/make-custom-command-run-always-with-when-always/38957/2
@ -8,22 +8,21 @@ Closes <!--- Insert Issue Number(s) this PR addresses. Start by typing # will op
* [ ] Have you followed the guidelines in our [Contributing document](https://github.com/nasa/openmct/blob/master/CONTRIBUTING.md)?
* [ ] Have you checked to ensure there aren't other open [Pull Requests](https://github.com/nasa/openmct/pulls) for the same update/change?
* [ ] Is this change backwards compatible? For example, developers won't need to change how they are calling the API or how they've extended core plugins such as Tables or Plots.
* [ ] Is this a [notable change](../docs/src/process/release.md) that will require a special callout in the release notes? For example, will this break compatibility with existing APIs or projects that consume these plugins?
### Author Checklist
* [ ] Changes address original issue?
* [ ] Tests included and/or updated with changes?
* [ ] Command line build passes?
* [ ] Has this been smoke tested?
* [ ] Have you associated this PR with a `type:` label? Note: this is not necessarily the same as the original issue.
* [ ] Have you associated a milestone with this PR? Note: leave blank if unsure.
* [ ] Testing instructions included in associated issue OR is this a dependency/testcase change?
### Reviewer Checklist
* [ ] Changes appear to address issue?
* [ ] Reviewer has tested changes by following the provided instructions?
* [ ] Changes appear not to be breaking changes?
* [ ] Appropriate unit tests included?
* [ ] Appropriate automated tests included?
* [ ] Code style and in-line documentation are appropriate?
* [ ] Commit messages meet standards?
* [ ] Has associated issue been labelled unverified? (only applicable if this PR closes the issue)
* [ ] Has associated issue been labelled bug? (only applicable if this PR is for a bug fix)
@ -10,7 +10,7 @@ accept changes from external contributors.
The short version:
1. Write your contribution or describe your idea in the form of an [GitHub issue](https://github.com/nasa/openmct/issues/new/choose) or [Starting a GitHub Discussion](https://github.com/nasa/openmct/discussions)
1. Write your contribution or describe your idea in the form of a [GitHub issue](https://github.com/nasa/openmct/issues/new/choose) or [start a GitHub discussion](https://github.com/nasa/openmct/discussions).
2. Make sure your contribution meets code, test, and commit message
standards as described below.
3. Submit a pull request from a topic branch back to `master`. Include a check
@ -18,13 +18,13 @@ The short version:
for review.)
4. Respond to any discussion. When the reviewer decides it's ready, they
will merge back `master` and fill out their own check list.
5. If you are a first-time contributor, please see [this discussion](https://github.com/nasa/openmct/discussions/3821) for further information.
5. If you are a first-time contributor, please see [this discussion](https://github.com/nasa/openmct/discussions/3821) for further information.
## Contribution Process
Open MCT uses git for software version control, and for branching and
merging. The central repository is at
https://github.com/nasa/openmct.git.
<https://github.com/nasa/openmct.git>.
### Roles
@ -116,6 +116,7 @@ the pull request containing the reviewer checklist (from below) and complete
the merge back to the master branch.
Additionally:
* Every pull request must link to the issue that it addresses. Eg. “Addresses #1234” or “Closes #1234”. This is the responsibility of the pull request’s __author__. If no issue exists, [create one](https://github.com/nasa/openmct/issues/new/choose).
* Every __author__ must include testing instructions. These instructions should identify the areas of code affected, and some minimal test steps. If addressing a bug, reproduction steps should be included, if they were not included in the original issue. If reproduction steps were included on the original issue, and are sufficient, refer to them.
* A pull request that closes an issue should say so in the description. Including the text “Closes #1234” will cause the linked issue to be automatically closed when the pull request is merged. This is the responsibility of the pull request’s __author__.
@ -132,25 +133,26 @@ changes.
### Code Standards
JavaScript sources in Open MCT must satisfy the ESLint rules defined in
this repository. This is verified by the command line build.
JavaScript sources in Open MCT must satisfy the [ESLint](https://eslint.org/) rules defined in
this repository. [Prettier](https://prettier.io/) is used in conjunction with ESLint to enforce code style
via automated formatting. These are verified by the command line build.
#### Code Guidelines
The following guidelines are provided for anyone contributing source code to the Open MCT project:
1. Write clean code. Here’s a good summary - https://github.com/ryanmcdermott/clean-code-javascript.
1. Write clean code. Here’s a good summary - <https://github.com/ryanmcdermott/clean-code-javascript>.
1. Include JSDoc for any exposed API (e.g. public methods, classes).
1. Include non-JSDoc comments as-needed for explaining private variables,
methods, or algorithms when they are non-obvious. Otherwise code
methods, or algorithms when they are non-obvious. Otherwise code
should be self-documenting.
1. Classes and Vue components should use camel case, first letter capitalized
(e.g. SomeClassName).
1. Methods, variables, fields, events, and function names should use camelCase,
first letter lower-case (e.g. someVariableName).
1. Source files that export functions should use camelCase, first letter lower-case (eg. testTools.js)
1. Constants (variables or fields which are meant to be declared and
initialized statically, and never changed) should use only capital
1. Constants (variables or fields which are meant to be declared and
initialized statically, and never changed) should use only capital
letters, with underscores between words (e.g. SOME_CONSTANT). They should always be declared as `const`s
1. File names should be the name of the exported class, plus a .js extension
(e.g. SomeClassName.js).
@ -159,21 +161,25 @@ The following guidelines are provided for anyone contributing source code to the
(e.g. as arguments to a forEach call). Anonymous functions should always be arrow functions.
1. Named functions are preferred over functions assigned to variables.
eg.
```JavaScript
function renameObject(object, newName) {
Object.name = newName;
}
```
is preferable to
```JavaScript
const rename = (object, newName) => {
Object.name = newName;
}
```
1. Avoid deep nesting (especially of functions), except where necessary
(e.g. due to closure scope).
1. End with a single new-line character.
1. Always use ES6 `Class`es and inheritence rather than the pre-ES6 prototypal
1. Always use ES6 `Class`es and inheritance rather than the pre-ES6 prototypal
pattern.
1. Within a given function's scope, do not mix declarations and imperative
code, and present these in the following order:
@ -182,19 +188,24 @@ The following guidelines are provided for anyone contributing source code to the
* Finally, the returned value. A single return statement at the end of the function should be used, except where an early return would improve code clarity.
1. Avoid the use of "magic" values.
eg.
```JavaScript
const UNAUTHORIZED = 401;
if (responseCode === UNAUTHORIZED)
```
is preferable to
```JavaScript
if (responseCode === 401)
```
1. Use the ternary operator only for simple cases such as variable assignment. Nested ternaries should be avoided in all cases.
1. Test specs should reside alongside the source code they test, not in a separate directory.
1. Unit Test specs should reside alongside the source code they test, not in a separate directory.
1. Organize code by feature, not by type.
eg.
```
```txt
- telemetryTable
- row
TableRow.js
@ -206,8 +217,10 @@ The following guidelines are provided for anyone contributing source code to the
plugin.js
pluginSpec.js
```
is preferable to
```
```txt
- telemetryTable
- components
TableRow.vue
@ -219,47 +232,10 @@ The following guidelines are provided for anyone contributing source code to the
plugin.js
pluginSpec.js
```
Deviations from Open MCT code style guidelines require two-party agreement,
typically from the author of the change and its reviewer.
### Test Standards
Automated testing shall occur whenever changes are merged into the main
development branch and must be confirmed alongside any pull request.
Automated tests are tests which exercise plugins, API, and utility classes.
Tests are subject to code review along with the actual implementation, to
ensure that tests are applicable and useful.
Examples of useful tests:
* Tests which replicate bugs (or their root causes) to verify their
resolution.
* Tests which reflect details from software specifications.
* Tests which exercise edge or corner cases among inputs.
* Tests which verify expected interactions with other components in the
system.
#### Guidelines
* 100% statement coverage is achievable and desirable.
* Do blackbox testing. Test external behaviors, not internal details. Write tests that describe what your plugin is supposed to do. How it does this doesn't matter, so don't test it.
* Unit test specs for plugins should be defined at the plugin level. Start with one test spec per plugin named pluginSpec.js, and as this test spec grows too big, break it up into multiple test specs that logically group related tests.
* Unit tests for API or for utility functions and classes may be defined at a per-source file level.
* Wherever possible only use and mock public API, builtin functions, and UI in your test specs. Do not directly invoke any private functions. ie. only call or mock functions and objects exposed by openmct.* (eg. openmct.telemetry, openmct.objectView, etc.), and builtin browser functions (fetch, requestAnimationFrame, setTimeout, etc.).
* Where builtin functions have been mocked, be sure to clear them between tests.
* Test at an appropriate level of isolation. Eg.
* If you’re testing a view, you do not need to test the whole application UI, you can just fetch the view provider using the public API and render the view into an element that you have created.
* You do not need to test that the view switcher works, there should be separate tests for that.
* You do not need to test that telemetry providers work, you can mock openmct.telemetry.request() to feed test data to the view.
* Use your best judgement when deciding on appropriate scope.
* Automated tests for plugins should start by actually installing the plugin being tested, and then test that installing the plugin adds the desired features and behavior to Open MCT, observing the above rules.
* All variables used in a test spec, including any instances of the Open MCT API should be declared inside of an appropriate block scope (not at the root level of the source file), and should be initialized in the relevant beforeEach block. `beforeEach` is preferable to `beforeAll` to avoid leaking of state between tests.
* A `afterEach` or `afterAll` should be used to do any clean up necessary to prevent leakage of state between test specs. This can happen when functions on `window` are wrapped, or when the URL is changed. [A convenience function](https://github.com/nasa/openmct/blob/master/src/utils/testing.js#L59) is provided for resetting the URL and clearing builtin spies between tests.
* If writing unit tests for legacy Angular code be sure to follow [best practices in order to avoid memory leaks](https://www.thecodecampus.de/blog/avoid-memory-leaks-angularjs-unit-tests/).
#### Examples
* [Example of an automated test spec for an object view plugin](https://github.com/nasa/openmct/blob/master/src/plugins/telemetryTable/pluginSpec.js)
* [Example of an automated test spec for API](https://github.com/nasa/openmct/blob/master/src/api/time/TimeAPISpec.js)
### Commit Message Standards
Commit messages should:
@ -295,13 +271,13 @@ these standards.
## Issue Reporting
Issues are tracked at https://github.com/nasa/openmct/issues.
Issues are tracked at <https://github.com/nasa/openmct/issues>.
Issue severity is categorized as follows (in ascending order):
* _Trivial_: Minimal impact on the usefulness and functionality of the software; a "nice-to-have." Visual impact without functional impact,
* _Medium_: Some impairment of use, but simple workarounds exist
* _Critical_: Significant loss of functionality or impairment of use. Display of telemetry data is not affected though.
* _Critical_: Significant loss of functionality or impairment of use. Display of telemetry data is not affected though. Complex workarounds exist.
* _Blocker_: Major functionality is impaired or lost, threatening mission success. Display of telemetry data is impaired or blocked by the bug, which could lead to loss of situational awareness.
## Check Lists
@ -310,22 +286,4 @@ The following check lists should be completed and attached to pull requests
when they are filed (author checklist) and when they are merged (reviewer
Open MCT, Copyright (c) 2014-2022, United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All rights reserved.
Open MCT, Copyright (c) 2014-2024, United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All rights reserved.
Open MCT is licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
# Open MCT [](http://www.apache.org/licenses/LICENSE-2.0) [](https://lgtm.com/projects/g/nasa/openmct/context:javascript) [](https://codecov.io/gh/nasa/openmct) [](https://percy.io/b2e34b17/openmct) [](https://www.npmjs.com/package/openmct)
# Open MCT [](http://www.apache.org/licenses/LICENSE-2.0) [](https://codecov.io/gh/nasa/openmct) [](https://percy.io/b2e34b17/openmct) [](https://www.npmjs.com/package/openmct) 
Open MCT (Open Mission Control Technologies) is a next-generation mission control framework for visualization of data on desktop and mobile devices. It is developed at NASA's Ames Research Center, and is being used by NASA for data analysis of spacecraft missions, as well as planning and operation of experimental rover systems. As a generalizable and open source framework, Open MCT could be used as the basis for building applications for planning, operation, and analysis of any systems producing telemetry data.
Please visit our [Official Site](https://nasa.github.io/openmct/) and [Getting Started Guide](https://nasa.github.io/openmct/getting-started/)
> [!NOTE]
> Please visit our [Official Site](https://nasa.github.io/openmct/) and [Getting Started Guide](https://nasa.github.io/openmct/getting-started/)
Once you've created something amazing with Open MCT, showcase your work in our GitHub Discussions [Show and Tell](https://github.com/nasa/openmct/discussions/categories/show-and-tell) section. We love seeing unique and wonderful implementations of Open MCT!
## See Open MCT in Action
Try Open MCT now with our [live demo](https://openmct-demo.herokuapp.com/).

## Building and Running Open MCT Locally
Building and running Open MCT in your local dev environment is very easy. Be sure you have [Git](https://git-scm.com/downloads) and [Node.js](https://nodejs.org/) installed, then follow the directions below. Need additional information? Check out the [Getting Started](https://nasa.github.io/openmct/getting-started/) page on our website.
(These instructions assume you are installing as a non-root user; developers have [reported issues](https://github.com/nasa/openmct/issues/1151) running these steps with root privileges.)
1. Clone the source code
1. Clone the source code:
`git clone https://github.com/nasa/openmct.git`
```sh
git clone https://github.com/nasa/openmct.git
```
2.Install development dependencies. Note: Check the package.json engine for our tested and supported node versions.
2.(Optional) Install the correct node version using [nvm](https://github.com/nvm-sh/nvm):
`npm install`
```sh
nvm install
```
3.Run a local development server
3.Install development dependencies (Note: Check the `package.json` engine for our tested and supported node versions):
`npm start`
```sh
npm install
```
Open MCT is now running, and can be accessed by pointing a web browser at [http://localhost:8080/](http://localhost:8080/)
4. Run a local development server:
```
npm start
```
> [!IMPORTANT]
> Open MCT is now running, and can be accessed by pointing a web browser at [http://localhost:8080/](http://localhost:8080/)
Open MCT is built using [`npm`](http://npmjs.com/) and [`webpack`](https://webpack.js.org/).
## Documentation
@ -40,37 +53,42 @@ The clearest examples for developing Open MCT plugins are in the
[tutorials](https://github.com/nasa/openmct-tutorial) provided in
our documentation.
We want Open MCT to be as easy to use, install, run, and develop for as
possible, and your feedback will help us get there! Feedback can be provided via [GitHub issues](https://github.com/nasa/openmct/issues/new/choose), [Starting a GitHub Discussion](https://github.com/nasa/openmct/discussions), or by emailing us at [arc-dl-openmct@mail.nasa.gov](mailto:arc-dl-openmct@mail.nasa.gov).
> [!NOTE]
> We want Open MCT to be as easy to use, install, run, and develop for as
> possible, and your feedback will help us get there!
> Feedback can be provided via [GitHub issues](https://github.com/nasa/openmct/issues/new/choose),
> [Starting a GitHub Discussion](https://github.com/nasa/openmct/discussions),
> or by emailing us at [arc-dl-openmct@mail.nasa.gov](mailto:arc-dl-openmct@mail.nasa.gov).
## Building Applications With Open MCT
## Developing Applications With Open MCT
Open MCT is built using [`npm`](http://npmjs.com/) and [`webpack`](https://webpack.js.org/).
See our documentation for a guide on [building Applications with Open MCT](https://github.com/nasa/openmct/blob/master/API.md#starting-an-open-mct-application).
For more on developing with Open MCT, see our documentation for a guide on [Developing Applications with Open MCT](./API.md#starting-an-open-mct-application).
## Compatibility
This is a fast moving project and we do our best to test and support the widest possible range of browsers, operating systems, and nodejs APIs. We have a published list of support available in our package.json's `browserslist` key.
This is a fast moving project and we do our best to test and support the widest possible range of browsers, operating systems, and NodeJS APIs. We have a published list of support available in our package.json's `browserslist` key.
If you encounter an issue with a particular browser, OS, or nodejs API, please file a [GitHub issue](https://github.com/nasa/openmct/issues/new/choose)
The project utilizes `nvm` to maintain consistent node and npm versions across all projects. For UNIX, MacOS, Windows WSL, and other POSIX-compliant shell environments, click [here](https://github.com/nvm-sh/nvm). For Windows, check out [nvm-windows](https://github.com/coreybutler/nvm-windows).
If you encounter an issue with a particular browser, OS, or NodeJS API, please [file an issue](https://github.com/nasa/openmct/issues/new/choose).
## Plugins
Open MCT can be extended via plugins that make calls to the Open MCT API. A plugin is a group
Open MCT can be extended via plugins that make calls to the Open MCT API. A plugin is a group
of software components (including source code and resources such as images and HTML templates)
that is intended to be added or removed as a single unit.
As well as providing an extension mechanism, most of the core Open MCT codebase is also
As well as providing an extension mechanism, most of the core Open MCT codebase is also
written as plugins.
For information on writing plugins, please see [our API documentation](https://github.com/nasa/openmct/blob/master/API.md#plugins).
For information on writing plugins, please see [our API documentation](./API.md#plugins).
## Tests
Our automated test coverage comes in the form of unit, e2e, visual, performance, and security tests.
Our automated test coverage comes in the form of unit, e2e, visual, performance, and security tests.
### Unit Tests
Unit Tests are written for [Jasmine](https://jasmine.github.io/api/edge/global)
and run by [Karma](http://karma-runner.github.io). To run:
@ -82,25 +100,35 @@ in the `src` hierarchy. Full configuration details are found in
alongside the units that they test; for example, `src/foo/Bar.js` would be
tested by `src/foo/BarSpec.js`.
### e2e, Visual, and Performance tests
The e2e, Visual, and Performance tests are written for playwright and run by playwright's new test runner [@playwright/test](https://playwright.dev/).
### e2e, Visual, and Performance Testing
To run the e2e tests which are part of every commit:
Our e2e (end-to-end), Visual, and Performance tests leverage the Playwright framework and are executed using Playwright's test runner, [@playwright/test](https://playwright.dev/).
`npm run test:e2e:stable`
#### How to Run Tests
To run the visual test suite:
- **e2e Tests**: These tests are run on every commit. To run the tests locally, use:
`npm run test:e2e:visual`
```sh
npm run test:e2e:ci
```
To run the performance tests:
- **Visual Tests**: For running the visual test suite, use:
`npm run test:perf`
```sh
npm run test:e2e:visual
```
The test suite is configured to all tests localed in `e2e/tests/` ending in `*.e2e.spec.js`. For more about the e2e test suite, please see the [README](./e2e/README.md)
- **Performance Tests**: To initiate the performance tests, enter:
```sh
npm run test:perf
```
All tests are located within the `e2e/tests/` directory and are identified by the `*.e2e.spec.js` filename pattern. For more information about the e2e test suite, refer to the [README](./e2e/README.md).
### Security Tests
Each commit is analyzed for known security vulnerabilities using [CodeQL](https://codeql.github.com/docs/codeql-language-guides/codeql-library-for-javascript/) and our overall security report is available on [LGTM](https://lgtm.com/projects/g/nasa/openmct/)
Each commit is analyzed for known security vulnerabilities using [CodeQL](https://codeql.github.com/docs/codeql-language-guides/codeql-library-for-javascript/). The list of CWE coverage items is available in the [CodeQL docs](https://codeql.github.com/codeql-query-help/javascript-cwe/). The CodeQL workflow is specified in the [CodeQL analysis file](./.github/workflows/codeql-analysis.yml) and the custom [CodeQL config](./.github/codeql/codeql-config.yml).
### Test Reporting and Code Coverage
@ -108,58 +136,55 @@ Each test suite generates a report in CircleCI. For a complete overview of testi
Our code coverage is generated during the runtime of our unit, e2e, and visual tests. The combination of those reports is published to [codecov.io](https://app.codecov.io/gh/nasa/openmct/)
# Glossary
For more on the specifics of our code coverage setup, [see](TESTING.md#code-coverage)
## Glossary
Certain terms are used throughout Open MCT with consistent meanings
or conventions. Any deviations from the below are issues and should be
addressed (either by updating this glossary or changing code to reflect
correct usage.) Other developer documentation, particularly in-line
documentation, may presume an understanding of these terms.
* _plugin_: A plugin is a removable, reusable grouping of software elements.
The application is composed of plugins.
* _composition_: In the context of a domain object, this refers to the set of
other domain objects that compose or are contained by that object. A domain
object's composition is the set of domain objects that should appear
immediately beneath it in a tree hierarchy. A domain object's composition is
described in its model as an array of id's; its composition capability
provides a means to retrieve the actual domain object instances associated
with these identifiers asynchronously.
* _description_: When used as an object property, this refers to the human-readable
description of a thing; usually a single sentence or short paragraph.
(Most often used in the context of extensions, domain
object models, or other similar application-specific objects.)
* _domain object_: A meaningful object to the user; a distinct thing in
the work support by Open MCT. Anything that appears in the left-hand
tree is a domain object.
* _identifier_: A tuple consisting of a namespace and a key, which together uniquely
identifies a domain object.
* _model_: The persistent state associated with a domain object. A domain
object's model is a JavaScript object which can be converted to JSON
without losing information (that is, it contains no methods.)
* _name_: When used as an object property, this refers to the human-readable
name for a thing. (Most often used in the context of extensions, domain
object models, or other similar application-specific objects.)
* _navigation_: Refers to the current state of the application with respect
to the user's expressed interest in a specific domain object; e.g. when
a user clicks on a domain object in the tree, they are _navigating_ to
it, and it is thereafter considered the _navigated_ object (until the
user makes another such choice.)
* _namespace_: A name used to identify a persistence store. A running open MCT
application could potentially use multiple persistence stores, with the
| _plugin_ | A removable, reusable grouping of software elements. The application is composed of plugins. |
| _composition_ | In the context of a domain object, this term refers to the set of other domain objects that compose or are contained by that object. A domain object's composition is the set of domain objects that should appear immediately beneath it in a tree hierarchy. It is described in its model as an array of ids, providing a means to asynchronously retrieve the actual domain object instances associated with these identifiers. |
| _description_ | When used as an object property, this term refers to the human-readable description of a thing, usually a single sentence or short paragraph. It is most often used in the context of extensions, domain object models, or other similar application-specific objects. |
| _domain object_ | A meaningful object to the user and a distinct thing in the work supported by Open MCT. Anything that appears in the left-hand tree is a domain object. |
| _identifier_ | A tuple consisting of a namespace and a key, which together uniquely identifies a domain object. |
| _model_ | The persistent state associated with a domain object. A domain object's model is a JavaScript object that can be converted to JSON without losing information, meaning it contains no methods. |
| _name_ | When used as an object property, this term refers to the human-readable name for a thing. It is most often used in the context of extensions, domain object models, or other similar application-specific objects. |
| _navigation_ | This term refers to the current state of the application with respect to the user's expressed interest in a specific domain object. For example, when a user clicks on a domain object in the tree, they are navigating to it, and it is thereafter considered the navigated object until the user makes another such choice. |
| _namespace_ | A name used to identify a persistence store. A running Open MCT application could potentially use multiple persistence stores. |
## Open MCT v2.0.0
Support for our legacy bundle-based API, and the libraries that it was built on (like Angular 1.x), have now been removed entirely from this repository.
For now if you have an Open MCT application that makes use of the legacy API, [a plugin](https://github.com/nasa/openmct-legacy-plugin) is provided that bootstraps the legacy bundling mechanism and API. This plugin will not be maintained over the long term however, and the legacy support plugin will not be tested for compatibility with future versions of Open MCT. It is provided for convenience only.
### How do I know if I am using legacy API?
You might still be using legacy API if your source code
* Contains files named bundle.js, or bundle.json,
* Makes calls to `openmct.$injector()`, or `openmct.$angular`,
* Makes calls to `openmct.legacyRegistry`, `openmct.legacyExtension`, or `openmct.legacyBundle`.
- Contains files named bundle.js, or bundle.json,
- Makes calls to `openmct.$injector()`, or `openmct.$angular`,
- Makes calls to `openmct.legacyRegistry`, `openmct.legacyExtension`, or `openmct.legacyBundle`.
### What should I do if I am using legacy API?
Please refer to [the modern Open MCT API](https://nasa.github.io/openmct/documentation/). Post any questions to the [Discussions section](https://github.com/nasa/openmct/discussions) of the Open MCT GitHub repository.
## Related Repos
> [!NOTE]
> Although Open MCT functions as a standalone project, it is primarily an extensible framework intended to be used as a dependency with users' own plugins and packaging. Furthermore, Open MCT is intended to be used with an HTTP server such as Apache or Nginx. A great example of hosting Open MCT with Apache is `openmct-quickstart` and can be found in the table below.
| Repository | Description |
| --- | --- |
| [openmct-tutorial](https://github.com/nasa/openmct-tutorial) | A great place for beginners to learn how to use and extend Open MCT. |
| [openmct-quickstart](https://github.com/scottbell/openmct-quickstart) | A working example of Open MCT integrated with Apache HTTP server, YAMCS telemetry, and Couch DB for persistence.
| [Open MCT YAMCS Plugin](https://github.com/akhenry/openmct-yamcs) | Plugin for integrating YAMCS telemetry and command server with Open MCT. |
| [openmct-performance](https://github.com/unlikelyzero/openmct-performance) | Resources for performance testing Open MCT. |
| [openmct-as-a-dependency](https://github.com/unlikelyzero/openmct-as-a-dependency) | An advanced guide for users on how to build, develop, and test Open MCT when it's used as a dependency. |
Open MCT Testing is iterating and improving at a rapid pace. This document serves to capture and index existing testing documentation and house documentation which no other obvious location as our testing evolves.
## General Testing Process
Documentation located [here](./docs/src/process/testing/plan.md)
## Unit Testing
Unit testing is essential part of our test strategy and complements our e2e testing strategy.
#### Unit Test Guidelines
* Unit Test specs should reside alongside the source code they test, not in a separate directory.
* Unit test specs for plugins should be defined at the plugin level. Start with one test spec per plugin named pluginSpec.js, and as this test spec grows too big, break it up into multiple test specs that logically group related tests.
* Unit tests for API or for utility functions and classes may be defined at a per-source file level.
* Wherever possible only use and mock public API, builtin functions, and UI in your test specs. Do not directly invoke any private functions. ie. only call or mock functions and objects exposed by openmct.* (eg. openmct.telemetry, openmct.objectView, etc.), and builtin browser functions (fetch, requestAnimationFrame, setTimeout, etc.).
* Where builtin functions have been mocked, be sure to clear them between tests.
* Test at an appropriate level of isolation. Eg.
* If you’re testing a view, you do not need to test the whole application UI, you can just fetch the view provider using the public API and render the view into an element that you have created.
* You do not need to test that the view switcher works, there should be separate tests for that.
* You do not need to test that telemetry providers work, you can mock openmct.telemetry.request() to feed test data to the view.
* Use your best judgement when deciding on appropriate scope.
* Automated tests for plugins should start by actually installing the plugin being tested, and then test that installing the plugin adds the desired features and behavior to Open MCT, observing the above rules.
* All variables used in a test spec, including any instances of the Open MCT API should be declared inside of an appropriate block scope (not at the root level of the source file), and should be initialized in the relevant beforeEach block. `beforeEach` is preferable to `beforeAll` to avoid leaking of state between tests.
* A `afterEach` or `afterAll` should be used to do any clean up necessary to prevent leakage of state between test specs. This can happen when functions on `window` are wrapped, or when the URL is changed. [A convenience function](https://github.com/nasa/openmct/blob/master/src/utils/testing.js#L59) is provided for resetting the URL and clearing builtin spies between tests.
#### Unit Test Examples
* [Example of an automated test spec for an object view plugin](https://github.com/nasa/openmct/blob/master/src/plugins/telemetryTable/pluginSpec.js)
* [Example of an automated test spec for API](https://github.com/nasa/openmct/blob/master/src/api/time/TimeAPISpec.js)
#### Unit Testing Execution
The unit tests can be executed in one of two ways:
`npm run test` which runs the entire suite against headless chrome
`npm run test:debug` for debugging the tests in realtime in an active chrome session.
## e2e, performance, and visual testing
Documentation located [here](./e2e/README.md)
## Code Coverage
It's up to the individual developer as to whether they want to add line coverage in the form of a unit test or e2e test.
Line Code Coverage is generated by our unit tests and e2e tests, then combined by ([Codecov.io Flags](https://docs.codecov.com/docs/flags)), and finally reported in GitHub PRs by Codecov.io's PR Bot. This workflow gives a comprehensive (if flawed) view of line coverage.
### Karma-istanbul
Line coverage is generated by our `karma-coverage-istanbul-reporter` package as defined in our `karma.conf.js` file:
```js
coverageIstanbulReporter:{
fixWebpackSourcePaths:true,
skipFilesWithNoCoverage:true,
dir:'coverage/unit',//Sets coverage file to be consumed by codecov.io
reports:['lcovonly']
},
```
Once the file is generated, it can be published to codecov with
The e2e line coverage is a bit more complex than the karma implementation. This is the general sequence of events:
1. Each e2e suite will start webpack with the ```npm run start:coverage``` command with config `webpack.coverage.mjs` and the `babel-plugin-istanbul` plugin to generate code coverage during e2e test execution using our custom [baseFixture](./baseFixtures.js).
1. During testcase execution, each e2e shard will generate its piece of the larger coverage suite. **This coverage file is not merged**. The raw coverage file is stored in a `.nyc_report` directory.
1. [nyc](https://github.com/istanbuljs/nyc) converts this directory into a `lcov` file with the following command `npm run cov:e2e:report`
1. Most of the tests focus on chrome/ubuntu at a single resolution. This coverage is published to codecov with `npm run cov:e2e:ci:publish`.
1. The rest of our coverage only appears when run against persistent datastore (couchdb), non-ubuntu machines, and non-chrome browsers with the `npm run cov:e2e:full:publish` flag. Since this happens about once a day, we have leveraged codecov.io's carryforward flag to report on lines covered outside of each commit on an individual PR.
### Limitations in our code coverage reporting
Our code coverage implementation has some known limitations:
The following is an evolving guide to troubleshoot CI and PR issues.
### Github Checks failing
There are a few reasons that your GitHub PR could be failing beyond simple failed tests.
* Required Checks. We're leveraging required checks in GitHub so that we can quickly and precisely control what becomes and informational failure vs a hard requirement. The only way to determine the difference between a required vs information check is check for the `(Required)` emblem next to the step details in GitHub Checks.
* Not all required checks are run per commit. You may need to manually trigger addition GitHub checks with a `pr:<label>` label added to your PR.
### Flaky tests
(CircleCI's test insights feature)[https://circleci.com/blog/introducing-test-insights-with-flaky-test-detection/] collects historical data about the individual test results for both unit and e2e tests. Note: only a 14 day window of flake is available.
### Local=Pass and CI=Fail
Although rare, it is possible that your test can pass locally but fail in CI.
### Reset your workspace
It's possible that you're running with dependencies or a local environment which is out of sync with the branch you're working on. Make sure to execute the following:
```sh
nvm use
npm run clean
npm install
```
#### Run tests in the same container as CI
In extreme cases, tests can fail due to the constraints of running within a container. To execute tests in exactly the same way as run in CircleCI.
```sh
// Replace {X.X.X} with the current Playwright version
// from our package.json or circleCI configuration file
extend the platform are provided in the following documentation.
## Sections
* The [API](api/) document is generated from inline documentation
using [JSDoc](http://usejsdoc.org/), and describes the JavaScript objects and
* The [API](api/) uses inline documentation.
using [TypeScript](https://www.typescriptlang.org) and some legacy [JSDoc](https://jsdoc.app/). It describes the JavaScript objects and
functions that make up the software platform.
* The [Development Process](process/) document describes the
* The [Development Process](process/) document describes the
Open MCT software development cycle.
* The [Tutorials](https://github.com/nasa/openmct-tutorial) give examples of extending the platform to add
functionality, and integrate with data sources.
* The [tutorial](https://github.com/nasa/openmct-tutorial) and [plugin template](https://github.com/nasa/openmct-hello) give examples of extending the platform to add
This document outlines the process and key considerations for releasing a new version of the NASA Open MCT project as an NPM (Node Package Manager) package.
## 1. Pre-requisites
Before releasing a new version of the NASA Open MCT NPM package, ensure all dependencies are updated, and comprehensive tests are performed. This ensures compatibility and performance of the Open MCT within the Node.js ecosystem.
## 2. Versioning
Versioning is a critical step for package release. The Open MCT team follows [Semantic Versioning (SemVer)](https://semver.org) that consists of three major components: MAJOR.MINOR.PATCH. These ensure a structured process for updating, bug fixes, backward compatibility, and software progress.
## 3. Changelog Maintenance
A comprehensive changelog file, `CHANGELOG.md`, documents any changes, adding a high level of transparencies for anyone desiring to look into the status of new and past progress. It includes the summation of any major new enhancements, changes, bug fixes, and the credits to the users responsible for each unique progress.
## 4. Notable Changes Labels on GitHub PRs
For the Open MCT package, we leverage GitHub's Pull Request (PR) mechanisms extensively, with three important PR labels dedicated to signifying 'notable_changes':
- **Breaking Change** Highlights the integration of changes that are suspected to break, or without a doubt will break, backward compatibility. These should signal to users the upgrade might be seamless only if dependency and integration factors are properly managed, if not, one should expect to manage atypical technical snags.
- **API change** Signifies when a contribution makes any complete or under layer changes to the communication or its supporting access processes. This label flags required see-through insight on how the web-based control panel sees and manipulates any value and or network logs.
- **Default Behavior Change:** In the incident an update either adjusts a form to or integrates a not previously kept setting or plugin. i.e. autoscale is enabled by default when working with plots.
## 6. Community & Contributions
A flat community and the rounded center are kept in continuous celebration, with the given station open for two open-specifying dialogues, research, and all-for development probing. State the ownership for a handed looped, a welcome for even structure-core and architectural draft and impend.
Thank you for your collaboration and commitment to moving the project onto a text big club.
@ -8,7 +8,7 @@ This document is designed to capture on the What, Why, and How's of writing and
1. [Getting Started](#getting-started)
2. [Types of Testing](#types-of-e2e-testing)
3. [Architecture](#architecture)
3. [Architecture](#test-architecture-and-ci)
## Getting Started
@ -51,11 +51,13 @@ Next, you should walk through our implementation of Playwright in Open MCT:
## Types of e2e Testing
e2e testing describes the layer at which a test is performed without prescribing the assertions which are made. Generally, when writing an e2e test, we have three choices to make on an assertion strategy:
e2e testing describes the layer at which a test is performed without prescribing the assertions which are made. Generally, when writing an e2e test, we have five choices to make on an assertion strategy:
1. Functional - Verifies the functional correctness of the application. Sometimes interchanged with e2e or regression testing.
2. Visual - Verifies the "look and feel" of the application and can only detect _undesirable changes when compared to a previous baseline_.
3. Snapshot - Similar to Visual in that it captures the "look" of the application and can only detect _undesirable changes when compared to a previous baseline_. **Generally not preferred due to advanced setup necessary.**
4. Accessibility - Verifies that the application meets the accessibility standards defined by the [WCAG organization](https://www.w3.org/WAI/standards-guidelines/wcag/).
5. Performance - Verifies that application provides a performant experience. Like Snapshot testing, these tests are generally not recommended due to their difficulty in providing a consistent result.
When choosing between the different testing strategies, think only about the assertion that is made at the end of the series of test steps. "I want to verify that the Timer plugin functions correctly" vs "I want to verify that the Timer plugin does not look different than originally designed".
@ -70,200 +72,494 @@ The bulk of our e2e coverage lies in "functional" test coverage which verifies t
Visual Testing is an essential part of our e2e strategy as it ensures that the application _appears_ correctly to a user while it compliments the functional e2e suite. It would be impractical to make thousands of assertions functional assertions on the look and feel of the application. Visual testing is interested in getting the DOM into a specified state and then comparing that it has not changed against a baseline.
For a better understanding of the visual issues which affect Open MCT, please see our bug tracker with the `label:visual` filter applied [here](https://github.com/nasa/openmct/issues?q=label%3Abug%3Avisual+)
To read about how to write a good visual test, please see [How to write a great Visual Test](#how-to-write-a-great-visual-test).
To read about how to write a good visual test, please see [How to write a great Visual Test](#how-to-write-a-great-visual-test).
`npm run test:e2e:visual` will run all of the visual tests against a local instance of Open MCT. If no `PERCY_TOKEN` API key is found in the terminal or command line environment variables, no visual comparisons will be made.
`npm run test:e2e:visual` commands will run all of the visual tests against a local instance of Open MCT. If no `PERCY_TOKEN` API key is found in the terminal or command line environment variables, no visual comparisons will be made.
-`npm run test:e2e:visual:ci` will run against every commit and PR.
-`npm run test:e2e:visual:full` will run every night with additional comparisons made for Larger Displays and with the `snow` theme.
#### Percy.io
To make this possible, we're leveraging a 3rd party service, [Percy](https://percy.io/). This service maintains a copy of all changes, users, scm-metadata, and baselines to verify that the application looks and feels the same _unless approved by a Open MCT developer_. To request a Percy API token, please reach out to the Open MCT Dev team on GitHub. For more information, please see the official [Percy documentation](https://docs.percy.io/docs/visual-testing-basics)
### (Advanced) Snapshot Testing
To make this possible, we're leveraging a 3rd party service, [Percy](https://percy.io/). This service maintains a copy of all changes, users, scm-metadata, and baselines to verify that the application looks and feels the same _unless approved by a Open MCT developer_. To request a Percy API token, please reach out to the Open MCT Dev team on GitHub. For more information, please see the official [Percy documentation](https://docs.percy.io/docs/visual-testing-basics).
Snapshot testing is very similar to visual testing but allows us to be more precise in detecting change without relying on a 3rd party service. Unfortuantely, this precision requires advanced test setup and teardown and so we're using this pattern as a last resort.
At present, we are using percy with two configuration files: `./e2e/.percy.nightly.yml` and `./e2e/.percy.ci.yml`. This is mainly to reduce the number of snapshots.
To give an example, if a *single* visual test assertion for an Overlay plot is run through multiple DOM rendering engines at various viewports to see how the Plot looks. If that same test were run as a snapshot test, it could only be executed against a single browser, on a single platform (ubuntu docker container).
### Advanced: Snapshot Testing (Not Recommended)
Read more about [Playwright Snapshots](https://playwright.dev/docs/test-snapshots)
While snapshot testing offers a precise way to detect changes in your application without relying on third-party services like Percy.io, we've found that it doesn't offer any advantages over visual testing in our use-cases. Therefore, snapshot testing is **not recommended** for further implementation.
Open MCT's implementation
-Our Snapshot tests receive a @snapshot tag.
-Snapshots need to be executed within the official playwright container to ensure we're using the exact rendering platform in CI and locally
#### CI vs Manual Checks
```
docker run --rm --network host -v $(pwd):/work/ -w /work/ -it mcr.microsoft.com/playwright:[GET THIS VERSION FROM OUR CIRCLECI CONFIG FILE]-focal /bin/bash
Snapshot tests can be reliably executed in Continuous Integration (CI) environments but lack the manual oversight provided by visual testing platforms like Percy.io. This means they may miss issues that a human reviewer could catch during manual checks.
#### Example
A single visual test assertion in Percy.io can be executed across 10 different browser and resolution combinations without additional setup, providing comprehensive testing with minimal configuration. In contrast, a snapshot test is restricted to a single OS and browser resolution, requiring more effort to achieve the same level of coverage.
#### Further Reading
For those interested in the mechanics of snapshot testing with Playwright, you can refer to the [Playwright Snapshots Documentation](https://playwright.dev/docs/test-snapshots). However, keep in mind that we do not recommend using this approach.
#### Open MCT's implementation
- Our Snapshot tests receive a `@snapshot` tag.
- Snapshots need to be executed within the official Playwright container to ensure we're using the exact rendering platform in CI and locally. To do a valid comparison locally:
```sh
// Replace {X.X.X} with the current Playwright version
// from our package.json or circleCI configuration file
npx playwright test --config=e2e/playwright-ci.config.js --project=chrome --grep @snapshot
npm run test:e2e:checksnapshots
```
(WIP) Updating Snapshots
When the @snapshot tests fail, they will need to be evaluated to see if the failure is an acceptable change or
### Updating Snapshots
When the `@snapshot` tests fail, they will need to be evaluated to determine if the failure is an acceptable and desireable or an unintended regression.
To compare a snapshot, run a test and open the html report with the 'Expected' vs 'Actual' screenshot. If the actual screenshot is preferred, then the source-controlled 'Expected' snapshots will need to be updated with the following scripts.
```sh
// Replace {X.X.X} with the current Playwright version
// from our package.json or circleCI configuration file
Once that's done, you'll need to run the following to verify that the changes do not cause more problems:
```sh
npm run test:e2e:checksnapshots
```
## Automated Accessibility (a11y) Testing
Open MCT incorporates accessibility testing through two primary methods to ensure its compliance with accessibility standards:
1.**Usage of Playwright's Locator Strategy**: Open MCT utilizes Playwright's locator strategy, specifically the [page.getByRole('') function](https://playwright.dev/docs/api/class-framelocator#frame-locator-get-by-role), to ensure that web elements are accessible via assistive technologies. This approach focuses on the accessibility of elements rather than full adherence to a11y guidelines, which is covered in the second method.
2.**Enforcing a11y Guidelines with Playwright Axe Plugin**: To rigorously enforce a11y guideline compliance, Open MCT employs the [playwright axe plugin](https://playwright.dev/docs/accessibility-testing). This is achieved through the `scanForA11yViolations` function within the visual testing suite. This method not only benefits from the existing coverage of the visual tests but also targets specific a11y issues, such as `color-contrast` violations, which are particularly pertinent in the context of visual testing.
### a11y Standards (WCAG and Section 508)
Playwright axe supports a wide range of [WCAG Standards](https://playwright.dev/docs/accessibility-testing#scanning-for-wcag-violations) to test against. Open MCT is testing against the [Section 508](https://www.section508.gov/test/testing-overview/) accessibility guidelines with the intent to support higher standards over time. As of 2024, Section508 requirements now map completely to WCAG 2.0 AA. In the future, Section 508 requirements may map to WCAG 2.1 AA.
### Reading an a11y test failure
When an a11y test fails, the result must be interpreted in the html test report or the a11y report json artifact stored in the `/test-results/` folder. The json structure should be parsed for `"violations"` by `"id"` and identified `"target"`. Example provided for the 'color-contrast-enhanced' violation.
"failureSummary":"Fix any of the following:\n Element has insufficient color contrast of 6.51 (foreground color: #aaaaaa, background color: #262626, font size: 8.1pt (10.8px), font weight: normal). Expected contrast ratio of 7:1"
}
```
## Performance Testing
The open source performance tests function mostly as a contract for the locator logic, functionality, and assumptions will work in our downstream, closed source test suites.
The open source performance tests function in three ways which match their naming and folder structure:
They're found in the `/e2e/tests/performance` repo and are to be executed with the following npm script:
`tests/performance` - The tests at the root of this folder path detect functional changes which are mostly apparent with large performance regressions like [this](https://github.com/nasa/openmct/issues/6879). These tests run against openmct webpack in `production-mode` with the `npm run test:perf:localhost` script.
`tests/performance/contract/` - These tests serve as [contracts](https://martinfowler.com/bliki/ContractTest.html) for the locator logic, functionality, and assumptions will work in our downstream, closed source test suites. These tests run against openmct webpack in `dev-mode` with the `npm run test:perf:contract` script.
`tests/performance/memory/` - These tests execute memory leak detection checks in various ways. This is expected to evolve as we move to the `memlab` project. These tests run against openmct webpack in `production-mode` with the `npm run test:perf:memory` script.
```npm run test:perf```
These tests are expected to become blocking and gating with assertions as we extend the capabilities of Playwright.
These tests are expected to become blocking and gating with assertions as we extend the capabilities of playwright.
In addition to the explicit definition of performance tests, we also ensure that our test timeout timing is "tight" to catch performance regressions detectable by action timeouts. i.e. [Notebooks load much slower than they used to #6459](https://github.com/nasa/openmct/issues/6459)
## Test Architecture and CI
### Architecture (TODO)
### Architecture
### File Structure
Our file structure follows the type of type of testing being excercised at the e2e layer and files containing test suites which matcher application behavior or our `src` and `example` layout. This area is not well refined as we figure out what works best for closed source and downstream projects. This may change altogether if we move `e2e` to it's own npm package.
Our file structure follows the type of type of testing being exercised at the e2e layer and files containing test suites which matcher application behavior or our `src` and `example` layout. This area is not well refined as we figure out what works best for closed source and downstream projects. This may change altogether if we move `e2e` to it's own npm package.
- `./helper` - contains helper functions or scripts which are leveraged directly within the testsuites. i.e. non-default plugin scripts injected into DOM
- `./test-data` - contains test data which is leveraged or generated in the functional, performance, or visual test suites. i.e. localStorage data
- `./tests/functional` - the bulk of the tests are contained within this folder to verify the functionality of open mct
- `./tests/functional/example/` - tests which specifically verify the example plugins
- `./tests/functional/plugins/` - tests which loosely test each plugin. This folder is the most likely to change. Note: some @snapshot tests are still contained within this structure
- `./tests/framework/` - tests which verify that our testframework functionality and assumptions will continue to work based on further refactoring or playwright version changes
- `./tests/performance/` - performance tests
- `./tests/visual/` - Visual tests
- `./appActions.js` - Contains common fixtures which can be leveraged by testcase authors to quickly move through the application when writing new tests.
- `./baseFixture.js` - Contains base fixtures which only extend default `@playwright/test` functionality. The goal is to remove these fixtures as native Playwright APIs improve.
|File Path|Description|
|:-:|-|
|`./helper` | Contains helper functions or scripts which are leveraged directly within the test suites (e.g.: non-default plugin scripts injected into the DOM)|
|`./test-data` | Contains test data which is leveraged or generated in the functional, performance, or visual test suites (e.g.: localStorage data).|
|`./tests/functional` | The bulk of the tests are contained within this folder to verify the functionality of Open MCT.|
|`./tests/functional/example/` | Tests which specifically verify the example plugins (e.g.: Sine Wave Generator).|
|`./tests/functional/plugins/` | Tests which loosely test each plugin. This folder is the most likely to change. Note: some `@snapshot` tests are still contained within this structure.|
|`./tests/framework/` | Tests which verify that our testing framework's functionality and assumptions will continue to work based on further refactoring or Playwright version changes (e.g.: verifying custom fixtures and appActions).|
|`./tests/performance/` | Performance tests which should be run on every commit.|
|`./tests/performance/contract/` | A subset of performance tests which are designed to provide a contract between the open source tests which are run on every commit and the downstream tests which are run post merge and with other frameworks.|
|`./tests/performance/memory` | A subset of performance tests which are designed to test for memory leaks.|
|`./tests/visual-a11y/` | Visual tests and accessibility tests.|
|`./tests/visual-a11y/component/` | Visual and accessibility tests which are only run against a single component.|
|`./appActions.js` | Contains common methods which can be leveraged by test case authors to quickly move through the application when writing new tests.|
|`./baseFixture.js` | Contains base fixtures which only extend default `@playwright/test` functionality. The expectation is that these fixtures will be removed as the native Playwright API improves|
Our functional tests end in `*.e2e.spec.js`, visual tests in `*.visual.spec.js` and performance tests in `*.perf.spec.js`.
Our functional tests end in `*.e2e.spec.js`, visual tests in `*.visual.spec.js` and performance tests in `*.perf.spec.js`.
### Configuration
Where possible, we try to run Open MCT without modification or configuration change so that the Open MCT doesn't fail exclusively in "test mode" or in "production mode".
Open MCT is leveraging the [config file](https://playwright.dev/docs/test-configuration) pattern to describe the capabilities of Open MCT e2e _where_ it's run
- `./playwright-ci.config.js` - Used when running in CI or to debug CI issues locally
- `./playwright-local.config.js` - Used when running locally
- `./playwright-performance.config.js` - Used when running performance tests in CI or locally
- `./playwright-visual.config.js` - Used to run the visual tests in CI or locally
|Config File|Description|
|:-:|-|
|`./playwright-ci.config.js` | Used when running in CI or to debug CI issues locally|
|`./playwright-local.config.js` | Used when running locally|
|`./playwright-performance.config.js` | Used when running performance tests in CI or locally|
|`./playwright-performance-devmode.config.js` | Used when running performance tests in CI or locally|
|`./playwright-visual-a11y.config.js` | Used to run the visual and a11y tests in CI or locally|
#### Test Tags
Test tags are a great way of organizing tests outside of a file structure. To learn more see the official documentation [here](https://playwright.dev/docs/test-annotations#tag-tests)
Test tags are a great way of organizing tests outside of a file structure. To learn more see the official documentation [here](https://playwright.dev/docs/test-annotations#tag-tests).
Current list of test tags:
- `@ipad` - Test case or test suite is compatible with Playwright's iPad support and Open MCT's read-only mobile view (i.e. no Create button).
- `@gds` - Denotes a GDS Test Case used in the VIPER Mission.
- `@addInit` - Initializes the browser with an injected and artificial state. Useful for loading non-default plugins. Likely will not work outside of app.js.
- `@localStorage` - Captures or generates session storage to manipulate browser state. Useful for excluding in tests which require a persistent backend (i.e. CouchDB).
- `@snapshot` - Uses Playwright's snapshot functionality to record a copy of the DOM for direct comparison. Must be run inside of the playwright container.
- `@unstable` - A new test or test which is known to be flaky.
- `@2p` - Indicates that multiple users are involved, or multiple tabs/pages are used. Useful for testing multi-user interactivity.
|Test Tag|Description|
|:-:|-|
|`@mobile` | Test case or test suite is compatible with Playwright's iPad support and Open MCT's read-only mobile view (i.e. no create button).|
|`@a11y` | Test case or test suite to execute playwright-axe accessibility checks and generate a11y reports.|
|`@addInit` | Initializes the browser with an injected and artificial state. Useful for loading non-default plugins. Likely will not work outside of `npm start`.|
|`@localStorage` | Captures or generates session storage to manipulate browser state. Useful for excluding in tests which require a persistent backend (i.e. CouchDB). See [note](#utilizing-localstorage)|
|`@snapshot` | Uses Playwright's snapshot functionality to record a copy of the DOM for direct comparison. Must be run inside of the playwright container.|
|`@2p` | Indicates that multiple users are involved, or multiple tabs/pages are used. Useful for testing multi-user interactivity.|
|`@generatedata` | Indicates that a test is used to generate testdata or test the generated test data. Usually to be associated with localstorage, but this may grow over time.|
|`@clock` | A test which modifies the clock. These have expanded out of the visual tests and into the functional tests.
|`@framework` | A test for open mct e2e capabilities. This is primarily to ensure we don't break projects which depend on sourcing this project's fixtures like appActions.js.
### Continuous Integration
The cheapest time to catch a bug is Pre-merge. Unfortuantely, this is the most expensive time to run all of the tests since each Merge event can consistent of hundreds of commits. For this reason, we're selective in _what_ we run as much as _when_ we run it.
The cheapest time to catch a bug is pre-merge. Unfortunately, this is the most expensive time to run all of the tests since each merge event can consist of hundreds of commits. For this reason, we're selective in _what we run_ as much as _when we run it_.
We leverage CircleCI to run tests against each commit and inject the Test Reports which are generated by playwright so that they team can keep track of flaky and [historical Test Trends](https://app.circleci.com/insights/github/nasa/openmct/workflows/overall-circleci-commit-status/tests?branch=master&reporting-window=last-30-days)
We leverage CircleCI to run tests against each commit and inject the Test Reports which are generated by Playwright so that they team can keep track of flaky and [historical test trends](https://app.circleci.com/insights/github/nasa/openmct/workflows/overall-circleci-commit-status/tests?branch=master&reporting-window=last-30-days)
We leverage Github Actions / Workflows to execute tests as it gives us the ability to run against multiple operating systems with greater control over git event triggers (i.e. Run on a PR Comment event).
Our CI environment consists of 3 main modes of operation:
#### 1. Per-Commit Testing
CircleCI
- Stable e2e tests against ubuntu and chrome
- e2e tests against ubuntu and chrome
- Performance tests against ubuntu and chrome
- e2e tests are linted
- Visual and a11y tests are run in a single resolution on the default `espresso` theme
#### 2. Per-Merge Testing
Github Actions / Workflow
- Full suite against all browsers/projects. Triggered with Github Label Event 'pr:e2e'
- Visual Tests. Triggered with Github Label Event 'pr:visual'
- CouchDB Tests. Triggered on PR Create and again with Github Label Event 'pr:e2e:couchdb'
#### 3. Scheduled / Batch Testing
Nightly Testing in Circle CI
- Full e2e suite against ubuntu and chrome
- Full e2e suite against ubuntu and chrome, firefox, and an MMOC resolution profile
- Performance tests against ubuntu and chrome
- CouchDB suite
- Visual and a11y Tests are run in the full profile
Github Actions / Workflow
- Visual Test baseline generation.
- None at the moment
#### Parallelism and Fast Feedback
In order to provide fast feedback in the Per-Commit context, we try to keep total test feedback at 5 minutes or less. That is to say, A developer should have a pass/fail result in under 5 minutes.
Playwright has native support for semi-intelligent sharding. Read about it [here](https://playwright.dev/docs/test-parallel#shard-tests-between-multiple-machines).
We will be adjusting the parallelization of the Per-Commit tests to keep below the 5 minute total runtime threshold.
In addition to the Parallelization of Test Runners (Sharding), we're also running two concurrent threads on every Shard. This is the functional limit of what CircelCI Agents can support from a memory and CPU resource constraint.
In addition to the Parallelization of Test Runners (Sharding), we're also running two concurrent threads on every Shard. This is the functional limit of what CircleCI Agents can support from a memory and CPU resource constraint.
So for every commit, Playwright is effectively running 4 x 2 concurrent browsercontexts to keep the overall runtime to a miminum.
At the same time, we don't want to waste CI resources on parallel runs, so we've configured each shard to fail after 5 test failures. Test failure logs are recorded and stored to allow fast triage.
#### Test Promotion
In order to maintain fast and reliable feedback, tests go through a promotion process. All new test cases or test suites must be labeled with the `@unstable` annotation. The Open MCT dev team runs these unstable tests in our private repos to ensure they work downstream and are reliable.
To run the stable tests, use the ```npm run test:e2e:stable``` command. To run the new and flaky tests, use the ```npm run test:e2e:unstable``` command.
A testcase and testsuite are to be unmarked as @unstable when:
1. They run as part of "full" run 5 times without failure.
2. They've been by a Open MCT Developer 5 times in the closed source repo without failure.
### Cross-browser and Cross-operating system
- Where is it tested
- What's supported
- Mobile
#### **What's supported:**
We are leveraging the `browserslist` project to declare our supported list of browsers. We support macOS, Windows, and ubuntu 20+.
#### **Where it's tested:**
We lint on `browserslist` to ensure that we're not implementing deprecated browser APIs and are aware of browser API improvements over time.
We also have the need to execute our e2e tests across this published list of browsers. Our browsers and browser version matrix is found inside of our `./playwright-*.config.js`, but mostly follows in order of bleeding edge to stable:
-`playwright-chromium channel:beta`
- A beta version of Chromium from official chromium channels. As close to the bleeding edge as we can get.
-`playwright-chromium`
- A stable version of Chromium from the official chromium channels. This is always at least 1 version ahead of desktop chrome.
-`playwright-chrome`
- The stable channel of Chrome from the official chrome channels. This is always 2 versions behind chromium.
-`playwright-firefox`
- Firefox Latest Stable. Modified slightly by the playwright team to support a CDP Shim.
In terms of operating system testing, we're only limited by what the CI providers are able to support. The bulk of our testing is performed on the official playwright container which is based on ubuntu. Github Actions allows us to use `windows-latest` and `mac-latest` and is run as needed.
#### **Mobile**
We have a Mission-need to support iPad and mobile devices. To run our test suites with mobile devices, please see our `playwright-mobile.config.js` projects.
In general, our test suite is not designed to run against mobile devices as the mobile experience is a focused version of the application. Core functionality is missing (chiefly the 'Create' button). To bypass the object creation, we leverage the `storageState` properties for starting the mobile tests with localstorage.
For now, the mobile tests will exist in the /tests/mobile/ suites and be executed with the
```sh
npm run test:e2e:mobile
```
command.
#### **Skipping or executing tests based on browser, os, and/os browser version:**
Conditionally skipping tests based on browser (**RECOMMENDED**):
```js
test('Can adjust image brightness/contrast by dragging the sliders',async({page,browserName})=>{
- Avoid repeated setup to test to test a single assertion. Write longer tests with multiple soft assertions.
#### Test as the User
### How to write a great test (TODO)
In general, strive to test only through the UI as a user would. As stated in the [Playwright Best Practices](https://playwright.dev/docs/best-practices#test-user-visible-behavior):
#### How to write a great visual test (TODO)
> "Automated tests should verify that the application code works for the end users, and avoid relying on implementation details such as things which users will not typically use, see, or even know about such as the name of a function, whether something is an array, or the CSS class of some element. The end user will see or interact with what is rendered on the page, so your test should typically only see/interact with the same rendered output."
By adhering to this principle, we can create tests that are both robust and reflective of actual user experiences.
#### How to make tests robust to function in other contexts (VISTA, COUCHDB, YAMCS, VIPER, etc.)
1. Leverage the use of `appActions.js` methods such as `createDomainObjectWithDefaults()`. This ensures that your tests will create unique instances of objects for your test to interact with.
1. Do not assert on the order or structure of objects available unless you created them yourself. These tests may be used against a persistent datastore like couchdb with many objects in the tree.
1. Do not search for your created objects. Open MCT does not performance uniqueness checks so it's possible that your tests will break when run twice.
1. Avoid creating locator aliases. This likely means that you're compensating for a bad locator. Improve the application instead.
1. Leverage `await page.goto('./', { waitUntil: 'domcontentloaded' });` instead of `{ waitUntil: 'networkidle' }`. Tests run against deployments with websockets often have issues with the networkidle detection.
#### How to make tests faster and more resilient to application changes
1. Avoid app interaction when possible. The best way of doing this is to navigate directly by URL:
```js
// You can capture the CreatedObjectInfo returned from this appAction:
- Initial navigation should _almost_ always use the `{ waitUntil: 'domcontentloaded' }` option.
1. Avoid repeated setup to test a single assertion. Write longer tests with multiple soft assertions.
This ensures that your changes will be picked up with large refactors.
1. Use [user-facing locators](https://playwright.dev/docs/best-practices#use-locators) (Now a eslint rule!)
```js
page.getByRole('button', { name: 'Create' } )
```
Instead of
```js
page.locator('.c-create-button')
```
Note: `page.locator()` can be used in performance tests as xk6-browser does not yet support the new `page.getBy` pattern and css lookups can be [1.5x faster](https://serpapi.com/blog/css-selectors-faster-than-getbyrole-playwright/)
##### Utilizing LocalStorage
1. In order to save test runtime in the case of tests that require a decent amount of initial setup (such as in the case of testing complex displays), you may use [Playwright's `storageState` feature](https://playwright.dev/docs/api/class-browsercontext#browser-context-storage-state) to generate and load localStorage states.
1. To generate a localStorage state to be used in a test:
- Add an e2e test to our generateLocalStorageData suite which sets the initial state (creating/configuring objects, etc.), saving it in the `test-data` folder:
- Load the state from file at the beginning of the desired test suite (within the `test.describe()`). (NOTE: the storage state will be used for each test in the suite, so you may need to create a new suite):
- Avoid using css locators to find elements to the page. Use modern web accessible locators like `getByRole`
- Use our [App Actions](./appActions.js) for performing common actions whenever applicable.
- Use `waitForPlotsToRender()` before asserting against anything that is dependent upon plot series data being loaded and drawn.
- If you create an object outside of using the `createDomainObjectWithDefaults` App Action, make sure to fill in the 'Notes' section of your object with `page.testNotes`:
```js
// Fill the "Notes" section with information about the
1. **Look for the Unknown Unknowns**: Avoid asserting on specific differences in the visual diff. Visual tests are most effective for identifying unknown unknowns.
2. **Get the App into Interesting States**: Prioritize getting Open MCT into unusual layouts or behaviors before capturing a visual snapshot. For instance, you could open a dropdown menu.
3. **Expect the Unexpected**: Use functional expect statements only to verify assumptions about the state between steps. A great visual test doesn't fail during the test itself, but rather when changes are reviewed in Percy.io.
4. **Control Variability**: Account for variations inherent in working with time-based telemetry and clocks.
- Utilize `percyCSS` to ignore time-based elements. For more details, consult our [percyCSS file](./.percy.ci.yml).
- Use Open MCT's fixed-time mode unless explicitly testing realtime clock
- Employ the `createExampleTelemetryObject` appAction to source telemetry and specify a `name` to avoid autogenerated names.
- Avoid creating objects with a time component like timers and clocks.
- Utilize the playwright clock() API. See @clock Annotations for examples.
5. **Hide the Tree and Inspector**: Generally, your test will not require comparisons involving the tree and inspector. These aspects are covered in component-specific tests (explained below). To exclude them from the comparison by default, navigate to the root of the main view with the tree and inspector hidden:
6. **Component-Specific Tests**: If you wish to focus on a particular component, use the `/visual-a11y/component/` folder and limit the scope of the comparison to that component. For instance:
- Note: The `scope` variable can be any valid CSS selector.
7. **Write many `percySnapshot` commands in a single test**: In line with our approach to longer functional tests, we recommend that many test percySnapshots are taken in a single test. For instance:
8. **Use `networkidle` to wait for network requests to complete**: This is necessary to ensure that all network requests have completed before taking a snapshot. This ensures that icons are loaded and other assets are available. https://github.com/nasa/openmct/issues/7549
#### How to write a great network test
- Where possible, it is best to mock out third-party network activity to ensure we are testing application behavior of Open MCT.
- It is best to be as specific as possible about the expected network request/response structures in creating your mocks.
- Make sure to only mock requests which are relevant to the specific behavior being tested.
- Where possible, network requests and responses should be treated in an order-agnostic manner, as the order in which certain requests/responses happen is dynamic and subject to change.
Some examples of mocking network responses in regards to CouchDB can be found in our [couchdb.e2e.spec.js](./tests/functional/couchdb.e2e.spec.js) test file.
### Best Practices
For now, our best practices exist as self-tested, living documentation in our [exampleTemplate.e2e.spec.js](./tests/framework/exampleTemplate.e2e.spec.js) file.
### Tips & Tricks (TODO)
For best practices with regards to mocking network responses, see our [couchdb.e2e.spec.js](./tests/functional/couchdb.e2e.spec.js) file.
### Tips & Tricks
The following contains a list of tips and tricks which don't exactly fit into a FAQ or Best Practices doc.
- (Advanced) Overriding the Browser's Clock
It is possible to override the browser's clock in order to control time-based elements. Since this can cause unwanted behavior -- i.e. Tree not rendering -- only use this sparingly. Use the `page.clock()` API as such:
```js
import { test, expect } from '../../pluginFixtures.js';
There are instances where multiple browser pages will need to be opened to verify multi-page or multi-tab application behavior.
There are instances where multiple browser pages will needed to verify multi-page or multi-tab application behavior. Make sure to use the `@2p` annotation as well as name each page appropriately: i.e. `page1` and `page2` or `tab1` and `tab2` depending on the intended use case. Generally pages should be used unless testing `sharedWorker` code, specifically.
- Working with file downloads and JSON data
Open MCT has the capability of exporting certain objects in the form of a JSON file handled by the chrome browser. The best example of this type of test can be found in the exportAsJson test.
```js
const [download] = await Promise.all([
page.waitForEvent('download'), // Waits for the download event
page.getByLabel('Export as JSON').click() // Triggers the download
]);
// Wait for the download process to complete
const path = await download.path();
// Read the contents of the downloaded file using readFile from fs/promises
Test Reporting is done through official Playwright reporters and the CI Systems which execute them.
We leverage the following official Playwright reporters:
- HTML
- junit
- github annotations
- Tracefile
- Screenshots
When running the tests locally with the `npm run test:local` command, the html report will open automatically on failure. Inside this HTML report will be a complete summary of the finished tests. If the tests failed, you'll see embedded links to screenshot failure, execution logs, and the Tracefile.
When running the tests locally with the `npm run test:e2e:local` command, the html report will open automatically on failure. Inside this HTML report will be a complete summary of the finished tests. If the tests failed, you'll see embedded links to screenshot failure, execution logs, and the Tracefile.
When looking at the reports run in CI, you'll leverage this same HTML Report which is hosted either in CircleCI or Github Actions as a build artifact.
### e2e Code Coverage
Code coverage is collected during test execution using our custom [baseFixture](./baseFixtures.js). The raw coverage files are stored in a `.nyc_report` directory to be converted into a lcov file with the following [nyc](https://github.com/istanbuljs/nyc) command:
Our e2e code coverage is captured and combined with our unit test coverage. For more information, please see our [code coverage documentation](../TESTING.md)
```npm run cov:e2e:report```
#### Generating e2e code coverage
At this point, the nyc linecov report can be published to [codecov.io](https://about.codecov.io/) with the following command:
Please read more about our codecoverage [here](../TESTING.md#code-coverage)
```npm run cov:e2e:stable:publish``` for the stable suite running in ubuntu.
or
```npm run cov:e2e:full:publish``` for the full suite running against all available platforms.
Codecov.io will combine each of the above commands with [Codecov.io Flags](https://docs.codecov.com/docs/flags). Effectively, this allows us to combine multiple reports which are run at various stages of our CI Pipeline or run as part of a parallel process.
This e2e coverage is combined with our unit test report to give a comprehensive (if flawed) view of line coverage.
## Other
### About e2e testing
@ -312,10 +608,40 @@ A single e2e test in Open MCT is extended to run:
- How is Open MCT extending default Playwright functionality?
- What about Component Testing?
### Troubleshooting
### Writing Tests
- Why is my test failing on CI and not locally?
- How can I view the failing tests on CI?
- Tests won't start because 'Error: http://localhost:8080/# is already used...'
Playwright provides 3 supported methods of debugging and authoring tests:
- A 'watch mode' for running tests locally and debugging on the fly
- A 'debug mode' for debugging tests and writing assertions against tests
- A 'VSCode plugin' for debugging tests within the VSCode IDE.
Generally, we encourage folks to use the watch mode and provide a script `npm run test:e2e:watch` which launches the launch mode ui and enables hot reloading on the dev server.
### e2e Troubleshooting
Please follow the general guide troubleshooting in [the general troubleshooting doc](../TESTING.md#troubleshooting-ci)
- Tests won't start because 'Error: <http://localhost:8080/># is already used...'
This error will appear when running the tests locally. Sometimes, the webserver is left in an orphaned state and needs to be cleaned up. To clear up the orphaned webserver, execute the following from your Terminal:
In order to upgrade from one version of Playwright to another, the version should be updated in several places in both `openmct` and `openmct-yamcs` repos. An easy way to identify these locations is to search for the current version in all files and find/replace.
For reference, all of the locations where the version should be updated are listed below:
#### **In `openmct`:**
- `package.json`
- Both packages `@playwright/test` and `playwright-core` should be updated to the same target version.
- `.circleci/config.yml`
- `.github/workflows/e2e-couchdb.yml`
- `.github/workflows/e2e-pr.yml`
#### **In `openmct-yamcs`:**
- `package.json`
- `@playwright/test` should be updated to the target version.
* This common function creates a domain object with the default options. It is the preferred way of creating objects
* in the e2e suite when uninterested in properties of the objects themselves.
*
* @param {import('@playwright/test').Page} page
* @param {CreateObjectOptions} options
* @param {import('@playwright/test').Page} page - The Playwright page object.
* @param {Object} options - Options for creating the domain object.
* @param {string} options.type - The type of domain object to create (e.g., "Sine Wave Generator").
* @param {string} [options.name] - The desired name of the created domain object.
* @param {string | import('../src/api/objects/ObjectAPI').Identifier} [options.parent='mine'] - The Identifier or uuid of the parent object. Defaults to 'mine' folder
* @returns {Promise<CreatedObjectInfo>} An object containing information about the newly created domain object.
* Waits and asserts that all plot series data on the page
* is loaded and drawn.
*
* In lieu of a better way to detect when a plot is done rendering,
* we [attach a class to the '.gl-plot' element](https://github.com/nasa/openmct/blob/5924d7ea95a0c2d4141c602a3c7d0665cb91095f/src/plugins/plot/MctPlot.vue#L27)
* once all pending series data has been loaded. The following appAction retrieves
* all plots on the page and waits up to the default timeout for the class to be
* attached to each plot.
* @param {import('@playwright/test').Page} page
* @param {number} [timeout] Provide a custom timeout in milliseconds to override the default timeout
* Open MCT, Copyright (c) 2014-2022, United States Government
* Open MCT, Copyright (c) 2014-2024, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
@ -23,6 +23,6 @@
// This should be used to install the Example Fault Provider, this will also install the FaultManagementPlugin (neither of which are installed by default).
* Open MCT, Copyright (c) 2014-2022, United States Government
* Open MCT, Copyright (c) 2014-2024, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
@ -23,8 +23,8 @@
// This should be used to install the Example Fault Provider, this will also install the FaultManagementPlugin (neither of which are installed by default).
* Open MCT, Copyright (c) 2014-2022, United States Government
* Open MCT, Copyright (c) 2014-2024, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
@ -23,6 +23,6 @@
// This should be used to install the Example Fault Provider, this will also install the FaultManagementPlugin (neither of which are installed by default).
retries:2,//Retries 2 times for a total of 3 runs. When running sharded and with maxFailures = 5, this should ensure that flake is managed without failing the full suite
testDir:'tests',
testIgnore:'**/*.perf.spec.js',//Ignore performance tests and define in playwright-perfromance.config.js
timeout:60*1000,
webServer:{
command:'cross-env NODE_ENV=test npm run start',
url:'http://localhost:8080/#',
timeout:200*1000,
reuseExistingServer:false
retries:2,//Retries 2 times for a total of 3 runs. When running sharded and with max-failures=5, this should ensure that flake is managed without failing the full suite
testDir:'tests',
grepInvert:/@mobile/,//Ignore mobile tests
testIgnore:'**/*.perf.spec.js',//Ignore performance tests and define in playwright-performance.config.js
timeout:60*1000,
webServer:{
command:'npm run start:coverage',
cwd:fileURLToPath(newURL('../',import.meta.url)),// Provide cwd for the root of the project
url:'http://localhost:8080/#',
timeout:200*1000,
reuseExistingServer:true//This was originally disabled to prevent differences in local debugging vs. CI. However, it significantly speeds up local debugging.
},
maxFailures:MAX_FAILURES,//Limits failures to 5 to reduce CI Waste
workers:NUM_WORKERS,//Limit to 2 for CircleCI Agent
retries:1,//Retries 2 times for a total of 3 runs. When running sharded and with max-failures=5, this should ensure that flake is managed without failing the full suite
testDir:'tests',
testIgnore:'**/*.perf.spec.js',//Ignore performance tests and define in playwright-performance.config.js
timeout:30*1000,
webServer:{
command:'npm run start:coverage',
cwd:fileURLToPath(newURL('../',import.meta.url)),// Provide cwd for the root of the project
url:'http://localhost:8080/#',
timeout:200*1000,
reuseExistingServer:true//This was originally disabled to prevent differences in local debugging vs. CI. However, it significantly speeds up local debugging.
},
maxFailures:MAX_FAILURES,//Limits failures to 5 to reduce CI Waste
workers:1,//Limit to 1 due to resource constraints similar to https://github.com/percy/cli/discussions/1067
retries:0,// Visual tests should never retry due to snapshot comparison errors. Leaving as a shim
testDir:'tests/visual-a11y',
testMatch:'**/*.visual.spec.js',// only run visual tests
timeout:60*1000,
workers:1,//Lower stress on Circle CI Agent for Visual tests https://github.com/percy/cli/discussions/1067
webServer:{
command:'npm run start:coverage',
cwd:fileURLToPath(newURL('../',import.meta.url)),// Provide cwd for the root of the project
url:'http://localhost:8080/#',
timeout:200*1000,
reuseExistingServer:true//This was originally disabled to prevent differences in local debugging vs. CI. However, it significantly speeds up local debugging.
},
use:{
baseURL:'http://localhost:8080/',
headless:true,// this needs to remain headless to avoid visual changes due to GPU rendering in headed browsers
ignoreHTTPSErrors:true,
screenshot:'only-on-failure',
trace:'on-first-retry',
video:'off'
},
projects:[
{
name:'chrome',
use:{
browserName:'chromium'
}
},
{
name:'chrome-snow-theme',//Runs the same visual tests but with snow-theme enabled
use:{
browserName:'chromium',
theme:'snow'
}
},
{
name:'darkmatter-theme',//Runs the same visual tests but with darkmatter-theme
retries:0,//Retries are not needed with watch mode
testDir:'tests',
timeout:60*1000,
webServer:{
command:'npm run start',//Start in dev mode for hot reloading
cwd:fileURLToPath(newURL('../',import.meta.url)),// Provide cwd for the root of the project
url:'http://localhost:8080/#',
timeout:200*1000,
reuseExistingServer:true//This was originally disabled to prevent differences in local debugging vs. CI. However, it significantly speeds up local debugging.
},
workers:'75%',//Limit to 75% of the CPU to support running with dev server
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.