diff --git a/.github/workflows/test-ui.yml b/.github/workflows/test-ui.yml index 5e059229a80..5a60a570d76 100644 --- a/.github/workflows/test-ui.yml +++ b/.github/workflows/test-ui.yml @@ -1,3 +1,4 @@ + name: test-ui on: pull_request: @@ -50,22 +51,8 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/actions/setup-js - uses: browser-actions/setup-chrome@4f8e94349a351df0f048634f25fec36c3c91eded # v2.1.1 - - name: Retrieve Vault-hosted Secrets - if: endsWith(github.repository, '-enterprise') - id: vault - uses: hashicorp/vault-action@4c06c5ccf5c0761b6029f56cfb1dcf5565918a3b # v3.4.0 - with: - url: ${{ vars.CI_VAULT_URL }} - method: ${{ vars.CI_VAULT_METHOD }} - path: ${{ vars.CI_VAULT_PATH }} - jwtGithubAudience: ${{ vars.CI_VAULT_AUD }} - secrets: |- - kv/data/teams/nomad/ui PERCY_TOKEN ; - name: ember exam id: ember_exam - env: - PERCY_TOKEN: ${{ env.PERCY_TOKEN || secrets.PERCY_TOKEN }} - PERCY_PARALLEL_NONCE: ${{ needs.pre-test.outputs.nonce }} run: | pnpm exam:parallel --split=${{ matrix.split }} --partition=${{ matrix.partition }} --json-report=test-results/test-results.json continue-on-error: true @@ -101,17 +88,6 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/actions/setup-js - - name: Retrieve Vault-hosted Secrets - if: endsWith(github.repository, '-enterprise') - id: vault - uses: hashicorp/vault-action@4c06c5ccf5c0761b6029f56cfb1dcf5565918a3b # v3.4.0 - with: - url: ${{ vars.CI_VAULT_URL }} - method: ${{ vars.CI_VAULT_METHOD }} - path: ${{ vars.CI_VAULT_PATH }} - jwtGithubAudience: ${{ vars.CI_VAULT_AUD }} - secrets: |- - kv/data/teams/nomad/ui PERCY_TOKEN ; - name: Download all test results if: github.event_name == 'push' && github.ref == 'refs/heads/main' uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 @@ -130,12 +106,6 @@ jobs: path: ui/combined-test-results.json retention-days: 90 - - name: finalize - env: - PERCY_TOKEN: ${{ env.PERCY_TOKEN || secrets.PERCY_TOKEN }} - PERCY_PARALLEL_NONCE: ${{ needs.pre-test.outputs.nonce }} - run: pnpm percy build:finalize - handle-failure: needs: - pre-test diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 817cd7933e5..44e5bfb6e21 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -64,12 +64,6 @@ importers: '@hashicorp/design-system-tokens': specifier: ^2.3.0 version: 2.3.0 - '@percy/cli': - specifier: ^1.30.0 - version: 1.31.0(typescript@5.9.2) - '@percy/ember': - specifier: ^4.2.0 - version: 4.2.0 anser: specifier: ^2.1.1 version: 2.3.2 @@ -1480,79 +1474,6 @@ packages: resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} engines: {node: '>= 10.0.0'} - '@percy/cli-app@1.31.0': - resolution: {integrity: sha512-NU4zSDNXbwL/AG58eFT5YPd8McZSY2vTV1MEnKNTixiSAM+KXX5oZ4ehrRV3bod+jIOsgl3x7WZJOwW9n+T1mQ==} - engines: {node: '>=14'} - - '@percy/cli-build@1.31.0': - resolution: {integrity: sha512-p+ml01nFlcHayQwNHrwC+DALUuSmz4I8839AoTAgnxqswEHwqPK9VR0Dtk1h+u8buviZ1meCtSETZLxClOYC5w==} - engines: {node: '>=14'} - - '@percy/cli-command@1.31.0': - resolution: {integrity: sha512-6NfDQLFV/56bI0RwVqe9rWvJ5IXrln84ZIPwT5NPsMYlLsu90hiS1360KcYllBTziZQUpBDT/uIpGxl+mFO/gA==} - engines: {node: '>=14'} - hasBin: true - - '@percy/cli-config@1.31.0': - resolution: {integrity: sha512-VjUvrlIvo46Vtdm7wfgOyLFHvY2QISUO8utQXfQZYXhPWN31laURKpQrSMkAkhpjlJ47/QNmRYvjjg5swRy7cw==} - engines: {node: '>=14'} - - '@percy/cli-exec@1.31.0': - resolution: {integrity: sha512-GI8YRYTGwM1WnFHVlQap9Lw+w7PzgryTay61R4yD7HcZInotehaSoGgQMB4jqMBlLYqVABaqsA2ZHaOmLMaeVA==} - engines: {node: '>=14'} - - '@percy/cli-snapshot@1.31.0': - resolution: {integrity: sha512-HNpNLgX9ZaYU6DUR9ekH5al8SJ+sVKG5kqvnR2k/61+aEzcCrTFDXY5sJcby69mRNVy5mdVRqLKmDxc+sHdI+Q==} - engines: {node: '>=14'} - - '@percy/cli-upload@1.31.0': - resolution: {integrity: sha512-dTnE4i2T1IQeAPLMkiFjWqfuaC4p3U/gJTjCU5xFpVAGs8Sw4WECXc7kZ1pe6o4IYUuGoM7bdqnVyLaUHbxp8Q==} - engines: {node: '>=14'} - - '@percy/cli@1.31.0': - resolution: {integrity: sha512-Ftztj3PLvdMnBylyXIsfEKbHsKRRMpKuk4pFi4MizCFrbM3O6D8raHmff6GaVkE95tMnkF+7gX0BlPzjnbzG8w==} - engines: {node: '>=14'} - hasBin: true - - '@percy/client@1.31.0': - resolution: {integrity: sha512-ACC2zSLOr+c/huLXYFFTrcF2B0c9EIK4gWg1yacIHeaI8ulkX+34UHeCwkWjDM4tcN5cANQ0y+EQv+QuCcWcYA==} - engines: {node: '>=14'} - - '@percy/config@1.31.0': - resolution: {integrity: sha512-PPsITaULaxYLyraSEZs1x9VKDhWunh0JfX/LSKh48BFE1ABWOxIUrqWP9KmCV2XelNAiLEm2ErkCMeS0vjTBxg==} - engines: {node: '>=14'} - - '@percy/core@1.31.0': - resolution: {integrity: sha512-7grj0KMnWeHAQkT7EGOIztEwnQJ2U0Ejvd+Agz0UoWYMXtPnn4QapSeVjqVAr7s7y4PtDVT9kwZ55Kzuq+hzTg==} - engines: {node: '>=14'} - - '@percy/dom@1.31.0': - resolution: {integrity: sha512-eEzzYQGVTZoq0ENrDX9Ih1G3JSYaqLpci++bb1J9kgulkSLXVi0JE8cKftcajo/8QrTrSs9OQCJa2+M1X2te8Q==} - - '@percy/ember@4.2.0': - resolution: {integrity: sha512-D/WckDD2tQetdn8uq46nQA1rOVgov8jsZG4uN7snAq6SrOpxNxacONg37QPwczmICBc7o/NlipCAUteukmtKzg==} - engines: {node: '>= 14'} - - '@percy/env@1.31.0': - resolution: {integrity: sha512-KRKYhDLlMwyLvKQNw1bx8XeXArLig6WyuCTIdwQkLwh4fZllEmSqPDnCUSk0Cu5rpcq0ItVOcZ4vy0R3KcmLBA==} - engines: {node: '>=14'} - - '@percy/logger@1.31.0': - resolution: {integrity: sha512-OZHybJzTFFeG44uh02SXHCVbMpyE4KnGHr2rFG1T6/RLfmy0WPBOYz2yvCKDPKjuTkYBd4zBacTgokK0onAoJw==} - engines: {node: '>=14'} - - '@percy/monitoring@1.31.0': - resolution: {integrity: sha512-myysetAc2Kz0LsLy1JGHHB7DCsiodeW1u/b71M7kiwWYBWw840hiBEgoUDvJkgJ2Tig3oLoyI4aTqyvTExNu+A==} - engines: {node: '>=14'} - - '@percy/sdk-utils@1.31.0': - resolution: {integrity: sha512-hlzEq75BmQUwzu9oOVNWCRmT8l1PZ/KTDdBF01swArevffOV4cF4QtOQAA+jpDT4SIur66X9AmciLnMLmLzYkA==} - engines: {node: '>=14'} - - '@percy/webdriver-utils@1.31.0': - resolution: {integrity: sha512-e7k/rpkd9mhZWbUdgMU9wSj5exWWAmSLnVVLPPXn//SujSvt0koDkvCkXNMbE3aOSNC7yB48w3LE4hh0TK5slQ==} - engines: {node: '>=14'} - '@popperjs/core@2.11.8': resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} @@ -1585,9 +1506,6 @@ packages: resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} engines: {node: '>= 6'} - '@tootallnate/quickjs-emscripten@0.23.0': - resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} - '@types/acorn@4.0.6': resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} @@ -1688,9 +1606,6 @@ packages: '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - '@types/yauzl@2.10.3': - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -1860,10 +1775,6 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} - agent-base@7.1.4: - resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} - engines: {node: '>= 14'} - ajv-errors@1.0.1: resolution: {integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==} peerDependencies: @@ -2032,10 +1943,6 @@ packages: resolution: {integrity: sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA==} engines: {node: '>=4'} - ast-types@0.13.4: - resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} - engines: {node: '>=4'} - astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} @@ -2371,10 +2278,6 @@ packages: resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} engines: {node: '>= 0.8'} - basic-ftp@5.0.5: - resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} - engines: {node: '>=10.0.0'} - better-path-resolve@1.0.0: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} @@ -2655,9 +2558,6 @@ packages: bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} - buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -3179,15 +3079,6 @@ packages: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} - cosmiconfig@8.3.6: - resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true - create-ecdh@4.0.4: resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} @@ -3378,10 +3269,6 @@ packages: dag-map@2.0.2: resolution: {integrity: sha512-xnsprIzYuDeiyu5zSKwilV/ajRHxnoMlAhEREfyfTgTSViMVY2fGP1ZcHJbtwup26oCkofySU/m6oKJ3HrkW7w==} - data-uri-to-buffer@6.0.2: - resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} - engines: {node: '>= 14'} - data-urls@2.0.0: resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} engines: {node: '>=10'} @@ -3467,10 +3354,6 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} - degenerator@5.0.1: - resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} - engines: {node: '>= 14'} - delaunator@5.0.1: resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==} @@ -4353,11 +4236,6 @@ packages: resolution: {integrity: sha512-AEo4zm+TenK7zQorGK1f9mJ8L14hnTDi2ZQPR+Mub1NX8zimka1mXpV5LpH8x9HoUmFSHZCfLHqWvp0Y4FxxzQ==} engines: {node: '>=8'} - extract-zip@2.0.1: - resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} - engines: {node: '>= 10.17.0'} - hasBin: true - fake-xml-http-request@2.1.2: resolution: {integrity: sha512-HaFMBi7r+oEC9iJNpc3bvcW7Z7iLmM26hPDmlb0mFwyANSsOQAtJxbdWsXITKOzZUyMYK0zYCv3h5yDj9TsiXg==} @@ -4404,9 +4282,6 @@ packages: fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - figgy-pudding@3.5.2: resolution: {integrity: sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==} deprecated: This module is no longer supported. @@ -4692,10 +4567,6 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-uri@6.0.5: - resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} - engines: {node: '>= 14'} - git-hooks-list@1.0.3: resolution: {integrity: sha512-Y7wLWcrLUXwk2noSka166byGCvhMtDRpgHdzCno1UQv/n/Hegp++a2xBWJL1lJarnKD3SWaljD+0z1ztqxuKyQ==} @@ -4887,10 +4758,6 @@ packages: resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} engines: {node: '>= 6'} - http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} - http-proxy@1.18.1: resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} engines: {node: '>=8.0.0'} @@ -4902,10 +4769,6 @@ packages: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} - https@1.0.0: resolution: {integrity: sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg==} @@ -4949,11 +4812,6 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - image-size@1.2.1: - resolution: {integrity: sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==} - engines: {node: '>=16.x'} - hasBin: true - immutable@5.1.3: resolution: {integrity: sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==} @@ -5018,10 +4876,6 @@ packages: invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} - ip-address@9.0.5: - resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} - engines: {node: '>= 12'} - ip-regex@4.3.0: resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} engines: {node: '>=8'} @@ -5290,13 +5144,6 @@ packages: resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} hasBin: true - js-yaml@4.1.1: - resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} - hasBin: true - - jsbn@1.1.0: - resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - jsdom@16.7.0: resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} engines: {node: '>=10'} @@ -5391,9 +5238,6 @@ packages: line-column@1.0.2: resolution: {integrity: sha512-Ktrjk5noGYlHsVnYWh62FLVs4hTb8A3e+vucNZMgPeAOITdshMSgv4cCZQeRDjm7+goqmo6+liZwTXo+U3sVww==} - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - linkify-it@3.0.3: resolution: {integrity: sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==} @@ -5843,10 +5687,6 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - netmask@2.0.2: - resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} - engines: {node: '>= 0.4.0'} - nice-try@1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} @@ -6084,20 +5924,9 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - pac-proxy-agent@7.2.0: - resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} - engines: {node: '>= 14'} - - pac-resolver@7.0.1: - resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} - engines: {node: '>= 14'} - pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} - pako@2.1.0: - resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} - parallel-transform@1.2.0: resolution: {integrity: sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==} @@ -6113,10 +5942,6 @@ packages: resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} engines: {node: '>=4'} - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - parse-ms@1.0.1: resolution: {integrity: sha512-LpH1Cf5EYuVjkBvCDBYvkUPh+iv2bk3FHflxHkpCYT0/FZ1d3N3uJaLiHr4yGuMcFUhv6eAivitTvWZI4B/chg==} engines: {node: '>=0.10.0'} @@ -6189,9 +6014,6 @@ packages: path-to-regexp@1.9.0: resolution: {integrity: sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==} - path-to-regexp@6.3.0: - resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} - path-type@3.0.0: resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} engines: {node: '>=4'} @@ -6204,9 +6026,6 @@ packages: resolution: {integrity: sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==} engines: {node: '>= 0.10'} - pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -6417,9 +6236,6 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - queue@6.0.2: - resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} - quick-temp@0.1.8: resolution: {integrity: sha512-YsmIFfD9j2zaFwJkzI6eMG7y0lQP7YeWzgtFgNl38pGWZBSXJooZbOWwkcRot7Vt0Fg9L23pX0tqWU3VvLDsiA==} @@ -6886,10 +6702,6 @@ packages: resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} engines: {node: '>=18'} - smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - snake-case@3.0.4: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} @@ -6904,14 +6716,6 @@ packages: resolution: {integrity: sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==} engines: {node: '>=10.2.0'} - socks-proxy-agent@8.0.5: - resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} - engines: {node: '>= 14'} - - socks@2.8.6: - resolution: {integrity: sha512-pe4Y2yzru68lXCb38aAqRf5gvN8YdjP1lok5o0J7BOHljkyCGKVz7H3vpVIXKD27rj2giOJ7DwVyk/GWrPHDWA==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - sort-object-keys@1.1.3: resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} @@ -7165,12 +6969,6 @@ packages: resolution: {integrity: sha512-vngT2JmkSapgq0z7uIoYtB9kWOOzMihAAYq/D3Pjm/ODOGMgS4r++B+OZ09U4hWR6EaOdy9eqQ7/8ygbH3wehA==} engines: {node: 8.* || >= 10.*} - systeminformation@5.31.1: - resolution: {integrity: sha512-6pRwxoGeV/roJYpsfcP6tN9mep6pPeCtXbUOCdVa0nme05Brwcwdge/fVNhIZn2wuUitAKZm4IYa7QjnRIa9zA==} - engines: {node: '>=8.0.0'} - os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] - hasBin: true - tabbable@5.3.3: resolution: {integrity: sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA==} @@ -7755,18 +7553,6 @@ packages: utf-8-validate: optional: true - ws@8.18.3: - resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - xdg-basedir@4.0.0: resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} engines: {node: '>=8'} @@ -7832,9 +7618,6 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} - yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -9465,171 +9248,6 @@ snapshots: '@parcel/watcher-win32-x64': 2.5.1 optional: true - '@percy/cli-app@1.31.0(typescript@5.9.2)': - dependencies: - '@percy/cli-command': 1.31.0(typescript@5.9.2) - '@percy/cli-exec': 1.31.0(typescript@5.9.2) - transitivePeerDependencies: - - bufferutil - - supports-color - - typescript - - utf-8-validate - - '@percy/cli-build@1.31.0(typescript@5.9.2)': - dependencies: - '@percy/cli-command': 1.31.0(typescript@5.9.2) - transitivePeerDependencies: - - bufferutil - - supports-color - - typescript - - utf-8-validate - - '@percy/cli-command@1.31.0(typescript@5.9.2)': - dependencies: - '@percy/config': 1.31.0(typescript@5.9.2) - '@percy/core': 1.31.0(typescript@5.9.2) - '@percy/logger': 1.31.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - typescript - - utf-8-validate - - '@percy/cli-config@1.31.0(typescript@5.9.2)': - dependencies: - '@percy/cli-command': 1.31.0(typescript@5.9.2) - transitivePeerDependencies: - - bufferutil - - supports-color - - typescript - - utf-8-validate - - '@percy/cli-exec@1.31.0(typescript@5.9.2)': - dependencies: - '@percy/cli-command': 1.31.0(typescript@5.9.2) - '@percy/logger': 1.31.0 - cross-spawn: 7.0.5 - which: 2.0.2 - transitivePeerDependencies: - - bufferutil - - supports-color - - typescript - - utf-8-validate - - '@percy/cli-snapshot@1.31.0(typescript@5.9.2)': - dependencies: - '@percy/cli-command': 1.31.0(typescript@5.9.2) - yaml: 2.8.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - typescript - - utf-8-validate - - '@percy/cli-upload@1.31.0(typescript@5.9.2)': - dependencies: - '@percy/cli-command': 1.31.0(typescript@5.9.2) - fast-glob: 3.3.3 - image-size: 1.2.1 - transitivePeerDependencies: - - bufferutil - - supports-color - - typescript - - utf-8-validate - - '@percy/cli@1.31.0(typescript@5.9.2)': - dependencies: - '@percy/cli-app': 1.31.0(typescript@5.9.2) - '@percy/cli-build': 1.31.0(typescript@5.9.2) - '@percy/cli-command': 1.31.0(typescript@5.9.2) - '@percy/cli-config': 1.31.0(typescript@5.9.2) - '@percy/cli-exec': 1.31.0(typescript@5.9.2) - '@percy/cli-snapshot': 1.31.0(typescript@5.9.2) - '@percy/cli-upload': 1.31.0(typescript@5.9.2) - '@percy/client': 1.31.0 - '@percy/logger': 1.31.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - typescript - - utf-8-validate - - '@percy/client@1.31.0': - dependencies: - '@percy/env': 1.31.0 - '@percy/logger': 1.31.0 - pac-proxy-agent: 7.2.0 - pako: 2.1.0 - transitivePeerDependencies: - - supports-color - - '@percy/config@1.31.0(typescript@5.9.2)': - dependencies: - '@percy/logger': 1.31.0 - ajv: 8.18.0 - cosmiconfig: 8.3.6(typescript@5.9.2) - yaml: 2.8.0 - transitivePeerDependencies: - - typescript - - '@percy/core@1.31.0(typescript@5.9.2)': - dependencies: - '@percy/client': 1.31.0 - '@percy/config': 1.31.0(typescript@5.9.2) - '@percy/dom': 1.31.0 - '@percy/logger': 1.31.0 - '@percy/monitoring': 1.31.0(typescript@5.9.2) - '@percy/webdriver-utils': 1.31.0(typescript@5.9.2) - content-disposition: 0.5.4 - cross-spawn: 7.0.5 - extract-zip: 2.0.1 - fast-glob: 3.3.3 - micromatch: 4.0.8 - mime-types: 2.1.35 - pako: 2.1.0 - path-to-regexp: 6.3.0 - rimraf: 3.0.2 - ws: 8.18.3 - yaml: 2.8.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - typescript - - utf-8-validate - - '@percy/dom@1.31.0': {} - - '@percy/ember@4.2.0': - dependencies: - '@percy/sdk-utils': 1.31.0 - ember-cli-babel: 7.26.11 - transitivePeerDependencies: - - supports-color - - '@percy/env@1.31.0': - dependencies: - '@percy/logger': 1.31.0 - - '@percy/logger@1.31.0': {} - - '@percy/monitoring@1.31.0(typescript@5.9.2)': - dependencies: - '@percy/config': 1.31.0(typescript@5.9.2) - '@percy/logger': 1.31.0 - '@percy/sdk-utils': 1.31.0 - systeminformation: 5.31.1 - transitivePeerDependencies: - - typescript - - '@percy/sdk-utils@1.31.0': {} - - '@percy/webdriver-utils@1.31.0(typescript@5.9.2)': - dependencies: - '@percy/config': 1.31.0(typescript@5.9.2) - '@percy/sdk-utils': 1.31.0 - transitivePeerDependencies: - - typescript - '@popperjs/core@2.11.8': {} '@ro0gr/ceibo@2.2.0': {} @@ -9665,8 +9283,6 @@ snapshots: '@tootallnate/once@1.1.2': {} - '@tootallnate/quickjs-emscripten@0.23.0': {} - '@types/acorn@4.0.6': dependencies: '@types/estree': 1.0.8 @@ -9789,11 +9405,6 @@ snapshots: '@types/trusted-types@2.0.7': optional: true - '@types/yauzl@2.10.3': - dependencies: - '@types/node': 24.0.14 - optional: true - '@webassemblyjs/ast@1.14.1': dependencies: '@webassemblyjs/helper-numbers': 1.13.2 @@ -10011,8 +9622,6 @@ snapshots: transitivePeerDependencies: - supports-color - agent-base@7.1.4: {} - ajv-errors@1.0.1(ajv@6.12.6): dependencies: ajv: 6.12.6 @@ -10172,10 +9781,6 @@ snapshots: ast-types@0.13.3: {} - ast-types@0.13.4: - dependencies: - tslib: 2.8.1 - astral-regex@2.0.0: {} async-disk-cache@1.3.5: @@ -10793,8 +10398,6 @@ snapshots: dependencies: safe-buffer: 5.1.2 - basic-ftp@5.0.5: {} - better-path-resolve@1.0.0: dependencies: is-windows: 1.0.2 @@ -11451,8 +11054,6 @@ snapshots: dependencies: node-int64: 0.4.0 - buffer-crc32@0.2.13: {} - buffer-from@1.1.2: {} buffer-xor@1.0.3: {} @@ -11850,15 +11451,6 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 - cosmiconfig@8.3.6(typescript@5.9.2): - dependencies: - import-fresh: 3.3.1 - js-yaml: 4.1.1 - parse-json: 5.2.0 - path-type: 4.0.0 - optionalDependencies: - typescript: 5.9.2 - create-ecdh@4.0.4: dependencies: bn.js: 5.2.3 @@ -12101,8 +11693,6 @@ snapshots: dag-map@2.0.2: {} - data-uri-to-buffer@6.0.2: {} - data-urls@2.0.0: dependencies: abab: 2.0.6 @@ -12187,12 +11777,6 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 - degenerator@5.0.1: - dependencies: - ast-types: 0.13.4 - escodegen: 2.1.0 - esprima: 4.0.1 - delaunator@5.0.1: dependencies: robust-predicates: 3.0.2 @@ -14049,16 +13633,6 @@ snapshots: extract-stack@2.0.0: {} - extract-zip@2.0.1: - dependencies: - debug: 4.4.1 - get-stream: 5.2.0 - yauzl: 2.10.0 - optionalDependencies: - '@types/yauzl': 2.10.3 - transitivePeerDependencies: - - supports-color - fake-xml-http-request@2.1.2: {} faker@4.1.0: {} @@ -14122,10 +13696,6 @@ snapshots: dependencies: bser: 2.1.1 - fd-slicer@1.1.0: - dependencies: - pend: 1.2.0 - figgy-pudding@3.5.2: {} figures@2.0.0: @@ -14505,14 +14075,6 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 - get-uri@6.0.5: - dependencies: - basic-ftp: 5.0.5 - data-uri-to-buffer: 6.0.2 - debug: 4.4.1 - transitivePeerDependencies: - - supports-color - git-hooks-list@1.0.3: {} git-repo-info@2.1.1: {} @@ -14760,13 +14322,6 @@ snapshots: transitivePeerDependencies: - supports-color - http-proxy-agent@7.0.2: - dependencies: - agent-base: 7.1.4 - debug: 4.4.1 - transitivePeerDependencies: - - supports-color - http-proxy@1.18.1: dependencies: eventemitter3: 4.0.7 @@ -14784,13 +14339,6 @@ snapshots: transitivePeerDependencies: - supports-color - https-proxy-agent@7.0.6: - dependencies: - agent-base: 7.1.4 - debug: 4.4.1 - transitivePeerDependencies: - - supports-color - https@1.0.0: {} human-signals@1.1.1: {} @@ -14819,10 +14367,6 @@ snapshots: ignore@5.3.2: {} - image-size@1.2.1: - dependencies: - queue: 6.0.2 - immutable@5.1.3: {} import-fresh@3.3.1: @@ -14905,11 +14449,6 @@ snapshots: dependencies: loose-envify: 1.4.0 - ip-address@9.0.5: - dependencies: - jsbn: 1.1.0 - sprintf-js: 1.1.3 - ip-regex@4.3.0: {} ipaddr.js@1.9.1: {} @@ -15147,12 +14686,6 @@ snapshots: argparse: 1.0.10 esprima: 4.0.1 - js-yaml@4.1.1: - dependencies: - argparse: 2.0.1 - - jsbn@1.1.0: {} - jsdom@16.7.0: dependencies: abab: 2.0.6 @@ -15265,8 +14798,6 @@ snapshots: isarray: 1.0.0 isobject: 2.1.0 - lines-and-columns@1.2.4: {} - linkify-it@3.0.3: dependencies: uc.micro: 1.0.6 @@ -15727,8 +15258,6 @@ snapshots: neo-async@2.6.2: {} - netmask@2.0.2: {} - nice-try@1.0.5: {} nise@4.1.0: @@ -16002,28 +15531,8 @@ snapshots: p-try@2.2.0: {} - pac-proxy-agent@7.2.0: - dependencies: - '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.4 - debug: 4.4.1 - get-uri: 6.0.5 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - pac-resolver: 7.0.1 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color - - pac-resolver@7.0.1: - dependencies: - degenerator: 5.0.1 - netmask: 2.0.2 - pako@1.0.11: {} - pako@2.1.0: {} - parallel-transform@1.2.0: dependencies: cyclist: 1.0.2 @@ -16047,13 +15556,6 @@ snapshots: error-ex: 1.3.2 json-parse-better-errors: 1.0.2 - parse-json@5.2.0: - dependencies: - '@babel/code-frame': 7.27.1 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - parse-ms@1.0.1: {} parse-passwd@1.0.0: {} @@ -16102,8 +15604,6 @@ snapshots: dependencies: isarray: 0.0.1 - path-to-regexp@6.3.0: {} - path-type@3.0.0: dependencies: pify: 3.0.0 @@ -16119,8 +15619,6 @@ snapshots: sha.js: 2.4.12 to-buffer: 1.2.2 - pend@1.2.0: {} - picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -16308,10 +15806,6 @@ snapshots: queue-microtask@1.2.3: {} - queue@6.0.2: - dependencies: - inherits: 2.0.4 - quick-temp@0.1.8: dependencies: mktemp: 0.4.0 @@ -16868,8 +16362,6 @@ snapshots: ansi-styles: 6.2.1 is-fullwidth-code-point: 5.0.0 - smart-buffer@4.2.0: {} - snake-case@3.0.4: dependencies: dot-case: 3.0.4 @@ -16905,19 +16397,6 @@ snapshots: - supports-color - utf-8-validate - socks-proxy-agent@8.0.5: - dependencies: - agent-base: 7.1.4 - debug: 4.4.1 - socks: 2.8.6 - transitivePeerDependencies: - - supports-color - - socks@2.8.6: - dependencies: - ip-address: 9.0.5 - smart-buffer: 4.2.0 - sort-object-keys@1.1.3: {} sort-package-json@1.57.0: @@ -17197,8 +16676,6 @@ snapshots: transitivePeerDependencies: - supports-color - systeminformation@5.31.1: {} - tabbable@5.3.3: {} table@6.9.0: @@ -17946,8 +17423,6 @@ snapshots: ws@8.17.1: {} - ws@8.18.3: {} - xdg-basedir@4.0.0: {} xml-name-validator@3.0.0: {} @@ -18003,9 +17478,4 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 - yauzl@2.10.0: - dependencies: - buffer-crc32: 0.2.13 - fd-slicer: 1.1.0 - yocto-queue@0.1.0: {} diff --git a/ui/.percy.yml b/ui/.percy.yml deleted file mode 100644 index 4c5da91ec68..00000000000 --- a/ui/.percy.yml +++ /dev/null @@ -1,15 +0,0 @@ -# Copyright (c) HashiCorp, Inc. -# SPDX-License-Identifier: BUSL-1.1 - -version: 1 -snapshot: - # Hide high-variability data from Percy snapshots; helps make sure that randomized data doesn't cause a visual diff. - percy-css: | - .topo-viz { - display: none; - } - .related-evaluations path, - .related-evaluations circle, - .dashboard-metric { - visibility: hidden; - } \ No newline at end of file diff --git a/ui/app/controllers/jobs/index.js b/ui/app/controllers/jobs/index.js index ec1aa057b4a..c451cd62002 100644 --- a/ui/app/controllers/jobs/index.js +++ b/ui/app/controllers/jobs/index.js @@ -691,7 +691,7 @@ export default class JobsIndexController extends Controller { 'NodePool is not empty', '(dc1 in Datacenters) or (dc2 in Datacenters)', ]; - // In test/Percy environments, pick deterministically so snapshots are stable. + // In test environments, pick deterministically so snapshots are stable. // In production, keep it random so users discover different filter syntax. if (Ember.testing) { const filter = this.filter || ''; diff --git a/ui/config/environment.js b/ui/config/environment.js index 47e43f2b411..e3b0a40dd9d 100644 --- a/ui/config/environment.js +++ b/ui/config/environment.js @@ -11,12 +11,6 @@ if (process.env.USE_MIRAGE) { USE_MIRAGE = process.env.USE_MIRAGE == 'true'; } -let USE_PERCY = true; - -if (process.env.USE_PERCY) { - USE_PERCY = process.env.USE_PERCY == 'true'; -} - module.exports = function (environment) { let ENV = { modulePrefix: 'nomad-ui', @@ -43,10 +37,6 @@ module.exports = function (environment) { mirageWithTokens: true, mirageWithRegions: true, }, - - percy: { - enabled: USE_PERCY, - }, }; if (environment === 'development') { diff --git a/ui/mirage/faker.js b/ui/mirage/faker.js index 54450c878d8..33da364a8b1 100644 --- a/ui/mirage/faker.js +++ b/ui/mirage/faker.js @@ -8,11 +8,7 @@ import config from 'nomad-ui/config/environment'; const searchIncludesSeed = window.location.search.includes('faker-seed'); -if ( - config.environment !== 'test' || - config.percy.enabled || - searchIncludesSeed -) { +if (config.environment !== 'test' || searchIncludesSeed) { if (searchIncludesSeed) { const params = new URLSearchParams(window.location.search); const seed = parseInt(params.get('faker-seed')); diff --git a/ui/package.json b/ui/package.json index 2ecb3489b86..bcf291aead7 100644 --- a/ui/package.json +++ b/ui/package.json @@ -10,8 +10,8 @@ }, "scripts": { "build": "ember build --environment=production", - "exam": "percy exec -- ember exam --split=4 --parallel", - "exam:parallel": "percy exec --parallel -- ember exam", + "exam": "ember exam --split=4 --parallel", + "exam:parallel": "ember exam --parallel", "lint": "npm-run-all --aggregate-output --continue-on-error --parallel \"lint:!(fix)\"", "lint:fix": "npm-run-all --aggregate-output --continue-on-error --parallel lint:*:fix", "lint:hbs": "ember-template-lint .", @@ -20,12 +20,10 @@ "lint:js:fix": "eslint . --fix", "local:exam": "ember exam --server --load-balance --parallel=4", "local:test": "ember test --server", - "percy": "percy", "precommit": "lint-staged", - "seedless-test": "USE_PERCY=false ember test", "start": "ember server", "test": "npm-run-all lint test:*", - "test:ember": "percy exec -- ember test" + "test:ember": "ember test" }, "husky": { "hooks": { @@ -54,8 +52,6 @@ "@glint/template": "^1.5.2", "@hashicorp/design-system-components": "4.13.0", "@hashicorp/design-system-tokens": "^2.3.0", - "@percy/cli": "^1.30.0", - "@percy/ember": "^4.2.0", "anser": "^2.1.1", "babel-eslint": "^10.1.0", "base64-js": "^1.3.1", diff --git a/ui/tests/acceptance/access-control-test.js b/ui/tests/acceptance/access-control-test.js index 7554bc685c1..4cfc89888a9 100644 --- a/ui/tests/acceptance/access-control-test.js +++ b/ui/tests/acceptance/access-control-test.js @@ -11,7 +11,7 @@ import Administration from 'nomad-ui/tests/pages/administration'; import Tokens from 'nomad-ui/tests/pages/settings/tokens'; import { allScenarios } from '../../mirage/scenarios/default'; import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit'; -import percySnapshot from '@percy/ember'; + import faker from 'nomad-ui/mirage/faker'; // Several related tests within Access Control are contained in the Tokens, Roles, @@ -98,7 +98,7 @@ module('Acceptance | access control', function (hooks) { await Administration.visit(); assert.dom('[data-test-sentinel-policies-card]').exists(); - await percySnapshot(assert); + await click('[data-test-sentinel-policies-card] a'); assert.equal(currentURL(), '/administration/sentinel-policies'); }); diff --git a/ui/tests/acceptance/actions-test.js b/ui/tests/acceptance/actions-test.js index e2941c538b8..51db0800457 100644 --- a/ui/tests/acceptance/actions-test.js +++ b/ui/tests/acceptance/actions-test.js @@ -8,7 +8,6 @@ import { setupApplicationTest } from 'ember-qunit'; import { setupMirage } from 'ember-cli-mirage/test-support'; import Tokens from 'nomad-ui/tests/pages/settings/tokens'; import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit'; -import percySnapshot from '@percy/ember'; import Actions from 'nomad-ui/tests/pages/jobs/job/actions'; import { triggerEvent, visit, click } from '@ember/test-helpers'; import faker from 'nomad-ui/mirage/faker'; @@ -203,12 +202,6 @@ module('Acceptance | actions', function (hooks) { "The first action's dropdown subcontent exists" ); - await percySnapshot(assert, { - percyCSS: ` - .allocation-row td { display: none; } - `, - }); - // run on a random alloc await Actions.titleActions.multiAllocActions[0].subActions[0].click(); @@ -275,8 +268,6 @@ module('Acceptance | actions', function (hooks) { 3, 'Running on an orphan alloc results in 1 further action instance' ); - - await percySnapshot('Actions flyout with multiple instances'); }); test('Running actions from a task row', async function (assert) { @@ -376,29 +367,10 @@ module('Acceptance | actions', function (hooks) { Actions.flyout.actions.isPresent, 'Flyout has actions dropdown on task page' ); - await percySnapshot(assert, { - percyCSS: ` - g.tick { visibility: hidden; } - .recent-events-table td { - display: none; - } - .inline-definitions { visibility: hidden; } - `, - }); // Clear finished actions and take a snapshot await click('button[data-test-clear-finished-actions]'); - await percySnapshot('Cleared actions/flyout open state', { - percyCSS: ` - g.tick { visibility: hidden; } - .recent-events-table td { - display: none; - } - .inline-definitions { visibility: hidden; } - `, - }); - // Close flyout; global button is no longer present await Actions.flyout.close(); assert.notOk( diff --git a/ui/tests/acceptance/application-errors-test.js b/ui/tests/acceptance/application-errors-test.js index b7a29b8f50b..b92b6444994 100644 --- a/ui/tests/acceptance/application-errors-test.js +++ b/ui/tests/acceptance/application-errors-test.js @@ -11,7 +11,6 @@ import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit'; import ClientsList from 'nomad-ui/tests/pages/clients/list'; import JobsList from 'nomad-ui/tests/pages/jobs/list'; import Job from 'nomad-ui/tests/pages/jobs/detail'; -import percySnapshot from '@percy/ember'; import faker from 'nomad-ui/mirage/faker'; module('Acceptance | application errors ', function (hooks) { @@ -32,7 +31,6 @@ module('Acceptance | application errors ', function (hooks) { server.pretender.get('/v1/nodes', () => [500, {}, null]); await ClientsList.visit(); await a11yAudit(assert); - await percySnapshot(assert); }); test('transitioning away from an error page resets the global error', async function (assert) { @@ -58,7 +56,6 @@ module('Acceptance | application errors ', function (hooks) { assert.ok(Job.error.isPresent, 'Error message is shown'); assert.equal(Job.error.title, 'Not Authorized', 'Error message is for 403'); - await percySnapshot(assert); await Job.error.seekHelp(); assert.equal( @@ -84,7 +81,6 @@ module('Acceptance | application errors ', function (hooks) { 'No Cluster Leader', 'The error is specifically for the lack of a cluster leader' ); - await percySnapshot(assert); }); test('error pages include links to the jobs, clients and auth pages', async function (assert) { diff --git a/ui/tests/acceptance/clients-list-test.js b/ui/tests/acceptance/clients-list-test.js index ddbdcde6efa..0726557c82a 100644 --- a/ui/tests/acceptance/clients-list-test.js +++ b/ui/tests/acceptance/clients-list-test.js @@ -11,7 +11,6 @@ import { setupMirage } from 'ember-cli-mirage/test-support'; import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit'; import pageSizeSelect from './behaviors/page-size-select'; import ClientsList from 'nomad-ui/tests/pages/clients/list'; -import percySnapshot from '@percy/ember'; import faker from 'nomad-ui/mirage/faker'; module('Acceptance | clients list', function (hooks) { @@ -42,8 +41,6 @@ module('Acceptance | clients list', function (hooks) { await ClientsList.visit(); - await percySnapshot(assert); - assert.equal(ClientsList.nodes.length, ClientsList.pageSize); assert.ok(ClientsList.hasPagination, 'Pagination found on the page'); @@ -237,8 +234,6 @@ module('Acceptance | clients list', function (hooks) { await ClientsList.visit(); - await percySnapshot(assert); - assert.ok(ClientsList.isEmpty); assert.equal(ClientsList.empty.headline, 'No Clients'); }); diff --git a/ui/tests/acceptance/dynamic-host-volume-detail-test.js b/ui/tests/acceptance/dynamic-host-volume-detail-test.js index 42d4615200e..c1380de191d 100644 --- a/ui/tests/acceptance/dynamic-host-volume-detail-test.js +++ b/ui/tests/acceptance/dynamic-host-volume-detail-test.js @@ -13,7 +13,6 @@ import moment from 'moment'; import { formatBytes, formatHertz } from 'nomad-ui/utils/units'; import VolumeDetail from 'nomad-ui/tests/pages/storage/dynamic-host-volumes/detail'; import Layout from 'nomad-ui/tests/pages/layout'; -import percySnapshot from '@percy/ember'; import faker from 'nomad-ui/mirage/faker'; const assignAlloc = (volume, alloc) => { @@ -74,7 +73,7 @@ module('Acceptance | dynamic host volume detail', function (hooks) { test('/storage/volumes/:id should list all allocations the volume is attached to', async function (assert) { // Use fixed timestamps so both absolute dates and relative times are - // deterministic across Percy snapshot runs. + // deterministic across test runs. const pinned = new Date('2025-06-15T12:00:00Z'); const pinnedNs = pinned.getTime() * 1e6; // nanoseconds @@ -95,7 +94,7 @@ module('Acceptance | dynamic host volume detail', function (hooks) { allocations.forEach((alloc) => assignAlloc(volume, alloc)); // Freeze moment's time reference so relative times ("9 hours ago") are - // deterministic across Percy snapshot runs. + // deterministic across test runs. const originalMomentNow = moment.now; moment.now = () => pinned.getTime(); @@ -112,7 +111,6 @@ module('Acceptance | dynamic host volume detail', function (hooks) { VolumeDetail.allocations.objectAt(idx).id ); }); - await percySnapshot(assert); } finally { moment.now = originalMomentNow; } diff --git a/ui/tests/acceptance/evaluations-test.js b/ui/tests/acceptance/evaluations-test.js index 0f1a2c508e1..2f3e7b446a1 100644 --- a/ui/tests/acceptance/evaluations-test.js +++ b/ui/tests/acceptance/evaluations-test.js @@ -21,7 +21,6 @@ import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit'; import { selectChoose } from 'ember-power-select/test-support'; import { clickTrigger } from 'ember-power-select/test-support/helpers'; import { generateAcceptanceTestEvalMock } from '../../mirage/utils'; -import percySnapshot from '@percy/ember'; import faker from 'nomad-ui/mirage/faker'; const getStandardRes = () => [ @@ -133,8 +132,6 @@ module('Acceptance | evaluations list', function (hooks) { await visit('/evaluations'); assert.expect(2); - await percySnapshot(assert); - assert .dom('[data-test-empty-evaluations-list]') .exists('We display empty table message.'); @@ -163,8 +160,6 @@ module('Acceptance | evaluations list', function (hooks) { await visit('/evaluations'); - await percySnapshot(assert); - assert .dom('[data-test-eval-table]') .exists('Evaluations table should render'); @@ -702,8 +697,6 @@ module('Acceptance | evaluations list', function (hooks) { const evalId = '5fb1b8cd'; await click(`[data-test-evaluation='${evalId}']`); - await percySnapshot(assert); - assert .dom('[data-test-eval-detail-is-open]') .exists( diff --git a/ui/tests/acceptance/exec-test.js b/ui/tests/acceptance/exec-test.js index af7428deab3..9d1c032c166 100644 --- a/ui/tests/acceptance/exec-test.js +++ b/ui/tests/acceptance/exec-test.js @@ -12,7 +12,6 @@ import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit'; import Service from '@ember/service'; import Exec from 'nomad-ui/tests/pages/exec'; import KEYS from 'nomad-ui/utils/keys'; -import percySnapshot from '@percy/ember'; import faker from 'nomad-ui/mirage/faker'; module('Acceptance | exec', function (hooks) { @@ -105,8 +104,6 @@ module('Acceptance | exec', function (hooks) { assert.notOk(Exec.taskGroups[0].tasks[0].isActive); assert.ok(Exec.taskGroups[0].chevron.isDown); - await percySnapshot(assert); - await Exec.taskGroups[0].click(); assert.equal(Exec.taskGroups[0].tasks.length, 0); }); @@ -305,7 +302,6 @@ module('Acceptance | exec', function (hooks) { const terminalTextRendered = assert.async(); setTimeout(async () => { - await percySnapshot(assert); terminalTextRendered(); }, 1000); }); diff --git a/ui/tests/acceptance/job-definition-test.js b/ui/tests/acceptance/job-definition-test.js index bf0281b4ae0..1c6e41a4e87 100644 --- a/ui/tests/acceptance/job-definition-test.js +++ b/ui/tests/acceptance/job-definition-test.js @@ -4,7 +4,6 @@ */ import { click, currentURL } from '@ember/test-helpers'; -import percySnapshot from '@percy/ember'; import faker from 'nomad-ui/mirage/faker'; import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; @@ -90,7 +89,6 @@ module('Acceptance | job definition', function (hooks) { const formattedJobDefinition = JSON.parse(jobSubmission).Source; await Definition.edit(); - await percySnapshot(assert); assert.equal( Definition.editor.editor.contents, @@ -117,7 +115,6 @@ module('Acceptance | job definition', function (hooks) { test('when the job for the definition is not found, an error message is shown, but the URL persists', async function (assert) { assert.expect(4); await Definition.visit({ id: 'not-a-real-job' }); - await percySnapshot(assert); assert.equal( server.pretender.handledRequests @@ -170,7 +167,6 @@ module('Acceptance | job definition | full specification', function (hooks) { server.get('/job/:id/submission', () => specification_response); await Definition.visit({ id: job.id }); - await percySnapshot(assert); assert .dom('[data-test-select="job-spec"]') diff --git a/ui/tests/acceptance/job-detail-test.js b/ui/tests/acceptance/job-detail-test.js index a1cbf1f7eb9..f28dc48529f 100644 --- a/ui/tests/acceptance/job-detail-test.js +++ b/ui/tests/acceptance/job-detail-test.js @@ -15,7 +15,6 @@ import moduleForJob, { moduleForJobWithClientStatus, } from 'nomad-ui/tests/helpers/module-for-job'; import JobDetail from 'nomad-ui/tests/pages/jobs/detail'; -import percySnapshot from '@percy/ember'; import { createRestartableJobs } from 'nomad-ui/mirage/scenarios/default'; import faker from 'nomad-ui/mirage/faker'; @@ -405,33 +404,28 @@ module('Acceptance | ui block', function (hooks) { assert .dom('[data-test-job-links] a') .exists({ count: 2 }, 'Job links exists when defined in HCL'); - await percySnapshot(assert, { - percyCSS: ` - .allocation-row td { display: none; } - `, - }); }); +}); - test('job sanitizes input', async function (assert) { - server.create('node-pool'); - server.create('node'); - server.create('job', { - id: 'xss-job', - ui: { - Description: '
Safe text
', - }, - }); +test('job sanitizes input', async function (assert) { + server.create('node-pool'); + server.create('node'); + server.create('job', { + id: 'xss-job', + ui: { + Description: 'Safe text
', + }, + }); - await JobDetail.visit({ id: 'xss-job' }); + await JobDetail.visit({ id: 'xss-job' }); - assert - .dom('[data-test-job-description]') - .hasText('Safe text', 'Description should only contain safe text'); + assert + .dom('[data-test-job-description]') + .hasText('Safe text', 'Description should only contain safe text'); - assert - .dom('[data-test-job-description] script') - .doesNotExist('Should not render script tags'); - }); + assert + .dom('[data-test-job-description] script') + .doesNotExist('Should not render script tags'); }); module('Acceptance | job detail (with namespaces)', function (hooks) { @@ -772,8 +766,6 @@ module('Acceptance | job detail (with namespaces)', function (hooks) { assert .dom('.flash-message.alert-critical') .exists('A toast error message pops up.'); - - await percySnapshot(assert); }); test('handles when a job is remotely purged, from a job subnav page', async function (assert) { @@ -843,18 +835,12 @@ module('Job Start/Stop/Revert/Edit and Resubmit', function (hooks) { assert.notOk(JobDetail.stop.isPresent); assert.notOk(JobDetail.revert.isPresent); assert.notOk(JobDetail.editAndResubmit.isPresent); - await percySnapshot('Start Job depends on the job being stopped'); await JobDetail.visit({ id: revertableJob.id }); assert.notOk(JobDetail.start.isPresent); - await percySnapshot('Revertable Job depends on having stable job versions'); - await JobDetail.visit({ id: nonRevertableJob.id }); assert.notOk(JobDetail.start.isPresent); - await percySnapshot( - 'Non-revertable Job depends on having no stable job versions' - ); }); test('A revertable job depends on having stable job versions', async function (assert) { diff --git a/ui/tests/acceptance/job-run-test.js b/ui/tests/acceptance/job-run-test.js index 59df29fafd4..cab4164e587 100644 --- a/ui/tests/acceptance/job-run-test.js +++ b/ui/tests/acceptance/job-run-test.js @@ -21,7 +21,6 @@ import { setupMirage } from 'ember-cli-mirage/test-support'; import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit'; import setupCodeMirror from 'nomad-ui/tests/helpers/codemirror'; import JobRun from 'nomad-ui/tests/pages/jobs/run'; -import percySnapshot from '@percy/ember'; import faker from 'nomad-ui/mirage/faker'; const newJobName = 'new-job'; @@ -496,7 +495,6 @@ module('Acceptance | job run', function (hooks) { assert .dom('[data-test-template-list]') .exists('A list of templates is visible'); - await percySnapshot(assert); await click('[data-test-edit-template="nomad/job-templates/foo"]'); assert.equal( currentRouteName(), @@ -629,8 +627,6 @@ module('Acceptance | job run', function (hooks) { .dom('[data-test-template-card]') .exists({ count: NUMBER_OF_DEFAULT_TEMPLATES }); - await percySnapshot(assert); - await click('[data-test-template-card="Hello world"]'); await click('[data-test-apply]'); diff --git a/ui/tests/acceptance/job-status-panel-test.js b/ui/tests/acceptance/job-status-panel-test.js index 1c359ff092c..03a72dbeb9d 100644 --- a/ui/tests/acceptance/job-status-panel-test.js +++ b/ui/tests/acceptance/job-status-panel-test.js @@ -19,7 +19,6 @@ import { import { setupMirage } from 'ember-cli-mirage/test-support'; import faker from 'nomad-ui/mirage/faker'; -import percySnapshot from '@percy/ember'; import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit'; // TODO: Mirage is not type-friendly / assigns "server" as a global. Try to work around this shortcoming. @@ -46,11 +45,6 @@ module('Acceptance | job status panel', function (hooks) { await visit(`/jobs/${job.id}`); assert.dom('.job-status-panel').exists(); await a11yAudit(assert); - await percySnapshot(assert, { - percyCSS: ` - .allocation-row td { display: none; } - `, - }); assert .dom('[data-test-status-mode="current"]') @@ -178,11 +172,6 @@ module('Acceptance | job status panel', function (hooks) { { count: failedAllocCount }, `All ${failedAllocCount} failed allocations are represented in the status panel` ); - await percySnapshot(assert, { - percyCSS: ` - .allocation-row td { display: none; } - `, - }); }); test('After running/pending allocations are covered, fill in allocs by jobVersion, descending', async function (assert) { @@ -257,11 +246,6 @@ module('Acceptance | job status panel', function (hooks) { assert .dom('.job-status-panel .versions > ul > li > a[data-version="4"]') .doesNotExist(); - await percySnapshot(assert, { - percyCSS: ` - .allocation-row td { display: none; } - `, - }); }); test('After running/pending allocations are covered, fill in allocs by jobVersion, descending (batch)', async function (assert) { @@ -344,12 +328,6 @@ module('Acceptance | job status panel', function (hooks) { assert .dom('.ungrouped-allocs .represented-allocation.failed') .doesNotExist(); - - await percySnapshot(assert, { - percyCSS: ` - .allocation-row td { display: none; } - `, - }); }); test('Status Panel groups allocations when they get past a threshold', async function (assert) { @@ -432,12 +410,6 @@ module('Acceptance | job status panel', function (hooks) { `+${groupAllocCount - desiredUngroupedAllocCount}`, 'Summary block has the correct number of grouped allocs' ); - - await percySnapshot(assert, { - percyCSS: ` - .allocation-row td { display: none; } - `, - }); }); test('Status Panel groups allocations when they get past a threshold, multiple statuses', async function (assert) { @@ -529,15 +501,6 @@ module('Acceptance | job status panel', function (hooks) { '5', 'Summary block has the correct number of grouped unplaced allocs' ); - await percySnapshot( - 'Status Panel groups allocations when they get past a threshold, multiple statuses (full width)', - { - percyCSS: ` - .allocation-row td { display: none; } - .inline-chart { visibility: hidden; } - `, - } - ); // Simulate a window resize event; will recompute how many of each ought to be grouped. @@ -545,16 +508,6 @@ module('Acceptance | job status panel', function (hooks) { find('.page-body').style.width = '1100px'; await triggerEvent(window, 'resize'); - await percySnapshot( - 'Status Panel groups allocations when they get past a threshold, multiple statuses (1100px)', - { - percyCSS: ` - .allocation-row td { display: none; } - .inline-chart { visibility: hidden; } - `, - } - ); - assert .dom('.ungrouped-allocs .represented-allocation.running') .exists({ count: 7 }, '7 running allocations are represented ungrouped'); @@ -589,16 +542,6 @@ module('Acceptance | job status panel', function (hooks) { find('.page-body').style.width = '800px'; await triggerEvent(window, 'resize'); - await percySnapshot( - 'Status Panel groups allocations when they get past a threshold, multiple statuses (500px)', - { - percyCSS: ` - .allocation-row td { display: none; } - .inline-chart { visibility: hidden; } - `, - } - ); - assert .dom('.ungrouped-allocs .represented-allocation.running') .exists({ count: 4 }, '4 running allocations are represented ungrouped'); diff --git a/ui/tests/acceptance/job-versions-test.js b/ui/tests/acceptance/job-versions-test.js index eaf04e01476..1c08b06c0c5 100644 --- a/ui/tests/acceptance/job-versions-test.js +++ b/ui/tests/acceptance/job-versions-test.js @@ -13,7 +13,6 @@ import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit'; import Versions from 'nomad-ui/tests/pages/jobs/job/versions'; import Layout from 'nomad-ui/tests/pages/layout'; import moment from 'moment'; -import percySnapshot from '@percy/ember'; import faker from 'nomad-ui/mirage/faker'; let job; let namespace; @@ -208,121 +207,93 @@ module('Acceptance | job versions', function (hooks) { assert .dom('[data-test-tagged-version="false"] .tag-description') .hasText('', 'Tag description is empty'); - - await percySnapshot(assert, { - percyCSS: ` - .timeline-note { - display: none; - } - .submit-date { - visibility: hidden; - } - `, - }); - }); - - test('existing version tags can be edited', async function (assert) { - // Clicking the tag button puts it into edit mode - assert - .dom('[data-test-tagged-version="true"] .boxed-section-foot') - .doesNotHaveClass('editing'); - await click('[data-test-tagged-version="true"] .tag-button-primary'); - assert - .dom('[data-test-tagged-version="true"] .boxed-section-foot') - .hasClass('editing'); - - // equivalent of backspacing existing - document.querySelector('[data-test-tag-name-input]').value = ''; - document.querySelector('[data-test-tag-description-input]').value = ''; - - await typeIn( - '[data-test-tagged-version="true"] [data-test-tag-name-input]', - 'new-tag' - ); - await typeIn( - '[data-test-tagged-version="true"] [data-test-tag-description-input]', - 'new-description' - ); - - // Clicking the save button commits the changes - await click( - '[data-test-tagged-version="true"] [data-test-tag-save-button]' - ); - assert - .dom('[data-test-tagged-version="true"] .tag-button-primary') - .hasText('new-tag'); - assert - .dom('[data-test-tagged-version="true"] .tag-description') - .hasText('new-description'); - - assert - .dom('.flash-message.alert.alert-success') - .exists('Shows a success toast notification on edit.'); - - // Tag can subsequently be deleted - await click('[data-test-tagged-version="true"] .tag-button-primary'); - await click( - '[data-test-tagged-version="true"] [data-test-tag-delete-button]' - ); - assert.dom('[data-test-tagged-version="true"]').doesNotExist(); }); +}); - test('new version tags can be created', async function (assert) { - // Clicking the tag button puts it into edit mode - assert - .dom('[data-test-tagged-version="false"] .boxed-section-foot') - .doesNotHaveClass('editing'); - await click('[data-test-tagged-version="false"] .tag-button-secondary'); - assert - .dom('[data-test-tagged-version="false"] .boxed-section-foot') - .hasClass('editing'); - - assert - .dom('[data-test-tagged-version="false"] [data-test-tag-delete-button]') - .doesNotExist(); - - // Clicking the save button commits the changes - await click( - '[data-test-tagged-version="false"] [data-test-tag-save-button]' - ); - - assert - .dom('.flash-message.alert.alert-critical') - .exists('Shows an error toast notification without a tag name.'); - - await typeIn( - '[data-test-tagged-version="false"] [data-test-tag-name-input]', - 'new-tag' - ); - await typeIn( - '[data-test-tagged-version="false"] [data-test-tag-description-input]', - 'new-description' - ); - - // Clicking the save button commits the changes - await click( - '[data-test-tagged-version="false"] [data-test-tag-save-button]' - ); - - assert - .dom('[data-test-tagged-version="false"]') - .doesNotExist('Both versions now have tags'); +test('existing version tags can be edited', async function (assert) { + // Clicking the tag button puts it into edit mode + assert + .dom('[data-test-tagged-version="true"] .boxed-section-foot') + .doesNotHaveClass('editing'); + await click('[data-test-tagged-version="true"] .tag-button-primary'); + assert + .dom('[data-test-tagged-version="true"] .boxed-section-foot') + .hasClass('editing'); + + // equivalent of backspacing existing + document.querySelector('[data-test-tag-name-input]').value = ''; + document.querySelector('[data-test-tag-description-input]').value = ''; + + await typeIn( + '[data-test-tagged-version="true"] [data-test-tag-name-input]', + 'new-tag' + ); + await typeIn( + '[data-test-tagged-version="true"] [data-test-tag-description-input]', + 'new-description' + ); + + // Clicking the save button commits the changes + await click('[data-test-tagged-version="true"] [data-test-tag-save-button]'); + assert + .dom('[data-test-tagged-version="true"] .tag-button-primary') + .hasText('new-tag'); + assert + .dom('[data-test-tagged-version="true"] .tag-description') + .hasText('new-description'); + + assert + .dom('.flash-message.alert.alert-success') + .exists('Shows a success toast notification on edit.'); + + // Tag can subsequently be deleted + await click('[data-test-tagged-version="true"] .tag-button-primary'); + await click( + '[data-test-tagged-version="true"] [data-test-tag-delete-button]' + ); + assert.dom('[data-test-tagged-version="true"]').doesNotExist(); +}); - assert - .dom('.flash-message.alert.alert-success') - .exists('Shows a success toast notification on edit.'); - - await percySnapshot(assert, { - percyCSS: ` - .timeline-note { - display: none; - } - .submit-date { - visibility: hidden; - } - `, - }); - }); +test('new version tags can be created', async function (assert) { + // Clicking the tag button puts it into edit mode + assert + .dom('[data-test-tagged-version="false"] .boxed-section-foot') + .doesNotHaveClass('editing'); + await click('[data-test-tagged-version="false"] .tag-button-secondary'); + assert + .dom('[data-test-tagged-version="false"] .boxed-section-foot') + .hasClass('editing'); + + assert + .dom('[data-test-tagged-version="false"] [data-test-tag-delete-button]') + .doesNotExist(); + + // Clicking the save button commits the changes + await click('[data-test-tagged-version="false"] [data-test-tag-save-button]'); + + assert + .dom('.flash-message.alert.alert-critical') + .exists('Shows an error toast notification without a tag name.'); + + await typeIn( + '[data-test-tagged-version="false"] [data-test-tag-name-input]', + 'new-tag' + ); + await typeIn( + '[data-test-tagged-version="false"] [data-test-tag-description-input]', + 'new-description' + ); + + // Clicking the save button commits the changes + await click('[data-test-tagged-version="false"] [data-test-tag-save-button]'); + + assert + .dom('[data-test-tagged-version="false"]') + .doesNotExist('Both versions now have tags'); + + assert + .dom('.flash-message.alert.alert-success') + .exists('Shows a success toast notification on edit.'); }); // Module for Clone and Edit @@ -429,8 +400,6 @@ module('Acceptance | job versions (clone and edit)', function (hooks) { `/jobs/${job.id}@${namespace.id}/definition?isEditing=true&version=98&view=job-spec`, 'Taken to the definition page in edit mode' ); - - await percySnapshot(assert); }); test('Clone as new version when version is 0', async function (assert) { @@ -458,8 +427,6 @@ module('Acceptance | job versions (clone and edit)', function (hooks) { ); assert.dom('[data-test-json-warning]').exists(); - - await percySnapshot(assert); }); test('Clone as a new job', async function (assert) { diff --git a/ui/tests/acceptance/jobs-list-test.js b/ui/tests/acceptance/jobs-list-test.js index f5ed2ce495a..4331628a038 100644 --- a/ui/tests/acceptance/jobs-list-test.js +++ b/ui/tests/acceptance/jobs-list-test.js @@ -18,7 +18,6 @@ import { setupMirage } from 'ember-cli-mirage/test-support'; import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit'; import pageSizeSelect from './behaviors/page-size-select'; import JobsList from 'nomad-ui/tests/pages/jobs/list'; -import percySnapshot from '@percy/ember'; import faker from 'nomad-ui/mirage/faker'; let managementToken, clientToken; @@ -58,8 +57,6 @@ module('Acceptance | jobs list', function (hooks) { await JobsList.visit(); - await percySnapshot(assert); - const sortedJobs = server.db.jobs .sortBy('id') .sortBy('modifyIndex') @@ -145,8 +142,6 @@ module('Acceptance | jobs list', function (hooks) { faker.seed(1); await JobsList.visit(); - await percySnapshot(assert); - assert.ok(JobsList.isEmpty, 'There is an empty message'); assert.equal( JobsList.emptyState.headline, @@ -245,7 +240,6 @@ module('Acceptance | jobs list', function (hooks) { await JobsList.visit(); assert.equal(JobsList.error.title, 'Not Authorized'); - await percySnapshot(assert); await JobsList.error.seekHelp(); assert.equal(currentURL(), '/settings/tokens'); @@ -285,8 +279,6 @@ module('Acceptance | jobs list', function (hooks) { .dom('.flash-message.alert-critical') .exists('A toast error message pops up.'); - await percySnapshot(assert); - await click('[data-test-pause-fetching]'); assert .dom('.flash-message.alert-critical') @@ -600,7 +592,6 @@ module('Acceptance | jobs list', function (hooks) { .exists({ count: 10 }, 'All children are shown'); }, duelingQueryUpdateTime); - await percySnapshot(assert); localStorage.removeItem('nomadPageSize'); }); @@ -753,8 +744,6 @@ module('Acceptance | jobs list', function (hooks) { assert .dom('[data-test-job-row="ancient-system-job"] [data-test-job-status]') .hasText('Failed', 'System job with no allocs is failed'); - - await percySnapshot(assert); }); test('Jobs with schedule blocks indicate when a task is paused', async function (assert) { @@ -797,12 +786,10 @@ module('Acceptance | jobs list', function (hooks) { assert .dom('[data-test-paused-task-indicator]') .exists({ count: 1 }, 'Paused task indicator is shown'); - await percySnapshot(assert); await click('[data-test-job-row="time-based-job"]'); await click(`[data-test-allocation="${allocID}"]`); await click(`[data-test-task-row="${task.name}"]`); assert.dom('.time-based-alert').exists(); - await percySnapshot('Task detail with time-based alert'); }); module('Pagination', function () { @@ -813,7 +800,6 @@ module('Acceptance | jobs list', function (hooks) { assert.dom('[data-test-pager="previous"]').doesNotExist(); assert.dom('[data-test-pager="next"]').doesNotExist(); assert.dom('[data-test-pager="last"]').doesNotExist(); - await percySnapshot(assert); }); test('when there are fewer jobs than your page size setting', async function (assert) { localStorage.setItem('nomadPageSize', '10'); @@ -823,7 +809,6 @@ module('Acceptance | jobs list', function (hooks) { assert.dom('[data-test-pager="previous"]').isDisabled(); assert.dom('[data-test-pager="next"]').isDisabled(); assert.dom('[data-test-pager="last"]').isDisabled(); - await percySnapshot(assert); localStorage.removeItem('nomadPageSize'); }); test('when you have plenty of jobs', async function (assert) { @@ -849,7 +834,6 @@ module('Acceptance | jobs list', function (hooks) { assert.dom('[data-test-pager="previous"]').isNotDisabled(); assert.dom('[data-test-pager="next"]').isDisabled(); assert.dom('[data-test-pager="last"]').isDisabled(); - await percySnapshot(assert); localStorage.removeItem('nomadPageSize'); }); }); @@ -1578,14 +1562,12 @@ module('Acceptance | jobs list', function (hooks) { 'No jobs match your current filter selection: type == foo' ); assert.dom('[data-test-filter-correction]').exists(); - await percySnapshot(assert); await JobsList.search.fillIn('foo != bar'); assert .dom('[data-test-empty-jobs-list]') .includesText('Did you mistype a key?'); assert.dom('[data-test-filter-suggestion]').exists(); - await percySnapshot('Filter suggestion for unknown key'); await JobsList.search.fillIn('Name == surelyDoesntExist'); assert @@ -1594,7 +1576,6 @@ module('Acceptance | jobs list', function (hooks) { 'No jobs match your current filter selection: Name == surelyDoesntExist' ); assert.dom('[data-test-filter-random-suggestion]').exists(); - await percySnapshot('Filter no results with random suggestion'); localStorage.removeItem('nomadPageSize'); }); @@ -1767,7 +1748,6 @@ module('Acceptance | jobs list', function (hooks) { ''; // clear await typeIn('[data-test-namespace-filter-searchbox]', 'n'); assert.dom('[data-test-dropdown-option]').exists({ count: 4 }); - await percySnapshot(assert); }); test('Namespace filter only shows up if the server has more than one namespace', async function (assert) { localStorage.setItem('nomadPageSize', '10'); diff --git a/ui/tests/acceptance/keyboard-test.js b/ui/tests/acceptance/keyboard-test.js index 598691dc516..c828bfb69c0 100644 --- a/ui/tests/acceptance/keyboard-test.js +++ b/ui/tests/acceptance/keyboard-test.js @@ -16,7 +16,6 @@ import { } from '@ember/test-helpers'; import { setupMirage } from 'ember-cli-mirage/test-support'; import Layout from 'nomad-ui/tests/pages/layout'; -import percySnapshot from '@percy/ember'; import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit'; import faker from 'nomad-ui/mirage/faker'; @@ -32,7 +31,6 @@ module('Acceptance | keyboard', function (hooks) { assert.notOk(Layout.keyboard.modalShown); await triggerEvent('.page-layout', 'keydown', { key: '?' }); assert.ok(Layout.keyboard.modalShown); - await percySnapshot(assert); await a11yAudit(assert); await triggerEvent('.page-layout', 'keydown', { key: 'Escape' }); assert.notOk(Layout.keyboard.modalShown); diff --git a/ui/tests/acceptance/namespaces-test.js b/ui/tests/acceptance/namespaces-test.js index eb37d9cc849..a47fb5a124e 100644 --- a/ui/tests/acceptance/namespaces-test.js +++ b/ui/tests/acceptance/namespaces-test.js @@ -15,7 +15,6 @@ import { import { setupApplicationTest } from 'ember-qunit'; import { allScenarios } from '../../mirage/scenarios/default'; import { setupMirage } from 'ember-cli-mirage/test-support'; -import percySnapshot from '@percy/ember'; import faker from 'nomad-ui/mirage/faker'; import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit'; @@ -38,7 +37,6 @@ module('Acceptance | namespaces', function (hooks) { .dom('[data-test-namespace-row]') .exists({ count: server.db.namespaces.length }); await a11yAudit(assert); - await percySnapshot(assert); // Reset Token window.localStorage.nomadTokenSecret = null; }); @@ -83,7 +81,6 @@ module('Acceptance | namespaces', function (hooks) { assert.ok(newNs, 'Namespace is in the list'); await click(newNs); assert.equal(currentURL(), '/administration/namespaces/My-New-Namespace'); - await percySnapshot(assert); // Reset Token window.localStorage.nomadTokenSecret = null; }); diff --git a/ui/tests/acceptance/policies-test.js b/ui/tests/acceptance/policies-test.js index 7241fdbea78..8b2a24535e5 100644 --- a/ui/tests/acceptance/policies-test.js +++ b/ui/tests/acceptance/policies-test.js @@ -15,7 +15,6 @@ import { import { setupApplicationTest } from 'ember-qunit'; import { allScenarios } from '../../mirage/scenarios/default'; import { setupMirage } from 'ember-cli-mirage/test-support'; -import percySnapshot from '@percy/ember'; import faker from 'nomad-ui/mirage/faker'; import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit'; @@ -38,7 +37,6 @@ module('Acceptance | policies', function (hooks) { .dom('[data-test-policy-row]') .exists({ count: server.db.policies.length }); await a11yAudit(assert); - await percySnapshot(assert); // Reset Token window.localStorage.nomadTokenSecret = null; }); @@ -130,7 +128,6 @@ module('Acceptance | policies', function (hooks) { assert.ok(newPolicy, 'Policy is in the list'); await click(newPolicy); assert.equal(currentURL(), '/administration/policies/My-Fun-Policy'); - await percySnapshot(assert); // Reset Token window.localStorage.nomadTokenSecret = null; }); diff --git a/ui/tests/acceptance/roles-test.js b/ui/tests/acceptance/roles-test.js index 08bd99e7f04..fd2d51b3d1f 100644 --- a/ui/tests/acceptance/roles-test.js +++ b/ui/tests/acceptance/roles-test.js @@ -11,7 +11,6 @@ import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit'; import { allScenarios } from '../../mirage/scenarios/default'; import Tokens from 'nomad-ui/tests/pages/settings/tokens'; import Administration from 'nomad-ui/tests/pages/administration'; -import percySnapshot from '@percy/ember'; import faker from 'nomad-ui/mirage/faker'; module('Acceptance | roles', function (hooks) { @@ -46,8 +45,6 @@ module('Acceptance | roles', function (hooks) { assert .dom('[data-test-role-row]') .exists({ count: server.db.roles.length }); - - await percySnapshot(assert); }); test('Roles index: deletion', async function (assert) { @@ -104,7 +101,6 @@ module('Acceptance | roles', function (hooks) { `/administration/roles/${role.name}`, 'remain on page after save' ); - await percySnapshot(assert); // Go back to the roles index await Administration.visitRoles(); @@ -243,8 +239,6 @@ module('Acceptance | roles', function (hooks) { .dom('[data-test-role-token-row]:last-child [data-test-token-name]') .hasText(`Example Token for ${role.name}`); - await percySnapshot(assert); - await Administration.visitTokens(); assert .dom('[data-test-token-name="Example Token for reader"]') diff --git a/ui/tests/acceptance/sentinel-policies-test.js b/ui/tests/acceptance/sentinel-policies-test.js index 2f5b379d2c8..92a85f3ca79 100644 --- a/ui/tests/acceptance/sentinel-policies-test.js +++ b/ui/tests/acceptance/sentinel-policies-test.js @@ -11,7 +11,6 @@ import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit'; import { allScenarios } from '../../mirage/scenarios/default'; import Tokens from 'nomad-ui/tests/pages/settings/tokens'; import Administration from 'nomad-ui/tests/pages/administration'; -import percySnapshot from '@percy/ember'; import faker from 'nomad-ui/mirage/faker'; module('Acceptance | sentinel policies', function (hooks) { @@ -45,8 +44,6 @@ module('Acceptance | sentinel policies', function (hooks) { assert .dom('[data-test-sentinel-policy-row]') .exists({ count: server.db.sentinelPolicies.length }); - - await percySnapshot(assert); }); test('Sentinel Policies index: deletion', async function (assert) { @@ -197,7 +194,6 @@ module('Acceptance | sentinel policies', function (hooks) { assert.expect(5); await click('[data-test-create-sentinel-policy-from-template]'); assert.equal(currentURL(), '/administration/sentinel-policies/gallery'); - await percySnapshot(assert); const template = find('[data-test-template-card="no-friday-deploys"]'); await click(template); assert.ok( @@ -215,8 +211,6 @@ module('Acceptance | sentinel policies', function (hooks) { 'New Policy page has query param' ); - await percySnapshot('New sentinel policy from template'); - assert.dom('[data-test-policy-name-input]').hasValue('no-friday-deploys'); assert .dom('[data-test-policy-description]') diff --git a/ui/tests/acceptance/servers-list-test.js b/ui/tests/acceptance/servers-list-test.js index 8c78902428a..f8c4c9117dd 100644 --- a/ui/tests/acceptance/servers-list-test.js +++ b/ui/tests/acceptance/servers-list-test.js @@ -12,7 +12,6 @@ import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit'; import { findLeader } from '../../mirage/config'; import ServersList from 'nomad-ui/tests/pages/servers/list'; import formatHost from 'nomad-ui/utils/format-host'; -import percySnapshot from '@percy/ember'; import faker from 'nomad-ui/mirage/faker'; const minimumSetup = () => { @@ -55,7 +54,6 @@ module('Acceptance | servers list', function (hooks) { const sortedAgents = server.db.agents.sort(agentSort(leader)).reverse(); await ServersList.visit(); - await percySnapshot(assert); assert.equal( ServersList.servers.length, diff --git a/ui/tests/acceptance/storage-list-test.js b/ui/tests/acceptance/storage-list-test.js index a5d929b25d5..46f5bd35abe 100644 --- a/ui/tests/acceptance/storage-list-test.js +++ b/ui/tests/acceptance/storage-list-test.js @@ -10,7 +10,6 @@ import { setupApplicationTest } from 'ember-qunit'; import { setupMirage } from 'ember-cli-mirage/test-support'; import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit'; import StorageList from 'nomad-ui/tests/pages/storage/list'; -import percySnapshot from '@percy/ember'; import faker from 'nomad-ui/mirage/faker'; const assignWriteAlloc = (volume, alloc) => { @@ -61,8 +60,6 @@ module('Acceptance | storage list', function (hooks) { await StorageList.visit(); - await percySnapshot(assert); - const sortedVolumes = server.db.csiVolumes.sortBy('id'); assert.equal(StorageList.csiVolumes.length, StorageList.pageSize); @@ -129,8 +126,6 @@ module('Acceptance | storage list', function (hooks) { test('when there are no csi volumes, there is an empty message', async function (assert) { await StorageList.visit(); - await percySnapshot(assert); - assert.ok(StorageList.csiIsEmpty); assert.equal(StorageList.csiEmptyState, 'No CSI Volumes found'); }); diff --git a/ui/tests/acceptance/task-logs-test.js b/ui/tests/acceptance/task-logs-test.js index 0312e0cfa7f..9ab22350183 100644 --- a/ui/tests/acceptance/task-logs-test.js +++ b/ui/tests/acceptance/task-logs-test.js @@ -16,7 +16,6 @@ import { setupApplicationTest } from 'ember-qunit'; import { setupMirage } from 'ember-cli-mirage/test-support'; import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit'; import TaskLogs from 'nomad-ui/tests/pages/allocations/task/logs'; -import percySnapshot from '@percy/ember'; import faker from 'nomad-ui/mirage/faker'; let allocation; @@ -46,7 +45,6 @@ module('Acceptance | task logs', function (hooks) { test('it passes an accessibility audit', async function (assert) { await TaskLogs.visit({ id: allocation.id, name: task.name }); await a11yAudit(assert); - await percySnapshot(assert); }); test('/allocation/:id/:task_name/logs should have a log component', async function (assert) { @@ -167,12 +165,6 @@ module('Acceptance | task logs', function (hooks) { assert .dom('.task-context-sidebar h1.title') .includesText(task.state, 'Task state is correctly displayed'); - await percySnapshot(assert, { - percyCSS: ` - .allocation-row td { display: none; } - .task-events table td:nth-child(1) { color: transparent; } - `, - }); await click('.sidebar button.close'); assert.notOk(TaskLogs.sidebarIsPresent, 'Sidebar is not present'); diff --git a/ui/tests/acceptance/token-test.js b/ui/tests/acceptance/token-test.js index 456e21f45c6..7377945f9c5 100644 --- a/ui/tests/acceptance/token-test.js +++ b/ui/tests/acceptance/token-test.js @@ -22,7 +22,6 @@ import JobDetail from 'nomad-ui/tests/pages/jobs/detail'; import ClientDetail from 'nomad-ui/tests/pages/clients/detail'; import Layout from 'nomad-ui/tests/pages/layout'; import Administration from 'nomad-ui/tests/pages/administration'; -import percySnapshot from '@percy/ember'; import faker from 'nomad-ui/mirage/faker'; import moment from 'moment'; import { run } from '@ember/runloop'; @@ -152,8 +151,6 @@ module('Acceptance | tokens', function (hooks) { await Tokens.visit(); await Tokens.secret(secretId).submit(); - await percySnapshot(assert); - assert.ok(Tokens.successMessage, 'Token success message is shown'); assert.notOk(Tokens.errorMessage, 'Token error message is not shown'); assert.ok(Tokens.managementMessage, 'Token management message is shown'); @@ -345,10 +342,6 @@ module('Acceptance | tokens', function (hooks) { .doesNotExist('No notification yet for a token with 10m5s left'); notificationNotRendered(); setTimeout(async () => { - await percySnapshot(assert, { - percyCSS: '[data-test-expiration-timestamp] { display: none; }', - }); - assert .dom('.flash-message.alert-warning') .exists('Notification is rendered at the 10m mark'); @@ -394,8 +387,6 @@ module('Acceptance | tokens', function (hooks) { assert.dom(managerButton).exists(); await click(managerButton); - await percySnapshot(assert); - assert.ok(currentURL().startsWith('/settings/tokens')); assert.dom('[data-test-token-name]').includesText('Token: Manager'); }); @@ -456,7 +447,6 @@ module('Acceptance | tokens', function (hooks) { 'Redirected with failure state' ); - await percySnapshot(assert); assert.ok(Tokens.ssoErrorMessage); }); @@ -742,7 +732,6 @@ module('Acceptance | tokens', function (hooks) { { count: existingTokens.length }, 'One fewer token after deletion' ); - await percySnapshot(assert); window.localStorage.nomadTokenSecret = null; }); @@ -780,7 +769,6 @@ module('Acceptance | tokens', function (hooks) { assert .dom('[data-test-policy-token-row]:last-child [data-test-token-name]') .hasText(`Example Token for ${testPolicy.name}`); - await percySnapshot(assert); window.localStorage.nomadTokenSecret = null; }); @@ -947,8 +935,6 @@ module('Acceptance | tokens', function (hooks) { assert.dom(policyBlocks[1]).hasText('client-reader'); assert.dom(policyBlocks[2]).hasText('job-reader'); - await percySnapshot(assert); - await Tokens.clear(); // User with 2 roles, each containing 1 policy, and one of the policies is also directly on their token @@ -1029,8 +1015,6 @@ module('Acceptance | tokens', function (hooks) { assert .dom('[data-test-token-row]') .exists({ count: server.db.tokens.length }); - - await percySnapshot(assert); }); test('Tokens index, management token handling', async function (assert) { @@ -1327,8 +1311,6 @@ module('Acceptance | tokens', function (hooks) { await click('[data-test-token-save]'); assert.dom('.flash-message.alert-success').exists(); - await percySnapshot(assert); - await Administration.visitTokens(); // Policies cell for our clay token should read "No Policies" const clayToken = server.db.tokens.findBy((t) => t.id === 'cl4y-t0k3n'); @@ -1409,7 +1391,6 @@ module('Acceptance | tokens', function (hooks) { assert .dom('[data-test-token-expiration-time-input]') .exists('HTML datetime-local picker exists'); - await percySnapshot(assert); // select a date/time for 100 minutes into the future in GMT const soon = new Date(); soon.setMinutes(soon.getMinutes() + 100); @@ -1523,7 +1504,6 @@ module('Tokens and Regions', function (hooks) { 'america', 'Global token is saved in the authoritative region, regardless of active UI region' ); - await percySnapshot(assert); }); test('A token can be created in a non-authoritative region', async function (assert) { diff --git a/ui/tests/acceptance/topology-test.js b/ui/tests/acceptance/topology-test.js index 792107fa24e..6440d9ff450 100644 --- a/ui/tests/acceptance/topology-test.js +++ b/ui/tests/acceptance/topology-test.js @@ -18,7 +18,6 @@ import { formatScheduledHertz, } from 'nomad-ui/utils/units'; import queryString from 'query-string'; -import percySnapshot from '@percy/ember'; import faker from 'nomad-ui/mirage/faker'; const sumResources = (list, dimension) => @@ -51,8 +50,6 @@ module('Acceptance | topology', function (hooks) { await Topology.visit(); - await percySnapshot(assert); - assert.equal(Topology.infoPanelTitle, 'Cluster Details'); assert.notOk(Topology.filteredNodesWarning.isPresent); diff --git a/ui/tests/acceptance/variables-test.js b/ui/tests/acceptance/variables-test.js index af1b420d9fa..24c4d30c24e 100644 --- a/ui/tests/acceptance/variables-test.js +++ b/ui/tests/acceptance/variables-test.js @@ -19,7 +19,6 @@ import { module, test } from 'qunit'; import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit'; import { allScenarios } from '../../mirage/scenarios/default'; import cleanWhitespace from '../utils/clean-whitespace'; -import percySnapshot from '@percy/ember'; import faker from 'nomad-ui/mirage/faker'; import Variables from 'nomad-ui/tests/pages/variables'; @@ -59,7 +58,6 @@ module('Acceptance | variables', function (hooks) { await Variables.visit(); assert.equal(currentURL(), '/variables'); assert.ok(Layout.gutter.variables.isVisible); - await percySnapshot(assert); }); test('it correctly traverses to and deletes a variable', async function (assert) { @@ -104,8 +102,6 @@ module('Acceptance | variables', function (hooks) { assert.ok(fooLink, 'foo0 file is present'); - await percySnapshot(assert); - await click(fooLink); assert.ok( currentURL().includes('/variables/var/a/b/c/foo0'), @@ -114,8 +110,6 @@ module('Acceptance | variables', function (hooks) { const deleteButton = find('[data-test-delete-button] button'); assert.dom(deleteButton).exists('delete button is present'); - await percySnapshot('deeply nested variable'); - await click(deleteButton); assert .dom('[data-test-confirmation-message]') @@ -216,8 +210,6 @@ module('Acceptance | variables', function (hooks) { 'Related Entities box is job-oriented' ); - await percySnapshot('related entities box for job variable'); - let relatedJobLink = find('.related-entities a'); await click(relatedJobLink); assert @@ -252,8 +244,6 @@ module('Acceptance | variables', function (hooks) { 'Related Entities box is group-oriented' ); - await percySnapshot('related entities box for group variable'); - let relatedGroupLink = find('.related-entities a'); await click(relatedGroupLink); assert @@ -290,8 +280,6 @@ module('Acceptance | variables', function (hooks) { 'Related Entities box is task-oriented' ); - await percySnapshot('related entities box for task variable'); - let relatedTaskLink = find('.related-entities a'); await click(relatedTaskLink); // Gotta go the long way and click into the alloc/then task from here; but we know this one by virtue of stable test env. @@ -370,8 +358,6 @@ module('Acceptance | variables', function (hooks) { await typeIn('[data-test-var-key]', 'myKey'); await typeIn('[data-test-var-value]', 'superSecret'); - await percySnapshot(assert); - await click('button[type="submit"]'); assert.dom('.flash-message.alert-success').exists(); @@ -594,8 +580,6 @@ module('Acceptance | variables', function (hooks) { 'Clicking the button navigates you to editing view.' ); - await percySnapshot(assert); - assert.dom('[data-test-path-input]').isDisabled('Path cannot be edited'); document.querySelector('[data-test-var-key]').value = ''; // clear current input @@ -1030,7 +1014,6 @@ module('Acceptance | variables', function (hooks) { assert.dom('[data-test-no-auto-vars-message]').exists(); assert.dom('[data-test-create-variable-button]').exists(); - await percySnapshot(assert); window.localStorage.nomadTokenSecret = null; // Reset Token }); diff --git a/ui/tests/integration/components/job-editor-test.js b/ui/tests/integration/components/job-editor-test.js index 0da27ea2929..bfad70e1744 100644 --- a/ui/tests/integration/components/job-editor-test.js +++ b/ui/tests/integration/components/job-editor-test.js @@ -15,7 +15,6 @@ import jobEditor from 'nomad-ui/tests/pages/components/job-editor'; import { initialize as fragmentSerializerInitializer } from 'nomad-ui/initializers/fragment-serializer'; import setupCodeMirror from 'nomad-ui/tests/helpers/codemirror'; import { componentA11yAudit } from 'nomad-ui/tests/helpers/a11y-audit'; -import percySnapshot from '@percy/ember'; const Editor = create(jobEditor()); @@ -319,8 +318,6 @@ module('Integration | Component | job-editor', function (hooks) { ); await componentA11yAudit(this.element, assert); - - await percySnapshot(assert); }); test('When the scheduler dry-run has warnings, the warnings are shown to the user', async function (assert) { @@ -333,7 +330,6 @@ module('Integration | Component | job-editor', function (hooks) { Editor.warningMessage.isPresent, 'The scheduler dry-run warning block is shown to the user' ); - await percySnapshot(assert); }); test('when the scheduler dry-run has no warnings, a success message is shown to the user', async function (assert) { diff --git a/ui/tests/integration/components/job-status-panel-test.js b/ui/tests/integration/components/job-status-panel-test.js index 66207ca05d0..685d336857c 100644 --- a/ui/tests/integration/components/job-status-panel-test.js +++ b/ui/tests/integration/components/job-status-panel-test.js @@ -10,7 +10,6 @@ import hbs from 'htmlbars-inline-precompile'; import { startMirage } from 'nomad-ui/initializers/ember-cli-mirage'; import { initialize as fragmentSerializerInitializer } from 'nomad-ui/initializers/fragment-serializer'; import { componentA11yAudit } from 'nomad-ui/tests/helpers/a11y-audit'; -import percySnapshot from '@percy/ember'; module( 'Integration | Component | job status panel | active deployment', @@ -322,10 +321,6 @@ module( '25 Running 0 Complete' ); - await percySnapshot( - "Job Status Panel: 'New' and 'Previous' allocations, initial deploying state" - ); - // Try setting a few of the old allocs to complete and make sure number ticks down await Promise.all( this.get('job.allocations') @@ -374,10 +369,6 @@ module( '20 Running 5 Complete' ); - await percySnapshot( - "Job Status Panel: 'New' and 'Previous' allocations, some old marked complete" - ); - await componentA11yAudit( this.element, assert, diff --git a/ui/tests/integration/components/variable-form-test.js b/ui/tests/integration/components/variable-form-test.js index 890cb2bbcf5..f864aef755f 100644 --- a/ui/tests/integration/components/variable-form-test.js +++ b/ui/tests/integration/components/variable-form-test.js @@ -11,7 +11,6 @@ import { click, typeIn, find, findAll, render } from '@ember/test-helpers'; import { setupMirage } from 'ember-cli-mirage/test-support'; import setupCodeMirror from 'nomad-ui/tests/helpers/codemirror'; import { codeFillable, code } from 'nomad-ui/tests/pages/helpers/codemirror'; -import percySnapshot from '@percy/ember'; import { clickToggle, clickOption } from 'nomad-ui/tests/helpers/helios'; import faker from 'nomad-ui/mirage/faker'; @@ -142,7 +141,6 @@ module('Integration | Component | variable-form', function (hooks) { secondRow.classList.contains('hds-form-masked-input--is-masked'), 'Rows that are not clicked remain obscured' ); - await percySnapshot(assert); }); }); @@ -450,8 +448,6 @@ module('Integration | Component | variable-form', function (hooks) { hbs`