Compare commits

...
Author SHA1 Message Date
Dima May 6af2944841 upgrade gh actions, node and java 2026-07-06 11:49:49 +00:00
rmmayo d19947c814 upgraded spring boot to v3.5.16 2026-06-25 14:49:46 +00:00
Dima May 361bae4289 spring boot upgrade; set license-maven-plugin to use the latest version 2026-06-11 14:50:16 +00:00
Dima May aae9cc7ee9 Merge pull request #278 from NationalSecurityAgency/t#277/upgrade_axios
#277 - upgrade axios
2026-06-08 15:24:47 -04:00
rmmayo 60c3d5edb1 #277 - upgrade axios 2026-06-08 14:48:22 +00:00
Dima May bb12395d80 creating_release_version_3.6.3 2026-05-12 17:39:20 +00:00
Ryan Mayo dea819670b Merge pull request #276 from NationalSecurityAgency/t#247/readme
T#247/readme
2026-05-12 13:24:29 -04:00
Dima May 7553782dcc #247: added badges 2026-05-12 17:04:39 +00:00
Dima May daf5b1fca8 #247: updated readme 2026-05-12 17:02:15 +00:00
Ryan Mayo 83878d8c3a Merge pull request #275 from NationalSecurityAgency/t#274/upgrade_libs
T#274/upgrade libs
2026-05-12 11:01:53 -04:00
Dima May 83178bf58b #247: upgraded JS libraries used in end-to-end tests 2026-05-12 14:33:26 +00:00
Dima May 03cf175e26 #247: upgraded JS libraries, rewrote tests due to jdom upgrade; new tests to improve test coverage 2026-05-12 14:14:33 +00:00
Dima May 04c9f2e950 Merge pull request #272 from NationalSecurityAgency/dependabot/npm_and_yarn/skills-client-integration/skills-int-client-js/axios-1.15.2
Bump axios from 1.15.0 to 1.15.2 in /skills-client-integration/skills-int-client-js
2026-05-08 14:07:55 +00:00
Dima May 3f952ba966 Merge pull request #273 from NationalSecurityAgency/dependabot/npm_and_yarn/skills-client-js/axios-1.15.2
Bump axios from 1.15.0 to 1.15.2 in /skills-client-js
2026-05-08 14:07:35 +00:00
dependabot[bot] b7ad03fb64 Bump axios from 1.15.0 to 1.15.2 in /skills-client-js
Bumps [axios](https://github.com/axios/axios) from 1.15.0 to 1.15.2.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.15.0...v1.15.2)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.15.2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
2026-05-08 06:29:38 +00:00
dependabot[bot] 39c7abc757 Bump axios in /skills-client-integration/skills-int-client-js
Bumps [axios](https://github.com/axios/axios) from 1.15.0 to 1.15.2.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.15.0...v1.15.2)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.15.2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
2026-05-08 06:15:00 +00:00
rmmayo aa0af7e776 upgraded spring-boot to v3.5.14 2026-04-23 18:05:13 +00:00
Dima May 33cfff5ebb Merge pull request #270 from NationalSecurityAgency/dependabot/npm_and_yarn/skills-client-integration/skills-int-client-js/axios-1.15.0
Bump axios from 1.13.5 to 1.15.0 in /skills-client-integration/skills-int-client-js
2026-04-16 08:33:58 -04:00
Dima May 7efe886ef4 Merge pull request #271 from NationalSecurityAgency/dependabot/npm_and_yarn/skills-client-js/axios-1.15.0
Bump axios from 1.13.5 to 1.15.0 in /skills-client-js
2026-04-16 08:33:32 -04:00
dependabot[bot] caa236dff1 Bump axios from 1.13.5 to 1.15.0 in /skills-client-js
Bumps [axios](https://github.com/axios/axios) from 1.13.5 to 1.15.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.13.5...v1.15.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.15.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
2026-04-13 07:48:39 +00:00
dependabot[bot] 2b5b28c8dc Bump axios in /skills-client-integration/skills-int-client-js
Bumps [axios](https://github.com/axios/axios) from 1.13.5 to 1.15.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.13.5...v1.15.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.15.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
2026-04-12 10:27:26 +00:00
Dima May 481a6d0505 Merge pull request #269 from NationalSecurityAgency/dependabot/npm_and_yarn/skills-client-integration/skills-int-client-js/axios-1.13.5
Bump axios from 1.12.0 to 1.13.5 in /skills-client-integration/skills-int-client-js
2026-04-06 14:03:15 -04:00
dependabot[bot] 5103989eef Bump axios in /skills-client-integration/skills-int-client-js
Bumps [axios](https://github.com/axios/axios) from 1.12.0 to 1.13.5.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.12.0...v1.13.5)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.13.5
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
2026-04-06 17:38:15 +00:00
rmmayo 266bf9911d updated included licenses 2026-03-26 11:54:49 +00:00
rmmayo 8ab6ab5a3a upgraded spring boot 2026-03-26 11:37:00 +00:00
rmmayo d747c2b96f upgraded spring boot 2026-03-24 12:07:28 +00:00
Dima May 002ab3f783 Merge pull request #267 from NationalSecurityAgency/dependabot/npm_and_yarn/skills-client-js/axios-1.13.5
Bump axios from 1.12.0 to 1.13.5 in /skills-client-js
2026-03-17 13:44:58 -04:00
Dima May a5f3848c16 Merge pull request #268 from NationalSecurityAgency/dependabot/npm_and_yarn/skills-client-js/rollup-4.59.0
Bump rollup from 4.45.1 to 4.59.0 in /skills-client-js
2026-03-17 13:43:31 -04:00
rmmayo 601c7a2a96 upgraded spring boot 2026-03-02 18:26:52 +00:00
dependabot[bot] 8fcc10d52f Bump rollup from 4.45.1 to 4.59.0 in /skills-client-js
Bumps [rollup](https://github.com/rollup/rollup) from 4.45.1 to 4.59.0.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rollup/rollup/compare/v4.45.1...v4.59.0)

---
updated-dependencies:
- dependency-name: rollup
  dependency-version: 4.59.0
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <[email protected]>
2026-02-28 09:07:40 +00:00
dependabot[bot] 65881829c5 Bump axios from 1.12.0 to 1.13.5 in /skills-client-js
Bumps [axios](https://github.com/axios/axios) from 1.12.0 to 1.13.5.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.12.0...v1.13.5)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.13.5
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
2026-02-11 17:50:46 +00:00
rmmayo 99f946f33a upgraded spring boot to v3.5.10 2026-01-28 13:25:19 +00:00
Dima May 8051bf7a63 Merge pull request #266 from NationalSecurityAgency/t#3596/upgrade-spring-boot
Update spring boot
2025-11-25 14:14:36 -05:00
Don Walizer 9863d82e97 Update spring boot 2025-11-25 13:38:23 -05:00
Dima May a56fef71fb removed override for tomcat 2025-11-03 14:40:37 +00:00
Dima May db24520d75 upgraded spring and commons-lang 2025-10-24 10:06:13 +00:00
Dima May ca23b4e4d4 Merge pull request #264 from NationalSecurityAgency/dependabot/npm_and_yarn/skills-client-integration/skills-int-client-js/axios-1.12.0
Bump axios from 1.10.0 to 1.12.0 in /skills-client-integration/skills-int-client-js
2025-09-23 20:11:29 +00:00
Dima May 9e9952eb53 Merge pull request #265 from NationalSecurityAgency/dependabot/npm_and_yarn/skills-client-js/axios-1.12.0
Bump axios from 1.11.0 to 1.12.0 in /skills-client-js
2025-09-23 20:11:22 +00:00
dependabot[bot] 90d63e19dd Bump axios from 1.11.0 to 1.12.0 in /skills-client-js
Bumps [axios](https://github.com/axios/axios) from 1.11.0 to 1.12.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.11.0...v1.12.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.12.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
2025-09-23 12:52:25 +00:00
rmmayo fe91a737d5 upgraded spring-boot to 3.5.6 2025-09-23 12:51:25 +00:00
dependabot[bot] 419f5c9968 Bump axios in /skills-client-integration/skills-int-client-js
Bumps [axios](https://github.com/axios/axios) from 1.10.0 to 1.12.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.10.0...v1.12.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.12.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
2025-09-13 15:59:43 +00:00
Dima May 809e361760 Merge pull request #263 from NationalSecurityAgency/dependabot/npm_and_yarn/skills-client-js/axios-1.11.0
Bump axios from 1.10.0 to 1.11.0 in /skills-client-js
2025-08-22 14:27:39 +00:00
rmmayo f5cc10c7df upgraded spring-boot to 3.5.5 2025-08-21 14:35:11 +00:00
rmmayo c225388951 #3457 - updated tomcat 2025-08-18 15:45:24 +00:00
rmmayo 6d50e32d27 upgraded spring to v3.5.4 2025-07-24 14:34:22 +00:00
dependabot[bot] 6711223ad1 Bump axios from 1.10.0 to 1.11.0 in /skills-client-js
Bumps [axios](https://github.com/axios/axios) from 1.10.0 to 1.11.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.10.0...v1.11.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.11.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
2025-07-23 16:54:11 +00:00
Dima May 4e04972a09 creating_release_version_3.6.2 2025-07-17 15:37:53 +00:00
Dima May a22b53a356 #261: removed commented out script 2025-07-17 13:59:40 +00:00
Ryan Mayo 5e5aefd745 Merge pull request #262 from NationalSecurityAgency/t#261/ci_failures
T#261/ci failures
2025-07-17 13:54:27 +00:00
Dima May 54eca19513 #261: updated year 2025-07-17 13:33:59 +00:00
Dima May 41bfbcc9d9 #261: upgraded spring boot and JS libs 2025-07-17 12:13:51 +00:00
Dima May be1e821973 #261: upgraded spring boot and JS libs 2025-07-17 11:28:09 +00:00
Dima May e38c70d39a #261: added running unit tests back 2025-07-17 11:04:21 +00:00
Dima May 796f97342b #261: added running unit tests back 2025-07-17 10:59:17 +00:00
Dima May 02fe5e1c77 #261: added a missing build steps 2025-07-16 19:06:15 +00:00
Dima May c9bfb0ca1f #261: upgraded libs; enabled videos 2025-07-16 18:12:22 +00:00
rmmayo ad321f0169 upgraded spring boot 2025-07-14 16:25:55 +00:00
rmmayo be81478d02 upgraded spring boot 2025-07-14 16:20:06 +00:00
Dima May 03372a9e92 fixing CI 2025-06-20 18:21:35 +00:00
Dima May 7ec6092d6f upgraded node and java 2025-06-20 15:07:27 +00:00
Dima May 354500f018 upgraded spring and tomcat 2025-06-20 11:02:49 +00:00
Dima May 7458284c30 upgraded spring 2025-05-22 19:34:00 +00:00
Dima May f8156f45ab upgraded spring 2025-04-25 17:45:45 +00:00
rmmayo ce13000dcb upgraded springboot to 3.4.4 2025-04-01 19:29:36 +00:00
rmmayo 1664fa7ac7 upgraded springboot to 3.4.3 2025-03-19 20:32:48 +00:00
Dima May 1806136418 Merge pull request #260 from NationalSecurityAgency/dependabot/npm_and_yarn/skills-client-integration/skills-int-client-js/axios-1.8.2
Bump axios from 1.7.7 to 1.8.2 in /skills-client-integration/skills-int-client-js
2025-03-11 08:06:05 -04:00
dependabot[bot] 281140c19f Bump axios in /skills-client-integration/skills-int-client-js
Bumps [axios](https://github.com/axios/axios) from 1.7.7 to 1.8.2.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.7.7...v1.8.2)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
2025-03-11 10:53:17 +00:00
Ryan Mayo 0763dfbaa3 Merge pull request #259 from NationalSecurityAgency/t#258/upgrade_libs
258: upgraded libs
2025-03-11 06:52:23 -04:00
Dima May b4a59fdb7e 258: upgraded libs 2025-03-10 19:48:01 +00:00
rmmayo 7759001feb #3058 - upgrading spring boot 2024-12-31 20:42:01 +00:00
rmmayo 1b3ac0ff11 upgraded spring boot 2024-11-26 15:32:38 +00:00
Dima May d43f21a4cc creating_release_version_3.6.1 2024-11-20 17:00:39 +00:00
Don Walizer 2d946cb9d9 Merge pull request #257 from NationalSecurityAgency/update_readme
updated README and project home page link
2024-11-20 11:57:14 -05:00
Dima May 8da314393b updated README and project home page link 2024-11-20 16:49:05 +00:00
Dima May e9a11fbbca updated README and project home page link 2024-11-20 16:36:28 +00:00
Dima May 0af837321c creating_release_version_3.6.0 2024-11-20 15:20:15 +00:00
Dima May 0b92440cbc Merge pull request #256 from NationalSecurityAgency/t#255/upgrade_spring_boot
#255 - upgrading spring boot
2024-11-19 06:49:58 -05:00
rmmayo 24e6aca4f8 #255 - upgrading spring boot 2024-11-18 17:58:24 +00:00
Ryan Mayo 5cb0d9f455 Merge pull request #254 from NationalSecurityAgency/t#209/disable_skills_client
T#209/disable skills client
2024-10-09 13:15:44 +00:00
Dima May f6fddedeae #251: improved readme 2024-10-09 12:38:07 +00:00
Dima May 6851ef187b #251: only run disabled test for 3.6.0 and above 2024-10-09 12:02:27 +00:00
Dima May 133019e4e5 #251: to avoid a race condition fixed index.html page to add success handle after configure method completed 2024-10-09 10:50:08 +00:00
Dima May 59c4ce4c70 #209: fix unit tests 2024-10-08 21:11:26 +00:00
Dima May 727a2b6cf6 #209: added an option to disable skills-client 2024-10-08 20:55:37 +00:00
Ryan Mayo 1d36f49586 Merge pull request #253 from NationalSecurityAgency/t#213/iframe_aria_label
#213: added aria-label to iframe
2024-10-08 20:20:55 +00:00
Dima May 7480f6ab2a #213: added aria-label to iframe 2024-10-08 19:23:22 +00:00
Dima May 2207dcc248 Update README.md 2024-10-08 15:13:46 +00:00
Dima May 139db488cc Merge pull request #250 from NationalSecurityAgency/dependabot/maven/skills-client-integration/skills-int-e2e-test/commons-io-commons-io-2.14.0
Bump commons-io:commons-io from 2.8.0 to 2.14.0 in /skills-client-integration/skills-int-e2e-test
2024-10-08 14:57:05 +00:00
Ryan Mayo 059e208b53 Merge pull request #252 from NationalSecurityAgency/t#251/compat_ci
T#251/compat ci
2024-10-08 14:26:53 +00:00
Dima May 7d8e8f5b53 #251: do not run unsupported test for lib prior 3.2.0 2024-10-08 13:50:19 +00:00
Dima May 0a15a7651f #251: upgraded all js libs for skills-client-js; reverted removal of clientDisplayDefaultOptions.html 2024-10-08 13:36:24 +00:00
Dima May d03a5b3fec #251: upgraded all js libs for skills-int-client-js; fixed tests to run with 3.2.0 version of skills-client-js 2024-10-08 13:21:25 +00:00
Dima May a9d0a674f4 #251: cleaning up 2024-10-07 20:40:07 +00:00
Dima May 2152366635 #251: fixed tests against sills-service 2.12.6 2024-10-07 16:12:15 +00:00
Dima May ad31359fdd #251: filter skills-service tags from testing 2024-10-07 14:45:37 +00:00
Dima May 610e844f8e #251: filter skills-service tags from testing 2024-10-07 14:44:38 +00:00
Dima May bfd93347a4 #251: filter skills-service tags from testing 2024-10-07 14:04:04 +00:00
Dima May eb6395844b #251: filter skills-service tags from testing 2024-10-07 14:02:07 +00:00
Dima May 0286c9e705 #251: filter skills-service tags from testing 2024-10-07 13:59:28 +00:00
Dima May e7a6ba07ce #251: filter skills-service tags from testing 2024-10-07 13:54:10 +00:00
Dima May 3144e84bd3 #251: filter skills-service tags from testing 2024-10-07 13:52:37 +00:00
Dima May 5f9d1daf0f #251: filter skills-service tags from testing 2024-10-07 13:49:07 +00:00
Dima May 9d844f8e67 #251: run skills-service backward compat tests 2024-10-04 17:44:16 +00:00
Dima May 303748a980 #251: run skills-service backward compat tests 2024-10-04 17:38:15 +00:00
Dima May 89b55047e9 #251: run skills-service backward compat tests 2024-10-04 17:34:38 +00:00
Dima May 0bc3f485a9 #251: run skills-service backward compat tests 2024-10-04 17:24:21 +00:00
Dima May 514c9555e0 #251: run skills-service backward compat tests 2024-10-04 17:23:13 +00:00
Dima May 94ed933a4b #251: run skills-service backward compat tests 2024-10-04 17:21:53 +00:00
Dima May 2cd9ed554d #251: run skills-service backward compat tests 2024-10-04 17:17:35 +00:00
Dima May a881f59e9c #251: run skills-service backward compat tests 2024-10-04 17:14:36 +00:00
Dima May c700ecd5f7 #251: run skills-service backward compat tests 2024-10-04 17:12:08 +00:00
Dima May 7bd9939acd #251: run skills-service backward compat tests 2024-10-04 17:07:19 +00:00
Dima May 884463917b #251: run skills-service backward compat tests 2024-10-04 17:04:40 +00:00
Dima May 55cc382f4b #251: run skills-service backward compat tests 2024-10-04 17:01:22 +00:00
Dima May da3a3cbf7f #251: run skills-service backward compat tests 2024-10-04 16:59:42 +00:00
Dima May fb02712eaf #251: run skills-service backward compat tests 2024-10-04 16:56:36 +00:00
Dima May 5fd7b97802 #251: run skills-service backward compat tests 2024-10-04 16:55:52 +00:00
Dima May d529670ebf #251: run skills-service backward compat tests 2024-10-04 16:36:11 +00:00
Dima May 9cf2f879b2 #251: run skills-service backward compat tests 2024-10-04 16:27:27 +00:00
Dima May e372fe335f #251: run skills-service backward compat tests 2024-10-04 16:18:33 +00:00
Dima May bf0a5c2b40 #251: run skills-service backward compat tests 2024-10-04 16:12:51 +00:00
Dima May db3b51fbb0 #251: run skills-service backward compat tests 2024-10-04 15:38:05 +00:00
dependabot[bot] 7fca01690c Bump commons-io:commons-io
Bumps commons-io:commons-io from 2.8.0 to 2.14.0.

---
updated-dependencies:
- dependency-name: commons-io:commons-io
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
2024-10-03 18:51:34 +00:00
Dima May 6ebb19bcd0 Merge pull request #248 from NationalSecurityAgency/dependabot/npm_and_yarn/skills-client-js/rollup-4.22.4
Bump rollup from 4.22.2 to 4.22.4 in /skills-client-js
2024-10-01 09:28:26 -04:00
dependabot[bot] 47eb39b7a5 Bump rollup from 4.22.2 to 4.22.4 in /skills-client-js
Bumps [rollup](https://github.com/rollup/rollup) from 4.22.2 to 4.22.4.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rollup/rollup/compare/v4.22.2...v4.22.4)

---
updated-dependencies:
- dependency-name: rollup
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <[email protected]>
2024-10-01 11:03:36 +00:00
Ryan Mayo 66b9070fb2 Merge pull request #247 from NationalSecurityAgency/t#242/ci_and_upgrades
T#242/ci and upgrades
2024-10-01 07:03:09 -04:00
Dima May ee2f3acb04 #242: fixing oauth CI 2024-10-01 10:46:55 +00:00
Dima May 5aeba4fbdf #242: tests improvements 2024-10-01 10:20:26 +00:00
rmmayo c9d5e52b26 #245 - upgraded spring boot to 3.3.4 2024-10-01 00:52:43 +00:00
Dima May 1cc3cf90fb #242: fixing tests for oauth 2024-10-01 00:33:46 +00:00
Dima May efbcbd4691 #242: CI updates and fixes 2024-09-30 20:35:54 +00:00
Dima May 4015922833 #242: disable oauth tests on check-in for now 2024-09-30 12:49:03 +00:00
Dima May b74e94e4f8 #242: fixing tests 2024-09-30 12:38:46 +00:00
Dima May 0097090d64 #242: fixing CI 2024-09-30 12:06:27 +00:00
Dima May c8ebf124b5 #242: debug ci 2024-09-30 11:04:54 +00:00
Dima May 905fab93bd #242: add more transcript export tests; refactored cypress tests into multiple suites 2024-09-27 14:23:11 +00:00
Dima May 868eaefbec #242: kickoff tests 2024-09-27 12:46:08 +00:00
Dima May a15853c374 #242: inserted header 2024-09-27 12:10:24 +00:00
Dima May 17d1a7af4c #242: additional cypress test for back and forward navigation, breadcrumb navigation and a transcript download test 2024-09-26 20:36:26 +00:00
Dima May f1caf21a48 #242: fixing tests 2024-09-26 18:05:17 +00:00
Dima May 15d9d98e98 #242: fixing tests 2024-09-24 15:05:25 +00:00
Dima May af16c671cc #242: copy skills-service.jar in the proper location 2024-09-23 20:56:01 +00:00
Dima May d0f8995829 #242: skip tests 2024-09-23 20:42:35 +00:00
Dima May cd3fd7ba4b #242: checking out specific branch and building skills-service 2024-09-23 20:36:03 +00:00
Dima May 3d274eb8a2 #242: started fixing cypress specs; changed build to use native node 2024-09-23 20:30:56 +00:00
Dima May dd582da97d #242: started fixing cypress specs; changed build to use native node 2024-09-23 20:30:01 +00:00
Dima May 11ace4d8b6 #242: started fixing cypress specs; changed build to use native node 2024-09-23 20:20:20 +00:00
Dima May dc21097da1 upgrade github actions 2024-09-20 15:52:31 +00:00
Dima May 8bdeda36d3 upgraded skills-client-js libs 2024-09-20 15:45:28 +00:00
Dima May 323f2455b2 Merge pull request #241 from NationalSecurityAgency/upgrade-spring-3-3
Upgrade Spring Boot to 3.3.3
2024-09-05 13:17:35 -04:00
Don Walizer a0b16eca7b Upgrade Spring Boot to 3.3.3 2024-09-05 12:59:15 -04:00
Ryan Mayo 2f4d4e4008 Merge pull request #240 from NationalSecurityAgency/cleanup-libraries-update-axios
Remove old libraries, upgrade axios
2024-08-20 14:34:45 -04:00
Don Walizer ee44e6f990 Fix version in package.json 2024-08-20 14:33:58 -04:00
Don Walizer 09d2b01029 Remove old libraries, upgrade axios 2024-08-20 12:58:04 -04:00
Dima May abf3812439 update docker-compose to docker compose 2024-07-31 19:24:49 +00:00
Don Walizer 67df81d4fd Merge pull request #239 from NationalSecurityAgency/update-spring-3-2-4
Upgrade Spring to 3.2.4
2024-04-04 15:49:49 -04:00
Don Walizer 0a01ff53a3 Upgrade Spring to 3.2.4 2024-04-03 11:45:32 -04:00
Dima May 53fcc9562d Merge pull request #238 from NationalSecurityAgency/t#236/timeout_ci2
T#236/timeout ci2
2024-01-22 08:24:28 -05:00
rmmayo d8b719a728 #236 - add a wait before going back in the browser 2024-01-18 10:58:45 -05:00
rmmayo 06aa74a5f7 #236 - upgrade cypress 2024-01-18 08:30:46 -05:00
rmmayo 92354ed015 #236 - add a wait after going back in the browser 2024-01-18 08:26:20 -05:00
Dima May c83e3d5c22 Update README.md 2024-01-18 07:38:31 -05:00
Dima May 594471d12c Merge pull request #237 from NationalSecurityAgency/t#236/timeout_ci
T#236/timeout ci
2024-01-16 15:26:11 -05:00
rmmayo fdecf37ec0 #236 - upgrade cypress 2024-01-16 10:32:39 -05:00
rmmayo 0cfafd1d45 #236 - upgrade cypress 2024-01-16 10:25:59 -05:00
rmmayo 9891dea2e5 #236 - upgrade cypress 2024-01-16 10:22:37 -05:00
rmmayo a07a4e24eb #236 - upgrade cypress 2024-01-16 10:19:57 -05:00
rmmayo 4f86ed1913 #236 - upgrade cypress 2024-01-16 10:04:12 -05:00
rmmayo 482ae93e0f #236 - upgrade cypress 2024-01-16 09:46:30 -05:00
rmmayo 5ed4a68cb1 #236 - upgrade cypress 2024-01-16 09:14:16 -05:00
Dima May b784b5de26 Update README.md 2023-12-22 08:05:59 -05:00
Dima May ca03f0f709 Merge pull request #235 from NationalSecurityAgency/update-js-example
Add ability to specify ID for skill reporting event
2023-12-15 15:42:55 -05:00
Don Walizer 9ccaa12ac9 Add ability to specify ID for skill reporting event 2023-12-15 13:35:08 -05:00
Dima May 594d61503d Merge pull request #233 from NationalSecurityAgency/dependabot/npm_and_yarn/skills-client-js/axios-1.6.0
Bump axios from 0.27.2 to 1.6.0 in /skills-client-js
2023-12-14 08:09:56 -05:00
Don Walizer e11f7ec67f Modify version 2023-12-13 12:41:41 -05:00
Don Walizer f2f6104e7c Update axios, axios-mock-adapter, add ignore pattern 2023-12-13 10:10:36 -05:00
Don Walizer 53bd0136a5 Merge pull request #230 from NationalSecurityAgency/dependabot/npm_and_yarn/skills-client-integration/skills-int-client-js/axios-1.6.0
Bump axios from 0.23.0 to 1.6.0 in /skills-client-integration/skills-int-client-js
2023-12-08 15:21:40 -05:00
Don Walizer 6fbc73c259 Merge pull request #232 from NationalSecurityAgency/dependabot/npm_and_yarn/skills-client-integration/skills-int-client-react18/axios-1.6.0
Bump axios from 0.23.0 to 1.6.0 in /skills-client-integration/skills-int-client-react18
2023-12-08 15:16:51 -05:00
Don Walizer 67c5d77730 Merge pull request #231 from NationalSecurityAgency/dependabot/npm_and_yarn/skills-client-integration/skills-int-client-react17/axios-1.6.0
Bump axios from 0.23.0 to 1.6.0 in /skills-client-integration/skills-int-client-react17
2023-12-08 15:16:21 -05:00
Don Walizer a1d17002fc Merge pull request #229 from NationalSecurityAgency/dependabot/npm_and_yarn/skills-client-integration/skills-int-client-vue/axios-1.6.0
Bump axios from 0.23.0 to 1.6.0 in /skills-client-integration/skills-int-client-vue
2023-12-08 15:16:15 -05:00
Don Walizer f236d29053 Merge pull request #228 from NationalSecurityAgency/dependabot/npm_and_yarn/skills-client-vue/axios-1.6.0
Bump axios from 0.23.0 to 1.6.0 in /skills-client-vue
2023-12-08 15:15:45 -05:00
Don Walizer 752aff86e6 Merge pull request #227 from NationalSecurityAgency/dependabot/npm_and_yarn/skills-client-integration/skills-int-client-react/axios-1.6.0
Bump axios from 0.23.0 to 1.6.0 in /skills-client-integration/skills-int-client-react
2023-12-08 15:15:31 -05:00
Don Walizer 109f1a900f Merge pull request #226 from NationalSecurityAgency/dependabot/npm_and_yarn/skills-client-react/axios-1.6.0
Bump axios from 0.23.0 to 1.6.0 in /skills-client-react
2023-12-08 15:15:24 -05:00
Don Walizer 7c6a7293f7 Merge pull request #225 from NationalSecurityAgency/dependabot/npm_and_yarn/skills-client-integration/skills-int-client-ng/axios-1.6.0
Bump axios from 0.23.0 to 1.6.0 in /skills-client-integration/skills-int-client-ng
2023-12-08 15:15:04 -05:00
Dima May 8a9c9ffe56 Merge pull request #234 from NationalSecurityAgency/update-spring
Update spring
2023-12-08 14:56:59 -05:00
Don Walizer 2678017cde Update reference to PropertiesLauncher 2023-11-30 10:49:27 -05:00
Don Walizer a8b1ce9593 Upgrade to Spring Boot 3.2.0, adjust licenses 2023-11-30 10:36:58 -05:00
dependabot[bot] 39f8779394 Bump axios from 0.27.2 to 1.6.0 in /skills-client-js
Bumps [axios](https://github.com/axios/axios) from 0.27.2 to 1.6.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.27.2...v1.6.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
2023-11-11 05:50:05 +00:00
dependabot[bot] 67a9d5fe90 Bump axios in /skills-client-integration/skills-int-client-react18
Bumps [axios](https://github.com/axios/axios) from 0.23.0 to 1.6.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.23.0...v1.6.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
2023-11-10 21:38:30 +00:00
dependabot[bot] b4efd29492 Bump axios in /skills-client-integration/skills-int-client-react17
Bumps [axios](https://github.com/axios/axios) from 0.23.0 to 1.6.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.23.0...v1.6.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
2023-11-10 21:32:15 +00:00
dependabot[bot] abcb97d564 Bump axios in /skills-client-integration/skills-int-client-js
Bumps [axios](https://github.com/axios/axios) from 0.23.0 to 1.6.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.23.0...v1.6.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
2023-11-10 21:29:00 +00:00
dependabot[bot] fc3af550de Bump axios in /skills-client-integration/skills-int-client-vue
Bumps [axios](https://github.com/axios/axios) from 0.23.0 to 1.6.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.23.0...v1.6.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
2023-11-10 21:29:00 +00:00
dependabot[bot] bcb42fc81d Bump axios from 0.23.0 to 1.6.0 in /skills-client-vue
Bumps [axios](https://github.com/axios/axios) from 0.23.0 to 1.6.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.23.0...v1.6.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
2023-11-10 21:28:51 +00:00
dependabot[bot] 4b05314e3b Bump axios in /skills-client-integration/skills-int-client-react
Bumps [axios](https://github.com/axios/axios) from 0.23.0 to 1.6.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.23.0...v1.6.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
2023-11-10 21:28:51 +00:00
dependabot[bot] 712dcbcde8 Bump axios from 0.23.0 to 1.6.0 in /skills-client-react
Bumps [axios](https://github.com/axios/axios) from 0.23.0 to 1.6.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.23.0...v1.6.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
2023-11-10 21:28:50 +00:00
dependabot[bot] e0f5c18b61 Bump axios in /skills-client-integration/skills-int-client-ng
Bumps [axios](https://github.com/axios/axios) from 0.23.0 to 1.6.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.23.0...v1.6.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
2023-11-10 21:28:50 +00:00
Dima May b4cd851b0d Merge pull request #224 from NationalSecurityAgency/t#223/deprecate-libraries
T#223/deprecate libraries
2023-10-27 12:59:00 -04:00
Don Walizer e2738f48e0 #223 Remove deprecated tests 2023-10-18 13:55:41 -04:00
Don Walizer 3e569f461d #223 Remove non-native libraries from build 2023-10-18 13:23:16 -04:00
Ryan Mayo d5975ce4ce Merge pull request #222 from NationalSecurityAgency/t#220/remove_cupress_cloud
T#220/remove cupress cloud
2023-09-19 16:42:52 -04:00
EVOFORGE\dimay 4622afab09 #220: fixing nightly CIs 2023-09-19 15:55:55 -04:00
EVOFORGE\dimay 9888f5168d #220: fixing nightly CIs 2023-09-19 15:45:38 -04:00
Don Walizer c866aabab8 Merge pull request #221 from NationalSecurityAgency/t#220/remove_cupress_cloud
T#220/remove cupress cloud
2023-09-18 13:48:04 -04:00
EVOFORGE\dimay e45c87ca43 #220: fixing download 2023-09-18 13:16:21 -04:00
EVOFORGE\dimay 68111db2f5 #220: fixing download skills-service script 2023-09-18 12:32:27 -04:00
EVOFORGE\dimay 78a17e4171 #220: adding npm link step back 2023-09-18 11:31:22 -04:00
EVOFORGE\dimay 54ed00f701 #220: download latest skills-service release instead of building the jar; removed npm link step 2023-09-18 11:17:52 -04:00
EVOFORGE\dimay abb9b195ef #220: fixed header checks 2023-09-18 11:03:03 -04:00
EVOFORGE\dimay bc0694c9a2 #220: removing usage of spring cloud 2023-09-18 10:27:52 -04:00
EVOFORGE\dimay 31e1bafeb9 increased maven heap space for CI runs that build skills-service 2023-08-11 06:26:25 -04:00
rmmayo 7f922d1b58 fixed typo 2023-08-02 13:23:31 -04:00
rmmayo 4521549eb2 allows the secrets to be passed in via file instead of using command line or env variables 2023-07-27 13:23:03 -04:00
rmmayo 63aa1c1631 allows the secrets to be passed in via file instead of using command line or env variables 2023-07-27 13:16:23 -04:00
rmmayo 64fb8abf5a upgrade to latest springboot (v3.1.1) 2023-07-05 11:14:31 -04:00
Dima May 1790088cd0 Merge pull request #215 from NationalSecurityAgency/t#214/upgrade-angular
T#214/upgrade angular
2023-06-27 14:11:52 -04:00
Don Walizer b39fc1c4d3 #214 Adjust package.json versioning 2023-06-21 13:40:25 -04:00
Don Walizer 28b0a845f8 #214 Remove script, remove commented out code 2023-06-21 13:13:58 -04:00
Don Walizer 77300ee065 #214 Remove script from workflow script 2023-06-21 11:38:31 -04:00
Don Walizer 2f703c3ad4 #214 Modify install process 2023-06-21 11:21:56 -04:00
Don Walizer 768bab4a48 #214 Make some script changes 2023-06-14 14:40:48 -04:00
Don Walizer 740b7213c9 #214 Test with a separate script for angular projects 2023-06-09 10:00:53 -04:00
Don Walizer cb3720fdb1 #214 Increase version to 3.6.0 2023-06-08 11:48:44 -04:00
Don Walizer 773ace12b5 #214 Upgrade to Angular 14 2023-06-08 09:53:40 -04:00
Dima May 58a553afb2 Merge pull request #211 from NationalSecurityAgency/t#210/ci_failures
T#210/ci failures
2023-05-09 14:27:34 -04:00
rmmayo 2bf35c08af #210 - upgrading typescript version for skills-client-ng 2023-05-09 09:26:54 -04:00
rmmayo 3739560564 #210 - increase mvn heap size 2023-05-09 08:53:52 -04:00
rmmayo 26ba60cd64 use SSLContexts.createSystemDefault() for SSLContext 2023-03-17 16:17:44 -04:00
Dima May 9922f4557c Merge pull request #208 from NationalSecurityAgency/t#205/ci_failures
T#205/ci failures
2023-03-14 21:54:12 -04:00
rmmayo 0fb897a6b4 #205 - 3.5.0 needs to use JDK 11 also. All future version will use the default configured JDK (19 as of now), unless otherwise specified in the skills.versionProps.altJavaHomeEnv prop for that version(s) 2023-03-14 18:08:19 -04:00
rmmayo ba3212014a #205 - add 0BSD license for react 17 and react18 2023-03-14 17:06:52 -04:00
rmmayo ac5971b56f #205 - add 0BSD license for react 17 and react18 2023-03-14 14:12:32 -04:00
rmmayo 46a567e464 #205 - add 0BSD license for react 17 and react18 2023-03-14 14:12:19 -04:00
rmmayo 2f394bb429 #205 - updated patch files to use postgres for older versions 2023-03-14 12:36:03 -04:00
rmmayo 0600e60ee8 #205 - updated patch files to use postgres for older versions 2023-03-14 10:30:56 -04:00
rmmayo b6f87077d8 #205 - fixed duplicate entres in pom.xml files. Need to pass the existing ENV in addition to the new ENV var 2023-03-13 18:44:28 -04:00
rmmayo 26c547e1d9 #205 - rolling back "temporarily revert jdk setup" changes 2023-03-13 12:35:15 -04:00
rmmayo 37f04a01dd #205 - temporarily revert jdk setup 2023-03-13 12:18:18 -04:00
rmmayo 3a449716cd #205 - temporarily revert jdk setup 2023-03-13 12:10:45 -04:00
rmmayo e6d4870b8e #205 - temporarily revert jdk setup 2023-03-13 12:07:27 -04:00
rmmayo cfe7bde356 #205 - temporarily revert jdk setup 2023-03-13 11:55:01 -04:00
rmmayo 3ef80b042a #205 - temporarily revert jdk setup 2023-03-13 11:38:55 -04:00
rmmayo 4ee343a34e #205 - temporarily revert jdk setup 2023-03-13 11:24:49 -04:00
rmmayo c98a11b0dd #205 - add npm logs to result artifacts 2023-03-13 07:44:37 -04:00
rmmayo 6b3e3f2ac8 #205 - pass JAVA_HOME to the process 2023-03-13 07:14:14 -04:00
rmmayo 76d661f0bc #205 - pass JAVA_HOME to the process 2023-03-13 06:59:02 -04:00
rmmayo 303c6745e1 #205 - pass JAVA_HOME to the process 2023-03-12 21:59:54 -04:00
rmmayo 68e4ef032b #205 - pass JAVA_HOME to the process 2023-03-12 21:38:03 -04:00
rmmayo 9c3f9c7560 #205 - pass JAVA_HOME to the process 2023-03-12 21:10:31 -04:00
rmmayo b086acfc24 #205 - pass JAVA_HOME to the process 2023-03-12 20:19:53 -04:00
rmmayo 2485580b6c #205 - export JAVA_HOME 2023-03-12 19:58:52 -04:00
rmmayo d5770a9265 #205 - fix property name 2023-03-12 19:28:41 -04:00
rmmayo 413b9cd866 #205 - accidentally removed node setup 2023-03-12 18:52:42 -04:00
rmmayo a7dd33bbed #205 - added back commented out code 2023-03-11 18:44:51 -05:00
rmmayo e92abd6e95 #205 - don't skip client-display 2023-03-11 18:43:55 -05:00
rmmayo 6ea48bf8b6 #205 - remove private, fix main class 2023-03-11 18:41:42 -05:00
rmmayo e197764af3 #205 - conver to string 2023-03-10 18:01:52 -05:00
rmmayo cad546df90 #205 - skipping client-display temporarily 2023-03-10 17:53:22 -05:00
rmmayo ca13cfebb9 #205 - trying to work around error: enoent ENOENT: no such file or directory, lstat '/home/runner/work/skills-client/skills-client/skills-service/client-display/target/lib' 2023-03-10 17:44:41 -05:00
rmmayo 5c903c4eed #205 - try zulu jdk 2023-03-10 16:50:16 -05:00
rmmayo 72ac5eb86d #205 - skip building skills-service temporarily 2023-03-10 16:48:15 -05:00
rmmayo 258b0625d4 #205 - attempt using alternative JAVA_HOME per version if configured 2023-03-10 15:21:25 -05:00
rmmayo 3bad415dd6 - updating user-info-service to use latest version w/ springboot 3 2023-03-10 09:58:58 -05:00
rmmayo ae2ac64cf5 - testing out multi jdk setup 2023-03-10 09:28:57 -05:00
rmmayo a82d3033bf - testing out multi jdk setup 2023-03-10 09:26:16 -05:00
Ryan Mayo b6e0c33f8e Merge pull request #207 from NationalSecurityAgency/t#205/ci_failures
#205 - increase wait time to account for JwtTimestampValidator.DEFAUL…
2023-03-09 15:37:29 -05:00
rmmayo 59e17efac6 #205 - increase wait time to account for JwtTimestampValidator.DEFAULT_MAX_CLOCK_SKEW (60 seconds) 2023-03-09 12:34:08 -05:00
Dima May 8fcc80ad7b Merge pull request #206 from NationalSecurityAgency/t#205/ci_failures
T#205/ci failures
2023-03-08 09:47:08 -05:00
rmmayo ededef0757 #205 - change database props to use postgres 2023-03-06 10:46:03 -05:00
rmmayo 6cc340184f #205 - need to run postgres 2023-03-06 09:46:58 -05:00
rmmayo ee19257234 #205 - need to run postgres 2023-03-06 09:28:09 -05:00
rmmayo 03295fff6b #205 - remove -v option from wait-port call 2023-03-04 17:56:39 -05:00
rmmayo 793a6f2a97 #205 - change database props to use postgres 2023-03-04 14:32:57 -05:00
rmmayo c2d81a82a2 #205 - upgrade to groovy 4.0.7 2023-03-03 14:59:11 -05:00
rmmayo 603e86d87b #2002 - upgrade to latest springboot 3 and jdk 19 2023-03-03 14:33:59 -05:00
rmmayo 8211a8d8e6 #2002 - upgrade to latest springboot 3 and jdk 19 2023-03-03 14:33:46 -05:00
rmmayo 0ea6ccd6f2 #205 - upgrade to jdk 19 2023-03-03 13:37:43 -05:00
rmmayo 43e6f12b6a #1954 - use different port for hydra postgres 2023-02-20 16:06:20 -05:00
rmmayo 2c741eac92 #1954 - use different port for hydra postgres 2023-02-20 16:02:00 -05:00
rmmayo dc6ef05bb2 #1954 - use different port for hydra postgres 2023-02-20 15:56:59 -05:00
rmmayo f8775c3c6b #1954 - use different port for hydra postgres 2023-02-20 15:53:34 -05:00
rmmayo aebb2311c9 #1954 - use different port for hydra postgres 2023-02-20 15:49:59 -05:00
rmmayo 01e4fe78eb #1954 - use different port for hydra postgres 2023-02-20 15:45:16 -05:00
Dima May 9a73384d61 Merge pull request #202 from evenstensberg/master
fix(imports): correct import ordering and remove unused code
2023-01-17 08:53:46 -05:00
Even Stensberg fbf391628f fix(imports): correct import ordering and remove dead code 2023-01-14 15:14:50 +01:00
Dima May 78fbfaa07c Merge pull request #199 from NationalSecurityAgency/t#198/failing_ci
T#198/failing ci
2022-12-19 13:07:57 -05:00
rmmayo 79263e3dd1 #198 - added 0BSD to onlyAllow list 2022-12-19 09:06:14 -05:00
rmmayo 117540d768 #198 - added 0BSD to onlyAllow list 2022-12-19 08:36:53 -05:00
Ryan Mayo eed5f8166b Merge pull request #197 from NationalSecurityAgency/dependabot/maven/skills-client-integration/skills-int-e2e-test/org.apache.commons-commons-text-1.10.0
Bump commons-text from 1.9 to 1.10.0 in /skills-client-integration/skills-int-e2e-test
2022-11-09 11:54:43 -05:00
Ryan Mayo 96d6575959 Merge pull request #193 from NationalSecurityAgency/dependabot/maven/skills-client-integration/skills-int-e2e-test/org.codehaus.groovy-groovy-2.5.14
Bump groovy from 2.5.13 to 2.5.14 in /skills-client-integration/skills-int-e2e-test
2022-11-09 11:54:31 -05:00
dependabot[bot] 4555d67463 Bump commons-text in /skills-client-integration/skills-int-e2e-test
Bumps commons-text from 1.9 to 1.10.0.

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-text
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
2022-11-09 16:48:12 +00:00
Ryan Mayo de96156a18 Merge pull request #196 from NationalSecurityAgency/t#195/upgrade_springboot
#195 - upgrade spring boot
2022-11-09 11:45:52 -05:00
rmmayo cc188e092f #195 - upgrade spring boot 2022-11-09 09:20:17 -05:00
Ryan Mayo afedea47c2 Merge pull request #194 from NationalSecurityAgency/t#191/upgrade_spring_boot
#191 - upgrade spring boot
2022-10-12 15:34:35 -04:00
rmmayo 5c2206bbe6 #191 - upgrade spring boot 2022-10-12 15:20:28 -04:00
dependabot[bot] 70a17c87f0 Bump groovy in /skills-client-integration/skills-int-e2e-test
Bumps [groovy](https://github.com/apache/groovy) from 2.5.13 to 2.5.14.
- [Release notes](https://github.com/apache/groovy/releases)
- [Commits](https://github.com/apache/groovy/commits)

---
updated-dependencies:
- dependency-name: org.codehaus.groovy:groovy
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
2022-10-11 16:21:41 +00:00
Dima May 6dd0f5870d Merge pull request #192 from NationalSecurityAgency/t#191/upgrade_spring_boot
#191 - upgrade spring boot
2022-10-11 12:21:21 -04:00
rmmayo 1058baff54 #191 - upgrade spring boot 2022-10-10 13:54:04 -04:00
rmmayo d568f2ac6b #191 - upgrade spring boot 2022-10-10 13:40:39 -04:00
rmmayo b38de3a31d creating_release_version_3.5.0 2022-09-27 07:03:15 -04:00
EVOFORGE\dimay 17c3038bcc #188: props updates 2022-09-26 19:48:59 -04:00
rmmayo 13264dc2b8 #188 - set scrollTopOffset to 134 2022-09-26 16:57:39 -04:00
rmmayo 8c3a762ab9 #188 - set scrollTopOffset to 156 2022-09-26 16:53:45 -04:00
Ryan Mayo b4f841ff0d Merge pull request #190 from NationalSecurityAgency/t#188/do-scroll-event
T#188/do scroll event
2022-09-26 14:16:18 -04:00
EVOFORGE\dimay 7d6a0d55a1 #188: fixed an issue where top of the iframe is not in the viewable area 2022-09-26 14:14:21 -04:00
Dima May a577262c80 Merge pull request #189 from NationalSecurityAgency/t#187/uprgade_libs
#187 - Upgraded axios and sockjs-client dependencies
2022-09-26 13:29:49 -04:00
EVOFORGE\dimay b6cd4a22f2 #188: fixed an issue where top of the iframe is not in the viewable area 2022-09-26 13:16:40 -04:00
EVOFORGE\dimay b8ea4df736 #188: inroduced do-scroll event to respond to a scroll event from the iframe's child code 2022-09-26 12:32:46 -04:00
rmmayo 7b2fb60c98 #187 - Upgraded axios and sockjs-client dependencies 2022-09-26 11:56:59 -04:00
Dima May a86011369b Merge pull request #186 from NationalSecurityAgency/t#183/dependabot_alerts
T#183/dependabot alerts
2022-09-23 13:04:59 -04:00
rmmayo b1f21f3f0d #183 - removing internationalization/localization 2022-09-23 09:13:32 -04:00
rmmayo 3c067b63e9 #183 - removing internationalization/localization 2022-09-23 08:14:26 -04:00
rmmayo d634045115 #183 - address Dependabot alerts 2022-09-22 17:52:21 -04:00
rmmayo c7cf667693 #183 - address Dependabot alerts 2022-09-22 17:44:11 -04:00
Ryan Mayo 59d265e29f Merge pull request #185 from NationalSecurityAgency/t#184/pass_options_to_child
T#184/pass options to child
2022-09-22 16:46:48 -04:00
EVOFORGE\dimay 9e250296ba #183: removed localize as it was failing licence dependency check 2022-09-22 15:00:49 -04:00
rmmayo 1807838179 #183 - address Dependabot alerts 2022-09-22 13:38:10 -04:00
rmmayo 18aea74e4d #183 - address Dependabot alerts 2022-09-22 12:37:33 -04:00
rmmayo e5008d4b7b #183 - address Dependabot alerts 2022-09-22 12:25:29 -04:00
rmmayo 925f20e8b8 #183 - address Dependabot alerts 2022-09-22 12:15:38 -04:00
EVOFORGE\dimay d523848ae8 #184: fixed tests 2022-09-22 11:21:32 -04:00
EVOFORGE\dimay 417b3370d2 #184: passed down options to the child iframe and removed options' validation 2022-09-22 09:33:43 -04:00
rmmayo 80ffb33439 #183 - address Dependabot alerts 2022-09-21 15:08:27 -04:00
Dima May 5bb2e96c52 Merge pull request #180 from NationalSecurityAgency/t#179/remove_history_lib
#179 - remove history library dependency
2022-09-20 19:54:20 -04:00
Dima May ba8ae49ed8 Merge pull request #182 from NationalSecurityAgency/t#181/failing_client_backwards_compat_ci
T#181/failing client backwards compat ci
2022-09-20 19:51:53 -04:00
rmmayo 6b882d8fb0 #181 - limit the number of skills-service version tested during client-libs backwards compatibility CI testing. 2022-09-20 12:19:19 -04:00
rmmayo 35bbbcd42c #181 - limit the number of skills-service version tested during client-libs backwards compatibility CI testing. 2022-09-20 11:44:11 -04:00
rmmayo 175e309412 #181 - limit the number of skills-service version tested during client-libs backwards compatibility CI testing. 2022-09-20 10:45:17 -04:00
rmmayo eba7c6e156 #175 - setting initial version for skills-int-client-react18 to 3.4.2 2022-09-20 08:05:26 -04:00
rmmayo 14565ca0c4 #179 - remove history library dependency 2022-09-19 15:43:30 -04:00
Dima May 82f916abae Merge pull request #178 from NationalSecurityAgency/t#177/destroy_race_condition
#177 - handle race condition where the client calls the `SkillsDispla…
2022-09-15 15:14:02 -04:00
rmmayo ee27a3613f #177 - handle race condition where the client calls the SkillsDisplayJS.destroy() method before the PostMate.handshake() is invoked 2022-09-15 13:55:06 -04:00
Dima May 7246fb9385 Merge pull request #176 from NationalSecurityAgency/t#175/react18-int-app
T#175/react18 int app
2022-09-13 14:55:05 -04:00
rmmayo f34c597fa1 #175 - adding links for react 17 and 18 integration test apps 2022-09-13 07:01:39 -04:00
rmmayo 766c34a0c0 #175 - change them method used to listen for the websocket connection message 2022-09-12 18:58:07 -04:00
rmmayo 13431c6092 #175 - adding skills-int-client-react18 - WIP 2022-08-29 15:46:26 -04:00
rmmayo 5e0a5c5b93 #175 - adding skills-int-client-react18 - WIP 2022-08-29 14:03:24 -04:00
rmmayo eab8a4b428 #175 - reload after initial visit 2022-08-29 12:28:04 -04:00
rmmayo e91adb64a7 #175 - aupdated history dependency to 5.3.0, added test on build back 2022-08-29 11:37:46 -04:00
rmmayo a425a85c35 #175 - adding skills-int-client-react18 - WIP 2022-08-29 10:53:40 -04:00
rmmayo db9c0a5b79 #175 - trying different rendering methods 2022-08-23 11:31:00 -04:00
rmmayo 3c6867d3d5 #175 - remove reload after visiting page to troubleshoot initial page loading issue 2022-08-23 08:38:53 -04:00
rmmayo e66066ec84 #175 - reload after visiting page to troubleshoot initial page loading issue 2022-08-23 07:02:21 -04:00
rmmayo 8419a5326f #175 - reload after visiting page to troubleshoot initial page loading issue 2022-08-22 16:28:08 -04:00
rmmayo 5e21f0e9b4 #175 - remove test from build script temporarily 2022-08-22 15:09:09 -04:00
rmmayo 9b81e6f9a2 #175 - removed .only 2022-08-22 14:25:38 -04:00
rmmayo b895d17065 #175 - adding skills-int-client-react18 - WIP 2022-08-22 14:05:27 -04:00
Dima May 5345e59e30 Merge pull request #174 from NationalSecurityAgency/t#173/failing_ci
T#173/failing ci
2022-08-12 11:41:11 -04:00
rmmayo c36d9f7aae #173 - fix failing dashboard backwards compatibility tests after renaming title of the RankDetails page in the skills-display component (skills-service#1194) 2022-08-11 12:23:05 -04:00
rmmayo 5a4c0c9019 #173 - fix failing dashboard backwards compatibility tests after renaming title of the RankDetails page in the skills-display component (skills-service#1194) 2022-08-11 10:21:19 -04:00
rmmayo 75011312f4 #173 - fix failing dashboard backwards compatibility tests after renaming title of the RankDetails page in the skills-display component (skills-service#1194) 2022-08-11 09:01:18 -04:00
rmmayo 606f9aad1a #173 - fix failing client backwards compatibility tests after renaming title of the RankDetails page in the skills-display component (skills-service#1194) 2022-08-10 16:30:54 -04:00
Dima May 7e6102dca3 Merge pull request #170 from NationalSecurityAgency/t#169/ci_failure
T#169/ci failure
2022-01-10 09:20:15 -05:00
Dima May 47f0f58f5d Merge pull request #168 from NationalSecurityAgency/t#167/CVE-2021-45105
#167 upgrade log4j to 2.17.0 in response to CVE-2021-45105
2022-01-10 09:15:37 -05:00
rmmayo 3dac672ba3 #169 - explicitly specify highlight.js dependency and version to prevent version changing on transitive dependency of ngx-highlightjs 2022-01-08 12:52:34 -05:00
rmmayo 8ef383ac9f #169 - explicitly specify highlight.js dependency and version to prevent version changing on transitive dependency of ngx-highlightjs 2022-01-08 11:56:58 -05:00
rmmayo 744c022711 #169 - show node version 2022-01-08 10:36:05 -05:00
mosefer 3f53069e3b #167 upgrade log4j to 2.17.0 in response to CVE-2021-45105 2021-12-19 14:49:40 -05:00
Chris Moses 9d00b0196b Merge pull request #166 from NationalSecurityAgency/t#165/log4j_upgrade
#165: log4j upgrade
2021-12-14 10:57:44 -05:00
EVOFORGE\dimay 352e7d5c76 #165: log4j upgrade 2021-12-14 10:20:00 -05:00
rmmayo 6ea600aaf2 creating_release_version_3.4.1 2021-12-02 09:43:12 -05:00
rmmayo 18e8dc4e98 #133 - adding --force option for link now that we are getting unresolved peer dependencies for react related to changes in #158 I believe 2021-12-02 07:38:14 -05:00
rmmayo bf289d98dd #133 - adding --force option for link now that we are getting unresolved peer dependencies for react related to changes in #158 I believe 2021-12-01 14:46:15 -05:00
Dima May 22046c5d42 Merge pull request #163 from NationalSecurityAgency/t#162/reconnect_ws_invalid_token
T#162/reconnect ws invalid token
2021-11-24 11:16:17 -05:00
rmmayo 9cff37008d #162 - changed workflow to run on daily schedule instead of push/pull_request 2021-11-23 15:46:23 -05:00
rmmayo c631b60c26 #162 - added a badge for the expired token tests 2021-11-23 15:02:08 -05:00
rmmayo aed37a7882 #162 - added cypress tests and CI workflow that validates proper behavior when a skills proxy token has expired 2021-11-23 14:48:46 -05:00
rmmayo c23baf54c5 #162 - start the RetryChecker afterConfigure so that if there are any errors stored in local storage they will be retried after reload w/o having to wait for another skill to be reported. 2021-11-23 11:53:48 -05:00
rmmayo 3dc2c001fc #162 - capture when the websocket connection errors, and if the message indicates a invalid_token, then attempt deactivate the connection and then reconnect 2021-11-23 06:54:12 -05:00
mosefer d0b55b8152 backwards compat tests should not try to inject invalid depoendency into skills-client-int package.json 2021-11-08 09:12:52 -05:00
mosefer ef8300b94d creating_release_version_3.4.0 2021-11-03 18:39:02 -04:00
mosefer 66ef35e83f #160 set initialVersion for skills-int-client-react17 in NpmProjBuilder 2021-11-02 10:16:39 -04:00
Dima May 4992b35f10 Merge pull request #159 from NationalSecurityAgency/t#158/support_react_v17
T#158/support react v17
2021-11-01 15:28:21 -04:00
mosefer 1ff576d583 #158 add force:true to select and submit interactions in integration test 2021-10-27 15:13:46 -04:00
mosefer 816971184a #158 updated lint rules due to updated react-scripts version 2021-10-26 15:07:46 -04:00
mosefer 7dd7a0f4fb #158 change homepage for react17 test, upgrade react-scripts version to craco compatible version 2021-10-26 14:51:08 -04:00
mosefer f10cd880f1 #158 use craco to force int-client apps to load the react version specified in their pom as opposed to the skills-client-react devDependency version pulled in via npm link 2021-10-26 13:27:40 -04:00
mosefer 317103654c #158 lint fix 2021-10-25 12:14:31 -04:00
mosefer b1d0784f81 #158 remove symlinking react module to all projects, fix ts bug in skills-int-client-ng 2021-10-25 11:26:57 -04:00
mosefer 57a78b25b4 #158 make sure to actually add the new int project to git 2021-10-21 14:35:35 -04:00
mosefer 1abf6850d1 #158 support react v17 in the skills-react-client, update axios versions as per dependabot notice, update axios-auth-refresh version, update dependencies in skills-client-js to latest patch versions, add react v17 integration app and tests 2021-10-21 14:25:39 -04:00
Dima May b20c94aa2f Merge pull request #157 from NationalSecurityAgency/t#156/add_BSD-2-Clause
#156 - adding BSD-2-Clause to allowable licenses
2021-09-22 16:32:26 -04:00
rmmayo 8ec08545f7 #156 - adding BSD-2-Clause to allowable licenses 2021-09-21 11:24:50 -04:00
rmmayo 965b264db4 #156 - added BSD-2-Clause to the onlyAllow clause of the licenseDepCheck script 2021-09-21 10:13:21 -04:00
Dima May ac8187d800 Merge pull request #154 from NationalSecurityAgency/t#152/retry_queue_auth_failures
#152 - use the same retryQueue for auth errors as non-auth errors
2021-09-13 11:08:50 -04:00
Dima May fea209f199 Merge pull request #155 from NationalSecurityAgency/t#153/upgrade_ws_libs
T#153/upgrade ws libs
2021-09-13 11:05:56 -04:00
rmmayo 04fad73b74 #153 - force change detection on globalEventResult 2021-09-01 08:32:25 -04:00
rmmayo 4b78e9f4a5 #153
- replaced webstomp-client with @stomp/stompjs client
 - upgraded sockjs to latest version.
2021-08-31 12:45:04 -04:00
rmmayo 65e6b007ca #152 - use the same retryQueue for auth errors as non-auth errors 2021-08-30 13:35:03 -04:00
rmmayo ee35ce9540 creating_release_version_3.3.1 2021-07-13 09:08:10 -04:00
Dima May 7639042010 Merge pull request #151 from NationalSecurityAgency/t#150/navigate
#150 - added ability to programatically "navigate" skills-display to …
2021-07-12 22:38:09 -04:00
rmmayo 61a6c3c24f #150 - removed console.log 2021-07-12 18:44:08 -04:00
rmmayo 6598bcb28d #150 - added ability to programatically "navigate" skills-display to specific route 2021-07-12 18:16:14 -04:00
Dima May 537ccdeb5d Merge pull request #147 from NationalSecurityAgency/t#146/fixed_versions
#146 - use fixed versions in package.json dependencies
2021-07-02 16:29:36 -04:00
Dima May 05b6e51f88 Merge pull request #149 from NationalSecurityAgency/t#148/remove_distro_mgmt
#148 - removed no longer used distributionManagement section from pom…
2021-07-02 16:28:20 -04:00
rmmayo 7d3f375c1a #148 - removed no longer used distributionManagement section from pom.xml 2021-07-02 08:45:46 -04:00
rmmayo 1452bdd9be #146 - use fixed versions in package.json dependencies 2021-06-29 18:05:38 -04:00
rmmayo ca3de11171 creating_release_version_3.3.0 2021-06-25 16:27:22 -04:00
Dima May cd997f6d5b Merge pull request #145 from NationalSecurityAgency/t#144/default_wo_conf
#144 - use proper default for maxRetryAttempts when it's value is und…
2021-06-25 09:47:23 -04:00
rmmayo 54a54a5b00 #144 - use proper default for maxRetryAttempts when it's value is undefined 2021-06-25 08:07:42 -04:00
Dima May c2f4df8afb Merge pull request #143 from NationalSecurityAgency/t#140/maxRetryAttempt
#140 - do not retry failures after reaching configurable maxRetryAtte…
2021-06-23 10:03:29 -04:00
rmmayo 4e4334a424 #140 - do not retry failures after reaching configurable maxRetryAttempt threshold 2021-06-23 07:04:09 -04:00
Dima May 615a8db2d1 Merge pull request #142 from NationalSecurityAgency/t#139/no_retry_unknown_skillid_2
T#139/no retry unknown skillid 2
2021-06-22 15:31:06 -04:00
rmmayo 3ba071ac00 #139 - troubleshooting CI error, passes locally 2021-06-22 14:34:06 -04:00
rmmayo 1dcc6bd29e #139 - troubleshooting CI error, passes locally 2021-06-22 13:52:28 -04:00
rmmayo 386c634a3f #139 - troubleshooting CI error, passes locally 2021-06-22 12:32:52 -04:00
rmmayo f25bfb6252 #139 - troubleshooting CI error, passes locally 2021-06-22 12:04:38 -04:00
rmmayo 1bb162bbd3 #139 - troubleshooting CI error, passes locally 2021-06-22 11:45:36 -04:00
rmmayo 7e37d927ec #139 - troubleshooting CI error, passes locally 2021-06-22 10:07:29 -04:00
rmmayo 9a488b0bc3 #139 - troubleshooting CI error, passes locally 2021-06-22 09:45:35 -04:00
rmmayo f2ca470d3f #139 - troubleshooting CI error, passes locally 2021-06-22 09:11:19 -04:00
rmmayo 2ab9b7086c #139 - troubleshooting CI error, passes locally 2021-06-22 08:47:38 -04:00
rmmayo 7b76ff01af #139 - troubleshooting CI error, passes locally 2021-06-22 08:26:31 -04:00
rmmayo 8e4e2e4948 #139 - troubleshooting CI error, passes locally 2021-06-22 08:05:44 -04:00
rmmayo 634e82d24e #139 - troubleshooting CI error, passes locally 2021-06-22 07:04:36 -04:00
rmmayo 5544723938 #139 - troubleshooting CI error, passes locally 2021-06-22 07:03:40 -04:00
rmmayo 72144d7734 #139 - troubleshooting CI error, passes locally 2021-06-22 06:29:01 -04:00
rmmayo 8af1f62bd6 #139 - troubleshooting CI error, passes locally 2021-06-21 16:45:03 -04:00
rmmayo 10c24e9bd7 #139 - troubleshooting CI error, passes locally 2021-06-21 16:44:35 -04:00
rmmayo 38b0b502c3 #139 - troubleshooting CI error, passes locally 2021-06-21 16:21:54 -04:00
rmmayo 563f9977b0 #139 - troubleshooting CI error, passes locally 2021-06-21 16:19:07 -04:00
rmmayo b78d329faa #139 - troubleshooting CI error, passes locally 2021-06-21 16:10:13 -04:00
rmmayo a777500389 #139 - troubleshooting CI error, passes locally 2021-06-21 16:02:43 -04:00
rmmayo c57c9d695f #139 - troubleshooting CI error, passes locally 2021-06-21 15:46:16 -04:00
Dima May d866ce27db Merge pull request #138 from NationalSecurityAgency/t#137/rename_route_changed
#137 - renamed skills-display-route-changed event to route-changed in…
2021-06-16 08:15:26 -04:00
Dima May edb1c05d27 Merge pull request #136 from NationalSecurityAgency/t#135/default_internal_back_false
#135 - default internalBackButton option to false in the skills-displ…
2021-06-15 16:18:45 -04:00
rmmayo 3d9e8c2571 #137 - renamed skills-display-route-changed event to route-changed in skills-client-vue 2021-06-15 13:37:36 -04:00
rmmayo 843145e436 #135 - default internalBackButton option to false in the skills-display component 2021-06-15 09:59:20 -04:00
Chris Moses 8a4fededb3 Merge pull request #134 from NationalSecurityAgency/t#133/skills-int-client-ng_runtime-error
T#133/skills int client ng runtime error
2021-06-07 09:01:28 -04:00
rmmayo 5325af1973 #133 - properly load highlight.js 2021-06-04 15:42:57 -04:00
rmmayo ed1238795c #133 - adding --force option for angular module (need to figure out a way around version mismatches when upgrading angular and using npm version >= 7.x) 2021-06-04 15:08:31 -04:00
rmmayo 410a5fc740 #133 - adding --force option for angular module (need to figure out a way around version mismatches when upgrading angular and using npm version >= 7.x) 2021-06-04 14:56:36 -04:00
rmmayo b72d51c9ac #133 - adding --force option for angular module (need to figure out a way around version mismatches when upgrading angular and using npm version >= 7.x) 2021-06-04 14:50:09 -04:00
rmmayo 1979f74084 #133 - adding --force option for angular module (need to figure out a way around version mismatches when upgrading angular and using npm version >= 7.x) 2021-06-04 14:38:31 -04:00
rmmayo 76f1481557 #133 - adding --force option for angular module (need to figure out a way around version mismatches when upgrading angular and using npm version >= 7.x) 2021-06-04 14:25:46 -04:00
rmmayo af274ee955 #133 - adding --force option for angular module (need to figure out a way around version mismatches when upgrading angular and using npm version >= 7.x) 2021-06-04 14:01:00 -04:00
rmmayo e8e63fb4ef #133 - adding --force option for angular module (need to figure out a way around version mismatches when upgrading angular and using npm version >= 7.x) 2021-06-04 12:48:23 -04:00
rmmayo 95a25b8f32 #133 - reverting skills-client-ng and skills-int-client-ng dependency changes 2021-06-04 12:46:33 -04:00
Dima May ba8194f6f9 Merge pull request #132 from NationalSecurityAgency/t#131/backwards_compat
#131 - set version of ngx-highlightjs to 4.1.3
2021-06-01 12:33:04 -04:00
rmmayo 40a6980846 #131 - set version of ngx-highlightjs to 4.1.3 2021-06-01 11:21:35 -04:00
Dima May 44cd320c20 Merge pull request #130 from NationalSecurityAgency/t#129/null_params_check
#129 - check for null params
2021-06-01 10:03:09 -04:00
rmmayo 4e1eed3858 #129 - check for null params 2021-06-01 08:36:34 -04:00
Dima May 8173a7d564 Merge pull request #128
T#127/back button
2021-05-28 10:43:23 -04:00
rmmayo 4dd5e215b0 #127 - added cypress tests. initial page load will not have skillsDisplayPath param set, so when not present use '/' 2021-05-28 07:27:19 -04:00
rmmayo 775cbff377 #127 - initial page is now loaded by skills-display on creation 2021-05-27 13:11:58 -04:00
rmmayo d58e9032a1 #127 - fixing broken jest tests 2021-05-25 18:08:32 -04:00
rmmayo 6c38e8f881 #127 - update the history manually now in the parent frame to attempt to get different browsers to behave consistently. (disabled history updates in the skills-display's vue-router settings) 2021-05-25 16:15:31 -04:00
rmmayo a67e38fa84 #125 - updating skills-int-client-ng and skills-client-ng deps to make peer dependencies happy 2021-05-17 13:53:53 -04:00
rmmayo c23212f924 #125 - updating skills-int-client-vue deps to make peer dependencies happy 2021-05-17 13:23:09 -04:00
Chris Moses 605356e400 Merge pull request #126 from NationalSecurityAgency/t#125/vue_and_reat_deps
#125 - changed  "axios-auth-refresh" version from "3.0.0" to "3.1.0" …
2021-05-17 12:22:16 -04:00
rmmayo 2ad5fe410a #125 - changed "axios-auth-refresh" version from "3.0.0" to "3.1.0" and removed "rollup-plugin-uglify" dependency 2021-05-17 11:45:43 -04:00
Dima May f729048742 Merge pull request #124 from NationalSecurityAgency/t#123/ng_deps
#123 - changed  "zone.js" version from "0.11.1" to "0.10.3"
2021-05-17 09:51:07 -04:00
rmmayo d27c5b28e2 #123 - changed "zone.js" version from "0.11.1" to "0.10.3" 2021-05-17 09:44:18 -04:00
Dima May 570e7ddfa9 Merge pull request #122 from NationalSecurityAgency/t#121/notify_when_route_changed
#121 - notify client when skills-display route has changed
2021-05-17 07:25:00 -04:00
rmmayo 831c1c4209 #121 - notify client when skills-display route has changed 2021-05-14 14:34:42 -04:00
Dima May eb23dc48d6 Merge pull request #120 from NationalSecurityAgency/t#119/backwards_compat
#119 - revert patch changes made in #111 now that the skills-display …
2021-05-12 15:55:01 -04:00
rmmayo 70372c52f9 #119 - revert patch changes made in #111 now that the skills-display default it to use the internal back button 2021-05-12 14:53:40 -04:00
Dima May e9f045a32a Merge pull request #117 from NationalSecurityAgency/t#115/upgrade_lodash
#115 - upgrading lodash
2021-05-12 11:14:32 -04:00
Dima May 8954aba225 Merge pull request #114 from NationalSecurityAgency/t#111/browser_back_button
T#111/browser back button
2021-05-11 08:55:47 -04:00
rmmayo 208af5c2ba #115 - upgrading lodash 2021-05-11 08:32:00 -04:00
Dima May 36612b526e Merge pull request #113 from NationalSecurityAgency/t#112/retry
T#112/retry
2021-05-10 14:21:20 -04:00
rmmayo ca330f78ab #111 - added cypress tests for reload/linking 2021-05-10 13:44:56 -04:00
rmmayo 4803c5181e #111 - added verbose option when apply patch 2021-05-10 11:11:03 -04:00
rmmayo 3d2184ea4e #111 - added verbose option when apply patch 2021-05-10 10:28:52 -04:00
rmmayo 9be1962510 #111 - set the proper route on the child iframe when reloading/linking 2021-05-10 09:40:15 -04:00
rmmayo 23704d3171 #111 - update patch files for backwards compat tests 2021-05-07 13:02:01 -04:00
rmmayo b214a14669 #111 - update patch files for backwards compat tests 2021-05-06 18:01:52 -04:00
rmmayo a8f28f596b #111 - update patch files for backwards compat tests 2021-05-06 16:36:14 -04:00
rmmayo f93426c6ac #111 - fixing native browser back button support in client-display. 2021-05-06 13:17:24 -04:00
rmmayo 0905b5b2b9 #112 - change default max retry queue size from 100 to 1000 2021-04-29 15:52:17 -04:00
rmmayo 692d02cb5f #112 - add property in SkillEventRequest that indicate when a reported skill is being retried and log it. Updated unit tests 2021-04-27 13:49:28 -04:00
rmmayo 58be278dd9 #112 - add to retry queue when xhr.status is 0. from https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/status: "Before the request completes, the value of status is 0. Browsers also report a status of 0 in case of XMLHttpRequest errors" 2021-04-27 10:54:17 -04:00
rmmayo 1ee43ef218 #112 - adding retry logic for failed skill reporting 2021-04-26 17:01:48 -04:00
Ryan Mayo 63af6a8bff Merge pull request #110 from evenstensberg/master
fix: linting, license dates, and import statements in react
2021-04-23 13:08:31 -04:00
Even Stensberg fc4bf72202 chore: use destructuring 2021-04-23 18:25:31 +02:00
EVOFORGE\dimay 085cf72470 creating_release_version_3.2.0 2021-04-13 07:17:17 -04:00
Dima May e770f59643 Merge pull request #109 from NationalSecurityAgency/ticket#108/proxy_user_display_config
#108 make ProxyShowSkills component configurable so that it functions…
2021-04-06 08:38:52 -04:00
mosefer 4394a28fb8 #108 make ProxyShowSkills component configurable so that it functions outside of e2e spec 2021-04-05 12:10:23 -04:00
Dima May 51bdfb4ead Merge pull request #106 from NationalSecurityAgency/t#91/single_init
T#91/single init
2021-03-30 15:03:34 -04:00
rmmayo e12308b801 #91 - moved mock responses into their own variable 2021-03-30 14:29:34 -04:00
rmmayo 18b1ba3a58 #91 - add multiple calls to SkillsConfiguration.configure() to verify only called once and no harm is done. 2021-03-30 14:23:04 -04:00
rmmayo 3fd50e096a #91 - after further discussion, to stay backwards compatible, we decided to set intialized=false but still call afterConfigure without rejection 2021-03-26 07:36:04 -04:00
rmmayo 51643e043e #91 - render example integration apps outside of SkillsConfiguration.afterConfigure() callback for error condition tests to display properly 2021-03-26 07:26:12 -04:00
rmmayo 41ad8f9214 #91 - redner example integration apps outside of SkillsConfiguration.afterConfigure() callback for error condition tests to display properly 2021-03-26 07:26:11 -04:00
rmmayo b94dec07fe #91 - added missing semicolon. configure runtimeHelpers in rollup.config.js 2021-03-26 07:26:11 -04:00
rmmayo 4219fcdc97 #91 - prevent SkillsConfiguration from attemping to initalized after successful initialization 2021-03-26 07:26:11 -04:00
Dima May e00e41651c Merge pull request #107 from NationalSecurityAgency/t#105/console_errors
#105 - log skill reporting errors to the console
2021-03-25 12:51:32 -04:00
rmmayo 5236d4a386 #105 - log skill reporting errors to the console 2021-03-24 17:00:42 -04:00
Dima May 525adddfbf Merge pull request #104 from NationalSecurityAgency/t#102/ci_failures
T#102/ci failures
2021-03-19 15:06:46 -04:00
rmmayo 01cfcf68af #102 - reverting temporary enabling of workflow on push 2021-03-19 14:27:29 -04:00
rmmayo da68860c7c #102 - updated validation of no background set for non-themed specs to take into account version after css changed in skills-service/#414 2021-03-19 09:48:31 -04:00
rmmayo c7da2e3759 #102 - temporarily enable workflow on push 2021-03-19 09:10:13 -04:00
rmmayo 473aeaa902 #102 - updated validation of no background set for non-themed specs to take into account version after css changed in skills-service/#414 2021-03-19 09:09:58 -04:00
Dima May 58c919b6f9 Merge pull request #101
#100 - updated validation of no background set for non-themed specs t…
2021-03-18 15:21:26 -04:00
rmmayo fda0db88bf #100 - updated validation of no background set for non-themed specs to take into account version after css changed in skills-service/#414 2021-03-18 13:06:52 -04:00
rmmayo 07cdfb7421 #90 - enable workflow to be triggered manually 2021-03-18 09:04:50 -04:00
rmmayo a2d8a61ae9 #97 - reverting temporary enabling of workflow on push 2021-03-15 17:51:39 -04:00
Ryan Mayo 6bed3b43a2 Merge pull request #98 from NationalSecurityAgency/t#97/backwards_compat
T#97/backwards compat
2021-03-15 17:00:16 -04:00
rmmayo 61f60feb39 #97 - temporarily enable workflow on push 2021-03-15 15:51:27 -04:00
rmmayo c02439d325 #97 - updated cypress tests to be look for the proper HTTP error codes for missing skills for the version being tested (see skills-service/#271) 2021-03-15 15:49:15 -04:00
rmmayo 88cb2f4b21 #97 - updated .patch files to be look for the updated HTTP error codes for missing skills (see skills-service/#271) 2021-03-15 15:06:23 -04:00
rmmayo bdeb251c25 #97 - updated .patch files to be look for the updated HTTP error codes for missing skills (see skills-service/#271) 2021-03-15 14:49:29 -04:00
Dima May 0a04cf2d69 Merge pull request #94 from NationalSecurityAgency/t#89/default_redirect
#89 - add flag to SkillsConfiguration to indicate if when using oauth…
2021-03-02 07:25:23 -05:00
Dima May 45334d0c04 Merge pull request #96 from NationalSecurityAgency/t#95/cypress_failures
#95 - corrected HTTP error code to be 404 (vs 400) due to changes in …
2021-03-02 07:23:55 -05:00
rmmayo df6735fa76 #95 - corrected HTTP error code to be 404 (vs 400) due to changes in skills-service #272 2021-03-01 07:38:36 -05:00
rmmayo 8ac4afe087 #89 - add flag to SkillsConfiguration to indicate if when using oauth, the logic should auto redirect to the oauth authenticator when the token is unable to be retrieved due to HTTTP 401. Default value is false 2021-02-26 07:17:09 -05:00
Dima May 9c4a47fa8f Merge pull request #93 from NationalSecurityAgency/t#92/node_version
T#92/node version
2021-02-12 12:28:34 -05:00
rmmayo 5d365d695b #92 - reverting temporarily trigger backwards compat 2021-02-12 10:07:25 -05:00
rmmayo 5ac40b6339 #92 - temporarily trigger backwards compat on push 2021-02-12 09:05:27 -05:00
rmmayo 181b4096af #92 - change node version to 14.15.0 for backwards compat tests 2021-02-12 09:01:16 -05:00
rmmayo e888279fe5 #90 - add workflow_dispatch for manually triggering workflow 2021-02-08 15:05:55 -05:00
rmmayo 80d70d1532 #90 - add workflow_dispatch for manually triggering workflow 2021-02-08 15:03:53 -05:00
rmmayo 2eb4ef60a4 #90 - add workflow_dispatch for manually triggering workflow 2021-02-08 15:02:38 -05:00
rmmayo 3de3035185 #90 - changed cypress version to 6.2.0 in the patch file 2021-02-08 14:51:20 -05:00
rmmayo 2cc86d7b78 #90 - changed cypress version to 6.2.0 in the patch file 2021-02-08 14:45:43 -05:00
Dima May 71f443e840 Merge pull request #87
T#85/intercept
2021-01-04 11:53:02 -05:00
rmmayo 4abed70e49 #85 - reverted back to scheduled run 2020-12-31 13:16:00 -05:00
rmmayo 8491bfddae #85 - adding patches to fix backwards compatibility runs 2020-12-31 13:11:08 -05:00
rmmayo ce83b210dd #85 - adding patches to fix backwards compatibility runs 2020-12-31 12:24:32 -05:00
rmmayo 1ec8a224a8 #85 - adding patches to fix backwards compatibility runs 2020-12-31 11:43:36 -05:00
rmmayo df92e366b6 #85 - testing changes with backwards compatibility runs 2020-12-31 10:25:37 -05:00
rmmayo 8c5c76f1f0 #85 - testing changes with backwards compatibility runs 2020-12-31 08:10:52 -05:00
rmmayo 6e36163712 #85 - migrate cy.route() and cy.server() to cy.intercept() 2020-12-30 16:14:00 -05:00
rmmayo 6af5c1a932 #85 - migrate cy.route() and cy.server() with cy.intercept() 2020-12-30 16:12:42 -05:00
rmmayo d23be82cc3 creating_release_version_3.1.1 2020-12-29 16:58:39 -05:00
EVOFORGE\dimay acc79c5a32 #86: proper use fo request config 2020-12-29 15:49:29 -05:00
EVOFORGE\dimay ffe82fa6c9 #86: upgrade axios 2020-12-29 15:05:03 -05:00
Ryan Mayo f75c524bde Merge pull request #84 from NationalSecurityAgency/t#83/cypress_upgrade
T#83/cypress upgrade
2020-12-23 13:02:15 -05:00
rmmayo 50c62955eb #83 - revert oauth ci back to schedule 2020-12-23 13:01:43 -05:00
Dima May 503ecca40a Merge pull request #82
#81 - replace double quote constant string w/ single quotes
2020-12-23 12:45:25 -05:00
rmmayo 5267886606 #83 - added data-cy label to title for more consistent testing 2020-12-23 10:38:18 -05:00
rmmayo cbe9c40be5 #83 - upgrade cypress to latest version 2020-12-23 08:02:30 -05:00
rmmayo bd7ed55e73 #81 - replace double quote constant string w/ single quotes 2020-12-18 09:29:20 -05:00
rmmayo adbc0cff51 creating_release_version_3.1.0 2020-12-17 13:19:10 -05:00
rmmayo 5bb46a9e0d #226 - try to reduce memory footprint of hydra containers 2020-12-15 09:45:15 -05:00
Dima May aad60b5dbd Merge pull request #79
T#78/clean service url
2020-12-10 16:30:38 -05:00
rmmayo d10f2db7cd #80 - added missing 'tag' option to CliBuilder 2020-12-08 11:27:52 -05:00
rmmayo 7c8369b22a #78 - remove trailing slash and also and leading/trailing whitespace 2020-12-08 07:55:21 -05:00
rmmayo d6fe21d835 #78 - remove trailing slash and also and leading/trailing whitespace 2020-12-07 16:01:37 -05:00
Dima May 67581e228e Merge pull request #77
T#76/GitHub ci
2020-11-17 11:38:05 -05:00
rmmayo 10bdc7cb5b #76 - reverted back to schedule 2020-11-17 10:20:41 -05:00
rmmayo 04234ed81e #76 - stCarolas/setup-maven@v3 is using deprecated 'add-path' command. we may not need to use it, testing w/o it. 2020-11-17 09:10:51 -05:00
rmmayo c07ed1bbe0 #73 - Updated ProcessRunner to properly parse quoted arguments 2020-11-13 10:43:03 -05:00
rmmayo 9f277d2106 #73 - use github.workflow instead of github.job for the cypress tag 2020-11-13 07:43:49 -05:00
rmmayo 4813586eee #73 - use github.job instead of github.action for the cypress tag 2020-11-13 07:09:40 -05:00
Dima May f2a94d01d1 Merge pull request #75
T#73/cypress tags
2020-11-12 12:09:49 -05:00
rmmayo 8e3da5badd #73 - tag cypress runs with workflow action name (and version for backwards compat testing) 2020-11-12 11:44:07 -05:00
rmmayo 9489e1f000 #73 - tag cypress runs with workflow action name (and version for backwards compat testing) 2020-11-12 11:19:58 -05:00
Dima May d303ac1833 Merge pull request #74
#72 updated 2-0-1.patch and added 3-0-0.patch and 3-0-1.patch to incl…
2020-11-12 10:54:01 -05:00
rmmayo fccc44cafc #72 updated 2-0-1.patch and added 3-0-0.patch and 3-0-1.patch to includes cypress dashboard props in cypress.json 2020-11-12 10:09:19 -05:00
rmmayo d6130c3eef #71 - added legal/IP contribution documents 2020-11-10 14:41:55 -05:00
rmmayo d82385e5b9 #65 - try setting retires using env var for backwards compat tests 2020-11-10 07:51:16 -05:00
rmmayo 71365b32f5 #68 - change nodeVersion version back to v12.6.0 2020-11-09 14:17:32 -05:00
rmmayo 172c1b8324 #68 - force cleaning of node_modules in skills-int-client-react 2020-11-09 13:05:29 -05:00
rmmayo 729247898b #65 - record cypress backwards compatibility tests in cypress dashboard 2020-11-09 11:37:54 -05:00
Dima May 408370b0d7 Merge pull request #70
T#65/backwards compat dashboard
2020-11-07 15:41:37 -05:00
rmmayo 22ae2248f3 #65 - changing backwards compatibility workflows back to running on schedule vs. push/pull_request 2020-11-06 14:02:07 -05:00
rmmayo b0e49963a7 #65 - record cypress backwards compatibility tests in cypress dashboard 2020-11-06 13:15:26 -05:00
rmmayo 562fd1c5aa #65 - record cypress backwards compatibility tests in cypress dashboard 2020-11-06 12:50:31 -05:00
rmmayo 32198eff6e #65 - record cypress backwards compatibility tests in cypress dashboard 2020-11-06 12:35:47 -05:00
rmmayo ebf4599020 #68 - force cleaning of node_modules in skills-int-client-react 2020-11-06 08:11:19 -05:00
rmmayo 17dd46c50e #68 - change nodeVersion version back to v12.6.0 2020-11-05 14:28:06 -05:00
rmmayo b161e24a74 #68 - change frontend-maven-plugin version back to 1.6 2020-11-05 13:53:01 -05:00
rmmayo 608779cc9f #68 - increased node version to 14.15.0 and frontend-maven-plugin version to 10.0.2 2020-11-05 12:36:48 -05:00
rmmayo ccc8b968c3 #64 - change oauth test to run on schedule 2020-10-30 15:12:03 -04:00
Dima May ebf4aecc33 Merge pull request #67 from NationalSecurityAgency/T#64/oauth_workflow
#64 - break out OAuth CI tests into a separate workflow with it's own…
2020-10-30 14:11:14 -04:00
rmmayo 3f6bf5a9ec #66 - fix paths for 'upload result artifacts'. 2020-10-30 10:43:25 -04:00
rmmayo 2a54fcebdb #64 - break out OAuth CI tests into a separate workflow with it's own badge 2020-10-30 10:38:24 -04:00
rmmayo 8a6d7decc3 #66 - revert temporary run on push and fail on purpose 2020-10-30 10:17:51 -04:00
rmmayo 0f8d7ee427 #66 - fix paths for 'upload result artifacts'. (temporarily run on push and fail on purpose) 2020-10-30 09:37:05 -04:00
rmmayo fc21c2ccf2 #66 - fix paths for 'upload result artifacts'. (temporarily run on push and fail on purpose) 2020-10-30 09:36:17 -04:00
rmmayo 8394f5dd8f #66 - fix paths for 'upload result artifacts'. (temporarily run on push and fail on purpose) 2020-10-30 08:53:53 -04:00
Dima May bc87dca6f0 Merge pull request #59 from NationalSecurityAgency/ticket#46/upgrade_maven_dependencies
#46 upgraded maven deps to latest stable versions
2020-10-29 15:28:03 -04:00
rmmayo 5f936d0e66 #57 - pass the serviceUrl vs/ the SkillsConfiguration object to configureLogging() method 2020-10-28 14:33:42 -04:00
rmmayo 06d19f52f5 #61 - revert temporarily allowing oauth tests to run on push 2020-10-27 15:19:52 -04:00
rmmayo e8cd72ee7d #42 - upload log files as well as cypress artifacts 2020-10-27 09:24:53 -04:00
rmmayo b4f79c547e #61 - Fixed client logging messages to help troubleshoot scheduled failing oauth tests. 2020-10-27 08:51:19 -04:00
rmmayo 4216a9dfac #61 - temporarily allow oauth tests to run on push 2020-10-26 11:35:53 -04:00
rmmayo ddd1ca8254 #61 - Added client logging messages to help troubleshoot scheduled failing oauth tests. 2020-10-26 11:32:26 -04:00
Ryan Mayo 700a4cd81d Merge pull request #63 from NationalSecurityAgency/T#61/oauth_provider
#49 - changed 'Proxy Skills Display' test to use 'wrapIframe' method …
2020-10-20 07:15:39 -04:00
rmmayo 07af430261 #49 - changed 'Proxy Skills Display' test to use 'wrapIframe' method of validating iframe data which prevents race condition 2020-10-20 06:58:24 -04:00
EVOFORGE\dimay 440628895f Merge branch 'master' into T#61/oauth_provider
# Conflicts:
#	.github/workflows/build-and-test.yml
2020-10-19 13:26:53 -04:00
rmmayo 88974877d1 #57 - run cypress OAuth test on schedule, non-oauth on push/pull-request 2020-10-19 12:51:38 -04:00
rmmayo 27d54fefe3 #57 - run cypress OAuth test on schedule, non-oauth on push/pull-request 2020-10-19 12:15:33 -04:00
rmmayo a4026377c1 #61 - Allow clients to configure oauth provider id vs. url when using oauth 2020-10-19 11:57:43 -04:00
rmmayo 71af4d80b3 #57 - broke out oauth properties into separate file 2020-10-16 10:04:40 -04:00
mosefer 4801b5fdaf #46 upgrading spring boot version, adding prop-types for int-client-react, updating open source licenses 2020-10-16 07:21:58 -04:00
mosefer 4239c79325 #46 upgraded maven deps to latest stable versions 2020-10-16 07:20:23 -04:00
Ryan Mayo 315a519d38 Merge pull request #60 from NationalSecurityAgency/T#57_OAuth
T#57 o auth
2020-10-15 15:16:18 -04:00
rmmayo fccf514c95 #57 - add support for pull request branches 2020-10-15 14:29:10 -04:00
Dima May 206a1fd066 Merge pull request #58
#45 npm dependency upgrades - WIP
2020-10-15 13:14:34 -04:00
rmmayo 2c55b6b986 #57 - add support for 3rd party oauth - WIP 2020-10-15 12:36:17 -04:00
rmmayo 414cbafa3d #57 - troubleshooting failing CI tests 2020-10-15 11:34:27 -04:00
rmmayo 2ef2ea9739 #57 - troubleshooting failing CI tests 2020-10-15 11:04:04 -04:00
rmmayo bca43b417b #57 - troubleshooting failing CI tests 2020-10-15 09:38:43 -04:00
rmmayo 935e077586 #57 - troubleshooting failing CI tests 2020-10-15 09:26:50 -04:00
rmmayo 1b4686def4 #57 - run cypress tests for OAuth only, will uncomment after merge (scheduled runs only occur on master) 2020-10-15 08:41:32 -04:00
rmmayo 9e335df094 #57 - troubleshooting failing CI tests 2020-10-15 08:20:33 -04:00
rmmayo fa8a124029 #57 - troubleshooting failing CI tests 2020-10-15 08:09:53 -04:00
rmmayo aa8df4c537 #57 - add hydra support 2020-10-15 07:47:21 -04:00
rmmayo 4350468ce2 #57 - add support for 3rd party oauth - WIP 2020-10-14 14:50:18 -04:00
rmmayo a2f5a6054b #57 - add support for 3rd party oauth - WIP 2020-10-14 14:49:09 -04:00
rmmayo e5b6d53ab6 #57 - add support for 3rd party oauth - WIP 2020-10-14 14:22:31 -04:00
mosefer dcfd901c67 #45 npm dependency upgrades - WIP 2020-10-14 13:35:57 -04:00
rmmayo 40643309d7 #57 - add hydra support 2020-10-13 16:45:44 -04:00
rmmayo b02fd18f9b #57 - add hydra support 2020-10-13 15:34:20 -04:00
rmmayo a27f164a85 #57 - add hydra support 2020-10-13 14:05:45 -04:00
rmmayo 4ef1cf8e38 #57 - add hydra support 2020-10-13 13:57:10 -04:00
rmmayo 41b731f521 #57 - add hydra support 2020-10-13 13:50:54 -04:00
rmmayo 7bfa9caeeb #57 - add hydra support 2020-10-13 13:36:47 -04:00
rmmayo 46339148ec #57 - test conditional 2020-10-13 13:30:19 -04:00
rmmayo c6eb9d2115 #57 - add support for 3rd party oauth - WIP 2020-10-13 13:27:03 -04:00
rmmayo 8047b20afd #57 - test conditional 2020-10-12 13:35:47 -04:00
rmmayo 749d971976 #57 - add hydra support 2020-10-12 13:32:49 -04:00
rmmayo b417db357b #57 - test conditional 2020-10-12 12:47:42 -04:00
rmmayo 7a82c93962 #57 - add support for 3rd party oauth - WIP 2020-10-12 12:25:39 -04:00
rmmayo c63f127bff #57 - add hydra support 2020-10-12 12:23:58 -04:00
rmmayo 6981b1fda8 #57 - add hydra support 2020-10-12 12:21:40 -04:00
rmmayo 37a73243d4 #57 - add hydra support 2020-10-12 12:05:28 -04:00
rmmayo 3c72df1408 #57 - add hydra support 2020-10-12 12:03:51 -04:00
rmmayo 8c6cb5da9a #57 - add hydra support 2020-10-12 12:02:03 -04:00
rmmayo e6c792fc9a #57 - add hydra support 2020-10-12 11:59:22 -04:00
rmmayo 801e6985f5 #57 - test conditional 2020-10-12 11:50:35 -04:00
rmmayo 25698e9c61 #57 - test conditional 2020-10-12 11:09:59 -04:00
rmmayo 7f9b836d41 #57 - test conditional 2020-10-12 10:55:17 -04:00
rmmayo 2434fe4867 #57 - test conditional 2020-10-12 10:52:03 -04:00
rmmayo 4e9f2ec71b #57 - test conditional 2020-10-12 10:48:43 -04:00
rmmayo 65b476d360 #57 - test conditional 2020-10-12 10:46:47 -04:00
rmmayo 648fbc8a5a #57 - test conditional 2020-10-12 10:43:51 -04:00
rmmayo 7224558d5a #57 - test conditional 2020-10-12 10:41:13 -04:00
rmmayo 41a0fa689c #57 - test conditional 2020-10-12 10:40:13 -04:00
rmmayo 72ea56b413 #57 - add support for 3rd party oauth - WIP 2020-10-12 10:30:22 -04:00
rmmayo d2ca900a7d #57 - testing env to get event type 2020-10-12 10:28:18 -04:00
rmmayo 53b0e43a0e #57 - add support for 3rd party oauth - WIP 2020-10-07 08:18:12 -04:00
rmmayo 3dd6951125 #57 - removed dead code and added/removed comments left over from skills-client #29 2020-10-07 08:17:56 -04:00
rmmayo 7eb4522484 #57 - add support for 3rd party oauth - WIP 2020-10-05 14:20:29 -04:00
rmmayo 64c8299890 #57 - add support for 3rd party oauth - WIP 2020-10-02 12:33:18 -04:00
rmmayo 2a9bd4d4a0 #10 - test periodically failing w/ no error message. Adding std out to output to see if there is anything there that will help show to problem. 2020-09-30 07:38:00 -04:00
Ryan Mayo 73208c49ac Merge pull request #56
#55: Cypress tests retries
2020-09-25 15:57:57 -04:00
Ryan Mayo 7a323266ea Merge branch 'master' into t#55/cypress-retries 2020-09-25 15:56:18 -04:00
Ryan Mayo c5bf18c27c Merge pull request #54
#53: Record cypress test in dashboard
2020-09-25 15:49:34 -04:00
EVOFORGE\dimay fd20a3e646 #55: Cypress tests retries 2020-09-25 15:20:52 -04:00
EVOFORGE\dimay 11c8570258 #53: Record cypress test in dashboard 2020-09-25 13:01:53 -04:00
mosefer bf6c00202e creating_release_version_3.0.1 2020-09-23 08:21:53 -04:00
Dima May f13c2b9cdb Merge pull request #52
#51 remove vuejs extended link
2020-09-23 07:16:11 -04:00
mosefer 5b9591f514 #51 remove vuejs extended link 2020-09-22 14:35:45 -04:00
Dima May a5eef411da Merge pull request #50
#49 check for a pre-existing authorization header on axios and remove…
2020-09-21 13:50:58 -04:00
mosefer 8d870e5d20 #49 identified breaking changes that caused this issue. Don't set common headers on axios instance in SkillsLevelJS component 2020-09-21 12:31:18 -04:00
mosefer dc4fa92b46 #49 check for a pre-existing authorization header on axios and remove if it doesn't match last loaded auth token 2020-09-20 10:32:58 -04:00
rmmayo 19630f1669 #44 - patch branch return type is String (boolean was casting the branch name to the boolean value true, causing the command to be 'git checkout true') 2020-09-17 08:10:25 -04:00
rmmayo 462d5b4ec1 #44 - revert back to scheduled trigger 2020-09-16 16:26:51 -04:00
Dima May 7c25415a44 Merge pull request #48
T#44 skills client logging
2020-09-16 16:02:38 -04:00
rmmayo 95d708e49a #44 - fixed log messages showing objects to use their toString() method. Wrapping ui client config properties within "clientLib" struct to be even more explicit. 2020-09-16 12:37:19 -04:00
rmmayo 901dc1db89 #44 - prefixing all client log statements with 'SkillsClient::'. Wrapping ui client config properties within "clientLib" struct to be even more explicit. 2020-09-16 11:25:19 -04:00
rmmayo a88768cddd #44 - fixed artifacts in client backwards compat tests. separate out ClientLoggingController output to separate file for "backend:start:ci:background" 2020-09-15 11:58:51 -04:00
rmmayo 2d5b711598 #44 - adding javascript logging to skills-client libraries - WIP 2020-09-15 11:55:47 -04:00
rmmayo bb666f78e7 #44 - fixed artifacts in client backwards compat tests. separate out ClientLoggingController output to separate file for "backend:start:ci:background" 2020-09-15 09:37:32 -04:00
rmmayo f0a4ac26de #44 - temporarily trigger client lib backward compatibility tests on push 2020-09-15 09:17:52 -04:00
rmmayo e4c98cc171 #44 - upgraded cypress, added some skills logging to cypress tests. fixed artifacts in client backwards compat tests. 2020-09-15 08:52:44 -04:00
rmmayo 5e0fe8f6d2 #44 - adding javascript logging to skills-client libraries - WIP 2020-09-14 13:56:41 -04:00
rmmayo 92b5db01e9 #44 - upgraded cypress 2020-09-14 13:55:53 -04:00
rmmayo 45addc1ed9 #44 - adding javascript logging to skills-client libraries - WIP 2020-09-14 13:55:22 -04:00
rmmayo 954c3dc186 #44 - adding javascript logging to skills-client libraries - WIP 2020-09-10 18:36:45 -04:00
rmmayo 503bf6ad3d #42 - revert back to schedule 2020-09-08 09:04:47 -04:00
rmmayo 35777a9109 #42 - kick off on push temporarily 2020-09-08 08:28:39 -04:00
Dima May 2616186cbc Merge pull request #47
T#42/backwards compat
2020-09-08 08:15:11 -04:00
Dima May 0e3bf20819 Merge pull request #43 from NationalSecurityAgency/t#28/improve_error_msg
T#28/improve error msg
2020-09-04 09:46:53 -04:00
rmmayo d7991757c7 #28: verify console message in unit test 2020-09-04 09:14:49 -04:00
rmmayo 6522b64521 #42 - revert back to schedule 2020-09-03 17:05:01 -04:00
rmmayo a4cbd64af6 #42 - only apply patch if one is found 2020-09-03 16:32:51 -04:00
rmmayo bc91a27c4c #42 - kick off on push to test branch 2020-09-03 16:14:08 -04:00
rmmayo e58a7a62d7 #42 - reset any unstaged local changes created by applying a patch 2020-09-03 16:12:00 -04:00
rmmayo 54dfa885b8 #28: updated cypress tests to reflect new error message 2020-09-03 15:45:05 -04:00
rmmayo 5a64bdee10 #28: added console message with suggestions to verify the service is up and the certificate is trusted when using https. Also included the URL within the error message. 2020-09-03 15:09:58 -04:00
EVOFORGE\dimay 8f8fb20721 fixing angular docs for 3.0.0 release 2020-09-02 16:23:22 -04:00
EVOFORGE\dimay 994dee91d1 fixing versions for 3.0.0 release 2020-09-02 15:36:47 -04:00
EVOFORGE\dimay 43faa70fbe #38: account for angular's directory structure 2020-09-02 15:17:17 -04:00
EVOFORGE\dimay 00ee82e4bc creating_release_version_3.0.0 2020-09-02 14:02:55 -04:00
Ryan Mayo f5eb81bf97 Merge pull request #40
T#38/release
2020-09-02 13:36:56 -04:00
EVOFORGE\dimay 7fce3729b4 #38: missing headers 2020-09-02 10:40:57 -04:00
EVOFORGE\dimay a29bc5d8b8 #38: Updated release scripts 2020-09-01 15:17:57 -04:00
Ryan Mayo ef3fa55039 Merge pull request #35 from NationalSecurityAgency/t#34/errors-impr
#34: improve errors handling; enhance errors' messages
2020-08-31 10:52:59 -04:00
rmmayo 116924e210 #34 - fixed typo 2020-08-31 10:23:48 -04:00
Ryan Mayo d90819e9e6 Merge pull request #32
#16: included src
2020-08-31 09:40:11 -04:00
mosefer d7da3699a8 Merge pull request #33 from NationalSecurityAgency/t#31/enhance-docs
#31: Enhanced libs README and package.json
2020-08-30 08:28:38 -04:00
EVOFORGE\dimay ed54d749c0 #34: improve errors handling; enhance errors' messages 2020-08-28 15:32:06 -04:00
EVOFORGE\dimay d77aff784f #31: Fixed repo url 2020-08-28 14:04:21 -04:00
Dima May 640d772374 Merge pull request #30
#29 update resttemplate config
2020-08-28 13:54:22 -04:00
mosefer 5e5278abbd #29 changing rest template configuration 2020-08-28 13:11:50 -04:00
mosefer bc0214335c #29 rolling back some of the changes due to CI build failure 2020-08-28 12:33:59 -04:00
EVOFORGE\dimay 7f2c4f0e77 #31: Enhanced libs README and package.json 2020-08-28 11:04:24 -04:00
EVOFORGE\dimay 172428306e #16: included src 2020-08-28 09:22:17 -04:00
mosefer 888c4ba40d #29 fix header 2020-08-28 09:07:57 -04:00
mosefer 4a202e3c0f #29 update resttemplate config 2020-08-28 08:48:34 -04:00
mosefer d79f2be4b7 Merge pull request #25 from TheFoxAtWork/master
Security Vuln Fix
2020-08-26 11:21:06 -04:00
Emily Fox 61e3a5dc01 Merge pull request #6 from TheFoxAtWork/snyk-upgrade-90d20f63c31785ae3938614162384517
[Snyk] Upgrade vue-router from 3.1.3 to 3.3.4
2020-08-26 10:38:11 -04:00
Emily Fox 498105f35e Merge branch 'master' into snyk-upgrade-90d20f63c31785ae3938614162384517 2020-08-26 10:37:40 -04:00
Emily Fox 402dac7735 Merge pull request #7 from TheFoxAtWork/snyk-upgrade-a2d3a7570abbe2cf06ce626edfb1ffdf
[Snyk] Upgrade vuex from 3.1.1 to 3.5.1
2020-08-26 10:36:11 -04:00
Emily Fox 4693ad38ee Merge branch 'master' into snyk-upgrade-a2d3a7570abbe2cf06ce626edfb1ffdf 2020-08-26 10:35:38 -04:00
Emily Fox 0e53be33ab Merge pull request #5 from TheFoxAtWork/snyk-upgrade-f71c2eb216cb8950a68cb2aee3ceb661
[Snyk] Upgrade bootstrap-vue from 2.0.2 to 2.16.0
2020-08-26 10:34:27 -04:00
Emily Fox 366b71b53e Merge branch 'master' into snyk-upgrade-f71c2eb216cb8950a68cb2aee3ceb661 2020-08-26 10:34:07 -04:00
Emily Fox c8239e870e Merge pull request #4 from TheFoxAtWork/snyk-upgrade-12cc7d2f5cf24c0373477b61d4aacd38
[Snyk] Upgrade axios from 0.19.0 to 0.19.2
2020-08-26 10:25:42 -04:00
Emily Fox 87ec455304 Merge pull request #3 from TheFoxAtWork/snyk-upgrade-13f9d329379deaf4bb71b725e9cd9dd8
[Snyk] Upgrade commons-io:commons-io from 2.5 to 2.7
2020-08-26 10:21:32 -04:00
Emily Fox 760627c0d1 Revert "fix: skills-client-integration/skills-int-client-vue/package.json & skills-client-integration/skills-int-client-vue/.snyk to reduce vulnerabilities"
This reverts commit cd9d5699bc.
2020-08-24 07:39:05 -04:00
snyk-bot aa7675615d fix: upgrade vuex from 3.1.1 to 3.5.1
Snyk has created this PR to upgrade vuex from 3.1.1 to 3.5.1.

See this package in npm:
https://www.npmjs.com/package/vuex

See this project in Snyk:
https://app.snyk.io/org/thefoxatwork/project/f14f7afc-5da6-46c2-9648-1ba6ffed65db?utm_source=github&utm_medium=upgrade-pr
2020-08-20 01:44:59 +00:00
snyk-bot 1bf7262ecf fix: upgrade vue-router from 3.1.3 to 3.3.4
Snyk has created this PR to upgrade vue-router from 3.1.3 to 3.3.4.

See this package in npm:
https://www.npmjs.com/package/vue-router

See this project in Snyk:
https://app.snyk.io/org/thefoxatwork/project/f14f7afc-5da6-46c2-9648-1ba6ffed65db?utm_source=github&utm_medium=upgrade-pr
2020-08-20 01:44:54 +00:00
snyk-bot 77a0bfaede fix: upgrade bootstrap-vue from 2.0.2 to 2.16.0
Snyk has created this PR to upgrade bootstrap-vue from 2.0.2 to 2.16.0.

See this package in npm:
https://www.npmjs.com/package/bootstrap-vue

See this project in Snyk:
https://app.snyk.io/org/thefoxatwork/project/f14f7afc-5da6-46c2-9648-1ba6ffed65db?utm_source=github&utm_medium=upgrade-pr
2020-08-20 01:44:48 +00:00
snyk-bot 3c853a868d fix: upgrade axios from 0.19.0 to 0.19.2
Snyk has created this PR to upgrade axios from 0.19.0 to 0.19.2.

See this package in npm:
https://www.npmjs.com/package/axios

See this project in Snyk:
https://app.snyk.io/org/thefoxatwork/project/0bcddd93-969b-46e5-9f0a-5199e210a335?utm_source=github&utm_medium=upgrade-pr
2020-08-19 23:24:21 +00:00
snyk-bot 0a29201e69 fix: upgrade commons-io:commons-io from 2.5 to 2.7
Snyk has created this PR to upgrade commons-io:commons-io from 2.5 to 2.7.

See this package in Maven Repository:
https://mvnrepository.com/artifact/commons-io/commons-io/

See this project in Snyk:
https://app.snyk.io/org/thefoxatwork/project/6d828a40-c542-4256-9708-4aa22f39f3fc?utm_source=github&utm_medium=upgrade-pr
2020-08-19 22:20:42 +00:00
Emily Fox 48eec8b891 Merge pull request #2 from TheFoxAtWork/snyk-fix-b354df797c899628ffa69efd6506d10d
[Snyk] Security upgrade lodash from 4.17.19 to 4.17.20
2020-08-19 14:36:25 -04:00
snyk-bot 9bfd6feeaa fix: skills-client-vue/package.json to reduce vulnerabilities
The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JS-LODASH-590103
2020-08-19 18:35:46 +00:00
Emily Fox 7e3516f87d Merge pull request #1 from TheFoxAtWork/snyk-fix-0a74b90121a7b86cd79e28fdee985d39
[Snyk] Fix for 1 vulnerabilities
2020-08-19 14:28:11 -04:00
snyk-bot cd9d5699bc fix: skills-client-integration/skills-int-client-vue/package.json & skills-client-integration/skills-int-client-vue/.snyk to reduce vulnerabilities
The following vulnerabilities are fixed with a Snyk patch:
- https://snyk.io/vuln/SNYK-JS-LODASH-567746
2020-08-19 18:27:02 +00:00
mosefer 96316c5116 #24 remove gitlab ci file 2020-08-19 13:39:09 -04:00
mosefer 739c77abba #24 stop maven from spewing artifact download messages to the log during npm link setup 2020-08-19 13:23:36 -04:00
rmmayo 276a0554e4 #23 - added status code to error message 2020-08-17 07:57:33 -04:00
Ryan Mayo 5e275af84d Merge pull request #22
Ticket#17/client lib backwards compat
2020-08-13 11:19:19 -04:00
EVOFORGE\dimay 6605552ca3 #17: CI to test backward compatibility for client libs 2020-08-12 13:19:12 -04:00
EVOFORGE\dimay 4be5b7a929 #17: CI to test backward compatibility for client libs 2020-08-12 11:32:15 -04:00
EVOFORGE\dimay df9032bd8e #17: CI to test backward compatibility for client libs 2020-08-12 10:30:14 -04:00
EVOFORGE\dimay f884390b60 #17: CI to test backward compatibility for client libs 2020-08-12 09:32:32 -04:00
EVOFORGE\dimay 274444d5a2 #17: missing header 2020-08-12 08:17:59 -04:00
EVOFORGE\dimay 0a9583b6aa #17: removed unused min version checks 2020-08-12 07:56:39 -04:00
EVOFORGE\dimay a85cf583ed #17: CI to test backward compatibility for client libs 2020-08-12 07:51:47 -04:00
EVOFORGE\dimay b421c2dbe7 #17: CI to test backward compatibility for client libs 2020-08-12 06:58:43 -04:00
EVOFORGE\dimay 45aed98551 #17: CI to test backward compatibility for client libs 2020-08-11 06:51:17 -04:00
EVOFORGE\dimay a0150cc7e4 #17: CI to test backward compatibility for client libs 2020-08-10 15:53:58 -04:00
EVOFORGE\dimay c4175b7677 #17: CI to test backward compatibility for client libs 2020-08-10 15:15:23 -04:00
EVOFORGE\dimay 5902263f6d #17: CI to test backward compatibility for client libs 2020-08-10 15:13:59 -04:00
Dima May 73a8d91470 Merge pull request #21
#18 - remove skills-client-js dependency from skills-int-client-ng.  …
2020-08-10 13:53:42 -04:00
rmmayo 51b78a323d #18 - remove skills-client-js dependency from skills-int-client-ng. add link in skills-client-ng distribution 2020-08-10 11:12:50 -04:00
rmmayo 52e5503457 #20 - added initialVersion property to NpmProj to exclude version that are newer the current version when running backwards compatibility tests 2020-08-07 13:37:04 -04:00
rmmayo cbdf33f830 #5 - fixed routing to work properly when deployed inside the skills-int-service 2020-08-07 09:47:02 -04:00
mosefer 727f42e3d4 Merge pull request #19 from NationalSecurityAgency/rmmayo/#12_angular_e2e_tests
Rmmayo/#12 angular e2e tests
2020-08-06 08:23:00 -04:00
rmmayo 1382389645 #12 - removing temporary debugging and commented out tests 2020-08-05 12:35:42 -04:00
rmmayo 00fe64c25e #12 - added cypress tests and updating SetupNpmLinks to support angular app/lib - WIP 2020-08-05 12:16:57 -04:00
rmmayo 86f8ffad15 #12 - added cypress tests and updating SetupNpmLinks to support angular app/lib - WIP 2020-08-05 12:06:59 -04:00
rmmayo 5baf30f70b #12 - added cypress tests and updating SetupNpmLinks to support angular app/lib - WIP 2020-08-05 11:44:08 -04:00
rmmayo a95637bf24 #12 - added cypress tests and updating SetupNpmLinks to support angular app/lib - WIP 2020-08-05 10:19:49 -04:00
rmmayo 35fd4bf568 #12 - temporary commenting out non-angular tests to troubleshoot failing CI on github but not locally 2020-08-05 08:54:12 -04:00
rmmayo f778f54c81 #12 - temporary logging to troubleshoot failing CI on github but not locally 2020-08-05 08:44:21 -04:00
rmmayo 9dfb1167ec #12 - added cypress tests and updating SetupNpmLinks to support angular app/lib - WIP 2020-08-05 07:56:33 -04:00
rmmayo 1b7c71b454 #5 - added skills-client-ng to the skills-int-service app 2020-08-05 07:20:45 -04:00
rmmayo a10a4fefd8 #12 - added cypress tests and updating SetupNpmLinks to support angular app/lib - WIP 2020-08-05 07:17:50 -04:00
rmmayo 0e15f35b7e #12 - added cypress tests and updating SetupNpmLinks to support angular app/lib - WIP 2020-08-04 07:39:44 -04:00
rmmayo a1a52ae508 #5 - added skills-client-ng to the skills-int-service app 2020-08-03 14:34:02 -04:00
rmmayo 3051a22948 #12 - added cypress tests and updating SetupNpmLinks to support angular app/lib - WIP 2020-08-03 14:33:42 -04:00
rmmayo df52f38112 #12 - added cypress tests and updating SetupNpmLinks to support angular app/lib - WIP 2020-08-03 14:28:13 -04:00
rmmayo b6312a1883 #12 - added cypress tests and updating SetupNpmLinks to support angular app/lib - WIP 2020-08-03 14:12:26 -04:00
rmmayo fd08a3f723 #12 - added cypress tests and updating SetupNpmLinks to support angular app/lib - WIP 2020-08-03 13:43:55 -04:00
rmmayo 50ef8289a0 #12 - added cypress tests and updating SetupNpmLinks to support angular app/lib - WIP 2020-08-03 12:04:50 -04:00
mosefer ed9ec13b66 Merge pull request #13 from NationalSecurityAgency/rmmayo/#5_angular-support
#5 - added skills-client-ng for angular support and skill-int-client-ng for integration testing
2020-07-31 14:10:31 -04:00
rmmayo b82eb7263b #5 - removed "^" from @types/js-beautify version 2020-07-31 13:52:59 -04:00
rmmayo a7eca8af25 #5 - added license checker and license headers 2020-07-31 13:16:08 -04:00
rmmayo 796558e258 #5 - added license checker and license headers 2020-07-31 13:16:08 -04:00
rmmayo 8ac373e3ee #5 - removed "deep imports" warnings 2020-07-31 13:16:08 -04:00
rmmayo a615712771 #5 - removed ^ from ngx-highlights version 2020-07-31 13:16:08 -04:00
rmmayo ea2651acb7 #5 - added skills-client-ng to the skills-int-service app 2020-07-31 13:16:08 -04:00
rmmayo 7b85a318bf #5 - added skills-client-ng to the skills-int-service app 2020-07-31 13:16:08 -04:00
rmmayo 0eb4b13087 #5 - set version of skills-client-ng and skills-int-client-ng to 2.0.1 2020-07-31 13:16:08 -04:00
rmmayo ad3c46d13a #5 - added skills-client-ng for angular support and skill-int-client-ng for integration testing 2020-07-31 13:16:08 -04:00
Dima May b9aae080a8 Merge pull request #16
#8 allow construction of SkillDisplayJS without specifying parameters
2020-07-31 09:15:29 -04:00
EVOFORGE\dimay b6ddd9b40f #10: skills-service backward compat tests 2020-07-31 08:13:14 -04:00
EVOFORGE\dimay 083e3b0c68 #10: backward compat tests 2020-07-31 08:13:14 -04:00
EVOFORGE\dimay c2bc724628 #10: backward compat tests 2020-07-31 08:13:14 -04:00
EVOFORGE\dimay db8d65becc #10: backward compat tests - WIP 2020-07-31 08:13:14 -04:00
EVOFORGE\dimay 6610125f6c #10: backward compat tests - WIP 2020-07-31 08:13:14 -04:00
EVOFORGE\dimay 7c31928729 #10: backward compat tests - WIP 2020-07-31 08:13:14 -04:00
EVOFORGE\dimay db483ecf72 #10: backward compat tests - WIP 2020-07-31 08:13:14 -04:00
EVOFORGE\dimay c2270ab04c #10: backward compat tests - WIP 2020-07-31 08:13:14 -04:00
EVOFORGE\dimay bffabe6b89 #10: backward compat tests - WIP 2020-07-31 08:13:14 -04:00
EVOFORGE\dimay fa760371be #10: backward compat tests - WIP 2020-07-31 08:13:14 -04:00
EVOFORGE\dimay cd8735b545 #10: backward compat tests - WIP 2020-07-31 08:13:14 -04:00
EVOFORGE\dimay 27a76d2198 10: develop backwards compatibility tests for skills-service - WIP 2020-07-31 08:13:14 -04:00
EVOFORGE\dimay fe3a5668ee 10: develop backwards compatibility tests for skills-service - WIP 2020-07-31 08:13:14 -04:00
EVOFORGE\dimay bf42da3746 10: develop backwards compatibility tests for skills-service - WIP 2020-07-31 08:13:14 -04:00
EVOFORGE\dimay 0306844531 10: develop backwards compatibility tests for skills-service - WIP 2020-07-31 08:13:14 -04:00
EVOFORGE\dimay 4b0c88a2ea 10: develop backwards compatibility tests for skills-service - WIP 2020-07-31 08:13:14 -04:00
EVOFORGE\dimay ea9a0799d4 10: develop backwards compatibility tests for skills-service - WIP 2020-07-31 08:13:14 -04:00
EVOFORGE\dimay 350014abaa 10: develop backwards compatibility tests for skills-service - WIP 2020-07-31 08:13:14 -04:00
EVOFORGE\dimay 7dbb778ce9 10: develop backwards compatibility tests for skills-service - WIP 2020-07-31 08:13:14 -04:00
mosefer d24997bec3 #8 allow construction of SkillDisplayJS without specifying parameters 2020-07-31 08:03:40 -04:00
Dima May 2825512b1e Merge pull request #11
Ticket#9/standardize eslint rules
2020-07-30 12:20:19 -04:00
mosefer 4388a94ad7 #9 previous commit broke the SkillsLevel component 2020-07-29 13:11:31 -04:00
mosefer f60c6cc81c #9 standardize eslint rules across client libraries, fix eslint violations 2020-07-29 11:32:45 -04:00
EVOFORGE\dimay d626680e28 added utility to transform sample dataset 2020-07-28 15:26:19 -04:00
EVOFORGE\dimay f0ac30b758 added utility to transform sample dataset 2020-07-28 14:50:44 -04:00
EVOFORGE\dimay ca269abffc added utility to transform sample dataset 2020-07-28 14:31:53 -04:00
EVOFORGE\dimay 1ee8a8fabf added utility to transform sample dataset 2020-07-28 14:31:53 -04:00
Dima May 070f79695f Merge pull request #4 from NationalSecurityAgency/rmmayo/#3_upgrade-lodash
#3 - upgraded lodash version due to security vulnerability.
2020-07-21 06:28:50 -04:00
EVOFORGE\dimay 6d8127ab18 #3: CI - fixing building skills-service jar logic 2020-07-20 11:44:07 -04:00
rmmayo bf9575c198 #3 - upgraded lodash version due to security vulnerability. 2020-07-20 11:26:37 -04:00
EVOFORGE\dimay b2b39a5fd7 #1: CI - WIP 2020-07-14 09:50:46 -04:00
EVOFORGE\dimay a68f7e500a #1: CI - WIP 2020-07-13 10:10:35 -04:00
EVOFORGE\dimay a060de5a41 #1: CI - WIP 2020-07-13 06:43:28 -04:00
EVOFORGE\dimay 9a0bc4907d #1: CI - WIP 2020-07-13 06:42:13 -04:00
EVOFORGE\dimay 6e1c7db16f #1: CI - WIP 2020-07-12 08:47:06 -04:00
EVOFORGE\dimay 4f6879cbf0 #1: CI - WIP 2020-07-12 08:15:39 -04:00
EVOFORGE\dimay af994d45ac #1: CI - WIP 2020-07-09 16:10:35 -04:00
EVOFORGE\dimay 7d2915d131 #1: CI - WIP 2020-07-09 15:55:36 -04:00
Dima May b0c88099a0 Update README.md 2020-07-09 15:48:18 -04:00
Dima May 14dc08ecc1 Update README.md 2020-07-09 15:44:46 -04:00
EVOFORGE\dimay badccd2348 #1: CI - WIP 2020-07-09 15:43:53 -04:00
EVOFORGE\dimay 131d26292c #1: CI - WIP 2020-07-09 15:33:53 -04:00
EVOFORGE\dimay 1b24e46150 #10: fixed integration tests; resolved race condition when loading native js level component; made sure auth token is set for native js level component 2020-07-09 14:02:43 -04:00
EVOFORGE\dimay 33972d4cee Merge branch 'rmmayo/#10_js_level_component' 2020-07-08 20:38:13 -04:00
EVOFORGE\dimay bf23980b5f Merge branch 'rmmayo/#10_js_level_component' of github.com:NationalSecurityAgency/skills-client into rmmayo/#10_js_level_component
# Conflicts:
#	skills-client-integration/skills-int-client-js/app/index.html
#	skills-client-react/src/component/SkillsLevel.js
#	skills-client-vue/src/component/SkillsLevel.vue
#	skills-client-vue/src/component/__tests__/SkillsLevel.test.js
#	skills-client-vue/src/index.js
2020-07-08 20:38:01 -04:00
EVOFORGE\dimay 004b4d0d35 Merge branch 'rmmayo/#10_js_level_component' 2020-07-08 20:05:54 -04:00
rmmayo 899ce192b8 #10 - changed versionLaterThan to 2.0.0 for 'level component should be reactive' 2020-07-08 20:05:03 -04:00
Ryan Mayo 7d44ba12d5 #10 - added pure js implementation of the Level component. Changed vue and react components to use the pure JS implementation. 2020-07-08 20:05:03 -04:00
EVOFORGE\dimay 8cd3436764 #1: CI - WIP 2020-07-08 15:51:14 -04:00
EVOFORGE\dimay 56822e5e11 #1: CI - WIP 2020-07-08 15:18:30 -04:00
EVOFORGE\dimay 7fdf0b92b3 #1: CI - WIP 2020-07-08 14:18:29 -04:00
EVOFORGE\dimay 5261c7ce38 #1: CI - WIP 2020-07-08 11:41:07 -04:00
EVOFORGE\dimay d97b7b94e0 #1: CI - WIP 2020-07-08 11:18:38 -04:00
EVOFORGE\dimay adce26b50d #1: CI - WIP 2020-07-08 10:50:11 -04:00
EVOFORGE\dimay 8fbfd85905 #1: CI - WIP 2020-07-08 10:33:52 -04:00
EVOFORGE\dimay 054a9d4a5b #1: CI - WIP 2020-07-08 10:29:43 -04:00
EVOFORGE\dimay 8ad947a2d4 #1: CI - WIP 2020-07-08 10:24:33 -04:00
EVOFORGE\dimay 9b9ed45962 #1: CI - WIP 2020-07-08 10:20:39 -04:00
EVOFORGE\dimay c38d31ad6e #1: CI - WIP 2020-07-08 10:17:35 -04:00
EVOFORGE\dimay 76c542e03e #1: CI - WIP 2020-07-08 10:02:43 -04:00
EVOFORGE\dimay a295afc1fb #1: resolving issues of renamed to @skilltree namespace 2020-07-08 08:38:12 -04:00
EVOFORGE\dimay 6fd71b52ca #1: resolving issues of renamed to @skilltree namespace 2020-07-08 06:39:59 -04:00
EVOFORGE\dimay 3cba0dc491 #1: resolving issues of renamed to @skilltree namespace 2020-07-07 16:22:05 -04:00
EVOFORGE\dimay f5b7964cd8 #1: publish public repos 2020-07-07 16:12:16 -04:00
EVOFORGE\dimay 19a94f1f33 Merge branch 'dimay-2.0.0' into dimay/#1-ciTest
# Conflicts:
#	skills-client-integration/license-add/license-add-config.json
#	skills-client-integration/skills-int-client-vue/src/components/Navigation.vue
#	skills-client-integration/skills-int-e2e-test/package.json
2020-07-07 16:11:10 -04:00
EVOFORGE\dimay e5e2c6cb29 #1: CI - revert npm links changes 2020-07-07 16:01:48 -04:00
rmmayo 69210353ec #10 - changed versionLaterThan to 2.0.0 for 'level component should be reactive' 2020-07-07 14:10:58 -04:00
EVOFORGE\dimay a5e40401a0 #1: CI - wip - npm links 2020-07-06 21:08:14 -04:00
EVOFORGE\dimay 1774625364 #1: CI - wip - npm links 2020-07-06 20:48:03 -04:00
Ryan Mayo d21c491541 #10 - added pure js implementation of the Level component. Changed vue and react components to use the pure JS implementation. 2020-07-06 13:08:21 -04:00
EVOFORGE\dimay 44d48475d5 #1: ci workflow - WIP - do not run install before setting up npm links 2020-07-06 12:43:03 -04:00
EVOFORGE\dimay 16ebdc6ef4 #1: ci workflow - WIP - temporarily removed call-stack-profiler dependency 2020-07-06 12:36:24 -04:00
EVOFORGE\dimay 162358118e #1: ci workflow - WIP 2020-07-06 07:16:32 -04:00
EVOFORGE\dimay fa14c1a8f2 #1: ci workflow - WIP 2020-07-02 14:08:12 -04:00
EVOFORGE\dimay 356a4f57f2 #1: ci workflow - WIP 2020-07-02 14:04:29 -04:00
EVOFORGE\dimay de9c7ad839 #1: ci workflow - WIP 2020-07-02 14:02:49 -04:00
EVOFORGE\dimay 646f0614eb #1: ci workflow - WIP 2020-07-02 14:01:00 -04:00
EVOFORGE\dimay 6c1758134b #1: ci workflow - WIP 2020-07-02 13:45:22 -04:00
EVOFORGE\dimay 46be215a48 #1: update location of skills-service project 2020-07-02 10:35:42 -04:00
EVOFORGE\dimay 7fa615de05 #11: update the name of skill-service project 2020-07-01 07:15:13 -04:00
EVOFORGE\dimay 7bed2afa4d #11: update the name of skill-service project 2020-07-01 06:52:36 -04:00
EVOFORGE\dimay 11a1aceb89 #11: update the name of skill-service project 2020-07-01 06:38:02 -04:00
Ryan Mayo 8b79f57666 Merge branch 'dimay/#9-improveDev' 2020-06-26 09:41:27 -04:00
Ryan Mayo 9c9814b017 #9 - changed title to indicate if pruning or not 2020-06-26 09:31:22 -04:00
EVOFORGE\dimay bdd9ae7b66 #9: Improvements to the development process of client libraries 2020-06-26 07:35:26 -04:00
EVOFORGE\dimay 9c98fe6dcb #8: Simplify commands to run services in order to perform cypress.io testing 2020-06-25 11:10:32 -04:00
EVOFORGE\dimay 826d9111f2 #8: Simplify commands to run services in order to perform cypress.io testing 2020-06-25 10:44:40 -04:00
Ryan Mayo f6cbb50992 #505 :
- Made changes to the client-diplay routing code to always keep track of previous route instead of requiring explicit configuration.
- Added CI end-to-end test for using the back button after navigating 2 layers deep in the client display
2020-06-23 15:07:47 -04:00
Ryan Mayo a986ca1a5d Merge branch 'rmmayo/#505_client_display_back_button' 2020-04-08 11:59:35 -04:00
Ryan Mayo ac6c432ad6 #11 - default to reload components after navigating away and then coming back 2020-04-08 11:11:28 -04:00
Ryan Mayo e726184417 #11 - default to reload components after navigating away and then coming back 2020-04-08 10:14:24 -04:00
Ryan Mayo 40feb0acab #505 - integration test for back button when when returning from an external page 2020-04-08 08:54:46 -04:00
Ryan Mayo 31064b9735 #505 - changed back button in client display to navigate to passed in component (defaults to Home). Started to add support for integration testing in vue integration app. 2020-04-06 12:15:37 -04:00
Ryan Mayo a4c8f21692 Merge branch 'rmmayo/#6_missing_arg' 2020-04-01 08:50:24 -04:00
Ryan Mayo 07f384f8fa #6 - add targetOrigin argument to postMessage call. Using the current window's location origin as this message is intended for cypress testing only. 2020-04-01 08:22:19 -04:00
Ryan Mayo e75f3f4b4d #2 - refactored vistHomePage into support/commands.js 2020-03-24 10:00:37 -04:00
219 changed files with 9862 additions and 6979 deletions

No files matched your search

@@ -0,0 +1,154 @@
# This is a basic workflow to help you get started with Actions
name: Continuous Integration expired token tests
env:
NODE_VERSION: 26
JAVA_VERSION: 25
on:
schedule:
- cron: '0 8 * * *'
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
services:
postgres:
# Docker Hub image
image: postgres
# Provide the password for postgres
env:
POSTGRES_PASSWORD: skillsPassword
POSTGRES_DB: skills
# Set health checks to wait until postgres has started
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
# Maps tcp port 5432 on service container to the host
- 5432:5432
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: ${{ env.NODE_VERSION }}
- uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: ${{ env.JAVA_VERSION }}
- name: Print Versions
run: |
mvn --version
java -version
npm -version
node --version
- name: Cache local Maven repository
uses: actions/cache@v6
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: Cache npm
uses: actions/cache@v6
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
# - name: build skill-service
# run: ./.github/workflows/scripts/getSkillsService.sh
# - name: download skill-service
# run: |
# mkdir skills-service
# cd skills-service
# curl -s https://api.github.com/repos/NationalSecurityAgency/skills-service/releases/latest | grep browser_download_url | cut -d '"' -f 4 | wget -qi -
# ls ./
# cd ..
- name: Checkout specific branch fo skills-service
uses: actions/checkout@v6
with:
repository: NationalSecurityAgency/skills-service
path: skills-service
- name: build skill-service
run: |
cd skills-service
mvn --batch-mode clean install -DskipTests
cp ./service/target/skills-service-*.jar ./
ls ./
cd ..
- name: setup npm links
run: ./.github/workflows/scripts/setupNpmLinks.sh
- name: build integration test apps
run: |
cd ./skills-client-integration
mvn --batch-mode clean install
cd ../
- name: start services for cypress tests
run: |
cd skills-client-integration/skills-int-e2e-test
npm install
npm run cyServices:start:skills-service:ci:expired-token
npm run cyServices:start:integration-apps
cd ../../
- name: Run Cypress tests
uses: cypress-io/github-action@v5
with:
working-directory: skills-client-integration/skills-int-e2e-test
record: true
parallel: false
group: 'skills-client expired token tests'
tag: "${{ github.workflow }}"
spec: cypress/e2e/timeout.specs.js
env: 'timeout=true'
browser: chrome
env:
# pass the Dashboard record key as an environment variable
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
# pass GitHub token to allow accurately detecting a build vs a re-run build
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# - name: Run Cypress tests
# run: |
# cd skills-client-integration/skills-int-e2e-test
# npm run cy:run:timeout
# cd ../../
- name: upload result artifacts
if: ${{ always() }}
uses: actions/upload-artifact@v7
with:
name: result artifacts
path: |
./skills-service/*.jar
./skills-client-integration/skills-int-service/target/*.jar
./skills-client-integration/skills-int-e2e-test/target/logs/*.out
./skills-client-integration/skills-int-e2e-test/cypress/videos/*.mp4
./skills-client-integration/skills-int-e2e-test/cypress/screenshots/**/*.png
./skills-client-integration/skills-int-e2e-test/logs
./skills-client-integration/skills-int-e2e-test/cypress/videos
./skills-client-integration/skills-int-e2e-test/cypress/screenshots
./skills-client-integration/skills-int-e2e-test/cypress/snapshots/**/**/__diff_output__/*.png
./skills-client-integration/skills-int-e2e-test/cypress/snapshots/**/__diff_output__/*.png
+185
View File
@@ -0,0 +1,185 @@
# This is a basic workflow to help you get started with Actions
name: Continuous Integration with OAuth
env:
NODE_VERSION: 26
JAVA_VERSION: 25
on:
push:
paths-ignore:
- 'README.md'
- .github/workflows/skills-service-backward-compat.yml
- .github/workflows/client-libs-backward-compat.yml
pull_request:
paths-ignore:
- 'README.md'
- .github/workflows/skills-service-backward-compat.yml
- .github/workflows/client-libs-backward-compat.yml
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
services:
postgres:
# Docker Hub image
image: postgres
# Provide the password for postgres
env:
POSTGRES_PASSWORD: skillsPassword
POSTGRES_DB: skills
# Set health checks to wait until postgres has started
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
# Maps tcp port 5432 on service container to the host
- 5432:5432
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: ${{ env.NODE_VERSION }}
- uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: ${{ env.JAVA_VERSION }}
- name: Print Versions
run: |
mvn --version
java -version
npm -version
node --version
- name: Cache local Maven repository
uses: actions/cache@v6
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: Cache npm
uses: actions/cache@v6
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
# - name: download skill-service
# run: |
# mkdir skills-service
# cd skills-service
# curl -s https://api.github.com/repos/NationalSecurityAgency/skills-service/releases/latest | grep browser_download_url | cut -d '"' -f 4 | wget -qi -
# ls ./
# cd ..
- name: Checkout specific branch fo skills-service
uses: actions/checkout@v6
with:
repository: NationalSecurityAgency/skills-service
path: skills-service
- name: build skill-service
run: |
cd skills-service
mvn --batch-mode clean install -DskipTests
cp ./service/target/skills-service-*.jar ./
ls ./
cd ..
- name: setup npm links
run: ./.github/workflows/scripts/setupNpmLinks.sh
- name: build integration test apps
run: |
cd ./skills-client-integration
mvn --batch-mode clean install
cd ../
- name: run hyrda oauth service
run: ./.github/workflows/scripts/runHydra.sh
- name: Check running containers
run: docker ps -a
- name: Caputre Hydra Oauth Service logs
run: |
mkdir -p ./skills-client-integration/skills-int-e2e-test/target/logs
docker logs hydra > ./skills-client-integration/skills-int-e2e-test/target/logs/hydra.out &
docker container logs -f hydra_consent > ./skills-client-integration/skills-int-e2e-test/target/logs/hydra_consent.out &
docker container logs -f hydra_postgres > ./skills-client-integration/skills-int-e2e-test/target/logs/hydra_postgres.out &
- name: Register hydra client
run: |
cd skills-client-integration/skills-int-e2e-test/hydra
docker compose -f quickstart.yml exec -T hydra \
hydra clients create \
--endpoint http://localhost:4445/ \
--id skilltree-test \
--secret client-secret \
--grant-types authorization_code,refresh_token \
--response-types code \
--scope openid \
--callbacks http://localhost:8080/login/oauth2/code/hydra
- name: start services for OAuth cypress tests
run: |
cd skills-client-integration/skills-int-e2e-test
npm install
npm run cyServices:start:skills-service:ci:oauth
npm run cyServices:start:integration-apps:oauth
cd ../../
# - name: Run Cypress tests using OAuth
# uses: cypress-io/github-action@v2
# with:
# working-directory: skills-client-integration/skills-int-e2e-test
# record: true
# parallel: false
# group: 'skills-client oauth tests'
# tag: "${{ github.workflow }}"
# env: 'authMode=oauth'
# env:
# # pass the Dashboard record key as an environment variable
# CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
# # pass GitHub token to allow accurately detecting a build vs a re-run build
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Run Cypress tests
run: |
cd skills-client-integration/skills-int-e2e-test
npm run cy:run:oauth
cd ../../
- name: upload result artifacts
if: ${{ always() }}
uses: actions/upload-artifact@v7
with:
name: result artifacts
path: |
./skills-service/*.jar
./skills-client-integration/skills-int-service/target/*.jar
./skills-client-integration/skills-int-e2e-test/target/logs/*.out
./skills-client-integration/skills-int-e2e-test/cypress/videos/*.mp4
./skills-client-integration/skills-int-e2e-test/cypress/screenshots/**/*.png
./skills-client-integration/skills-int-e2e-test/logs
./skills-client-integration/skills-int-e2e-test/cypress/videos
./skills-client-integration/skills-int-e2e-test/cypress/screenshots
./skills-client-integration/skills-int-e2e-test/cypress/snapshots/**/**/__diff_output__/*.png
./skills-client-integration/skills-int-e2e-test/cypress/snapshots/**/__diff_output__/*.png
+132
View File
@@ -0,0 +1,132 @@
# This is a basic workflow to help you get started with Actions
name: Continuous Integration
env:
NODE_VERSION: 26
JAVA_VERSION: 25
on:
push:
paths-ignore:
- 'README.md'
- .github/workflows/skills-service-backward-compat.yml
- .github/workflows/client-libs-backward-compat.yml
pull_request:
paths-ignore:
- 'README.md'
- .github/workflows/skills-service-backward-compat.yml
- .github/workflows/client-libs-backward-compat.yml
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
services:
postgres:
# Docker Hub image
image: postgres
# Provide the password for postgres
env:
POSTGRES_PASSWORD: skillsPassword
POSTGRES_DB: skills
# Set health checks to wait until postgres has started
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
# Maps tcp port 5432 on service container to the host
- 5432:5432
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: ${{ env.NODE_VERSION }}
- uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: ${{ env.JAVA_VERSION }}
- name: Print Versions
run: |
mvn --version
java -version
npm -version
node --version
- name: Cache local Maven repository
uses: actions/cache@v6
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: Checkout specific branch fo skills-service
uses: actions/checkout@v6
with:
repository: NationalSecurityAgency/skills-service
path: skills-service
- name: build skill-service
run: |
cd skills-service
mvn --batch-mode clean install -DskipTests
cp ./service/target/skills-service-*.jar ./
ls ./
cd ..
- name: setup npm links
run: ./.github/workflows/scripts/setupNpmLinks.sh
- name: build integration test apps
env:
MAVEN_OPTS: -Xmx2048m
run: |
cd ./skills-client-integration
mvn --batch-mode clean install
cd ../
- name: start services for cypress tests
run: |
cd skills-client-integration/skills-int-e2e-test
npm install
npm run cyServices:start:skills-service:ci
npm run cyServices:start:integration-apps
cd ../../
- name: Run Cypress tests
run: |
cd skills-client-integration/skills-int-e2e-test
npm run cy:run
cd ../../
- name: upload result artifacts
if: ${{ always() }}
uses: actions/upload-artifact@v7
with:
name: result artifacts
path: |
./skills-service/*.jar
./skills-client-integration/skills-int-service/target/*.jar
./skills-client-integration/skills-int-e2e-test/target/logs/*.out
./skills-client-integration/skills-int-e2e-test/cypress/videos/*.mp4
./skills-client-integration/skills-int-e2e-test/cypress/screenshots/**/*.png
./skills-client-integration/skills-int-e2e-test/logs
./skills-client-integration/skills-int-e2e-test/cypress/videos
./skills-client-integration/skills-int-e2e-test/cypress/screenshots
./skills-client-integration/skills-int-e2e-test/cypress/snapshots/**/**/__diff_output__/*.png
./skills-client-integration/skills-int-e2e-test/cypress/snapshots/**/__diff_output__/*.png
@@ -0,0 +1,202 @@
name: Client Libs Backward Compatibility
env:
NODE_VERSION: 26
JAVA_VERSION: 25
on:
push:
paths-ignore:
- 'README.md'
- .github/workflows/skills-service-backward-compat.yml
- .github/workflows/client-libs-backward-compat.yml
pull_request:
paths-ignore:
- 'README.md'
- .github/workflows/skills-service-backward-compat.yml
- .github/workflows/client-libs-backward-compat.yml
workflow_dispatch:
jobs:
get_skills_service_versions:
runs-on: ubuntu-latest
outputs:
services: ${{ steps.generate-matrix.outputs.services }}
versions: ${{ steps.generate-matrix.outputs.versions }}
steps:
- name: Generate Matrix
id: generate-matrix
run: |
TO_EXCLUDE='["3.1.0","3.0.3","3.0.2","3.0.1","3.0.0"]'
RESPONSE=$(curl -s -X GET 'https://api.github.com/repos/NationalSecurityAgency/skills-service/releases')
ALL_TAG_NAMES=$(echo "$RESPONSE" | jq -c '[.[] | .tag_name]')
echo "ALL_TAG_NAMES=$ALL_TAG_NAMES"
FILTERED_TAG_NAMES=$(jq --argjson to_exclude "$TO_EXCLUDE" '. - $to_exclude' <<< "$ALL_TAG_NAMES")
echo "FILTERED_TAG_NAMES=$FILTERED_TAG_NAMES"
TOP_TAGS=$(jq -c '.[0:5]' <<< "$FILTERED_TAG_NAMES")
echo "TOP_TAGS=$TOP_TAGS"
echo ::set-output name=versions::${TOP_TAGS}
build_skills_client_int:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: ${{ env.NODE_VERSION }}
- uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: ${{ env.JAVA_VERSION }}
- name: Print Versions
run: |
mvn --version
java -version
npm -version
node --version
- name: Cache local Maven repository
uses: actions/cache@v6
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: Cache npm
uses: actions/cache@v6
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
- name: setup npm links
run: ./.github/workflows/scripts/setupNpmLinks.sh
- name: build integration test apps
env:
MAVEN_OPTS: -Xmx2048m
run: |
cd ./skills-client-integration
mvn --batch-mode clean install
cd ../
- name: upload service jar
uses: actions/upload-artifact@v7
with:
name: service jar
path: ./skills-client-integration/skills-int-service/target/skills-int-service-*.jar
run_backward_compatibility_tests:
runs-on: ubuntu-latest
services:
postgres:
# Docker Hub image
image: postgres
# Provide the password for postgres
env:
POSTGRES_PASSWORD: skillsPassword
POSTGRES_DB: skills
# Set health checks to wait until postgres has started
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
# Maps tcp port 5432 on service container to the host
- 5432:5432
needs:
- get_skills_service_versions
- build_skills_client_int
strategy:
fail-fast: false
matrix:
version: ${{ fromJSON(needs.get_skills_service_versions.outputs.versions) }}
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: ${{ env.NODE_VERSION }}
- uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: ${{ env.JAVA_VERSION }}
- name: Print Versions
run: |
mvn --version
java -version
npm -version
node --version
- name: Cache local Maven repository
uses: actions/cache@v6
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: Cache npm
uses: actions/cache@v6
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
- name: download skill-service:${{ matrix.version }}
run: |
mkdir skills-service
cd skills-service
wget https://github.com/NationalSecurityAgency/skills-service/releases/download/${{ matrix.version }}/skills-service-${{ matrix.version }}.jar
ls ./
cd ..
- name: download integration test apps
uses: actions/download-artifact@v8
with:
name: service jar
path: ./skills-client-integration/skills-int-service/target/
- name: start services for cypress tests
run: |
cd skills-client-integration/skills-int-e2e-test
npm install
npm run cyServices:start:skills-service:ci
npm run cyServices:start:integration-apps
cd ../../
- name: Run Cypress tests
run: |
cd skills-client-integration/skills-int-e2e-test
npx cypress run --env skills-service.minVersion=${{ matrix.version }}
cd ../../
- name: upload result artifacts
if: ${{ always() }}
uses: actions/upload-artifact@v7
with:
name: result artifacts for ${{ matrix.version }}
path: |
./skills-service/*.jar
./skills-client-integration/skills-int-service/target/*.jar
./skills-client-integration/skills-int-e2e-test/target/logs/*.out
./skills-client-integration/skills-int-e2e-test/cypress/videos/*.mp4
./skills-client-integration/skills-int-e2e-test/cypress/screenshots/**/*.png
./skills-client-integration/skills-int-e2e-test/logs
./skills-client-integration/skills-int-e2e-test/cypress/videos
./skills-client-integration/skills-int-e2e-test/cypress/screenshots
./skills-client-integration/skills-int-e2e-test/cypress/snapshots/**/**/__diff_output__/*.png
./skills-client-integration/skills-int-e2e-test/cypress/snapshots/**/__diff_output__/*.png
+66
View File
@@ -0,0 +1,66 @@
# Copyright 2025 SkillTree
#
# 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
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#!/usr/bin/env bash
echo "------- START: Build skills-service jar -------"
# exit if a command returns non-zero exit code
set -e
#set -o pipefail
BRANCH_NAME=$(git branch | grep \*)
myGitBranch=${BRANCH_NAME:2}
echo "My Git Branch: [${myGitBranch}]"
if [[ "$myGitBranch" == *"HEAD detached at pull"* ]]; then
echo 'We are on a pull-request branch'
pullNumber=$(echo "$myGitBranch" | gawk -F'/' '{print $2}' | cat)
echo "Looking for branch associated with PR#${pullNumber}"
myGitBranch=$(curl -s https://api.github.com/repos/NationalSecurityAgency/skills-client/pulls/"${pullNumber}" | jq -r '.head.ref')
echo "Found new Git Branch: [${myGitBranch}]"
echo "Checkout skill-service code and build it."
git clone https://github.com/NationalSecurityAgency/skills-service.git
cd ./skills-service/
echo "Default branch to consider [${myGitBranch}]"
matchingBranch=`git branch -a | grep "remotes/origin/${myGitBranch}" | gawk -F'remotes/origin/' '{print $2}' | cat`
echo "Matching branch to consider [${matchingBranch}]"
if [[ "$myGitBranch" == *\.X ]] || [[ "$myGitBranch" == "master" ]] || [[ -z "$matchingBranch" ]]
then
echo 'Did not find a matching branch. Downloading latest skills-service release'
mkdir skills-service
cd skills-service
curl -s https://api.github.com/repos/NationalSecurityAgency/skills-service/releases/latest | grep browser_download_url | cut -d '"' -f 4 | wget -qi -
ls ./
cd ..
else
switchToBranch=$matchingBranch
echo "Found matching branch [${switchToBranch}]"
echo "Checking out [${switchToBranch}]"
git checkout ${switchToBranch} --
echo "git status:"
git status
export MAVEN_OPTS="-Xmx2048m"
mvn --batch-mode package -DskipTests
jar=$(ls ./service/target/*.jar)
mv $jar ./
cd ../
fi
fi
echo "------- DONE: Build skills-service jar -------"
@@ -1,4 +1,4 @@
# Copyright 2020 SkillTree
# Copyright 2025 SkillTree
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -21,12 +21,13 @@ cd skills-client-integration/skills-int-e2e-test
npm install
# start services and wait
npm run backend:start:ci &
npm run integration:start &
npm run backend:waitToStart
npm run integration:waitToStart
npm run cyServices:start:skills-service:ci
npm run cyServices:start:integration-apps
# run tests
npm run cy:run
npm run cyServices:kill
cd ../../
echo "------- DONE: Run Cypress Tests -------"
+39
View File
@@ -0,0 +1,39 @@
#!/bin/bash
# exit if a command returns non-zero exit code
set -e
set -o pipefail
DB=${DB:-postgres}
TRACING=${TRACING:-false}
PROMETHEUS=${PROMETHEUS:-false}
echo "PWD: "
echo $(pwd)
cd ./skills-client-integration/skills-int-e2e-test/hydra
DC="docker compose -f quickstart.yml"
if [[ $DB == "mysql" ]]; then
DC+=" -f quickstart-mysql.yml"
fi
if [[ $DB == "postgres" ]]; then
DC+=" -f quickstart-postgres.yml"
fi
if [[ $TRACING == true ]]; then
DC+=" -f quickstart-tracing.yml"
fi
if [[ $PROMETHEUS == true ]]; then
DC+=" -f quickstart-prometheus.yml"
fi
DC+=" up --build -d"
$DC
declare -r HOST="localhost:4445/clients"
wait-for-url() {
echo "Waiting for hydra service $1 ..."
timeout -s TERM 45 bash -c \
'while [[ "$(curl -X GET -s -o /dev/null -w ''%{http_code}'' ${0})" != "200" ]];\
do echo "Waiting for ${0}" && sleep 2;\
done' ${1}
echo "OK!"
}
wait-for-url http://${HOST}
+47
View File
@@ -0,0 +1,47 @@
# Copyright 2025 SkillTree
#
# 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
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#!/usr/bin/env bash
# exit if a command returns non-zero exit code
set -e
set -o pipefail
echo "------- START: Setup npm links -------"
cd skills-client-js
echo "------- skills-client-js: npm link -------"
npm link
cd ../skills-client-integration/skills-int-client-js/
echo "------- skills-int-client-js: npm link @skilltree/skills-client-js -------"
npm link @skilltree/skills-client-js
cd ../../skills-client-js
echo "------- skills-client-js: npm install -------"
npm install
npm run build
echo "------- skills-int-client-js: npm install -------"
cd ../skills-client-integration/skills-int-client-js/
npm install
echo "------- validate npm links -------"
if ! npm ls --link --global | grep "skills-client-js"; then
echo "Error: skills-client-js is not properly linked"
exit 1
else
echo "Verified: skills-client-js is properly linked"
fi
echo "------- skills-int-client-js: npm run build -------"
npm run build
echo "------- DONE: Setup npm links -------"
@@ -0,0 +1,244 @@
# This is a basic workflow to help you get started with Actions
name: Skills-service Backward Compatibility
env:
NODE_VERSION: 26
JAVA_VERSION: 25
on:
push:
paths-ignore:
- 'README.md'
pull_request:
paths-ignore:
- 'README.md'
schedule:
- cron: '0 6 * * *'
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
build-skills-service:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: ${{ env.NODE_VERSION }}
- uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: |
11
${{ env.JAVA_VERSION }}
- name: Print Versions
run: |
mvn --version
java -version
npm -version
node --version
- name: Cache local Maven repository
uses: actions/cache@v6
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: Cache npm
uses: actions/cache@v6
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
- name: Checkout specific branch fo skills-service
uses: actions/checkout@v6
with:
repository: NationalSecurityAgency/skills-service
path: skills-service
- name: build skill-service
run: |
cd skills-service
mvn --batch-mode clean install -DskipTests
cd ..
- name: upload service jar
uses: actions/upload-artifact@v7
with:
name: service jar
path: ./skills-service/service/target/skills-service-*.jar
test-skill-service-backward-compat:
runs-on: ubuntu-latest
needs: [build-skills-service]
strategy:
fail-fast: false
matrix:
skillsJsVersion: [ '3.1.1', '3.2.0', '3.3.0', '3.3.1', '3.4.0', '3.4.1', '3.5.0']
services:
postgres:
# Docker Hub image
image: postgres
# Provide the password for postgres
env:
POSTGRES_PASSWORD: skillsPassword
POSTGRES_DB: skills
# Set health checks to wait until postgres has started
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
# Maps tcp port 5432 on service container to the host
- 5432:5432
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: ${{ env.NODE_VERSION }}
- uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: |
11
${{ env.JAVA_VERSION }}
- name: Print Versions
run: |
mvn --version
java -version
npm -version
node --version
- name: Cache local Maven repository
uses: actions/cache@v6
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: Cache npm
uses: actions/cache@v6
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
# - name: build skill-service
# run: ./.github/workflows/scripts/getSkillsService.sh
# - name: download skill-service
# run: |
# mkdir skills-service
# cd skills-service
# curl -s https://api.github.com/repos/NationalSecurityAgency/skills-service/releases/latest | grep browser_download_url | cut -d '"' -f 4 | wget -qi -
# ls ./
# cd ..
# - name: Checkout specific branch fo skills-service
# uses: actions/checkout@v6
# with:
# repository: NationalSecurityAgency/skills-service
# path: skills-service
#
# - name: build skill-service
# run: |
# cd skills-service
# mvn --batch-mode clean install -DskipTests
# cp ./service/target/skills-service-*.jar ./
# ls ./
# cd ..
- uses: actions/download-artifact@v8
with:
name: service jar
path: ./skills-service/
- name: build integration test apps
env:
MAVEN_OPTS: -Xmx2048m
run: |
cd ./skills-client-integration/skills-int-client-js
npm install @skilltree/skills-client-js@${{ matrix.skillsJsVersion }} --save-exact
cd ..
mvn --batch-mode clean install
cd ../
- name: start services for cypress tests
run: |
cd skills-client-integration/skills-int-e2e-test
npm install
ls ../
echo "------"
ls ../../
echo "------"
ls ../../skills-service/
echo "------"
npm run cyServices:start:skills-service:ci
npm run cyServices:start:integration-apps
cd ../../
- name: Run Cypress tests
run: |
cd skills-client-integration/skills-int-e2e-test
npm run cy:run
cd ../../
- name: upload result artifacts
if: ${{ always() }}
uses: actions/upload-artifact@v7
with:
name: result artifacts for [${{ matrix.skillsJsVersion }}] version
path: |
./skills-service/*.jar
./skills-client-integration/skills-int-service/target/*.jar
./skills-client-integration/skills-int-e2e-test/target/logs/*.out
./skills-client-integration/skills-int-e2e-test/cypress/videos/*.mp4
./skills-client-integration/skills-int-e2e-test/cypress/screenshots/**/*.png
./skills-client-integration/skills-int-e2e-test/logs
./skills-client-integration/skills-int-e2e-test/cypress/videos
./skills-client-integration/skills-int-e2e-test/cypress/screenshots
./skills-client-integration/skills-int-e2e-test/cypress/snapshots/**/**/__diff_output__/*.png
./skills-client-integration/skills-int-e2e-test/cypress/snapshots/**/__diff_output__/*.png
# - name: run backwards compat tests
# run: |
# cd skills-client-integration/skills-int-e2e-test
# mvn --batch-mode clean package
# export NO_COLOR=1
# java -jar target/skills-int-e2e-test-*.jar
# cd ../../
#
# - name: upload result artifacts
# if: ${{ always() }}
# uses: actions/upload-artifact@v7
# with:
# name: result artifacts
# path: |
# ./skills-client-integration/skills-int-e2e-test/target/logs/*
# ./skills-client-integration/skills-int-e2e-test/target/skills-client/skills-client-integration/skills-int-e2e-test/cypress/videos/*.mp4
# ./skills-client-integration/skills-int-e2e-test/target/skills-client/skills-client-integration/skills-int-e2e-test/cypress/screenshots/**/*.png
# ./skills-client-integration/skills-int-e2e-test/cypress/videos/*.mp4
# ./skills-client-integration/skills-int-e2e-test/cypress/screenshots/**/*.png
# /home/runner/.npm/_logs/*
+10
View File
@@ -6,3 +6,13 @@
.history
/target/
/skills-client-integration/skills-int-e2e-test/logs/
/skills-client-integration/skills-int-e2e-test/cypress/videos/
/skills-client-integration/skills-int-e2e-test/nohup.out
/skills-client-vue/package-lock.json
/skills-client-react/package-lock.json
/skills-client-js/package-lock.json
/skills-client-ng/package-lock.json
/skills-client-ng/dist/
/skills-client-ng/projects/skilltree/skills-client-ng/src/version.js
/skills-client-integration/skills-int-e2e-test/cypress/downloads/*
-82
View File
@@ -1,82 +0,0 @@
stages:
- build
- testCypress
- pushToNexus
- deploy
build:
image: maven:3.6.0-jdk-11
stage: build
before_script:
- ./skills-client-integration/ci/setupNode.sh
- ./skills-client-integration/ci/setupRepos.sh
script:
- ./skills-client-integration/ci/getSkillsService.sh
- ./skills-client-integration/ci/setupNpmLinks.sh
- cd ./skills-client-integration
- mvn --batch-mode clean install
- cd ../
artifacts:
paths:
- ./skills-client-integration/skills-int-service/target/*.jar
- ./skills-client-integration/skills-int-service/target/*.log
- ./skills-client-integration/skills-int-e2e-test/target/*.jar
- ./skills-client-integration/skills-int-e2e-test/target/*.log
- ./skills-client-integration/target/*.log
- ./skills-service/*.jar
testCypress:
image: olehsrh/cypress:1
stage: testCypress
before_script:
- ./skills-client-integration/ci/setupRepos.sh
script:
- ./skills-client-integration/ci/runCypressTests.sh
artifacts:
when: always
paths:
- ./skills-client-integration/skills-int-e2e-test/cypress/videos/*.mp4
- ./skills-client-integration/skills-int-e2e-test/cypress/screenshots/**/*.png
expire_in: 1 day
pushToNexus:
image: maven:3.6.0-jdk-11
stage: pushToNexus
before_script:
- ./skills-client-integration/ci/setupRepos.sh
script:
- cd skills-client-integration/skills-int-service
- jar=$(ls ./target/skills-int-service-*.jar)
- echo $jar
- mvn --batch-mode deploy:deploy-file -DpomFile=./pom.xml -Dfile=${jar} -Durl=http://${NEXUS_SERVER}/repository/maven-snapshots/ -DrepositoryId=nexus-snapshots
artifacts:
paths:
- skills-client-integration/skills-int-service/target/skills-int-service-*.jar
only:
refs:
- branches
variables:
- $BRANCH_TO_DEPLOY_SKILLS_CLIENT == $CI_COMMIT_REF_NAME
deploy:
image: alpine:latest
stage: deploy
before_script:
- apk --update --no-cache add sshpass openssh git
script:
- git clone https://${GITLAB_DEPLOY_USERNAME}:${GITLAB_DEPLOY_PASSWORD}@gitlab.evoforge.org/skills/skills-deploy.git
- TIMESTAMP=`date +%s`
- TMP_DIR="skills-int-service_${TIMESTAMP}"
- DEST_PATH="/home/${CI_USERNAME}/$TMP_DIR"
- sshpass -p $CI_PASSWORD ssh -o StrictHostKeyChecking=no -o PreferredAuthentications=password -o PubkeyAuthentication=no $CI_USERNAME@$CI_IP "rm -rf /home/${CI_USERNAME}/skills-int-service_* && mkdir -p ${DEST_PATH}"
- cp skills-client-integration/skills-int-service/target/skills-int-service-*.jar skills-int-service.jar
- sshpass -p $CI_PASSWORD scp -r skills-deploy ${CI_USERNAME}@${CI_IP}:${DEST_PATH}
- sshpass -p $CI_PASSWORD scp -r skills-int-service.jar ${CI_USERNAME}@${CI_IP}:${DEST_PATH}/skills-deploy/skills-client-integration/
- sshpass -p $CI_PASSWORD ssh -o StrictHostKeyChecking=no -o PreferredAuthentications=password -o PubkeyAuthentication=no $CI_USERNAME@$CI_IP "cd ${DEST_PATH}/skills-deploy/skills-client-integration && ./runDeploy.sh"
only:
refs:
- branches
variables:
- $BRANCH_TO_DEPLOY_SKILLS_CLIENT == $CI_COMMIT_REF_NAME
+12
View File
@@ -0,0 +1,12 @@
## Legal
Consistent with Section D.6. of the GitHub Terms of Service as of 2019, and Section 5. of the Apache License, Version 2.0, the project maintainer for this project accepts contributions using the inbound=outbound model.
When you submit a pull request to this repository (inbound), you are agreeing to license your contribution under the same terms as specified in [LICENSE] (outbound).
This is an open source project.
Contributions you make to this public U.S. Government ("USG") repository are completely voluntary.
When you submit an issue, bug report, question, enhancement, pull request, etc., you are offering your contribution without expectation of payment, you expressly waive any future pay claims against the USG related to your contribution, and you acknowledge that this does not create an obligation on the part of the USG of any kind.
Furthermore, your contributing to this project does not create an employer-employee relationship between the United States ("U.S.") Government and the contributor.
[LICENSE]: LICENSE.txt
+13
View File
@@ -0,0 +1,13 @@
# Disclaimer of Warranty
This Work is provided "AS IS."
Any express or implied warranties, including but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed.
In no event shall the United States Government be liable for any direct, indirect, incidental, special, exemplary or consequential damages (including, but not limited to, procurement of substitute goods or services, loss of use, data or profits, or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this Work, even if advised of the possibility of such damage.
The User of this Work agrees to hold harmless and indemnify the United States Government, its agents and employees from every claim or liability (whether in tort or in contract), including attorney's fees, court costs, and expenses, arising in direct consequence of Recipient's use of the item, including, but not limited to, claims or liabilities made for injury to or death of personnel of User or third parties, damage to or destruction of property of User or third parties, and infringement or other violations of intellectual property or technical data rights.
# Disclaimer of Endorsement
Nothing in this Work is intended to constitute an endorsement, explicit or implied, by the United States Government of any particular manufacturer's product or service.
Reference herein to any specific commercial product, process, or service by trade name, trademark, manufacturer, or otherwise, in this Work does not constitute an endorsement, recommendation, or favoring by the United States Government and shall not be used for advertising or product endorsement purposes.
+19
View File
@@ -0,0 +1,19 @@
## Licensing Intent
The intent is that this software and documentation ("Project") should be treated
as if it is licensed under the license associated with the Project ("License")
in the LICENSE file. However, because we are part of the United States (U.S.)
Federal Government, it is not that simple.
The portions of this Project written by U.S. Federal Government employees within
the scope of their federal employment are ineligible for copyright protection in
the U.S.; this is generally understood to mean that these portions of the
Project are placed in the public domain.
In countries where copyright protection is available (which does not include the
U.S.), contributions made by U.S. Federal Government employees are released
under the License. Merged contributions from private contributors are released
under the License.
The SkillTree software is released under the Apache License, Version 2.0
("Apache 2.0").
+31
View File
@@ -0,0 +1,31 @@
# SkillTree Client Libraries
<p>
<img src="https://img.shields.io/npm/d18m/%40skilltree%2Fskills-client-js" alt="npm downloads">
<img src="https://img.shields.io/npm/dw/%40skilltree%2Fskills-client-js" alt="npm weekly downloads">
<img src="https://img.shields.io/npm/l/%40skilltree%2Fskills-client-js" alt="License">
<img src="https://img.shields.io/npm/v/%40skilltree%2Fskills-client-js" alt="Latest Version">
<img alt="npm bundle size" src="https://img.shields.io/bundlephobia/minzip/%40skilltree%2Fskills-client-js">
</p>
SkillTree is an innovative approach to implementing application training. SkillTree's ``skills-client-js`` project facilitates rapid integration with the SkillTree service.
To learn about the SkillTree platform please visit our [Official Documentation](https://skilltreeplatform.dev/).
These pages provide in-depth guidance on the installation, usage and contribution.
## Workflow Status
[![Continuous Integration](https://github.com/NationalSecurityAgency/skills-client/actions/workflows/build-and-test.yml/badge.svg)](https://github.com/NationalSecurityAgency/skills-client/actions/workflows/build-and-test.yml)
[![Continuous Integration with OAuth](https://github.com/NationalSecurityAgency/skills-client/actions/workflows/build-and-test-oauth.yml/badge.svg)](https://github.com/NationalSecurityAgency/skills-client/actions/workflows/build-and-test-oauth.yml)
[![Continuous Integration expired token tests](https://github.com/NationalSecurityAgency/skills-client/actions/workflows/build-and-test-expired-token.yml/badge.svg)](https://github.com/NationalSecurityAgency/skills-client/actions/workflows/build-and-test-expired-token.yml)
[![Skills-service Backward Compatibility](https://github.com/NationalSecurityAgency/skills-client/actions/workflows/skills-service-backward-compat.yml/badge.svg)](https://github.com/NationalSecurityAgency/skills-client/actions/workflows/skills-service-backward-compat.yml)
[![Client Libs Backward Compatibility](https://github.com/NationalSecurityAgency/skills-client/actions/workflows/client-libs-backwards-compat.yml/badge.svg)](https://github.com/NationalSecurityAgency/skills-client/actions/workflows/client-libs-backwards-compat.yml)
-2
View File
@@ -1,2 +0,0 @@
# skills-client
+1
View File
@@ -7,6 +7,7 @@ target
skills-example-service/src/main/resources/public/native
skills-example-service/src/main/resources/public/vuejs
skills-example-service/src/main/resources/public/react
skills-example-service/src/main/resources/public/angular
.DS_Store
node_modules
@@ -1,58 +0,0 @@
# Copyright 2020 SkillTree
#
# 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
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#!/usr/bin/env bash
echo "------- START: Build skills-service jar -------"
# exit if a command returns non-zero exit code
set -e
#set -o pipefail
apt-get install -y gawk
myGitBranch=${CI_COMMIT_REF_NAME}
echo "My Git Branch: [${myGitBranch}]"
echo "Checkout skill-service code and build it."
git clone https://${DEPLOY_TOKEN_SKILLS_SERVICE}:${DEPLOY_TOKEN_SKILLS_SERVICE_PASS}@gitlab.evoforge.org/skills/skills-service.git
cd ./skills-service/
switchToBranch=$BRANCH_TO_DEPLOY_SKILLS_SERVICE
echo "Default branch to consider [${switchToBranch}]"
matchingBranch=`git branch -a | grep "remotes/origin/${myGitBranch}" | gawk -F'remotes/origin/' '{print $2}' | cat`
echo "Matching branch to consider [${matchingBranch}]"
if [[ "$myGitBranch" == *\.X ]] || [[ "$myGitBranch" == "master" ]] || [[ -z "$matchingBranch" ]]
then
echo "Building skill-service from configured [${switchToBranch}] branch"
else
switchToBranch=$matchingBranch
echo "Found matching branch [${switchToBranch}]"
fi
if [[ -z "$switchToBranch" ]]
then
exit -1
fi
echo "Checking out [${switchToBranch}]"
git checkout ${switchToBranch} --
echo "git status:"
git status
mvn --batch-mode package -DskipTests
jar=$(ls ./backend/target/*.jar)
mv $jar ./
cd ../
echo "------- DONE: Build skills-service jar -------"
-24
View File
@@ -1,24 +0,0 @@
# Copyright 2020 SkillTree
#
# 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
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#!/usr/bin/env bash
echo "------- START: Setup Node -------"
cat /etc/os-release
apt-get update
apt-get install -y build-essential
curl -sL https://deb.nodesource.com/setup_12.x | bash -
apt-get install -y nodejs
node -v
npm -v
echo "------- DONE: Setup Node -------"
@@ -1,27 +0,0 @@
# Copyright 2020 SkillTree
#
# 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
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#!/usr/bin/env bash
# exit if a command returns non-zero exit code
set -e
set -o pipefail
echo "------- START: Setup npm links -------"
cd skills-client-integration/skills-int-e2e-test
mvn --batch-mode clean package
ls -la target/skills-int-e2e-test-*.jar
du -sh target/*
java --version
java -cp target/skills-int-e2e-test-*.jar -Dloader.main=skills.SetupNpmLinks org.springframework.boot.loader.PropertiesLauncher
cd ../../
echo "------- DONE: Setup npm links -------"
@@ -1,24 +0,0 @@
# Copyright 2020 SkillTree
#
# 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
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#!/usr/bin/env bash
# exit if a command returns non-zero exit code
set -e
set -o pipefail
echo "------- START: Setup Repos -------"
echo "@skills:registry=http://$NEXUS_SERVER/repository/skills-registry/" > ~/.npmrc
cat ~/.npmrc
mkdir -p ~/.m2
cat ./skills-client-integration/skills-int-e2e-test/serverConfigs/settings.xml | sed s/NEXUS_SERVER/$NEXUS_SERVER/ | sed s/NEXUS_PASS/$NEXUS_PASS/ > ~/.m2/settings.xml
cat ~/.m2/settings.xml
echo "------- DONE: Setup Repos -------"
@@ -1,4 +1,4 @@
Copyright 2020 SkillTree
Copyright 2025 SkillTree
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -3,7 +3,7 @@
"rollup.config.js", "app/assets/**", "target/**", "pom.xml",
"build/**", "**/robots.txt", "**.svg", "vue.config.js",
"cypress/videos/**", "**/*.jar", "**.xml", "src/license/*.properties",
"logs/**", "nohup.out"
"nohup.out", "logs/*", "**.patch", "**.yml", "cypress/downloads/**", "**.config.js"
],
"license": "../license-add/LICENSE-HEADER.txt",
"licenseFormats": {
+6 -24
View File
@@ -7,13 +7,13 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<version>3.5.16</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>skills</groupId>
<artifactId>skills-client-integration</artifactId>
<packaging>pom</packaging>
<version>2.0.0-SNAPSHOT</version>
<version>3.6.3-SNAPSHOT</version>
<licenses>
<license>
@@ -25,34 +25,16 @@
<modules>
<module>skills-int-client-js</module>
<module>skills-int-client-vue</module>
<module>skills-int-client-react</module>
<module>skills-int-service</module>
<module>skills-int-e2e-test</module>
</modules>
<properties>
<!--suppress UnresolvedMavenProperty -->
<nexusServer>${nexus.url}</nexusServer>
<node.version>v11.6.0</node.version>
<frontend-maven-plugin.version>1.10.3</frontend-maven-plugin.version>
<!-- TODO: Temporary override spring boot versions, remove once spring boot upgrades these versions -->
<commons-lang3.version>3.19.0</commons-lang3.version>
</properties>
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>Release Repository</name>
<uniqueVersion>false</uniqueVersion>
<url>
${nexusServer}/repository/maven-releases/
</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>Snapshot Repository</name>
<uniqueVersion>true</uniqueVersion>
<url>
${nexusServer}/repository/maven-snapshots/
</url>
</snapshotRepository>
</distributionManagement>
</project>
@@ -1,5 +1,5 @@
<!--
Copyright 2020 SkillTree
Copyright 2025 SkillTree
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -17,14 +17,14 @@ limitations under the License.
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Skills Examples - Native Javascript</title>
<title>Skill Client Test</title>
<link rel="icon" type="image/x-icon" href="./skilltree.ico">
<link rel="stylesheet" type="text/css" href="./assets/app.css"/>
<link rel="stylesheet" type="text/css" href="./assets/js/bootstrap/dist/css/bootstrap.css">
<script type="text/javascript" src="./assets/js/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="./assets/js/axios/dist/axios.min.js"></script>
<script type="text/javascript" src="./assets/js/js-beautify/js/lib/beautify.js"></script>
<script type="text/javascript" src="./assets/js/bootstrap/dist/js/bootstrap.bundle.js"></script>
<script type="text/javascript" src="assets/js/@skilltree/skills-client-js/dist/skills-client-js.umd.min.js"></script>
@@ -33,10 +33,18 @@ limitations under the License.
const params = new URLSearchParams(window.location.search);
const isSummaryOnly = params.get('isSummaryOnly') ? JSON.parse(params.get('isSummaryOnly')) : false;
let clientDisplay = null;
const options = {
autoScrollStrategy: 'top-of-page',
isSummaryOnly,
};
const internalBackButtonParam = 'internalBackButton'
if (params.get(internalBackButtonParam)) {
options.internalBackButton = JSON.parse(params.get(internalBackButtonParam))
}
const themes = {
default: {
name: 'Bright (default)',
@@ -85,6 +93,16 @@ limitations under the License.
window.location.search = params;
};
const navigate = () => {
clientDisplay.navigate('/subjects/subj0');
}
const setInternalBackButton = () => {
const params = new URLSearchParams(window.location.search);
params.set('internalBackButton', !options.internalBackButton);
window.location.search = params;
}
const getTheme = () => {
const params = new URLSearchParams(window.location.search);
let themeName = params.get('themeName') ? params.get('themeName') : 'Bright (default)';
@@ -98,6 +116,9 @@ limitations under the License.
return version;
};
const handleRouteChanged = (newPath) => {
document.querySelector('#skillsDisplayPath').innerHTML = `Skills Display Path: [${newPath}]`;
};
axios.get("/api/config")
.then((result) => {
SkillsClient.SkillsConfiguration.configure(result.data);
@@ -116,10 +137,11 @@ limitations under the License.
defaultThemeElement.classList.add('active');
}
const clientDisplay = new SkillsClient.SkillsDisplayJS({
clientDisplay = new SkillsClient.SkillsDisplayJS({
options,
version: getVersion(),
theme: theme.theme,
handleRouteChanged: handleRouteChanged,
});
clientDisplay.attachTo(document.querySelector('#skills-client-display'));
};
@@ -137,53 +159,62 @@ limitations under the License.
<div id="app">
<div>
<div>
<nav class="navbar navbar-dark bg-info">
<a href="#" class="navbar-brand">Native Javascript Integration Examples</a>
<ul class="navbar-nav flex-row mr-auto">
<li class="nav-item pr-3">
<a class="nav-link" href="index.html">Report Skill Events</a>
</li>
<li class="nav-item active pr-3">
<a class="nav-link" href="javascript:void(0)">User Display</a>
</li>
</ul>
</nav>
</div>
<nav class="navbar navbar-expand-lg navbar-light" style="background-color: #e3f2fd;">
<div class="container-fluid">
<a href="#" class="navbar-brand">Client Test</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" aria-current="page" href="index.html" data-cy="reportSkillsLink">Report Skill Events</a>
</li>
<li class="nav-item">
<a class="nav-link active" href="javascript:void(0)" data-cy="userDisplayLink">User Display</a>
</li>
</ul>
</div>
</div>
</nav>
<div class="container-fluid mt-3">
<div class="container">
<div class="">
<div class="form-row align-items-center">
<div class="d-inline dropdown">
<button class="btn btn-outline-primary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<button class="btn btn-primary dropdown-toggle" type="button" id="dropdownMenuButton" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Change Theme
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<ul class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<a class="dropdown-item" href="javascript:void(0)" id="default-theme-dropdown-item" onclick="applyTheme(themes.default)">Bright (Default)</a>
<a class="dropdown-item" href="javascript:void(0)" id="darkblue-theme-dropdown-item" onclick="applyTheme(themes.darkBlue)">Dark Blue</a>
</div>
</ul>
</div>
<div class="d-inline custom-control custom-checkbox mx-2">
<input type="checkbox" class="custom-control-input" id="displayTypeControl" onclick="setDisplayType()" checked>
<label class="custom-control-label" for="displayTypeControl">Summary Only</label>
</div>
<div class="d-inline custom-control custom-checkbox mx-2">
<input type="checkbox" class="custom-control-input" id="internalBackButtonControl" onclick="setInternalBackButton()" checked>
<label class="custom-control-label" for="internalBackButtonControl">Internal Back Button</label>
</div>
<button class="btn btn-primary" type="button" data-cy="navigateButton" onclick="navigate()">
Navigate
</button>
</div>
<div class="my-3">
<span id="skillsDisplayPath" data-cy="skillsDisplayPath"></span>
</div>
<div
style="min-height: 860px">
<div id="skills-client-display" />
<div id="skills-client-display"></div>
</div>
</div>
</div>
<footer class="text-muted bg-light py-5">
<div class="container">
<p>Native Javascript Examples Guide</p>
<p></p>
</div>
</footer>
</div>
</div>
@@ -192,4 +223,5 @@ limitations under the License.
<script type="text/javascript">
document.getElementById("displayTypeControl").checked = isSummaryOnly;
document.getElementById("internalBackButtonControl").checked = params.get(internalBackButtonParam) ? JSON.parse(params.get(internalBackButtonParam)) : false
</script>
@@ -0,0 +1,66 @@
<!--
Copyright 2025 SkillTree
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
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Skill Client Test</title>
<link rel="icon" type="image/x-icon" href="./skilltree.ico">
<link rel="stylesheet" type="text/css" href="./assets/app.css"/>
<link rel="stylesheet" type="text/css" href="./assets/js/bootstrap/dist/css/bootstrap.css">
<script type="text/javascript" src="./assets/js/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="./assets/js/axios/dist/axios.min.js"></script>
<script type="text/javascript" src="./assets/js/bootstrap/dist/js/bootstrap.bundle.js"></script>
<script type="text/javascript" src="assets/js/@skilltree/skills-client-js/dist/skills-client-js.umd.min.js"></script>
<script type="text/javascript">
axios.get("/api/config")
.then((result) => {
SkillsClient.SkillsConfiguration.configure(result.data);
});
SkillsClient.SkillsConfiguration.afterConfigure().then(() => {
const initializeSkillsDisplay = () => {
const clientDisplay = new SkillsClient.SkillsDisplayJS();
clientDisplay.attachTo(document.querySelector('#skills-client-display'));
};
if (document.readyState === "complete"
|| document.readyState === "loaded"
|| document.readyState === "interactive") {
initializeSkillsDisplay();
} else {
document.addEventListener("DOMContentLoaded", initializeSkillsDisplay);
}
});
</script>
</head>
<body>
<div id="app">
<div class="container-fluid mt-3">
<div class="container">
<div style="min-height: 860px">
<div id="skills-client-display"></div>
</div>
</div>
</div>
</div>
</body>
</html>
@@ -0,0 +1,73 @@
<!--
Copyright 2025 SkillTree
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
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Skill Client Test</title>
<link rel="icon" type="image/x-icon" href="./skilltree.ico">
<link rel="stylesheet" type="text/css" href="./assets/app.css"/>
<link rel="stylesheet" type="text/css" href="./assets/js/bootstrap/dist/css/bootstrap.css">
<script type="text/javascript" src="./assets/js/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="./assets/js/axios/dist/axios.min.js"></script>
<script type="text/javascript" src="./assets/js/bootstrap/dist/js/bootstrap.bundle.js"></script>
<script type="module">
import { SkillsReporter, SkillsConfiguration, SkillsLevelJS, SkillsDisplayJS, Logger } from './assets/js/@skilltree/skills-client-js/dist/skills-client-js.esm.min.js'
axios.get("/api/config")
.then((result) => {
SkillsConfiguration.configure({...result.data, enabled: false});
});
document.querySelector('#reportSkillBtn').addEventListener('click', () => {
SkillsReporter.reportSkill('someId')
});
SkillsConfiguration.afterConfigure().then(() => {
const initializeSkillsDisplay = () => {
const clientDisplay = new SkillsDisplayJS();
clientDisplay.attachTo(document.querySelector('#skills-client-display'));
};
if (document.readyState === "complete"
|| document.readyState === "loaded"
|| document.readyState === "interactive") {
initializeSkillsDisplay();
} else {
document.addEventListener("DOMContentLoaded", initializeSkillsDisplay);
}
});
</script>
</head>
<body>
<div id="app">
<button
id="reportSkillBtn"
data-cy="reportSkillButton"
class="btn btn-outline-primary">
Report Skill
</button>
<div data-cy="levelComponentRes">Level: [<span id="skillLevel"/>]</div>
<div data-cy="skillsDisplayRes">Skills Display: [<div id="skills-client-display"></div>]</div>
</div>
</body>
</html>
@@ -1,5 +1,5 @@
<!--
Copyright 2020 SkillTree
Copyright 2025 SkillTree
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -17,39 +17,60 @@ limitations under the License.
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Skills Examples - Native Javascript</title>
<title>Skill Client Test</title>
<link rel="icon" type="image/x-icon" href="./skilltree.ico">
<link rel="stylesheet" type="text/css" href="./assets/app.css"/>
<link rel="stylesheet" type="text/css" href="./assets/js/bootstrap/dist/css/bootstrap.css">
<script type="text/javascript" src="./assets/js/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="./assets/js/axios/dist/axios.min.js"></script>
<script type="text/javascript" src="./assets/js/js-beautify/js/lib/beautify.js"></script>
<script type="text/javascript" src="./assets/js/bootstrap/dist/js/bootstrap.bundle.js"></script>
<script type="module">
import { SkillsReporter, SkillsConfiguration } from './assets/js/@skilltree/skills-client-js/dist/skills-client-js.esm.min.js'
import { SkillsReporter, SkillsConfiguration, SkillsLevelJS, Logger } from './assets/js/@skilltree/skills-client-js/dist/skills-client-js.esm.min.js'
axios.get("/api/config")
.then((result) => {
SkillsConfiguration.configure(result.data);
});
SkillsConfiguration.afterConfigure()
.then(() => {
SkillsReporter.addSuccessHandler((result) => {
document.querySelector('#global-event-result-container-js').innerHTML = JSON.stringify(result, null, 2);
});
SkillsReporter.addSuccessHandler((result) => {
document.querySelector('#global-event-result-container-js').innerHTML = JSON.stringify(result, null, 2);
});
SkillsReporter.addErrorHandler((result) => {
document.querySelector('#global-event-result-container-js').innerHTML = JSON.stringify(result, null, 2);
});
const reportSkill = (skillId) => {
SkillsReporter.reportSkill(skillId)
.then((response) => {
document.querySelector('#report-result-container').innerHTML = JSON.stringify(response, null, 2);
});
};
document.querySelector('#exampleDirectiveClickEvent').addEventListener('click', () => { reportSkill('IronMan'); });
const reportSkill = (skillId) => {
SkillsReporter.reportSkill(skillId)
.then((response) => {
document.querySelector('#report-result-container').innerHTML = JSON.stringify(response, null, 2);
}).catch((err) => {
document.querySelector('#report-result-container').innerHTML = JSON.stringify(err, null, 2);
});
};
const toggleAllEvents = () => {
const notifyIfSkillNotApplied = document.querySelector('#all-events-check').checked
SkillsReporter.configure( { notifyIfSkillNotApplied });
}
document.querySelector('#all-events-check').addEventListener('click', toggleAllEvents);
document.querySelector('#exampleDirectiveClickEvent').addEventListener('click', () => {
var skillId = document.getElementById('skillId').value;
reportSkill(skillId);
});
const toggleAllEvents = () => {
const notifyIfSkillNotApplied = document.querySelector('#all-events-check').checked
SkillsReporter.configure({notifyIfSkillNotApplied});
}
document.querySelector('#all-events-check').addEventListener('click', toggleAllEvents);
toggleAllEvents();
if (window.Cypress) {
window.skillsLogger = Logger;
}
const skillLevel = new SkillsLevelJS();
skillLevel.attachTo('#skillLevel')
});
</script>
</head>
@@ -58,17 +79,26 @@ limitations under the License.
<div id="app">
<div>
<div>
<nav class="navbar navbar-dark bg-info">
<a href="#" class="navbar-brand">Native Javascript Integration Examples</a>
<ul class="navbar-nav flex-row mr-auto">
<li class="nav-item active pr-3">
<a class="nav-link" href="javascript:void(0)">Report Skill Events</a>
</li>
<li class="nav-item pr-3">
<a class="nav-link" href="clientDisplay.html">User Display</a>
</li>
</ul>
<nav class="navbar navbar-expand-lg navbar-light" style="background-color: #e3f2fd;">
<div class="container-fluid">
<a href="#" class="navbar-brand">Client Test</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="javascript:void(0)" data-cy="reportSkillsLink">Report Skill Events</a>
</li>
<li class="nav-item">
<a class="nav-link" href="clientDisplay.html" data-cy="userDisplayLink">User Display</a>
</li>
</ul>
<button type="button" class="btn btn-primary">
<span id="skillLevel"/>
</button>
</div>
</div>
</nav>
</div>
@@ -77,13 +107,13 @@ limitations under the License.
<h2>Report Skills Examples</h2>
<div class="text-primary">Global Event Result:</div>
<div>
Include Skills Not Applied: <input type="checkbox" id="all-events-check">
Include Skills Not Applied: <input type="checkbox" id="all-events-check" checked>
</div>
<div id="globalEventResultDiv" class="border rounded p-3 mb-5 bg-light">
<pre id="global-event-result-container-js" data-cy="globalEventResult"></pre>
</div>
<div>
<h5 class="text-info"><strong>Skills Directive - Click Event</strong></h5>
<h5 class="text-info"><strong>Report Any Skill</strong></h5>
<div class="card card-body bg-light">
<pre class="m-0 sample-code">
<code class="javascript">SkillsReporter.reportSkill(this.skill)
@@ -93,11 +123,18 @@ limitations under the License.
</div>
<div class="card card-body mt-3">
<div class="text-primary">Skill Id:</div>
<div class="code-example">
<input class="form-control" id="skillId" type="text" value="IronMan" />
</div>
<div>
<div id="exampleDirectiveClickEvent">
<button
class="btn btn-outline-primary">
Report Skill
</button>
<button
data-cy="exampleDirectiveClickEventButton"
class="btn btn-outline-primary">
Report Skill
</button>
</div>
</div>
<hr>
<div class="text-primary">Result:</div>
@@ -111,13 +148,6 @@ limitations under the License.
</div>
</div>
<footer class="text-muted bg-light py-5">
<div class="container">
<p>Native Javascript Examples Guide</p>
<p></p>
</div>
</footer>
</div>
</div>
Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

@@ -1,5 +1,5 @@
/*
* Copyright 2020 SkillTree
* Copyright 2025 SkillTree
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -1,31 +1,30 @@
{
"name": "skills-int-client-js",
"version": "2.0.1",
"version": "3.6.3",
"license": "Apache-2.0",
"description": "SkillTree Client Lib Integration Tests - Native JS",
"main": "index.js",
"scripts": {
"postinstall": "node copyDeps.js",
"serve": "npx live-server --no-browser --port=8092 --open=app --cors --proxy=/api:http://localhost:8090/api --proxy=/native:http://localhost:8092/app --proxy=/assets:http://localhost:8092/app/assets",
"serve": "npm install && npx live-server --no-browser --port=8092 --open=app --cors --proxy=/api:http://localhost:8090/api --proxy=/native:http://localhost:8092/app --proxy=/assets:http://localhost:8092/app/assets",
"test": "npm run test",
"licenseDepCheck": "license-checker --production --onlyAllow='MIT;ISC;Apache-2.0' --summary",
"licenseHeaderCheck": "license-check-and-add check -f '../license-add/license-add-config.json'",
"licenseHeaderAdd": "license-check-and-add add -f ../license-add/license-add-config.json",
"licenseCheck": "npm run licenseHeaderCheck && npm run licenseDepCheck",
"build": "npm run licenseCheck && echo nothingelsetodo"
"build": "npm install && npm run licenseCheck && echo nothingelsetodo"
},
"author": "SkillTree Team",
"dependencies": {
"@skilltree/skills-client-js": "2.0.1",
"axios": "^0.19.0",
"bootstrap": "4.3.1",
"jquery": "^3.4.1",
"js-beautify": "1.10.2"
"@skilltree/skills-client-js": "3.6.3",
"axios": "1.17.0",
"bootstrap": "5.3.8",
"jquery": "4.0.0"
},
"devDependencies": {
"fs-extra": "^8.1.0",
"license-check-and-add": "^3.0.4",
"license-checker": "^25.0.1",
"live-server": "1.2.1"
"fs-extra": "11.3.5",
"license-check-and-add": "4.0.5",
"license-checker": "25.0.1",
"live-server": "1.2.2"
}
}
}
@@ -7,7 +7,7 @@
<parent>
<groupId>skills</groupId>
<artifactId>skills-client-integration</artifactId>
<version>2.0.0-SNAPSHOT</version>
<version>3.6.3-SNAPSHOT</version>
</parent>
<artifactId>skills-int-client-js</artifactId>
@@ -19,55 +19,26 @@
<build>
<plugins>
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>1.6</version>
<configuration>
<installDirectory>target</installDirectory>
</configuration>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.5.1</version>
<executions>
<execution>
<id>install node and npm</id>
<id>exec-npm-install</id>
<phase>install</phase>
<goals>
<goal>install-node-and-npm</goal>
<goal>exec</goal>
</goals>
<configuration>
<nodeVersion>${node.version}</nodeVersion>
<executable>npm</executable>
<arguments>
<argument>run</argument>
<argument>build</argument>
</arguments>
<workingDirectory>${basedir}</workingDirectory>
</configuration>
</execution>
<execution>
<id>npm install</id>
<goals>
<goal>npm</goal>
</goals>
<phase>generate-resources</phase>
<configuration>
<arguments>--unsafe-perm install</arguments>
</configuration>
</execution>
<execution>
<id>npm run build</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>run build</arguments>
</configuration>
</execution>
<!--TODO: uncomment when we have at least 1 unit test-->
<!--<execution>-->
<!--<id>npm run test</id>-->
<!--<goals>-->
<!--<goal>npm</goal>-->
<!--</goals>-->
<!--<phase>test</phase>-->
<!--<configuration>-->
<!--<arguments>run unit</arguments>-->
<!--</configuration>-->
<!--</execution>-->
</executions>
</plugin>
</plugins>
</build>
@@ -1 +0,0 @@
BROWSER=none
@@ -1,23 +0,0 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# production
/build
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
@@ -1 +0,0 @@
package-lock=false
@@ -1,83 +0,0 @@
<!---
Copyright 2020 SkillTree
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
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
## Available Scripts
In the project directory, you can run:
### `npm start`
Runs the app in the development mode.<br />
Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
The page will reload if you make edits.<br />
You will also see any lint errors in the console.
### `npm test`
Launches the test runner in the interactive watch mode.<br />
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
### `npm run build`
Builds the app for production to the `build` folder.<br />
It correctly bundles React in production mode and optimizes the build for the best performance.
The build is minified and the filenames include the hashes.<br />
Your app is ready to be deployed!
See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
### `npm run eject`
**Note: this is a one-way operation. Once you `eject`, you can’t go back!**
If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
Instead, it will copy all the configuration files and the transitive dependencies (Webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.
You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.
## Learn More
You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
To learn React, check out the [React documentation](https://reactjs.org/).
### Code Splitting
This section has moved here: https://facebook.github.io/create-react-app/docs/code-splitting
### Analyzing the Bundle Size
This section has moved here: https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size
### Making a Progressive Web App
This section has moved here: https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app
### Advanced Configuration
This section has moved here: https://facebook.github.io/create-react-app/docs/advanced-configuration
### Deployment
This section has moved here: https://facebook.github.io/create-react-app/docs/deployment
### `npm run build` fails to minify
This section has moved here: https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify
@@ -1,51 +0,0 @@
{
"name": "skills-int-client-react",
"version": "2.0.1",
"license": "Apache-2.0",
"description": "SkillTree Client Lib Integration Tests - React",
"homepage": "/react/",
"dependencies": {
"@skilltree/skills-client-react": "2.0.1",
"axios": "0.19.0",
"bootstrap": "4.3.1",
"core-js": "3.2.1",
"highlightjs": "9.12.0",
"js-beautify": "1.10.2",
"react": "16.11.0",
"react-bootstrap": "1.0.0-beta.14",
"react-dom": "16.11.0",
"react-highlight": "0.12.0",
"react-router": "5.1.2",
"react-router-dom": "5.1.2"
},
"scripts": {
"start": "PORT=8083 react-scripts start",
"licenseDepCheck": "license-checker --production --onlyAllow='MIT;ISC;BSD-3;BSD-2-Clause;Apache-2.0' --summary",
"licenseHeaderCheck": "license-check-and-add check -f '../license-add/license-add-config.json'",
"licenseHeaderAdd": "license-check-and-add add -f ../license-add/license-add-config.json",
"licenseCheck": "npm run licenseHeaderCheck && npm run licenseDepCheck ",
"build": "npm run licenseCheck && react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"license-check-and-add": "^3.0.4",
"license-checker": "^25.0.1",
"react-scripts": "3.2.0"
}
}
@@ -1,75 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>skills</groupId>
<artifactId>skills-client-integration</artifactId>
<version>2.0.0-SNAPSHOT</version>
</parent>
<artifactId>skills-int-client-react</artifactId>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>1.6</version>
<configuration>
<installDirectory>target</installDirectory>
</configuration>
<executions>
<execution>
<id>install node and npm</id>
<goals>
<goal>install-node-and-npm</goal>
</goals>
<configuration>
<nodeVersion>${node.version}</nodeVersion>
</configuration>
</execution>
<execution>
<id>npm install</id>
<goals>
<goal>npm</goal>
</goals>
<phase>generate-resources</phase>
<configuration>
<arguments>install</arguments>
</configuration>
</execution>
<execution>
<id>npm run build</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>run build</arguments>
</configuration>
</execution>
<!--TODO: uncomment when we have at least 1 unit test-->
<!--<execution>-->
<!--<id>npm run test</id>-->
<!--<goals>-->
<!--<goal>npm</goal>-->
<!--</goals>-->
<!--<phase>test</phase>-->
<!--<configuration>-->
<!--<arguments>run unit</arguments>-->
<!--</configuration>-->
<!--</execution>-->
</executions>
</plugin>
</plugins>
</build>
</project>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

@@ -1,60 +0,0 @@
<!--
Copyright 2020 SkillTree
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
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="Web site created using create-react-app"
/>
<link rel="apple-touch-icon" href="logo192.png" />
<!--
manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<link rel="stylesheet" href="~highlight.js/styles/darcula.css">
<!--
Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build.
Only files inside the `public` folder can be referenced from the HTML.
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<title>React App</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
You can add webfonts, meta tags, or analytics to this file.
The build step will place the bundled scripts into the <body> tag.
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
</body>
</html>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

@@ -1,25 +0,0 @@
{
"short_name": "React App",
"name": "Create React App Sample",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
},
{
"src": "logo192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "logo512.png",
"type": "image/png",
"sizes": "512x512"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}
@@ -1,2 +0,0 @@
# https://www.robotstxt.org/robotstxt.html
User-agent: *
@@ -1,45 +0,0 @@
/*
* Copyright 2020 SkillTree
*
* 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React from 'react';
import Navigation from "./skillsDisplay/Navigation";
import './App.css';
import {
HashRouter as Router,
Switch,
Route,
} from "react-router-dom";
import ShowSkills from "./skillsDisplay/ShowSkills";
import ReportSkill from "./skillsDisplay/ReportSkill";
export default function App() {
return (
<Router>
<div className="App">
<Navigation projectId="movies"/>
</div>
<Switch>
<Route exact path="/showSkills">
<ShowSkills/>
</Route>
<Route exact path="/">
<ReportSkill/>
</Route>
{/*<Route exact path="/reportSkillEvent">
</Route>*/}
</Switch>
</Router>
);
}
@@ -1,28 +0,0 @@
/*
Copyright 2020 SkillTree
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
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
"Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
code {
font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
monospace;
}
@@ -1,36 +0,0 @@
/*
* Copyright 2020 SkillTree
*
* 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React from 'react';
import ReactDOM from 'react-dom';
import axios from 'axios';
import './index.css';
import 'bootstrap/dist/css/bootstrap.min.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
import { SkillsConfiguration } from '@skilltree/skills-client-react';
axios.get("/api/config")
.then((result) => {
SkillsConfiguration.configure(result.data);
})
.then(() => {
ReactDOM.render(<App />, document.getElementById('root'));
});
// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
// Learn more about service workers: https://bit.ly/CRA-PWA
serviceWorker.unregister();
@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 170.96 159.93"><defs><style>.cls-1{fill:#09d3ac;}</style></defs><path class="cls-1" d="M141.35,73.27c0-6.89-8.11-13-20.58-16.73,3-12.67,1.69-22.75-4.28-26.16a9.55,9.55,0,0,0-4.79-1.2c-5.57,0-12.61,3.89-19.72,10.62-7.11-6.68-14.13-10.55-19.69-10.55a9.46,9.46,0,0,0-4.86,1.22c-5.94,3.42-7.17,13.44-4.21,26.05-12.41,3.71-20.48,9.77-20.5,16.63s8.12,13,20.59,16.72c-3,12.68-1.7,22.75,4.28,26.16a9.41,9.41,0,0,0,4.78,1.2c5.58,0,12.62-3.89,19.73-10.62,7.1,6.68,14.12,10.55,19.69,10.55a9.59,9.59,0,0,0,4.86-1.22c5.94-3.42,7.16-13.44,4.21-26C133.27,86.18,141.34,80.12,141.35,73.27ZM96.56,42.06c8.19-7.33,13.31-8.12,15.13-8.12h0a4.71,4.71,0,0,1,2.42.58c2.86,1.63,4,7.38,3.09,15a56.73,56.73,0,0,1-1,5.79,97.7,97.7,0,0,0-12.58-2.07,98.47,98.47,0,0,0-8.24-10.08C95.75,42.79,96.15,42.42,96.56,42.06ZM71.77,78.94c.78,1.5,1.61,3,2.47,4.51S76,86.49,77,88c-2.71-.39-5.34-.88-7.84-1.46C69.86,84,70.75,81.5,71.77,78.94ZM69,59.9c2.53-.59,5.18-1.08,7.93-1.46-1,1.48-1.86,3-2.76,4.59s-1.69,3-2.46,4.52Q70.18,63.65,69,59.9Zm5.21,13.34q1.86-3.93,4.09-7.86c1.5-2.62,3.11-5.17,4.77-7.61,2.91-.22,5.91-.34,9-.33s6,.12,8.89.35c1.66,2.42,3.25,5,4.75,7.55s2.88,5.22,4.12,7.83c-1.23,2.62-2.6,5.25-4.08,7.85s-3.11,5.18-4.77,7.62c-2.91.23-5.91.34-9,.34s-6-.13-8.89-.36c-1.66-2.42-3.26-4.94-4.76-7.55S75.5,75.85,74.25,73.24Zm32.86-14.77c2.72.38,5.35.87,7.84,1.45-.74,2.47-1.62,5-2.64,7.55-.79-1.5-1.61-3-2.48-4.51S108,59.93,107.11,58.47Zm2.76,24.92q1.29-2.27,2.46-4.53c1,2.6,2,5.16,2.7,7.66-2.52.59-5.17,1.07-7.92,1.45Q108.52,85.75,109.87,83.39ZM92,46.56c1.8,1.92,3.57,4,5.3,6.23-1.71-.07-3.46-.12-5.23-.12s-3.58,0-5.33.12C88.45,50.57,90.2,48.48,92,46.56Zm-22.18-12A4.82,4.82,0,0,1,72.29,34a13.11,13.11,0,0,1,5.19,1.31,39.07,39.07,0,0,1,10,6.78l1.17,1.07a98.49,98.49,0,0,0-8.16,10,98.88,98.88,0,0,0-12.65,2.06c-.44-1.94-.8-3.84-1-5.67C65.8,42,67,36.24,69.81,34.6ZM64.53,85.26a58.75,58.75,0,0,1-5.54-2c-7.1-3-11.5-6.85-11.5-10.14S51.91,66,59,63.05a57.63,57.63,0,0,1,5.44-1.94A97.93,97.93,0,0,0,69,73.25,98.72,98.72,0,0,0,64.53,85.26Zm23,19.1c-8.19,7.33-13.31,8.11-15.14,8.11a4.69,4.69,0,0,1-2.42-.58c-2.86-1.63-4-7.38-3.09-15a56.07,56.07,0,0,1,1-5.78,99.51,99.51,0,0,0,12.58,2.06,97.17,97.17,0,0,0,8.24,10.08Zm4.57-4.51c-1.8-1.92-3.57-4-5.31-6.23,1.72.08,3.47.12,5.24.12s3.58,0,5.33-.11C95.63,95.85,93.87,97.93,92.09,99.85Zm22.18,12a4.82,4.82,0,0,1-2.48.59c-1.82,0-7-.8-15.16-8.1l-1.17-1.07a98.44,98.44,0,0,0,8.15-10,97,97,0,0,0,12.66-2.06c.44,1.94.79,3.84,1,5.67C118.27,104.42,117.12,110.18,114.27,111.81Zm10.8-28.44c-1.71.7-3.52,1.35-5.44,1.93a98.54,98.54,0,0,0-4.57-12.14,98.1,98.1,0,0,0,4.49-12,58.75,58.75,0,0,1,5.54,2c7.09,3,11.5,6.85,11.49,10.14S132.17,80.42,125.07,83.37ZM92,82.39a9.18,9.18,0,1,0-9.17-9.19A9.17,9.17,0,0,0,92,82.39ZM31,17.88V128.53H153.07V17.88ZM148.3,123.77H35.78V22.65H148.3Zm-85-33.9c-3,12.68-1.7,22.75,4.28,26.16a9.41,9.41,0,0,0,4.78,1.2c5.58,0,12.62-3.89,19.73-10.62,7.1,6.68,14.12,10.55,19.69,10.55a9.59,9.59,0,0,0,4.86-1.22c5.94-3.42,7.16-13.44,4.21-26,12.41-3.72,20.48-9.78,20.49-16.63s-8.11-13-20.58-16.73c3-12.67,1.69-22.75-4.28-26.16a9.55,9.55,0,0,0-4.79-1.2c-5.57,0-12.61,3.89-19.72,10.62-7.11-6.68-14.13-10.55-19.69-10.55a9.46,9.46,0,0,0-4.86,1.22c-5.94,3.42-7.17,13.44-4.21,26.05-12.41,3.71-20.48,9.77-20.5,16.63S50.84,86.13,63.31,89.87Zm24.21,14.49c-8.19,7.33-13.31,8.11-15.14,8.11a4.69,4.69,0,0,1-2.42-.58c-2.86-1.63-4-7.38-3.09-15a56.07,56.07,0,0,1,1-5.78,99.51,99.51,0,0,0,12.58,2.06,97.17,97.17,0,0,0,8.24,10.08Zm24.79-36.89c-.79-1.5-1.61-3-2.48-4.51s-1.8-3-2.72-4.49c2.72.38,5.35.87,7.84,1.45C114.21,62.39,113.33,64.92,112.31,67.47Zm2.72,19c-2.52.59-5.17,1.07-7.92,1.45q1.41-2.22,2.76-4.58t2.46-4.53C113.37,81.46,114.28,84,115,86.52Zm-5.21-13.35c-1.23,2.62-2.6,5.25-4.08,7.85s-3.11,5.18-4.77,7.62c-2.91.23-5.91.34-9,.34s-6-.13-8.89-.36c-1.66-2.42-3.26-4.94-4.76-7.55s-2.87-5.22-4.12-7.83q1.86-3.93,4.09-7.86c1.5-2.62,3.11-5.17,4.77-7.61,2.91-.22,5.91-.34,9-.33s6,.12,8.89.35c1.66,2.42,3.25,5,4.75,7.55S108.58,70.56,109.82,73.17ZM77,88c-2.71-.39-5.34-.88-7.84-1.46.74-2.46,1.63-5,2.65-7.55.78,1.5,1.61,3,2.47,4.51S76,86.49,77,88ZM74.21,63c-.87,1.5-1.69,3-2.46,4.52Q70.18,63.65,69,59.9c2.53-.59,5.18-1.08,7.93-1.46C76,59.92,75.11,61.45,74.21,63ZM92.09,99.85c-1.8-1.92-3.57-4-5.31-6.23,1.72.08,3.47.12,5.24.12s3.58,0,5.33-.11C95.63,95.85,93.87,97.93,92.09,99.85Zm22.18,12a4.82,4.82,0,0,1-2.48.59c-1.82,0-7-.8-15.16-8.1l-1.17-1.07a98.44,98.44,0,0,0,8.15-10,97,97,0,0,0,12.66-2.06c.44,1.94.79,3.84,1,5.67C118.27,104.42,117.12,110.18,114.27,111.81Zm5.28-50.66a58.75,58.75,0,0,1,5.54,2c7.09,3,11.5,6.85,11.49,10.14s-4.41,7.16-11.51,10.11c-1.71.7-3.52,1.35-5.44,1.93a98.54,98.54,0,0,0-4.57-12.14A98.1,98.1,0,0,0,119.55,61.15Zm-23-19.09c8.19-7.33,13.31-8.12,15.13-8.12h0a4.71,4.71,0,0,1,2.42.58c2.86,1.63,4,7.38,3.09,15a56.73,56.73,0,0,1-1,5.79,97.7,97.7,0,0,0-12.58-2.07,98.47,98.47,0,0,0-8.24-10.08C95.75,42.79,96.15,42.42,96.56,42.06ZM92,46.56c1.8,1.92,3.57,4,5.3,6.23-1.71-.07-3.46-.12-5.23-.12s-3.58,0-5.33.12C88.45,50.57,90.2,48.48,92,46.56Line truncated

Before

Width:  |  Height:  |  Size: 8.0 KiB

@@ -1,150 +0,0 @@
/*
* Copyright 2020 SkillTree
*
* 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// This optional code is used to register a service worker.
// register() is not called by default.
// This lets the app load faster on subsequent visits in production, and gives
// it offline capabilities. However, it also means that developers (and users)
// will only see deployed updates on subsequent visits to a page, after all the
// existing tabs open on the page have been closed, since previously cached
// resources are updated in the background.
// To learn more about the benefits of this model and instructions on how to
// opt-in, read https://bit.ly/CRA-PWA
const isLocalhost = Boolean(
window.location.hostname === 'localhost' ||
// [::1] is the IPv6 localhost address.
window.location.hostname === '[::1]' ||
// 127.0.0.1/8 is considered localhost for IPv4.
window.location.hostname.match(
/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
)
);
export function register(config) {
if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
// The URL constructor is available in all browsers that support SW.
const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);
if (publicUrl.origin !== window.location.origin) {
// Our service worker won't work if PUBLIC_URL is on a different origin
// from what our page is served on. This might happen if a CDN is used to
// serve assets; see https://github.com/facebook/create-react-app/issues/2374
return;
}
window.addEventListener('load', () => {
const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;
if (isLocalhost) {
// This is running on localhost. Let's check if a service worker still exists or not.
checkValidServiceWorker(swUrl, config);
// Add some additional logging to localhost, pointing developers to the
// service worker/PWA documentation.
navigator.serviceWorker.ready.then(() => {
console.log(
'This web app is being served cache-first by a service ' +
'worker. To learn more, visit https://bit.ly/CRA-PWA'
);
});
} else {
// Is not localhost. Just register service worker
registerValidSW(swUrl, config);
}
});
}
}
function registerValidSW(swUrl, config) {
navigator.serviceWorker
.register(swUrl)
.then(registration => {
registration.onupdatefound = () => {
const installingWorker = registration.installing;
if (installingWorker == null) {
return;
}
installingWorker.onstatechange = () => {
if (installingWorker.state === 'installed') {
if (navigator.serviceWorker.controller) {
// At this point, the updated precached content has been fetched,
// but the previous service worker will still serve the older
// content until all client tabs are closed.
console.log(
'New content is available and will be used when all ' +
'tabs for this page are closed. See https://bit.ly/CRA-PWA.'
);
// Execute callback
if (config && config.onUpdate) {
config.onUpdate(registration);
}
} else {
// At this point, everything has been precached.
// It's the perfect time to display a
// "Content is cached for offline use." message.
console.log('Content is cached for offline use.');
// Execute callback
if (config && config.onSuccess) {
config.onSuccess(registration);
}
}
}
};
};
})
.catch(error => {
console.error('Error during service worker registration:', error);
});
}
function checkValidServiceWorker(swUrl, config) {
// Check if the service worker can be found. If it can't reload the page.
fetch(swUrl)
.then(response => {
// Ensure service worker exists, and that we really are getting a JS file.
const contentType = response.headers.get('content-type');
if (
response.status === 404 ||
(contentType != null && contentType.indexOf('javascript') === -1)
) {
// No service worker found. Probably a different app. Reload the page.
navigator.serviceWorker.ready.then(registration => {
registration.unregister().then(() => {
window.location.reload();
});
});
} else {
// Service worker found. Proceed as normal.
registerValidSW(swUrl, config);
}
})
.catch(() => {
console.log(
'No internet connection found. App is running in offline mode.'
);
});
}
export function unregister() {
if ('serviceWorker' in navigator) {
navigator.serviceWorker.ready.then(registration => {
registration.unregister();
});
}
}
@@ -1,54 +0,0 @@
/*
* Copyright 2020 SkillTree
*
* 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React from "react";
import Navbar from 'react-bootstrap/Navbar';
import Nav from "react-bootstrap/Nav";
import Button from "react-bootstrap/Button"
import { SkillsLevel } from '@skilltree/skills-client-react';
import {
NavLink
} from "react-router-dom";
const Navigation = () => {
const tmpStyle = {
position:'fixed',
zIndex:1100,
right:0,
left:0,
};
return (
<div style={tmpStyle}>
<Navbar bg="info" variant="dark">
<Navbar.Brand>React Integration Examples</Navbar.Brand>
<Navbar.Toggle target="nav-collapse"></Navbar.Toggle>
<Navbar.Collapse id="nav-collapse" is-nav="true">
<Nav>
<NavLink activeClassName="router-link-active" className="nav-link" to="/">Report Skill Events</NavLink>
<NavLink activeClassName="router-link-active" className="nav-link" to="/showSkills">User Display</NavLink>
</Nav>
</Navbar.Collapse>
<Button variant="primary">
<SkillsLevel />
</Button>
</Navbar>
</div>
);
};
export default Navigation;
@@ -1,112 +0,0 @@
/*
* Copyright 2020 SkillTree
*
* 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React from 'react';
import { SkillsReporter } from '@skilltree/skills-client-react';
import axios from 'axios';
const beautify = require('js-beautify').js;
let selectedSkillId = '';
const ReportSkill = () => {
const reportSkill = (skillId, resultContainer) => {
SkillsReporter.reportSkill(skillId)
.then((response) => {
document.querySelector(resultContainer).innerHTML = JSON.stringify(response, null, 2);
})
.catch((error) => {
console.error(error);
});
};
const sampleCode = () => {
return beautify(`SkillsReporter.reportSkill(this.skill)
.then((res) => {
this.reportResult = res;
});`, {indent_size: 2, indent_level: 1, end_with_newline: false})
};
const handleInputChange = (inputValue) => {
selectedSkillId = inputValue.target.value;
};
const [selectData, setSelectData] = React.useState([]);
React.useEffect(()=>{
axios.get("/api/skills")
.then((result) => {
setSelectData(result.data);
if (result.data && result.data.length > 0) {
selectedSkillId = result.data[0];
}
});
SkillsReporter.addSuccessHandler((result) => {
document.querySelector('#global-event-result-container').innerHTML = JSON.stringify(result, null, 2);
});
}, []);
const style = {
paddingTop: '55px'
};
return (
<div className="container-fluid" style={style}>
<div className="container">
<h2>Report Skills Examples</h2>
<div className="text-primary">Global Event Result:</div>
<div id="globalEventResultDiv" className="border rounded p-3 mb-5 bg-light">
<pre id="global-event-result-container" data-cy="globalEventResult"></pre>
</div>
<div>
<h5 className="text-info"><strong>Report Any Skill</strong></h5>
<div className="card card-body bg-light">
<pre className="m-0 sample-code">
<code className="javascript">{sampleCode()}</code></pre>
</div>
<div className="card card-body mt-3">
<div id="exampleDirectiveClickEvent">
<div className="float-left mr-3">
<select onChange={(event) => handleInputChange(event)} className="custom-select custom-select-m mb-3">
{selectData.map((skill)=>{
return <option key={skill} value={skill}>{skill}</option>
})}
</select>
</div>
<div className="float-left">
<button
className="btn btn-outline-primary"
onClick={() => reportSkill(selectedSkillId, '#report-result-container')}>
Report Skill
</button>
</div>
</div>
<hr />
<div className="text-primary">Result:</div>
<div className="border rounded p-3 bg-light">
<pre id="report-result-container"></pre>
</div>
</div>
</div>
<div className="mt-5"></div>
</div>
</div>
)
};
export default ReportSkill;
@@ -1,68 +0,0 @@
/*
* Copyright 2020 SkillTree
*
* 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React from 'react';
import Highlight from 'react-highlight';
import PropTypes from 'prop-types';
const beautify = require('js-beautify').js;
const beautifyHtml = require('js-beautify').html;
const SampleCode = ({options, selectedTheme}) => {
const sampleCode = () => {
const tags = beautifyHtml(`
<div id="myApp">
<SkillsDisplay options="${JSON.stringify(options)}" theme={selectedThemeObj.theme} />
</div>
`,{indent_size: 4, indent_level: 2, end_with_newline: false, "html.format.contentUnformatted": "", "html.format.unformatted": ""});
const js = beautify(`
import { SkillsDisplay } from '@skilltree/skills-client-react';
const selectedThemeObj = ${JSON.stringify(selectedTheme)};
const MyComponent = () => {
return (
placeholder
)
};`, {indent_size: 2, indent_level: 1, end_with_newline: false});
const replacedText = js.replace('placeholder', tags);
return replacedText;
};
return (
<div id="sample-code" className="row">
<div className="col-12">
<div className="mb-5 mt-5 card bg-light">
<h5 className=" card-header text-info">
<strong>Sample Code</strong>
</h5>
<div className="card-body py-0">
<Highlight className="javascript">
<pre><code className="javascript p-0 m-0">{sampleCode()}</code></pre>
</Highlight>
</div>
</div>
</div>
</div>
);
};
SampleCode.propTypes = {
options: PropTypes.object.isRequired,
selectedTheme: PropTypes.object.isRequired
};
export default React.memo(SampleCode);
@@ -1,139 +0,0 @@
/*
* Copyright 2020 SkillTree
*
* 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React from 'react';
import SkillsDisplayThemeFactory from './ThemeFactory.js';
import SampleCode from './SampleCode';
import { SkillsDisplay } from '@skilltree/skills-client-react';
import DropdownButton from "react-bootstrap/DropdownButton";
import Dropdown from 'react-bootstrap/Dropdown';
import Button from 'react-bootstrap/Button';
import { useHistory } from "react-router-dom";
const getThemes = () => {
return Object.values(SkillsDisplayThemeFactory);
};
const findTheme = (name) => {
return getThemes().find((item) => item.name === name);
};
const scrollToRef = (ref) => window.scrollTo(0, ref.current.offsetTop);
function usePrevious(value){
const ref = React.useRef();
React.useEffect(() => {
ref.current = value;
});
return ref.current;
}
const ShowSkill = () => {
const history = useHistory();
const getUrlParam = (name) => {
const urlSearchParams = new URLSearchParams(history.location.search);
return urlSearchParams.get(name);
};
const [selectedTheme, saveSelectedTheme] = React.useState(() => {
const urlTheme = getUrlParam("themeName");
if(urlTheme) {
return findTheme(urlTheme);
}
return getThemes()[0];
});
const [isSummaryOnly, setIsSummaryOnly] = React.useState(() => {
const urlSummaryOnly = getUrlParam('isSummaryOnly');
if ( urlSummaryOnly ) {
return JSON.parse(urlSummaryOnly)
}
return false;
});
const [skillsVersion] = React.useState(() => {
const skillsVersion = getUrlParam("skillsVersion");
if(skillsVersion) {
return skillsVersion;
}
return '';
});
const [options, setOptions] = React.useState({ isSummaryOnly: isSummaryOnly, autoScrollStrategy: 'top-offset', scrollTopOffset: 110 });
const previousIsSummaryOnly = usePrevious(isSummaryOnly);
const previousSelectedTheme = usePrevious(selectedTheme);
const previousSkillsVersion = usePrevious(skillsVersion);
React.useEffect(() => {
const saveUrlParam = (paramsObj) => {
let params = '?';
Object.keys(paramsObj).forEach((key) =>{
params+=`${key}=${paramsObj[key]}&`;
});
params = params.replace(/&$/,'');
history.push({pathname:history.location.pathname, search: params});
};
if (isSummaryOnly !== previousIsSummaryOnly || selectedTheme !== previousSelectedTheme) {
saveUrlParam({'isSummaryOnly': isSummaryOnly, 'themeName': selectedTheme.name, 'skillsVersion': skillsVersion});
}
}, [isSummaryOnly, selectedTheme, skillsVersion, previousIsSummaryOnly, previousSelectedTheme, previousSkillsVersion, history]);
const sampleCodeRef = React.createRef();
const executeScroll = () => scrollToRef(sampleCodeRef);
const style = {
paddingTop: '55px'
};
return (
<div className="container" style={style}>
<div className="d-flex align-items-center">
<DropdownButton
id="dropdown-1"
className="mb-3"
title="Theme"
variant="Primary">
{ getThemes().map ( (theme) => {
return <Dropdown.Item
onClick={() => saveSelectedTheme(theme)}
key={theme.name}
eventKey={theme.name} {... (selectedTheme.name === theme.name ? {disabled:true} : "")}>
{theme.name}
</Dropdown.Item>
})}
</DropdownButton>
<Button variant={isSummaryOnly ? 'primary' : 'outline-primary'}
onClick={() => { setIsSummaryOnly(!isSummaryOnly);
setOptions({isSummaryOnly:!isSummaryOnly,autoScrollStrategy: 'top-offset', scrollTopOffset: 110}) }}>Summary Only</Button>
<Button variant="link" onClick={executeScroll}>Show Source</Button>
</div>
<div className="border rounded">
<SkillsDisplay options={options} theme={selectedTheme.theme} version={skillsVersion}/>
</div>
<div ref={sampleCodeRef}>
<SampleCode options={options} selectedTheme={selectedTheme}/>
</div>
</div>
);
};
export default ShowSkill;
@@ -1,50 +0,0 @@
/*
* Copyright 2020 SkillTree
*
* 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export default {
default: {
name: 'Bright (default)',
theme: {
backgroundColor: '#f7f7f7',
},
},
darkBlue: {
name: 'Dark Blue',
theme: {
backgroundColor: '#626d7d',
pageTitleTextColor: 'white',
textSecondaryColor: 'white',
textPrimaryColor: 'white',
stars: {
unearnedColor: '#787886',
earnedColor: 'gold',
},
progressIndicators: {
beforeTodayColor: '#3e4d44',
earnedTodayColor: '#667da4',
completeColor: '#59ad52',
incompleteColor: '#cdcdcd',
},
charts: {
axisLabelColor: 'white',
},
tiles: {
backgroundColor:'#152E4d',
watermarkIconColor: '#a6c5f7',
},
graphLegendBorderColor: '1px solid grey',
},
}
}
@@ -1,8 +0,0 @@
> 0.2%
not dead
ff >= 50
chrome >= 70
safari >= 9
opera >= 60
edge >= 16
not ie <= 8
@@ -1 +0,0 @@
package-lock=false
@@ -1,45 +0,0 @@
<!---
Copyright 2020 SkillTree
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
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
# skills-example-client-vue
## Project setup
```
npm install
```
### Compiles and hot-reloads for development
```
npm run serve
```
### Compiles and minifies for production
```
npm run build
```
### Run your tests
```
npm run test
```
### Lints and fixes files
```
npm run lint
```
### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).
@@ -1,6 +0,0 @@
module.exports = {
presets: [
['@vue/app', { useBuiltIns: 'entry' }],
]
}
@@ -1,62 +0,0 @@
{
"name": "skills-int-client-vue",
"version": "2.0.1",
"license": "Apache-2.0",
"description": "SkillTree Client Lib Integration Tests - Vue",
"scripts": {
"serve": "vue-cli-service serve",
"licenseDepCheck": "license-checker --production --onlyAllow='MIT;ISC;BSD-3-Clause;Apache-2.0' --summary",
"licenseHeaderCheck": "license-check-and-add check -f '../license-add/license-add-config.json'",
"licenseHeaderAdd": "license-check-and-add add -f ../license-add/license-add-config.json",
"licenseCheck": "npm run licenseHeaderCheck && npm run licenseDepCheck ",
"build": "npm run licenseCheck && vue-cli-service build",
"lint": "vue-cli-service lint"
},
"dependencies": {
"@skilltree/skills-client-vue": "2.0.1",
"axios": "0.19.0",
"bootstrap": "4.3.1",
"bootstrap-vue": "2.0.2",
"core-js": "^3.2.1",
"highlightjs": "9.12.0",
"js-beautify": "1.10.2",
"vue": "2.6.10",
"vue-highlightjs": "1.3.3",
"vue-multiselect": "2.1.6",
"vue-router": "3.1.3",
"vue-scrollto": "2.17.1",
"vuex": "3.1.1"
},
"devDependencies": {
"@vue/cli-plugin-babel": "3.11.0",
"@vue/cli-plugin-eslint": "3.11.0",
"@vue/cli-service": "3.11.0",
"babel-eslint": "10.0.3",
"eslint": "6.5.1",
"eslint-plugin-vue": "5.2.3",
"license-check-and-add": "3.0.4",
"license-checker": "25.0.1",
"sass": "1.23.0",
"sass-loader": "8.0.0",
"vue-template-compiler": "2.6.10"
},
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/essential",
"eslint:recommended"
],
"rules": {},
"parserOptions": {
"parser": "babel-eslint"
}
},
"postcss": {
"plugins": {
"autoprefixer": {}
}
}
}
@@ -1,75 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>skills</groupId>
<artifactId>skills-client-integration</artifactId>
<version>2.0.0-SNAPSHOT</version>
</parent>
<artifactId>skills-int-client-vue</artifactId>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>1.6</version>
<configuration>
<installDirectory>target</installDirectory>
</configuration>
<executions>
<execution>
<id>install node and npm</id>
<goals>
<goal>install-node-and-npm</goal>
</goals>
<configuration>
<nodeVersion>${node.version}</nodeVersion>
</configuration>
</execution>
<execution>
<id>npm install</id>
<goals>
<goal>npm</goal>
</goals>
<phase>generate-resources</phase>
<configuration>
<arguments>install</arguments>
</configuration>
</execution>
<execution>
<id>npm run build</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>run build</arguments>
</configuration>
</execution>
<!--TODO: uncomment when we have at least 1 unit test-->
<!--<execution>-->
<!--<id>npm run test</id>-->
<!--<goals>-->
<!--<goal>npm</goal>-->
<!--</goals>-->
<!--<phase>test</phase>-->
<!--<configuration>-->
<!--<arguments>run unit</arguments>-->
<!--</configuration>-->
<!--</execution>-->
</executions>
</plugin>
</plugins>
</build>
</project>
@@ -1,32 +0,0 @@
<!--
Copyright 2020 SkillTree
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
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>skills.ico">
<title>Skills Examples - Vue.js</title>
</head>
<body>
<noscript>
<strong>We're sorry but skills-example-client-vue doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

@@ -1,65 +0,0 @@
/*
Copyright 2020 SkillTree
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
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
<template>
<div id="app">
<div>
<customizable-header></customizable-header>
<navigation/>
<b-container fluid class="mt-3">
<router-view/>
</b-container>
<skills-footer/>
<customizable-footer></customizable-footer>
</div>
</div>
</template>
<script>
import Navigation from "./components/Navigation";
import SkillsFooter from "./components/SkillsFooter";
import CustomizableHeader from "./components/CustomizableHeader"
import CustomizableFooter from "./components/CustomizableFooter"
export default {
name: 'app',
components: {
SkillsFooter,
Navigation,
CustomizableHeader,
CustomizableFooter,
},
}
</script>
<style>
@import "~bootstrap/dist/css/bootstrap.css";
@import "~bootstrap-vue/dist/bootstrap-vue.css";
@import "~vue-multiselect/dist/vue-multiselect.min.css";
@import "~highlight.js/styles/github.css";
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.btn.disabled {
cursor: not-allowed;
}
</style>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

@@ -1,81 +0,0 @@
/*
Copyright 2020 SkillTree
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
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
<template>
<code-example-layout :title="title" :sample-code="sampleCode">
<div slot="code">
<component :is="this.componentName" v-on:reporter-error="onReporterError" v-on:reporter-response="onReporterResponse"></component>
</div>
<span slot="res">{{reportResult}}</span>
</code-example-layout>
</template>
<script>
import Vue from 'vue';
import CodeExampleLayout from "./CodeExampleLayout";
export default {
name: "CodeExample",
components: {CodeExampleLayout},
props: {
title: String,
sampleCode: String,
},
data() {
return {
reportResult: null,
componentName: '',
};
},
mounted() {
this.componentName = this.title.replace( /\s/g, '');
Vue.component(this.componentName, {
template: `<div class="code-example">${this.sampleCode}</div>`,
methods: {
onReporterResponse(response) {
this.$emit('reporter-response', response);
},
onReporterError(error) {
this.$emit('reporter-error', error);
},
},
});
},
methods: {
onReporterResponse(response) {
this.reportResult = response.detail;
},
onReporterError(response) {
this.reportResult = response.detail;
},
},
}
</script>
<style lang="scss" >
@import "../../node_modules/bootstrap/scss/bootstrap";
.code-example button {
@extend .btn;
@extend .btn-outline-primary;
}
.code-example input {
@extend .form-control;
}
</style>
@@ -1,51 +0,0 @@
/*
Copyright 2020 SkillTree
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
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
<template>
<div>
<h5 class="text-info"><strong>{{ title }}</strong></h5>
<div class="card card-body bg-light">
<pre v-highlightjs="sampleCode"><code :class="codeType"></code></pre>
</div>
<div class="card card-body mt-3" :id="title.replace(/ /gi,'').replace(/-/g,'')">
<div id="exampleDirectiveClickEvent">
<slot name="code"/>
</div>
<hr>
<div class="text-primary">Result:</div>
<div class="border rounded p-3 bg-light">
<pre><slot name="res"/></pre>
</div>
</div>
</div>
</template>
<script>
export default {
name: "CodeExampleLayout",
props: {
title: String,
sampleCode: String,
codeType: {
type: String,
default: 'html',
},
},
}
</script>
<style scoped>
</style>
@@ -1,29 +0,0 @@
/*
Copyright 2020 SkillTree
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
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
<template>
<!-- This footer will appear at the top of every page, update this component to customize for your app -->
<span></span>
</template>
<script>
export default {
name: 'CustomizableFooter',
};
</script>
<style scoped>
</style>
@@ -1,29 +0,0 @@
/*
Copyright 2020 SkillTree
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
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
<template>
<!-- This header will appear on the top of every page, update this component to customize for your app -->
<span></span>
</template>
<script>
export default {
name: 'CustomizableHeader',
};
</script>
<style scoped>
</style>
@@ -1,73 +0,0 @@
/*
Copyright 2020 SkillTree
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
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
<template>
<div class="hello">
<h1>{{ msg }}</h1>
<p>
For a guide and recipes on how to configure / customize this project,<br>
check out the
<a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a>.
</p>
<h3>Installed CLI Plugins</h3>
<ul>
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a></li>
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint" target="_blank" rel="noopener">eslint</a></li>
</ul>
<h3>Essential Links</h3>
<ul>
<li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li>
<li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li>
<li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li>
<li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li>
<li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li>
</ul>
<h3>Ecosystem</h3>
<ul>
<li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li>
<li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li>
<li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li>
<li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li>
<li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li>
</ul>
</div>
</template>
<script>
export default {
name: 'HelloWorld',
props: {
msg: String
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {
margin: 40px 0 0;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>
@@ -1,58 +0,0 @@
/*
Copyright 2020 SkillTree
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
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
<template>
<div>
<b-navbar type="dark" variant="info">
<b-navbar-brand href="#">Vue.js Integration Examples</b-navbar-brand>
<b-navbar-toggle target="nav-collapse"></b-navbar-toggle>
<b-collapse id="nav-collapse" is-nav>
<b-navbar-nav>
<b-nav-item href="#" to="/">Report Skill Events</b-nav-item>
<b-nav-item href="#" to="/showSkills">User Display</b-nav-item>
</b-navbar-nav>
</b-collapse>
<button
@click="$router.push('/showSkills')"
class="btn btn-primary"><skills-level /></button>
</b-navbar>
</div>
</template>
<script>
import { SkillsLevel } from '@skilltree/skills-client-vue';
export default {
components: {
SkillsLevel,
},
data() {
return {
token: '',
version: 0,
projectId: 'movies',
serviceUrl: 'http://localhost:8080',
authenticationUrl: 'http://localhost:8090/api/users/user1/token',
};
},
}
</script>
<style scoped>
</style>
@@ -1,93 +0,0 @@
/*
Copyright 2020 SkillTree
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
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
<template>
<div>
<code-example-layout :title="title" :sample-code="sampleCode" code-type="javascript">
<div slot="code">
<multiselect v-model="skill" :options="available" placeholder="Select a skill id" :taggable="true" @tag="addTag"/>
<button
:disabled="!hasSelectedSkill"
:title="buttonTitle"
:class="!hasSelectedSkill ? 'disabled' : ''"
class="btn btn-outline-primary mt-2"
type="button"
@click="reportSkill">Report Skill</button>
</div>
<span slot="res">{{reportResult}}</span>
</code-example-layout>
</div>
</template>
<script>
import axios from 'axios';
import { SkillsReporter } from '@skilltree/skills-client-vue';
import CodeExampleLayout from "./CodeExampleLayout";
const beautify = require('js-beautify').js;
export default {
name: "ReportAnySkill",
components: {CodeExampleLayout},
data() {
return {
title: 'Pure JS - Report Any Skill',
reportResult: '',
sampleCode: beautify(
`SkillsReporter.reportSkill(this.skill)
.then((res) => {
this.reportResult = res;
});`, { indent_size: 2, indent_level: 1, end_with_newline: false }),
skill: '',
available: [],
};
},
computed: {
hasSelectedSkill() {
return this.skill && this.skill !== '';
},
buttonTitle() {
return this.hasSelectedSkill ? '' : 'Select a Skill to report from the dropdown';
},
},
mounted() {
axios.get("/api/skills")
.then((result) => {
this.available = result.data;
});
},
methods: {
reportSkill() {
SkillsReporter.reportSkill(this.skill)
.then((res) => {
this.reportResult = res;
})
.catch((res) => {
this.reportResult = res;
});
},
addTag(newTag) {
this.available.push(newTag);
this.skill = newTag;
}
},
}
</script>
<style scoped>
</style>
@@ -1,80 +0,0 @@
/*
Copyright 2020 SkillTree
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
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
<template>
<div class="container">
<h2>Report Skills Examples</h2>
<div class="text-primary">Global Event Result:</div>
<div id="globalEventResultDiv" class="border rounded p-3 bg-light">
<pre data-cy="globalEventResult">{{ globalEventResult }}</pre>
</div>
<code-example
v-for="example in examples"
v-bind:key="example.title"
class="mt-5"
:title="example.title"
:sample-code="example.code"
/>
<report-any-skill class="mt-5"/>
<div class="mt-5"></div>
</div>
</template>
<script>
import CodeExample from "./CodeExample";
import ReportAnySkill from "./ReportAnySkill";
import {SkillsReporter} from "@skilltree/skills-client-vue";
export default {
name: "ReportSkills",
components: {ReportAnySkill, CodeExample},
data() {
return {
examples: [
{
title: 'Skills Directive - Click Event',
code: '<button \n v-skills="\'IronMan\'" \n @skills-report-success="onReporterResponse">\n Report Skill\n</button>',
},
{
title: 'Skills Directive - Input Event',
code: '<input \n type="text" \n v-skills:input="\'Thor\'" \n @skills-report-success="onReporterResponse"/>',
},
{
title: 'Skills Directive - Error with Button',
code: '<button \n v-skills="\'DoesNotExist\'" \n @skills-report-success="onReporterResponse" \n @skills-report-error="onReporterError">\n Report Skill\n</button>',
},
{
title: 'Skills Directive - Error with Input',
code: '<input \n type="text" \n v-skills:input="\'DoesNotExist\'" \n @skills-report-success="onReporterResponse" \n @skills-report-error="onReporterError"/>',
},
],
globalEventResult: ''
};
},
created() {
SkillsReporter.addSuccessHandler(this.update);
},
methods: {
update(result) {
this.globalEventResult = result;
}
},
}
</script>
<style scoped></style>
@@ -1,36 +0,0 @@
/*
Copyright 2020 SkillTree
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
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
<template>
<footer class="text-muted bg-light py-5">
<div class="container">
<p class="float-right">
<a href="#">Back to top</a>
</p>
<p>Vue.js Examples Guide</p>
<p></p>
</div>
</footer>
</template>
<script>
export default {
name: "SkillsFooter",
}
</script>
<style scoped>
</style>
@@ -1,174 +0,0 @@
/*
Copyright 2020 SkillTree
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
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
<template>
<div class="container">
<div class="d-flex align-items-center">
<b-dropdown
id="dropdown-1"
class="mb-3"
text="Change Theme"
variant="outline-primary">
<b-dropdown-item
v-for="themeItem in themes"
@click="setIsThemeUrlParam(themeItem)"
:key="themeItem.name"
:active="selectedTheme.name === themeItem.name">
{{ themeItem.name }}
</b-dropdown-item>
</b-dropdown>
<b-form-checkbox class="d-inline-block ml-3 border-right pr-2"
v-model="displayOptions.isSummaryOnly"
switch>
Summary Only
</b-form-checkbox>
<b-link
class="ml-2"
href="javascript:void"
v-scroll-to="'#sample-code'"
@click="showSampleCode = true">Show Source</b-link>
</div>
<div class="border rounded">
<skills-display
v-if="selectedTheme"
:options="displayOptions"
:version="version"
:theme="selectedTheme.theme"/>
</div>
<div
v-if="selectedTheme && showSampleCode"
id="sample-code"
class="row">
<div class="col-12">
<div class="mb-5 mt-5 card bg-light">
<h5 class=" card-header text-info">
<strong>Sample Code</strong>
</h5>
<div class="card-body py-0">
<!-- // keep <template> and <script> tags separate, as one requires html highlighting and other javascript-->
<pre v-highlightjs class="m-0 p-0">
<code class="html m-0 p-0">
&lt;template&gt;
&lt;skills-level /&gt; &lt;!-- You can display the user's current Level using the SkillsLevel component --&gt;
&lt;skills-display :theme="selectedTheme" {{ this.displayOptions.isSummaryOnly ? ':options="displayOptions"' : '' }}/&gt;
&lt;/template&gt;
&lt;script&gt;</code></pre><pre v-highlightjs class="m-0 p-0">
<code class="javascript p-0 m-0">{{ sampleCode }}
&lt;/script&gt;
</code>
</pre>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import { SkillsDisplay } from '@skilltree/skills-client-vue';
import SkillsDisplayThemeFactory from './ThemeFactory.js';
import Vue from 'vue';
import VueScrollTo from 'vue-scrollto';
const beautify = require('js-beautify').js;
Vue.use(VueScrollTo, {
container: "body",
duration: 1000,
easing: "ease",
offset: 0,
force: true,
cancelable: true,
onStart: false,
onDone: false,
onCancel: false,
x: false,
y: true,
});
export default {
components: {
SkillsDisplay,
},
data() {
return {
token: '',
version: this.$route.query.skillsVersion ? JSON.parse(this.$route.query.skillsVersion) : 1000,
displayOptions: {
autoScrollStrategy: 'top-of-page',
isSummaryOnly: this.$route.query.isSummaryOnly ? JSON.parse(this.$route.query.isSummaryOnly) : false,
},
showSampleCode: false,
themes: this.getThemes(),
selectedTheme: this.$route.query.themeName ? this.findTheme(this.$route.query.themeName) : this.getThemes()[0],
};
},
computed: {
sampleCode() {
return beautify(`import { SkillsDisplay, SkillsLevel } from '@skilltree/skills-client-vue';
export default {
components: {
SkillsDisplay,
},
data() {
return { ${this.displayOptions.isSummaryOnly ? '\ndisplayOptions: { isSummaryOnly: true, },' : ''}
selectedTheme: ${JSON.stringify(this.selectedTheme)}
};
},
};`, {indent_size: 2, indent_level: 1, end_with_newline: false});
},
},
watch: {
'displayOptions.isSummaryOnly'() {
this.setIsSummaryOnlyUrlParam();
},
},
methods: {
getThemes() {
return Object.values(SkillsDisplayThemeFactory);
},
refreshPage() {
setTimeout(() => {
document.location.reload();
}, 250);
},
setIsThemeUrlParam(theme) {
this.$router.push({query: {themeName: theme.name, isSummaryOnly: this.displayOptions.isSummaryOnly}});
this.refreshPage();
},
setIsSummaryOnlyUrlParam() {
this.$router.push({
query: {
themeName: this.selectedTheme.name,
isSummaryOnly: this.displayOptions.isSummaryOnly
}
});
this.refreshPage();
},
findTheme(name) {
return this.getThemes().find((item) => item.name === name);
},
},
}
</script>
@@ -1,50 +0,0 @@
/*
* Copyright 2020 SkillTree
*
* 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export default {
default: {
name: 'Bright (default)',
theme: {
backgroundColor: '#f7f7f7',
},
},
darkBlue: {
name: 'Dark Blue',
theme: {
backgroundColor: '#626d7d',
pageTitleTextColor: 'white',
textSecondaryColor: 'white',
textPrimaryColor: 'white',
stars: {
unearnedColor: '#787886',
earnedColor: 'gold',
},
progressIndicators: {
beforeTodayColor: '#3e4d44',
earnedTodayColor: '#667da4',
completeColor: '#59ad52',
incompleteColor: '#cdcdcd',
},
charts: {
axisLabelColor: 'white',
},
tiles: {
backgroundColor:'#152E4d',
watermarkIconColor: '#a6c5f7',
},
graphLegendBorderColor: '1px solid grey',
},
}
}
@@ -1,42 +0,0 @@
/*
* Copyright 2020 SkillTree
*
* 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Vue from 'vue';
import BootstrapVue from 'bootstrap-vue';
import Multiselect from 'vue-multiselect';
import App from './App.vue';
import router from './router';
import axios from 'axios';
import { SkillsDirective, SkillsConfiguration } from '@skilltree/skills-client-vue';
import VueHighlightJS from 'vue-highlightjs'
Vue.config.productionTip = false
Vue.component('multiselect', Multiselect);
Vue.use(BootstrapVue);
Vue.use(SkillsDirective);
Vue.use(VueHighlightJS)
axios.get("/api/config")
.then((result) => {
SkillsConfiguration.configure(result.data);
})
.then(() => {
new Vue({
render: h => h(App),
router,
}).$mount('#app');
});
@@ -1,39 +0,0 @@
/*
* Copyright 2020 SkillTree
*
* 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Vue from 'vue';
import Router from 'vue-router';
import ReportSkills from './components/ReportSkills';
import ShowSkills from './components/skillsDisplay/ShowSkills';
Vue.use(Router);
const router = new Router({
base: 'vuejs',
routes: [
{
path: '/',
name: 'ReportSkills',
component: ReportSkills,
},
{
path: '/showSkills',
name: 'ShowSkills',
component: ShowSkills,
},
]
});
export default router;
@@ -1,91 +0,0 @@
const path = require('path');
const fs = require('fs');
const resolve = dir => path.join(__dirname, dir);
const getTarget = () => {
let target = 'http://localhost:8090';
const proxySslKeyLocation = process.env.WEBPACK_DEV_SERVER_PROXY_TABLE_SSL_KEY_PATH;
const proxyCertKeyLocation = process.env.WEBPACK_DEV_SERVER_PROXY_TABLE_SSL_CERT_PATH;
if (fs.existsSync(proxySslKeyLocation) && fs.existsSync(proxyCertKeyLocation)) {
target = {
host: 'localhost',
port: 9443,
key: fs.readFileSync(proxySslKeyLocation),
cert: fs.readFileSync(proxyCertKeyLocation),
protocol: 'https:'
};
}
return target;
};
const proxyConf = {
target: getTarget(),
secure: false,
changeOrigin: true,
logLevel: 'debug',
};
// absolute paths to all symlinked modules inside `nodeModulesPath`
// adapted from https://github.com/webpack/webpack/issues/811#issuecomment-405199263
const findLinkedModules = (nodeModulesPath) => {
const modules = []
fs.readdirSync(nodeModulesPath).forEach(dirname => {
const modulePath = path.resolve(nodeModulesPath, dirname)
const stat = fs.lstatSync(modulePath)
if (dirname.startsWith('.')) {
// not a module or scope, ignore
} else if (dirname.startsWith('@')) {
// scoped modules
modules.push(...findLinkedModules(modulePath))
} else if (stat.isSymbolicLink()) {
const realPath = fs.realpathSync(modulePath)
const realModulePath = path.resolve(realPath, 'node_modules')
modules.push(realModulePath)
}
})
return modules
};
module.exports = {
devServer: {
host: 'localhost',
port: 8091,
overlay: true,
proxy: {
'/api': proxyConf,
},
},
configureWebpack: {
resolve: {
alias: {
'@$': resolve('src'),
},
// work with npm link
// see https://github.com/webpack/webpack/issues/985
// see https://github.com/vuejs-templates/webpack/pull/688
symlinks: false,
modules: [
// provide absolute path to the main node_modules,
// to avoid webpack searching around and getting confused
// see https://webpack.js.org/configuration/resolve/#resolve-modules
path.resolve('node_modules'),
// include linked node_modules as fallback, in case the deps haven't
// yet propagated to the main node_modules
...findLinkedModules(path.resolve('node_modules')),
],
},
devtool: 'source-map',
},
publicPath: '/vuejs/',
outputDir: undefined,
assetsDir: 'static',
runtimeCompiler: true,
productionSourceMap: undefined,
parallel: undefined,
css: undefined,
};
@@ -0,0 +1,21 @@
const { defineConfig } = require('cypress')
module.exports = defineConfig({
chromeWebSecurity: false,
defaultCommandTimeout: 10000,
projectId: '3yas4t',
video: true,
retries: {
runMode: 2,
openMode: 0,
},
e2e: {
// We've imported your old cypress plugins here.
// You may want to clean this up later by importing these.
setupNodeEvents(on, config) {
return require('./cypress/plugins/index.js')(on, config)
},
baseUrl: 'http://localhost:8090',
specPattern: 'cypress/e2e/**/*.{js,jsx,ts,tsx}',
},
})
@@ -1,5 +0,0 @@
{
"baseUrl": "http://localhost:8090",
"chromeWebSecurity": false,
"defaultCommandTimeout": 10000
}
@@ -0,0 +1,53 @@
/*
* Copyright 2025 SkillTree
*
* 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var semver = require('semver');
export default {
versionLaterThan (lib, minVersion){
const versionToCompare = Cypress.env(lib);
return this.laterThanMinVersion(minVersion, versionToCompare);
},
skillsClientJSVersionLaterThan(minVersion) {
const versionToCompare = Cypress.env('skills-client-js-version')
return this.laterThanMinVersion(minVersion, versionToCompare);
},
skillsServiceVersionLaterThan(minVersion) {
const versionToCompare = Cypress.env('skills-service.minVersion');
return this.laterThanMinVersion(minVersion, versionToCompare);
},
laterThanMinVersion(minVersion, currentVersion) {
if (!currentVersion) {
return true;
}
const shouldSkip = semver.lt(currentVersion, minVersion);
return !shouldSkip;
},
laterThan_3_1_0() {
return this.skillsServiceVersionLaterThan('3.1.0');
},
laterThan_1_4_0() {
return this.skillsServiceVersionLaterThan('1.4.0');
},
laterThan_1_11_1() {
return this.skillsServiceVersionLaterThan('1.11.1');
},
noThemeBackground() {
return 'rgb(255, 255, 255)';
},
rankDetailsTitle() {
return this.laterThan_1_11_1() ? 'My Rank' : 'Rank Overview'
},
}
@@ -0,0 +1,49 @@
/*
* Copyright 2025 SkillTree
*
* 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Utils from "./Utils";
import selectors from "../support/selectors";
context("Configuration Disabled Tests", () => {
it('export user transcript', () => {
cy.onlyOn(Utils.skillsClientJSVersionLaterThan('3.6.0'))
cy.createDefaultTinyProject('proj1')
// visit client display
cy.intercept('**/public/status', cy.spy().as('getStatus'))
cy.intercept('POST', '**/api/projects/proj1/skillsClientVersion', cy.spy().as('reportClientVersion'))
cy.intercept('**/api/projects/proj1/level', cy.spy().as('getLevel'))
cy.intercept('**/skills-websocket/info**', cy.spy().as('initWebsockets'))
cy.intercept('POST', '** /api/projects/proj1/skills/someId', cy.spy().as('reportSkillId'))
cy.intercept('/api/projects/proj1/summary', cy.spy().as('getProjSummary'))
cy.visit('/native/disabledConfig.html');
cy.wait(5000)
cy.get('@getStatus').should('not.have.been.called');
cy.get('@reportClientVersion').should('not.have.been.called');
cy.get('@getLevel').should('not.have.been.called');
cy.get('@initWebsockets').should('not.have.been.called');
cy.get('[data-cy="levelComponentRes"]').contains('Level: []')
cy.get('[data-cy="skillsDisplayRes"] #skills-client-display').should('be.empty')
cy.get('@getProjSummary').should('not.have.been.called');
cy.get('[data-cy="reportSkillButton"]').click()
cy.wait(3000)
cy.get('@reportSkillId').should('not.have.been.called');
});
});
@@ -0,0 +1,105 @@
/*
* Copyright 2025 SkillTree
*
* 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Utils from "./Utils";
import selectors from "../support/selectors";
const homePage = '/native/index.html'
context("Global Events Tests", () => {
it("global event show correct results", () => {
cy.createDefaultProject();
const sendEventViaDropdownId = "#exampleDirectiveClickEvent";
Cypress.Commands.add("clickSubmit", () => {
cy.get(`${sendEventViaDropdownId} .btn`).click();
});
cy.visitHomePage(homePage);
cy.clickSubmit();
cy.get('pre[data-cy=globalEventResult]').contains('"skillId": "IronMan"')
cy.get('pre[data-cy=globalEventResult]').contains('"pointsEarned": 50')
cy.get('pre[data-cy=globalEventResult]').contains('"skillApplied": true')
cy.get('pre[data-cy=globalEventResult]').contains(/completed": [[][^]*"type": "Overall",[^]\s*"level": 1/)
});
it("global event show correct results (skills reported directly to backend endpoint)", () => {
cy.createDefaultProject();
cy.visitHomePage(homePage);
cy.reportSkillForUser("IronMan", Cypress.env('proxyUser'));
cy.get('pre[data-cy=globalEventResult]').should('be.visible')
cy.get('pre[data-cy=globalEventResult]').contains('"skillId": "IronMan"')
cy.get('pre[data-cy=globalEventResult]').contains('"pointsEarned": 50')
cy.get('pre[data-cy=globalEventResult]').contains('"skillApplied": true')
cy.get('pre[data-cy=globalEventResult]').contains(/completed": [[][^]*"type": "Overall",[^]\s*"level": 1/)
});
it('global event does not update when skill reported for a different project', () => {
cy.createDefaultProject()
cy.createDefaultTinyProject('proj2')
cy.visitHomePage(homePage);
cy.reportSkillForUser('IronMan', Cypress.env('proxyUser'), 'proj2')
cy.get('pre[data-cy=globalEventResult]').should('be.empty');
})
it('global event is not reported when skill is not applied (skill reported directly to backend endpoint)', () => {
cy.createDefaultProject()
cy.reportSkillForUser('IronMan', Cypress.env('proxyUser'))
cy.visitHomePage(homePage);
cy.reportSkillForUser('IronMan', Cypress.env('proxyUser'))
cy.get('[data-cy=globalEventResult]').should('be.empty');
})
it('global event is not reported when skill is not applied', () => {
cy.createDefaultProject()
cy.reportSkillForUser('IronMan', Cypress.env('proxyUser'))
cy.visitHomePage(homePage);
const sendEventViaDropdownId = "#exampleDirectiveClickEvent";
Cypress.Commands.add("clickSubmit", () => {
cy.get(`${sendEventViaDropdownId} .btn`).click();
});
cy.get('[type="checkbox"]').uncheck()
cy.clickSubmit()
cy.get('pre[data-cy=globalEventResult]').should('be.empty');
})
it('global event is reported even when skill is not applied when notifyIfSkillNotApplied=true ', () => {
cy.createDefaultProject()
cy.reportSkillForUser('IronMan', Cypress.env('proxyUser'))
const sendEventViaDropdownId = "#exampleDirectiveClickEvent";
Cypress.Commands.add("clickSubmit", () => {
cy.get(`${sendEventViaDropdownId} .btn`).click();
});
cy.visitHomePage(homePage);
cy.get('[type="checkbox"]').check()
cy.clickSubmit()
cy.get('pre[data-cy=globalEventResult]').contains('"skillId": "IronMan"')
cy.get('pre[data-cy=globalEventResult]').contains('"pointsEarned": 0')
cy.get('pre[data-cy=globalEventResult]').contains('"skillApplied": false')
cy.get('pre[data-cy=globalEventResult]').contains('"explanation": "This skill reached its maximum points"')
})
});
@@ -0,0 +1,213 @@
/*
* Copyright 2025 SkillTree
*
* 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Utils from "./Utils";
import selectors from "../support/selectors";
const homePage = '/native/index.html'
context("Skills Display Tests", () => {
it("skill display", () => {
cy.createDefaultTinyProject();
cy.intercept(Cypress.env('tokenUrl'))
.as("getToken");
cy.backendPost("/api/projects/proj1/skills/Thor", {
userId: Cypress.env('proxyUser'),
timestamp: Date.now()
});
cy.visitSkillsDisplay();
cy.wrapIframe().contains('My Level')
cy.wrapIframe().contains('50 Points earned Today')
cy.wrapIframe().contains('Subject 0')
// verify that there is no background set
// cypress always validates against rgb
cy.wrapIframe().find('[data-cy="skillsTitle"]')
.should('have.css', 'background-color').and('equal', Utils.noThemeBackground());
});
it("skill display - default options", () => {
cy.createDefaultTinyProject();
cy.intercept(Cypress.env('tokenUrl'))
.as("getToken");
cy.backendPost("/api/projects/proj1/skills/Thor", {
userId: Cypress.env('proxyUser'),
timestamp: Date.now()
});
cy.visit("/native/clientDisplayDefaultOptions.html");
cy.wrapIframe().contains('My Level')
cy.wrapIframe().contains('50 Points earned Today')
cy.wrapIframe().contains('Subject 0')
cy.wrapIframe().find(selectors.firstSubjectTileBtn)
// verify that there is no background set
// cypress always validates against rgb
cy.wrapIframe().find('[data-cy="skillsTitle"]')
.should('have.css', 'background-color').and('equal', Utils.noThemeBackground());
});
it("skill display - summary only", () => {
cy.createDefaultTinyProject();
cy.intercept(Cypress.env('tokenUrl'))
.as("getToken");
cy.backendPost("/api/projects/proj1/skills/Thor", {
userId: Cypress.env('proxyUser'),
timestamp: Date.now()
});
cy.visitSkillsDisplay("?isSummaryOnly=true");
cy.wrapIframe().contains('My Level')
cy.wrapIframe().contains('50 Points earned Today')
cy.wrapIframe().find('[data-cy="subjectTile-subj0"] [data-cy="subjectTileBtn"]').should('not.exist')
// verify that there is no background set
// cypress always validates against rgb
cy.wrapIframe().find('[data-cy="skillsTitle"]')
.should('have.css', 'background-color').and('equal', Utils.noThemeBackground());
});
it("skill display - theme", () => {
cy.createDefaultTinyProject();
cy.intercept(Cypress.env('tokenUrl'))
.as("getToken");
cy.backendPost("/api/projects/proj1/skills/Thor", {
userId: Cypress.env('proxyUser'),
timestamp: Date.now()
});
cy.visitSkillsDisplay("?themeName=Dark Blue");
cy.wait("@getToken");
cy.wrapIframe().contains('My Level')
cy.wrapIframe().contains('50 Points earned Today')
cy.wrapIframe().contains('Subject 0')
// verify dark blue background of hex #152E4d
// cypress always validates against rgb
cy.wrapIframe().find('[data-cy="skillsTitle"]')
.should('have.css', 'background-color').and('equal', 'rgb(21, 46, 77)');
});
it("skill display - summary only - theme", () => {
cy.createDefaultTinyProject();
cy.intercept(Cypress.env('tokenUrl'))
.as("getToken");
cy.backendPost("/api/projects/proj1/skills/Thor", {
userId: Cypress.env('proxyUser'),
timestamp: Date.now()
});
cy.visit(
"/native/clientDisplay.html?themeName=Dark Blue&isSummaryOnly=true"
);
cy.wrapIframe().contains('My Level')
cy.wrapIframe().contains('50 Points earned Today')
cy.wrapIframe().find('[data-cy="subjectTile-subj0"] [data-cy="subjectTileBtn"]').should('not.exist')
// verify dark blue background of hex #152E4d
// cypress always validates against rgb
cy.wrapIframe().find('[data-cy="skillsTitle"]')
.should('have.css', 'background-color').and('equal', 'rgb(21, 46, 77)');
});
it('client display should display an error if skills service is down', () => {
cy.onlyOn(Utils.skillsClientJSVersionLaterThan('3.2.0'))
cy.createDefaultTinyProject()
cy.intercept('/public/status',
{
statusCode: 503, // server is down
body: {}
}).as('getStatus')
cy.visitSkillsDisplay();
cy.wait('@getStatus')
cy.contains("Could NOT reach Skilltree Service");
});
it("only display skills up-to the provided version", () => {
const totalPointsSelector = '[data-cy="totalPoints"]'
cy.createDefaultTinyProject();
cy.intercept(Cypress.env('tokenUrl'))
.as("getToken");
cy.backendAddSkill("skillv1", 1);
cy.backendAddSkill("skillv2", 2);
cy.visitSkillsDisplay();
cy.wait("@getToken");
cy.wait('@getToken')
const validateTotalPoints = (expectedPoints) => {
if (Utils.skillsServiceVersionLaterThan('3.0.0')){
cy.wrapIframe().find(totalPointsSelector).should('have.text', `${expectedPoints}`);
} else {
cy.wrapIframe().find('.user-skills-overview').contains(`Earn up to ${expectedPoints} points`)
}
}
validateTotalPoints(200)
cy.visitSkillsDisplay("?skillsVersion=1");
cy.wait('@getToken')
validateTotalPoints(150)
cy.visitSkillsDisplay("?skillsVersion=0");
cy.wait('@getToken')
validateTotalPoints(100)
});
it('skillsClientVersion is reported correctly', () => {
cy.createDefaultProject()
cy.intercept('POST', '/api/projects/proj1/skillsClientVersion', (req) => {
expect(req.body).to.have.property('skillsClientVersion').and.to.contain('@skilltree/skills-client-js-')
req.reply((res) => {
expect(res.statusCode).to.eq(200)
expect(res.body).to.have.property('success').to.eq(true)
})
}).as('reportClientVersion')
cy.visit('/native/index.html')
cy.wait('@reportClientVersion')
})
it('level component should be reactive', () => {
cy.createDefaultProject()
const sendEventViaDropdownId = "#exampleDirectiveClickEvent";
Cypress.Commands.add("clickSubmit", () => {
cy.get(`${sendEventViaDropdownId} .btn`).click();
});
cy.visitHomePage(homePage);
cy.contains('Level 0')
cy.clickSubmit();
cy.contains('Level 1')
})
it('level component should load initial level', () => {
cy.createDefaultProject()
// this will increment levels for [email protected] but Level and display components display data for the proxyUser
// validate that level is still 0
cy.reportSkillForUser('subj1_skill0', '[email protected]')
cy.visitHomePage(homePage);
cy.contains('Level 0')
cy.reportSkillForUser('subj1_skill0', Cypress.env('proxyUser'))
// cy.visitHomePage(homePage);
cy.contains('Level 1')
})
});
@@ -0,0 +1,271 @@
/*
* Copyright 2025 SkillTree
*
* 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Utils from "./Utils";
import selectors from "../support/selectors";
context("Navigation Tests", () => {
it('internal back button when when returning from an external page', () => {
cy.onlyOn(Utils.skillsClientJSVersionLaterThan('3.3.0'))
cy.createDefaultTinyProject()
cy.intercept(Cypress.env('tokenUrl')).as('getToken')
cy.backendPost('/api/projects/proj1/skills/Thor', {userId: Cypress.env('proxyUser'), timestamp: Date.now()})
// visit client display
const url = Utils.skillsClientJSVersionLaterThan('3.3.0') ? '?internalBackButton=true' : ''
cy.visitSkillsDisplay(url);
// cy.clientDisplay(true)
cy.wrapIframe().find(selectors.myRankButton)
cy.wrapIframe().find(selectors.titleSection).find(selectors.backButton).should('not.exist')
// navigate to Rank Overview that contains the back button
cy.wrapIframe().find(selectors.myRankButton).click();
cy.wrapIframe().find(selectors.titleSection).contains(Utils.rankDetailsTitle());
cy.wrapIframe().find(selectors.titleSection).find(selectors.backButton).should('exist')
// now visit the "Report Skills" (external) page
cy.get('[data-cy=reportSkillsLink]').click()
cy.contains('Report Skills Examples');
// switch back to the the client display
cy.get('[data-cy=userDisplayLink]').click()
});
it('internal back button when when returning from an external page - multiple layers deep', () => {
cy.createDefaultTinyProject()
cy.backendPost('/api/projects/proj1/skills/Thor', {userId: Cypress.env('proxyUser'), timestamp: Date.now()})
// visit client display
const url = Utils.skillsClientJSVersionLaterThan('3.3.0') ? '?internalBackButton=true' : ''
cy.visitSkillsDisplay(url);
cy.clientDisplay().find(selectors.myRankButton)
cy.clientDisplay().find(selectors.titleSection).find(selectors.backButton).should('not.exist')
// to subject page
cy.cdClickSubj();
// navigate to Rank Overview that contains the back button
cy.clientDisplay().find(selectors.myRankButton).click();
cy.clientDisplay().find(selectors.titleSection).contains(Utils.rankDetailsTitle());
cy.clientDisplay().find(selectors.backButton).should('exist');
// click the back button and verify that we are still in the
// client display (Subject page)
cy.cdBack('Subject 0');
// then back one more time and we should be back on the client display home page
cy.cdBack('User Skills');
});
it('browser back button works correctly when internal back button is not present', () => {
cy.onlyOn(Utils.skillsClientJSVersionLaterThan('3.3.0'))
cy.createDefaultTinyProject()
cy.backendPost('/api/projects/proj1/skills/Thor', {userId: Cypress.env('proxyUser'), timestamp: Date.now()})
// visit client display
cy.visit("/native/clientDisplay.html?internalBackButton=false");
cy.clientDisplay().find(selectors.myRankButton)
cy.clientDisplay().find(selectors.titleSection).find(selectors.backButton).should('not.exist')
// to subject page
cy.cdClickSubj();
cy.clientDisplay().find(selectors.titleSection).find(selectors.backButton).should('not.exist')
// navigate to Rank Overview and that it does NOT contains the internal back button
cy.clientDisplay().find(selectors.myRankButton).click()
cy.clientDisplay().find(selectors.titleSection).contains(Utils.rankDetailsTitle());
cy.clientDisplay().find(selectors.titleSection).find(selectors.backButton).should('not.exist')
// click the browser back button and verify that we are still in the
// client display (Subject page)
cy.wait(1000);
cy.go('back') // browser back button
cy.wait(1000);
cy.clientDisplay().find(selectors.titleSection).contains('Subject 0');
// then back one more time and we should be back on the client display home page
cy.wait(1000);
cy.go('back') // browser back button
cy.wait(1000);
cy.clientDisplay().find(selectors.titleSection).contains('User Skills');
});
if (Utils.skillsServiceVersionLaterThan('3.1.1')) {
it('browser back and forward operations', () => {
cy.onlyOn(Utils.skillsClientJSVersionLaterThan('3.3.0'))
cy.createDefaultTinyProject()
// visit client display
cy.visit("/native/clientDisplay.html");
cy.clientDisplay().find(selectors.myRankButton)
// to subject page
cy.cdClickSubj();
// to skill
cy.wrapIframe().find(selectors.buildSkillLinkSelector('Thor')).click()
cy.wrapIframe().find(selectors.titleSection).contains('Skill Overview')
cy.wrapIframe().find(selectors.buildSkillTitleSelector('Thor'))
// // click next
cy.wrapIframe().find(selectors.nextSkillButton).click()
cy.wrapIframe().find(selectors.buildSkillTitleSelector('IronMan'))
cy.go('back')
cy.wrapIframe().find(selectors.buildSkillTitleSelector('Thor'))
cy.go('back')
cy.wrapIframe().find(selectors.titleSection).contains('Subject 0')
cy.clientDisplay().find(selectors.myRankButton)
cy.go('back')
cy.clientDisplay().find(selectors.titleSection).contains('User Skills');
cy.clientDisplay().find(selectors.myRankButton)
cy.go('forward')
cy.wrapIframe().find(selectors.titleSection).contains('Subject 0')
cy.clientDisplay().find(selectors.myRankButton)
// cy.go('forward')
// cy.wrapIframe().find(selectors.titleSection).contains('Skill Overview')
// cy.wrapIframe().find(selectors.buildSkillTitleSelector('Thor'))
//
// cy.go('back')
// cy.wrapIframe().find(selectors.titleSection).contains('Subject 0')
// cy.clientDisplay().find(selectors.myRankButton)
//
// cy.wrapIframe().find(selectors.myRankButton).click();
// cy.wrapIframe().find(selectors.titleSection).contains(Utils.rankDetailsTitle());
//
// cy.go('back')
// cy.wrapIframe().find(selectors.titleSection).contains('Subject 0')
// cy.clientDisplay().find(selectors.myRankButton)
//
// cy.go('back')
// cy.clientDisplay().find(selectors.titleSection).contains('User Skills');
// cy.clientDisplay().find(selectors.myRankButton)
});
}
it('breadcrumb-based navigation', () => {
cy.onlyOn(Utils.skillsClientJSVersionLaterThan('3.3.0'))
cy.createDefaultTinyProject()
// visit client display
cy.visit("/native/clientDisplay.html?skillsClientDisplayPath=%2Fsubjects%2Fsubj0%2Frank");
cy.wrapIframe().find(selectors.titleSection).contains(Utils.rankDetailsTitle());
cy.wrapIframe().find(selectors.buildBreadcrumbLinkSelector('subj0')).click()
cy.wrapIframe().find(selectors.titleSection).contains('Subject 0')
cy.clientDisplay().find(selectors.myRankButton)
cy.wrapIframe().find(selectors.buildBreadcrumbLinkSelector('Overview')).click()
cy.clientDisplay().find(selectors.titleSection).contains('User Skills');
cy.clientDisplay().find(selectors.myRankButton)
});
it('deep link and reload', () => {
cy.onlyOn(Utils.skillsClientJSVersionLaterThan('3.3.0'))
cy.createDefaultTinyProject()
cy.backendPost('/api/projects/proj1/skills/Thor', {userId: Cypress.env('proxyUser'), timestamp: Date.now()})
// navigate to Rank Overview via direct link
cy.visitSkillsDisplay('?skillsClientDisplayPath=%2Frank#/showSkills');
cy.clientDisplay().find(selectors.titleSection).contains(Utils.rankDetailsTitle());
// reload and confirm we are still on Rank Overview page
cy.reload();
cy.clientDisplay().find(selectors.titleSection).contains(Utils.rankDetailsTitle());
});
it('back button after reload', () => {
cy.onlyOn(Utils.skillsClientJSVersionLaterThan('3.3.0'))
cy.createDefaultTinyProject()
cy.backendPost('/api/projects/proj1/skills/Thor', {userId: Cypress.env('proxyUser'), timestamp: Date.now()})
// visit client display
cy.visit("/native/clientDisplay.html?internalBackButton=false");
cy.clientDisplay().find(selectors.myRankButton)
cy.clientDisplay().find(selectors.titleSection).contains('User Skills');
cy.clientDisplay().find(selectors.titleSection).find(selectors.backButton).should('not.exist')
// to subject page
cy.cdClickSubj();
// navigate to Rank Overview and that it does NOT contain the internal back button
cy.clientDisplay().find(selectors.myRankButton).click();
cy.clientDisplay().find(selectors.titleSection).contains(Utils.rankDetailsTitle());
cy.clientDisplay().find(selectors.titleSection).find(selectors.backButton).should('not.exist')
cy.reload();
cy.clientDisplay().find(selectors.titleSection).contains(Utils.rankDetailsTitle());
cy.clientDisplay().contains(Utils.rankDetailsTitle());
// click the browser back button and verify that we are still in the
// client display (Subject page)
cy.wait(1000);
cy.go('back') // browser back button
cy.wait(1000);
cy.clientDisplay().find(selectors.titleSection).contains('Subject 0');
// then back one more time and we should be back on the client display home page
cy.wait(1000);
cy.go('back') // browser back button
cy.wait(1000);
cy.clientDisplay().find(selectors.titleSection).contains('User Skills');
});
it('route change is passed to the client app', () => {
cy.onlyOn(Utils.skillsClientJSVersionLaterThan('3.3.0'))
cy.createDefaultTinyProject()
cy.backendPost('/api/projects/proj1/skills/Thor', {userId: Cypress.env('proxyUser'), timestamp: Date.now()})
// visit client display
cy.visitSkillsDisplay('?internalBackButton=true');
// to subject page
cy.cdClickSubj();
cy.get('[data-cy=skillsDisplayPath]').contains('Skills Display Path: [/subjects/subj0]');
// navigate to Rank Overview and that it does NOT contains the internal back button
cy.clientDisplay().find(selectors.myRankButton).click();
cy.clientDisplay().find(selectors.titleSection).contains(Utils.rankDetailsTitle());
cy.get('[data-cy=skillsDisplayPath]').contains('Skills Display Path: [/subjects/subj0/rank]');
});
if (Utils.skillsServiceVersionLaterThan('3.1.1')) {
it('navigate skills-display programmatically', () => {
cy.onlyOn(Utils.skillsClientJSVersionLaterThan('3.3.1'))
cy.createDefaultTinyProject()
cy.backendPost('/api/projects/proj1/skills/Thor', {userId: Cypress.env('proxyUser'), timestamp: Date.now()})
// visit client display
cy.visitSkillsDisplay('?internalBackButton=true');
cy.clientDisplay().find(selectors.myRankButton)
// to subject page
cy.get('[data-cy=navigateButton]').click();
cy.get('[data-cy=skillsDisplayPath]').contains('Skills Display Path: [/subjects/subj0]');
});
}
});
@@ -0,0 +1,61 @@
/*
* Copyright 2025 SkillTree
*
* 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
const homePage = '/native/index.html'
context("Token timeout JS Tests", () => {
if (Cypress.env('timeout') === true || Cypress.env('timeout') === 'true') {
it("report skill with expired token, retry checker will resend with new token", () => {
cy.createDefaultProject();
cy.intercept(Cypress.env('tokenUrl')).as("getToken");
cy.visitHomePage(homePage);
cy.wait("@getToken");
cy.wait(71000) // wait 71 seconds to ensure the token has expired
cy.get('[data-cy="exampleDirectiveClickEventButton"]').click();
cy.get('pre[data-cy=globalEventResult]').should('be.empty');
cy.wait("@getToken", { timeout: 60000 }); // wait ~ another 50 seconds to all for the RetryChecker to resubmit
cy.get('pre[data-cy=globalEventResult]').contains('"skillId": "IronMan"')
cy.get('pre[data-cy=globalEventResult]').contains('"pointsEarned": 50')
cy.get('pre[data-cy=globalEventResult]').contains('"skillApplied": true')
cy.get('pre[data-cy=globalEventResult]').contains(/completed": [[][^]*"type": "Overall",[^]\s*"level": 1/)
});
it('skill display - navigate after token expires', () => {
cy.createDefaultTinyProject()
cy.backendPost('/api/projects/proj1/skills/Thor', {userId: Cypress.env('proxyUser'), timestamp: Date.now()})
// visit client display
cy.visit("/native/clientDisplay.html");
cy.clientDisplay().contains('User Skills');
// to subject page
cy.wait(10000) // wait 10 seconds to ensure the token has expired
cy.cdClickSubj();
});
} else {
it('timeout var not set, not tests to run', () => {
cy.log(`timeout env var is not true [${Cypress.env('timeout')}], skipping test.`)
});
}
});
@@ -0,0 +1,176 @@
/*
* Copyright 2025 SkillTree
*
* 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Utils from "./Utils";
import selectors from "../support/selectors";
context("Transcript Export Tests", () => {
const clean = (text) => {
return text.replace(/\n/g, '')
}
let userName
beforeEach(() => {
userName = Cypress.env('oauthMode') ? 'foo bar (foo)' : 'user1'
const getFileName = (projName) => {
return `./cypress/downloads/${projName} - ${userName} - Transcript.pdf`
}
Cypress.Commands.add("readTranscript", (pathToPdf) => {
cy.log(`Reading transcript [${pathToPdf}]`)
cy.readFile(pathToPdf, { timeout: 10000 }).then(() => {
// file exists and was successfully read
cy.log(`Transcript [${pathToPdf}] Found!`)
})
return cy.task('readPdf', pathToPdf)
});
Cypress.Commands.add("readTranscriptForProj", (projName) => {
const pathToPdf = getFileName(projName)
return cy.readTranscript(pathToPdf)
});
})
if (Utils.skillsServiceVersionLaterThan('3.1.0')) {
const expectedHeaderAndFooter = 'For All Dragons enjoyment'
const expectedHeaderAndFooterCommunityProtected = 'For Divine Dragon enjoyment'
it('export user transcript', () => {
const projName = 'Export1'
cy.createDefaultTinyProject('proj1', projName)
// visit client display
cy.visitSkillsDisplay();
cy.clientDisplay().find(selectors.titleSection).contains('User Skills');
cy.clientDisplay().find(selectors.myRankButton)
cy.wrapIframe().find('[data-cy="downloadTranscriptBtn"]').click()
cy.readTranscriptForProj(projName).then((doc) => {
expect(doc.numpages).to.equal(2)
expect(clean(doc.text)).to.include('SkillTree Transcript')
expect(clean(doc.text)).to.include(projName)
expect(clean(doc.text)).to.include('Level: 0 / 5 ')
expect(clean(doc.text)).to.include('Points: 0 / 100 ')
expect(clean(doc.text)).to.include('Skills: 0 / 2 ')
expect(clean(doc.text)).to.include(userName)
expect(clean(doc.text)).to.not.include('Badges')
// should be a title on the 2nd page
expect(clean(doc.text)).to.include('Subject: Subject 0'.toUpperCase())
expect(clean(doc.text)).to.not.include(expectedHeaderAndFooter)
expect(clean(doc.text)).to.not.include(expectedHeaderAndFooterCommunityProtected)
expect(clean(doc.text)).to.not.include('null')
})
});
it('export user transcript - community header', () => {
cy.intercept('GET', '/public/config', (req) => {
req.reply((res) => {
const conf = res.body;
conf.exportHeaderAndFooter = 'For {{community.project.descriptor}} enjoyment';
res.send(conf);
});
}).as('getPublicConfig');
const projName = 'Export2'
cy.createDefaultTinyProject('proj1', projName)
// visit client display
cy.visitSkillsDisplay();
cy.wait('@getPublicConfig')
cy.clientDisplay().find(selectors.titleSection).contains('User Skills');
cy.clientDisplay().find(selectors.myRankButton)
cy.wrapIframe().find('[data-cy="downloadTranscriptBtn"]').click()
cy.readTranscriptForProj(projName).then((doc) => {
expect(doc.numpages).to.equal(2)
expect(clean(doc.text)).to.include('SkillTree Transcript')
expect(clean(doc.text)).to.include(projName)
expect(clean(doc.text)).to.include('Level: 0 / 5 ')
expect(clean(doc.text)).to.include('Points: 0 / 100 ')
expect(clean(doc.text)).to.include('Skills: 0 / 2 ')
expect(clean(doc.text)).to.include(userName)
expect(clean(doc.text)).to.not.include('Badges')
// should be a title on the 2nd page
expect(clean(doc.text)).to.include('Subject: Subject 0'.toUpperCase())
expect(clean(doc.text)).to.include(expectedHeaderAndFooter)
expect(clean(doc.text)).to.not.include(expectedHeaderAndFooterCommunityProtected)
expect(clean(doc.text)).to.not.include('null')
})
});
if (!Cypress.env('oauthMode')) {
it('export user transcript - community protected header', () => {
cy.intercept('GET', '/public/config', (req) => {
req.reply((res) => {
const conf = res.body;
conf.exportHeaderAndFooter = 'For {{community.project.descriptor}} enjoyment';
res.send(conf);
});
}).as('getPublicConfig');
const projName = 'Export3'
cy.createDefaultTinyProject('proj1', projName)
const allDragonsUser = '[email protected]'
cy.fixture('vars.json').then((vars) => {
cy.backendLogout();
cy.backendRegister('user1', vars.defaultPass);
cy.backendLogin(vars.rootUser, vars.defaultPass, true);
cy.backendPost(`/root/users/user1/tags/dragons`, {tags: ['DivineDragon']});
cy.backendPost(`/root/users/${vars.defaultUser}/tags/dragons`, {tags: ['DivineDragon']});
cy.backendLogout();
cy.backendRegister(allDragonsUser, vars.defaultPass);
cy.backendLogout();
cy.backendLogin(vars.defaultUser, vars.defaultPass);
});
cy.backendPost(`/admin/projects/proj1`, {
projectId: 'proj1',
name: projName,
enableProtectedUserCommunity: true
})
// visit client display
cy.visitSkillsDisplay();
cy.wait('@getPublicConfig')
cy.clientDisplay().find(selectors.titleSection).contains('User Skills');
cy.clientDisplay().find(selectors.myRankButton)
cy.wrapIframe().find('[data-cy="downloadTranscriptBtn"]').click()
const pathToPdf = `cypress/downloads/${projName} - Firstname LastName (user1) - Transcript.pdf`
cy.readTranscript(pathToPdf).then((doc) => {
expect(doc.numpages).to.equal(2)
expect(clean(doc.text)).to.include('SkillTree Transcript')
expect(clean(doc.text)).to.include(projName)
expect(clean(doc.text)).to.include('Level: 0 / 5 ')
expect(clean(doc.text)).to.include('Points: 0 / 100 ')
expect(clean(doc.text)).to.include('Skills: 0 / 2 ')
expect(clean(doc.text)).to.include(userName)
expect(clean(doc.text)).to.not.include('Badges')
// should be a title on the 2nd page
expect(clean(doc.text)).to.include('Subject: Subject 0'.toUpperCase())
expect(clean(doc.text)).to.not.include(expectedHeaderAndFooter)
expect(clean(doc.text)).to.include(expectedHeaderAndFooterCommunityProtected)
expect(clean(doc.text)).to.not.include('null')
})
});
}
}
});
@@ -1,27 +0,0 @@
/*
* Copyright 2020 SkillTree
*
* 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var semver = require('semver');
export default {
versionLaterThan (lib, minVersion){
const versionToCompare = Cypress.env(lib);
if (!versionToCompare) {
return true;
}
const shouldSkip = semver.lt(versionToCompare, minVersion);
return !shouldSkip;
}
}
@@ -1,306 +0,0 @@
/*
* Copyright 2020 SkillTree
*
* 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Utils from "./Utils";
const iFrameTimeout = 3000;
let skillsWebsocketConnected
Cypress.Commands.add('visitHomePage', () => {
skillsWebsocketConnected = null;
cy.visit('/native/index.html', {
onBeforeLoad(win) {
skillsWebsocketConnected = cy.spy().as('skillsWebsocketConnected')
const postMessage = win.postMessage.bind(win)
win.postMessage = (what, target) => {
if (Cypress._.isPlainObject(what) && what.skillsWebsocketConnected) {
skillsWebsocketConnected(what)
}
return postMessage(what, target)
}
cy.spy(win, 'postMessage').as('postMessage')
}
});
// wait for web socket to connect
cy.get('@skillsWebsocketConnected').its('lastCall.args.0').its('skillsWebsocketConnected').should('eq', true);
});
context("Native JS Tests", () => {
if (Utils.versionLaterThan('@skilltree/skills-client-reporter', '1.1.1')) {
it("global event show correct results", () => {
cy.createDefaultProject();
const sendEventViaDropdownId = "#exampleDirectiveClickEvent";
Cypress.Commands.add("clickSubmit", () => {
cy.get(`${sendEventViaDropdownId} .btn`).click();
});
cy.visitHomePage();
cy.clickSubmit();
cy.get('pre[data-cy=globalEventResult]').contains('"skillId": "IronMan"')
cy.get('pre[data-cy=globalEventResult]').contains('"pointsEarned": 50')
cy.get('pre[data-cy=globalEventResult]').contains('"skillApplied": true')
cy.get('pre[data-cy=globalEventResult]').contains(/completed": [[][^]*"type": "Overall",[^]\s*"level": 1/)
});
}
if (Utils.versionLaterThan('@skilltree/skills-client-reporter', '1.1.1')) {
it("global event show correct results (skills reported directly to backend endpoint)", () => {
cy.createDefaultProject();
cy.visitHomePage();
cy.reportSkillForUser("IronMan", "user1");
cy.get('pre[data-cy=globalEventResult]').contains('"skillId": "IronMan"')
cy.get('pre[data-cy=globalEventResult]').contains('"pointsEarned": 50')
cy.get('pre[data-cy=globalEventResult]').contains('"skillApplied": true')
cy.get('pre[data-cy=globalEventResult]').contains(/completed": [[][^]*"type": "Overall",[^]\s*"level": 1/)
});
}
if (Utils.versionLaterThan('@skilltree/skills-client-reporter', '1.1.1')) {
it('global event does not update when skill reported for a different project', () => {
cy.createDefaultProject()
cy.createDefaultTinyProject('proj2')
cy.visitHomePage();
cy.reportSkillForUser('IronMan', 'user1', 'proj2')
cy.get('pre[data-cy=globalEventResult]').should('be.empty');
})
}
if (Utils.versionLaterThan('@skilltree/skills-client-reporter', '1.1.1')) {
it('global event is not reported when skill is not applied (skill reported directly to backend endpoint)', () => {
cy.createDefaultProject()
cy.reportSkillForUser('IronMan', 'user1')
cy.visitHomePage();
cy.reportSkillForUser('IronMan', 'user1')
cy.get('[data-cy=globalEventResult]').should('be.empty');
})
}
if (Utils.versionLaterThan('@skilltree/skills-client-reporter', '1.1.1')) {
it('global event is not reported when skill is not applied', () => {
cy.createDefaultProject()
cy.reportSkillForUser('IronMan', 'user1')
cy.visitHomePage();
const sendEventViaDropdownId = "#exampleDirectiveClickEvent";
Cypress.Commands.add("clickSubmit", () => {
cy.get(`${sendEventViaDropdownId} .btn`).click();
});
cy.clickSubmit()
cy.get('pre[data-cy=globalEventResult]').should('be.empty');
})
}
if (Utils.versionLaterThan('@skilltree/skills-client-reporter', '1.1.1')) {
it('global event is reported even when skill is not applied when notifyIfSkillNotApplied=true ', () => {
cy.createDefaultProject()
cy.reportSkillForUser('IronMan', 'user1')
const sendEventViaDropdownId = "#exampleDirectiveClickEvent";
Cypress.Commands.add("clickSubmit", () => {
cy.get(`${sendEventViaDropdownId} .btn`).click();
});
cy.visitHomePage();
cy.get('[type="checkbox"]').check()
cy.clickSubmit()
cy.get('pre[data-cy=globalEventResult]').contains('"skillId": "IronMan"')
cy.get('pre[data-cy=globalEventResult]').contains('"pointsEarned": 0')
cy.get('pre[data-cy=globalEventResult]').contains('"skillApplied": false')
cy.get('pre[data-cy=globalEventResult]').contains('"explanation": "This skill reached its maximum points"')
})
}
it("skill display", () => {
cy.createDefaultTinyProject();
cy.server()
.route("/api/users/user1/token")
.as("getToken");
cy.backendPost("/api/projects/proj1/skills/Thor", {
userId: "user1",
timestamp: Date.now()
});
cy.visit("/native/clientDisplay.html");
cy.wait(iFrameTimeout);
cy.iframe(body => {
cy.wrap(body).contains("My Level");
cy.wrap(body).contains("50 Points earned Today");
cy.wrap(body).contains("Subject 0");
cy.wrap(body)
.find(".skills-page-title-text-color")
.should("have.css", "background-color")
.and("equal", "rgb(255, 255, 255)");
});
});
it("skill display - summary only", () => {
cy.createDefaultTinyProject();
cy.server()
.route("/api/users/user1/token")
.as("getToken");
cy.backendPost("/api/projects/proj1/skills/Thor", {
userId: "user1",
timestamp: Date.now()
});
cy.visit("/native/clientDisplay.html?isSummaryOnly=true");
cy.wait(iFrameTimeout);
cy.iframe(body => {
cy.wrap(body).contains("My Level");
cy.wrap(body).contains("50 Points earned Today");
cy.wrap(body)
.contains("Subject 0")
.should("not.exist");
// verify that there is no background set
// cypress always validates against rgb
cy.wrap(body)
.find(".skills-page-title-text-color")
.should("have.css", "background-color")
.and("equal", "rgb(255, 255, 255)");
});
});
it("skill display - theme", () => {
cy.createDefaultTinyProject();
cy.server()
.route("/api/users/user1/token")
.as("getToken");
cy.backendPost("/api/projects/proj1/skills/Thor", {
userId: "user1",
timestamp: Date.now()
});
cy.visit("/native/clientDisplay.html?themeName=Dark Blue");
cy.wait("@getToken");
cy.wait(iFrameTimeout);
cy.iframe(body => {
cy.wrap(body).contains("My Level");
cy.wrap(body).contains("50 Points earned Today");
cy.wrap(body).contains("Subject 0");
// verify dark blue background of hex #152E4d
// cypress always validates against rgb
cy.wrap(body)
.find(".skills-page-title-text-color")
.should("have.css", "background-color")
.and("equal", "rgb(21, 46, 77)");
});
});
it("skill display - summary only - theme", () => {
cy.createDefaultTinyProject();
cy.server()
.route("/api/users/user1/token")
.as("getToken");
cy.backendPost("/api/projects/proj1/skills/Thor", {
userId: "user1",
timestamp: Date.now()
});
cy.visit(
"/native/clientDisplay.html?themeName=Dark Blue&isSummaryOnly=true"
);
cy.wait(iFrameTimeout);
cy.iframe(body => {
// cy.wait('@getToken')
cy.wrap(body).contains("My Level");
cy.wrap(body).contains("50 Points earned Today");
cy.wrap(body)
.contains("Subject 0")
.should("not.exist");
// verify dark blue background of hex #152E4d
// cypress always validates against rgb
cy.wrap(body)
.find(".skills-page-title-text-color")
.should("have.css", "background-color")
.and("equal", "rgb(21, 46, 77)");
});
});
it("client display should display an error if skills service is down", () => {
cy.createDefaultTinyProject();
cy.server()
.route({
method: "GET",
url: "/public/status",
status: 503, // server is down
response: {}
})
.as("getStatus");
cy.visit("/native/clientDisplay.html");
cy.wait("@getStatus");
cy.contains("Could NOT reach Skills Service");
});
it("only display skills up-to the provided version", () => {
const noVersionPoints = 'Earn up to 200 points';
const v1Points = 'Earn up to 150 points';
const v0Points = 'Earn up to 100 points';
cy.createDefaultTinyProject();
cy.server()
.route("/api/users/user1/token")
.as("getToken");
cy.backendAddSkill("skillv1", 1);
cy.backendAddSkill("skillv2", 2);
cy.visit("/native/clientDisplay.html");
cy.wait("@getToken");
cy.wait(iFrameTimeout);
cy.iframe(body => {
cy.wrap(body).contains(noVersionPoints);
});
cy.visit("/native/index.html");
cy.visit("/native/clientDisplay.html?skillsVersion=1");
cy.wait(iFrameTimeout);
cy.iframe(body => {
cy.wrap(body).contains(v1Points);
});
cy.visit("/native/index.html");
cy.visit("/native/clientDisplay.html?skillsVersion=0");
cy.wait(iFrameTimeout);
cy.iframe(body => {
cy.wrap(body).contains(v0Points);
});
});
if (Utils.versionLaterThan('@skilltree/skills-client-js', '1.1.1')) {
it('skillsClientVersion is reported correctly', () => {
cy.createDefaultProject()
cy.server().route('POST', '/api/projects/proj1/skillsClientVersion').as('reportClientVersion')
cy.visit('/native/index.html')
cy.wait('@reportClientVersion')
cy.get('@reportClientVersion').then((xhr) => {
expect(xhr.status).to.eq(200)
expect(xhr.responseBody).to.have.property('success').to.eq(true)
});
cy.get('@reportClientVersion').should((xhr) => {
expect(xhr.request.body, 'request body').
to.have.property('skillsClientVersion').
and.to.contain('@skilltree/skills-client-js-')
});
})
}
});
@@ -1,294 +0,0 @@
/*
* Copyright 2020 SkillTree
*
* 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Utils from "./Utils";
const iFrameTimeout = 3000;
let skillsWebsocketConnected
Cypress.Commands.add('visitHomePage', () => {
skillsWebsocketConnected = null;
cy.visit('/react/index.html#/', {
onBeforeLoad(win) {
skillsWebsocketConnected = cy.spy().as('skillsWebsocketConnected')
const postMessage = win.postMessage.bind(win)
win.postMessage = (what, target) => {
if (Cypress._.isPlainObject(what) && what.skillsWebsocketConnected) {
skillsWebsocketConnected(what)
}
return postMessage(what, target)
}
cy.spy(win, 'postMessage').as('postMessage')
}
});
// wait for web socket to connect
cy.get('@skillsWebsocketConnected').its('lastCall.args.0').its('skillsWebsocketConnected').should('eq', true);
});
context('React Tests', () => {
if (Utils.versionLaterThan('@skilltree/skills-client-react', '1.1.1')) {
it('level component should be reactive (skills reported directly to backend endpoint)', () => {
cy.createDefaultProject()
cy.visitHomePage();
cy.contains('Level 0')
cy.reportSkillForUser('IronMan', 'user1')
cy.contains('Level 1')
cy.reportSkillForUser('Thor', 'user1')
cy.contains('Level 2')
cy.reportSkillForUser('subj1_skill0', 'user1')
cy.contains('Level 3')
cy.reportSkillForUser('subj1_skill1', 'user1')
cy.contains('Level 3')
cy.reportSkillForUser('subj2_skill0', 'user1')
cy.contains('Level 4')
cy.reportSkillForUser('subj2_skill1', 'user1')
cy.contains('Level 5')
})
}
if (Utils.versionLaterThan('@skilltree/skills-client-react', '1.1.1')) {
it('global event show correct results', () => {
cy.createDefaultProject()
cy.visitHomePage();
cy.contains('Level 0')
cy.reportSkillForUser('IronMan', 'user1')
cy.contains('Level 1')
cy.get('[data-cy=globalEventResult]').contains('"skillId": "IronMan"')
cy.get('[data-cy=globalEventResult]').contains('"pointsEarned": 50')
cy.get('[data-cy=globalEventResult]').contains('"skillApplied": true')
cy.get('[data-cy=globalEventResult]').contains(/completed": [[][^]*"type": "Overall",[^]\s*"level": 1/)
})
}
if (Utils.versionLaterThan('@skilltree/skills-client-react', '1.1.1')) {
it('level component should be reactive', () => {
cy.createDefaultProject()
const sendEventViaDropdownId = '#exampleDirectiveClickEvent';
Cypress.Commands.add("clickSubmit", () => {
cy.get(`${sendEventViaDropdownId} .btn`).click()
})
Cypress.Commands.add("selectSkill", (skill) => {
cy.get(`${sendEventViaDropdownId} select`).select(`${skill}`)
})
cy.visitHomePage();
cy.contains('Level 0')
cy.selectSkill('IronMan')
cy.clickSubmit()
cy.contains('Level 1')
cy.selectSkill('Thor')
cy.clickSubmit()
cy.contains('Level 2')
cy.selectSkill('subj1_skill0')
cy.clickSubmit()
cy.contains('Level 3')
cy.selectSkill('subj1_skill1')
cy.clickSubmit()
cy.contains('Level 3')
cy.selectSkill('subj2_skill0')
cy.clickSubmit()
cy.contains('Level 4')
cy.selectSkill('subj2_skill1')
cy.clickSubmit()
cy.contains('Level 5')
})
}
if (Utils.versionLaterThan('@skilltree/skills-client-react', '1.1.1')) {
it('global event does not update when skill reported for a different project', () => {
cy.createDefaultProject()
cy.createDefaultTinyProject('proj2')
cy.visitHomePage();
cy.contains('Level 0')
cy.reportSkillForUser('IronMan', 'user1', 'proj2')
cy.contains('Level 0')
cy.get('[data-cy=globalEventResult]').should('be.empty');
})
}
if (Utils.versionLaterThan('@skilltree/skills-client-react', '1.1.1')) {
it('level component should not update when admin reports skill for other user', () => {
cy.createDefaultProject()
cy.visitHomePage();
cy.contains('Level 0')
cy.reportSkillForUser('IronMan', '[email protected]')
cy.contains('Level 0')
})
}
it('skill display', () => {
cy.createDefaultTinyProject()
cy.server().route('/api/users/user1/token').as('getToken')
cy.backendPost('/api/projects/proj1/skills/Thor', {userId: 'user1', timestamp: Date.now()})
cy.visit('/react/index.html#/showSkills')
cy.wait('@getToken')
cy.iframe((body) => {
cy.wait('@getToken')
cy.wrap(body).contains('My Level')
cy.wrap(body).contains('50 Points earned Today')
cy.wrap(body).contains('Subject 0')
// verify that there is no background set
// cypress always validates against rgb
cy.wrap(body).find('.skills-page-title-text-color')
.should('have.css', 'background-color').and('equal', 'rgb(255, 255, 255)');
});
})
it('skill display - summary only', () => {
cy.createDefaultTinyProject()
cy.server().route('/api/users/user1/token').as('getToken')
cy.backendPost('/api/projects/proj1/skills/Thor', {userId: 'user1', timestamp: Date.now()})
cy.visit('/react/index.html#/showSkills?isSummaryOnly=true')
cy.wait('@getToken')
cy.iframe((body) => {
cy.wait('@getToken')
cy.wrap(body).contains('My Level')
cy.wrap(body).contains('50 Points earned Today')
cy.wrap(body).contains('Subject 0').should('not.exist')
// verify that there is no background set
// cypress always validates against rgb
cy.wrap(body).find('.skills-page-title-text-color')
.should('have.css', 'background-color').and('equal', 'rgb(255, 255, 255)');
})
})
it('skill display - theme', () => {
cy.createDefaultTinyProject()
cy.server().route('/api/users/user1/token').as('getToken')
cy.backendPost('/api/projects/proj1/skills/Thor', {userId: 'user1', timestamp: Date.now()})
cy.visit('/react/index.html#/showSkills?themeName=Dark Blue')
cy.wait('@getToken')
cy.iframe((body) => {
cy.wait('@getToken')
cy.wrap(body).contains('My Level')
cy.wrap(body).contains('50 Points earned Today')
cy.wrap(body).contains('Subject 0')
// verify dark blue background of hex #152E4d
// cypress always validates against rgb
cy.wrap(body).find('.skills-page-title-text-color')
.should('have.css', 'background-color').and('equal', 'rgb(21, 46, 77)');
})
})
it('skill display - summary only - theme', () => {
cy.createDefaultTinyProject()
cy.server().route('/api/users/user1/token').as('getToken')
cy.backendPost('/api/projects/proj1/skills/Thor', {userId: 'user1', timestamp: Date.now()})
cy.visit('/react/index.html#/showSkills?themeName=Dark Blue&isSummaryOnly=true')
cy.wait('@getToken')
cy.iframe((body) => {
cy.wait('@getToken')
cy.wrap(body).contains('My Level')
cy.wrap(body).contains('50 Points earned Today')
cy.wrap(body).contains('Subject 0').should('not.exist')
// verify dark blue background of hex #152E4d
// cypress always validates against rgb
cy.wrap(body).find('.skills-page-title-text-color')
.should('have.css', 'background-color').and('equal', 'rgb(21, 46, 77)');
})
})
it('client display should display an error if skills service is down', () => {
cy.server().route({
method: 'GET',
url: '/public/status',
status: 503, // server is down
response: {}
}).as('getStatus')
cy.visit('/react/index.html#/showSkills')
cy.wait('@getStatus')
cy.contains('Could NOT reach Skills Service')
});
it('only display skills up-to the provided version', () => {
cy.createDefaultTinyProject()
cy.server().route('/api/users/user1/token').as('getToken')
cy.backendAddSkill('skillv1', 1)
cy.backendAddSkill('skillv2', 2)
cy.visit('/react/index.html#/showSkills')
cy.wait('@getToken')
cy.wait(iFrameTimeout);
cy.iframe((body) => {
cy.wait('@getToken')
cy.wrap(body).contains('Earn up to 200 points')
})
cy.visit('/react/index.html#/')
cy.visit('/react/index.html#/showSkills?skillsVersion=1')
cy.wait('@getToken')
cy.wait(iFrameTimeout);
cy.iframe((body) => {
cy.wrap(body).contains('Earn up to 150 points')
})
cy.visit('/react/index.html#/')
cy.visit('/react/index.html#/showSkills?skillsVersion=0')
cy.wait('@getToken')
cy.wait(iFrameTimeout);
cy.iframe((body) => {
cy.wrap(body).contains('Earn up to 100 points')
})
});
if (Utils.versionLaterThan('@skilltree/skills-client-react', '1.1.1')) {
it('skillsClientVersion is reported correctly', () => {
cy.createDefaultProject()
cy.visit('/react/index.html#/')
cy.server().route('POST', '/api/projects/proj1/skillsClientVersion').as('reportClientVersion')
cy.wait('@reportClientVersion')
cy.get('@reportClientVersion').then((xhr) => {
expect(xhr.status).to.eq(200)
expect(xhr.responseBody).to.have.property('success').to.eq(true)
});
cy.get('@reportClientVersion').should((xhr) => {
expect(xhr.request.body, 'request body').
to.have.property('skillsClientVersion').
and.to.contain('@skilltree/skills-client-react-')
});
})
}
})
@@ -1,383 +0,0 @@
/*
* Copyright 2020 SkillTree
*
* 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Utils from "./Utils";
const iFrameTimeout = 3000;
let skillsWebsocketConnected
Cypress.Commands.add('visitHomePage', () => {
skillsWebsocketConnected = null;
cy.visit('/vuejs#/', {
onBeforeLoad(win) {
skillsWebsocketConnected = cy.spy().as('skillsWebsocketConnected')
const postMessage = win.postMessage.bind(win)
win.postMessage = (what, target) => {
if (Cypress._.isPlainObject(what) && what.skillsWebsocketConnected) {
skillsWebsocketConnected(what)
}
return postMessage(what, target)
}
cy.spy(win, 'postMessage').as('postMessage')
}
});
// wait for web socket to connect
cy.get('@skillsWebsocketConnected').its('lastCall.args.0').its('skillsWebsocketConnected').should('eq', true);
});
context('Vue Tests', () => {
if (Utils.versionLaterThan("@skilltree/skills-client-vue", '1.1.1')) {
it('level component should be reactive', () => {
cy.createDefaultProject()
const sendEventViaDropdownId = '#PureJSReportAnySkill';
Cypress.Commands.add("clickSubmit", () => {
cy.get(`${sendEventViaDropdownId} .btn`).click()
})
Cypress.Commands.add("selectSkill", (skill) => {
cy.get(`${sendEventViaDropdownId} .multiselect`).type(`${skill}{enter}`)
})
cy.visitHomePage();
cy.contains('Level 0')
cy.selectSkill('IronMan')
cy.clickSubmit()
cy.contains('Level 1')
cy.selectSkill('Thor')
cy.clickSubmit()
cy.contains('Level 2')
cy.selectSkill('subj1_skill0')
cy.clickSubmit()
cy.contains('Level 3')
cy.selectSkill('subj1_skill1')
cy.clickSubmit()
cy.contains('Level 3')
cy.selectSkill('subj2_skill0')
cy.clickSubmit()
cy.contains('Level 4')
cy.selectSkill('subj2_skill1')
cy.clickSubmit()
cy.contains('Level 5')
})
}
if (Utils.versionLaterThan("@skilltree/skills-client-vue", '1.1.1')) {
it('level component should be reactive (skills reported directly to backend endpoint)', () => {
cy.createDefaultProject()
cy.visitHomePage();
cy.contains('Level 0')
cy.reportSkillForUser('IronMan', 'user1')
cy.contains('Level 1')
cy.reportSkillForUser('Thor', 'user1')
cy.contains('Level 2')
cy.reportSkillForUser('subj1_skill0', 'user1')
cy.contains('Level 3')
cy.reportSkillForUser('subj1_skill1', 'user1')
cy.contains('Level 3')
cy.reportSkillForUser('subj2_skill0', 'user1')
cy.contains('Level 4')
cy.reportSkillForUser('subj2_skill1', 'user1')
cy.contains('Level 5')
})
}
if (Utils.versionLaterThan("@skilltree/skills-client-vue", '1.1.1')) {
it('global event show correct results', () => {
cy.createDefaultProject()
cy.visitHomePage();
cy.contains('Level 0')
cy.reportSkillForUser('IronMan', 'user1')
cy.contains('Level 1')
cy.get('[data-cy=globalEventResult]').contains('"skillId": "IronMan"')
cy.get('[data-cy=globalEventResult]').contains('"pointsEarned": 50')
cy.get('[data-cy=globalEventResult]').contains('"skillApplied": true')
cy.get('[data-cy=globalEventResult]').contains(/completed": [[][^]*"type": "Overall",[^]\s*"level": 1/)
})
}
if (Utils.versionLaterThan("@skilltree/skills-client-vue", '1.1.1')) {
it('global event does not update when skill reported for a different project', () => {
cy.createDefaultProject()
cy.createDefaultTinyProject('proj2')
cy.visitHomePage();
cy.contains('Level 0')
cy.reportSkillForUser('IronMan', 'user1', 'proj2')
cy.contains('Level 0')
cy.get('[data-cy=globalEventResult]').should('be.empty');
})
}
if (Utils.versionLaterThan("@skilltree/skills-client-vue", '1.1.1')) {
it('global event is not reported when skill is not applied', () => {
cy.createDefaultProject()
cy.reportSkillForUser('IronMan', 'user1')
cy.visitHomePage();
cy.contains('Level 1')
cy.reportSkillForUser('IronMan', 'user1')
cy.contains('Level 1')
cy.get('[data-cy=globalEventResult]').should('be.empty');
})
}
if (Utils.versionLaterThan("@skilltree/skills-client-vue", '1.1.1')) {
it('level component should not update when admin reports skill for other user', () => {
cy.createDefaultProject()
Cypress.Commands.add("reportSkill", (skillId) => {
cy.backendPost(`/api/projects/proj1/skills/${skillId}`)
})
cy.visitHomePage();
cy.contains('Level 0')
cy.reportSkillForUser('IronMan', '[email protected]')
cy.contains('Level 0')
})
}
it('v-skill directive on click', () => {
cy.createDefaultProject(1, 2, 50, 2)
cy.server().route('POST', '/api/projects/proj1/skills/IronMan').as('postSkill')
cy.visit('/vuejs#/')
Cypress.Commands.add("clickOnDirectiveBtn", (skillApplied = true) => {
cy.get('#SkillsDirectiveClickEvent button').click()
cy.wait('@postSkill')
cy.get('@postSkill').then((xhr) => {
expect(xhr.status).to.eq(200)
expect(xhr.responseBody).to.have.property('skillApplied').to.eq(skillApplied)
});
})
cy.clickOnDirectiveBtn()
cy.clickOnDirectiveBtn()
cy.clickOnDirectiveBtn(false)
})
it('v-skill directive on input', () => {
cy.createDefaultProject(1, 2, 50, 2)
cy.server().route('POST', '/api/projects/proj1/skills/Thor').as('postSkill')
cy.visitHomePage();
Cypress.Commands.add("typeToInput", (skillApplied = true) => {
cy.get('#SkillsDirectiveInputEvent input').type('h')
cy.wait('@postSkill')
cy.get('@postSkill').then((xhr) => {
expect(xhr.status).to.eq(200)
expect(xhr.responseBody).to.have.property('skillApplied').to.eq(skillApplied)
});
})
cy.typeToInput()
cy.typeToInput()
cy.typeToInput(false)
})
it('v-skill directive on click with error', () => {
cy.createDefaultTinyProject()
cy.server().route('POST', '/api/projects/proj1/skills/DoesNotExist').as('postSkill')
cy.visitHomePage();
cy.get('#SkillsDirectiveErrorwithButton button').click()
cy.wait('@postSkill');
cy.get('@postSkill').then((xhr) => {
expect(xhr.status).to.eq(400)
expect(xhr.responseBody).to.have.property('explanation').to.eq('Failed to report skill event because skill definition does not exist.')
});
})
it('v-skill directive on input with error', () => {
cy.createDefaultTinyProject()
cy.server().route('POST', '/api/projects/proj1/skills/DoesNotExist').as('postSkill')
cy.visitHomePage();
cy.get('#SkillsDirectiveErrorwithInput input').type('h')
cy.wait('@postSkill');
cy.get('@postSkill').then((xhr) => {
expect(xhr.status).to.eq(400)
expect(xhr.responseBody).to.have.property('explanation').to.eq('Failed to report skill event because skill definition does not exist.')
});
})
it('skill display', () => {
cy.createDefaultTinyProject()
cy.server().route('/api/users/user1/token').as('getToken')
cy.backendPost('/api/projects/proj1/skills/Thor', {userId: 'user1', timestamp: Date.now()})
cy.visit('/vuejs#/showSkills')
cy.wait('@getToken')
cy.iframe((body) => {
cy.wait('@getToken')
cy.wrap(body).contains('My Level')
cy.wrap(body).contains('50 Points earned Today')
cy.wrap(body).contains('Subject 0')
// verify that there is no background set
// cypress always validates against rgb
cy.wrap(body).find('.skills-page-title-text-color')
.should('have.css', 'background-color').and('equal', 'rgb(255, 255, 255)');
});
})
it('skill display - summary only', () => {
cy.createDefaultTinyProject()
cy.server().route('/api/users/user1/token').as('getToken')
cy.backendPost('/api/projects/proj1/skills/Thor', {userId: 'user1', timestamp: Date.now()})
cy.visit('/vuejs#/showSkills?isSummaryOnly=true')
cy.wait('@getToken')
cy.iframe((body) => {
cy.wait('@getToken')
cy.wrap(body).contains('My Level')
cy.wrap(body).contains('50 Points earned Today')
cy.wrap(body).contains('Subject 0').should('not.exist')
// verify that there is no background set
// cypress always validates against rgb
cy.wrap(body).find('.skills-page-title-text-color')
.should('have.css', 'background-color').and('equal', 'rgb(255, 255, 255)');
})
})
it('skill display - theme', () => {
cy.createDefaultTinyProject()
cy.server().route('/api/users/user1/token').as('getToken')
cy.backendPost('/api/projects/proj1/skills/Thor', {userId: 'user1', timestamp: Date.now()})
cy.visit('/vuejs#/showSkills?themeName=Dark Blue')
cy.wait('@getToken')
cy.iframe((body) => {
cy.wait('@getToken')
cy.wrap(body).contains('My Level')
cy.wrap(body).contains('50 Points earned Today')
cy.wrap(body).contains('Subject 0')
// verify dark blue background of hex #152E4d
// cypress always validates against rgb
cy.wrap(body).find('.skills-page-title-text-color')
.should('have.css', 'background-color').and('equal', 'rgb(21, 46, 77)');
})
})
it('skill display - summary only - theme', () => {
cy.createDefaultTinyProject()
cy.server().route('/api/users/user1/token').as('getToken')
cy.backendPost('/api/projects/proj1/skills/Thor', {userId: 'user1', timestamp: Date.now()})
cy.visit('/vuejs#/showSkills?themeName=Dark Blue&isSummaryOnly=true')
cy.wait('@getToken')
cy.iframe((body) => {
cy.wait('@getToken')
cy.wrap(body).contains('My Level')
cy.wrap(body).contains('50 Points earned Today')
cy.wrap(body).contains('Subject 0').should('not.exist')
// verify dark blue background of hex #152E4d
// cypress always validates against rgb
cy.wrap(body).find('.skills-page-title-text-color')
.should('have.css', 'background-color').and('equal', 'rgb(21, 46, 77)');
})
})
it('client display should display an error if skills service is down', () => {
cy.server().route({
method: 'GET',
url: '/public/status',
status: 503, // server is down
response: {}
}).as('getStatus')
cy.visit('/vuejs#/showSkills')
cy.wait('@getStatus')
cy.contains('Could NOT reach Skills Service')
});
it('only display skills up-to the provided version', () => {
cy.createDefaultTinyProject()
cy.server().route('/api/users/user1/token').as('getToken')
cy.backendAddSkill('skillv1', 1)
cy.backendAddSkill('skillv2', 2)
cy.visit('/vuejs#/showSkills')
cy.wait('@getToken')
cy.wait(iFrameTimeout);
cy.iframe((body) => {
cy.wait('@getToken')
cy.wrap(body).contains('Earn up to 200 points')
})
cy.visit('/vuejs#/')
cy.visit('/vuejs#/showSkills?skillsVersion=1')
cy.wait('@getToken')
cy.wait(iFrameTimeout);
cy.iframe((body) => {
cy.wrap(body).contains('Earn up to 150 points')
})
cy.visit('/vuejs#/')
cy.visit('/vuejs#/showSkills?skillsVersion=0')
cy.wait('@getToken')
cy.wait(iFrameTimeout);
cy.iframe((body) => {
cy.wrap(body).contains('Earn up to 100 points')
})
});
if (Utils.versionLaterThan('@skilltree/skills-client-react', '1.1.1')) {
it('skillsClientVersion is reported correctly', () => {
cy.createDefaultProject()
cy.visit('/vuejs#/')
cy.server().route('POST', '/api/projects/proj1/skillsClientVersion').as('reportClientVersion')
cy.wait('@reportClientVersion')
cy.get('@reportClientVersion').then((xhr) => {
expect(xhr.status).to.eq(200)
expect(xhr.responseBody).to.have.property('success').to.eq(true)
});
cy.get('@reportClientVersion').should((xhr) => {
expect(xhr.request.body, 'request body').
to.have.property('skillsClientVersion').
and.to.contain('@skilltree/skills-client-vue-')
});
})
}
})
@@ -1,5 +1,5 @@
/*
* Copyright 2020 SkillTree
* Copyright 2025 SkillTree
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -25,6 +25,7 @@
// This function is called when a project is opened or re-opened (e.g. due to
// the project's config changing)
const { readPdf } = require('./read-pdf')
module.exports = (on, config) => {
// `on` is used to hook into various events Cypress emits
@@ -39,4 +40,8 @@ module.exports = (on, config) => {
}
return launchOptions;
});
on("task", {
readPdf
})
}
@@ -1,5 +1,5 @@
/*
* Copyright 2020 SkillTree
* Copyright 2025 SkillTree
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,13 +13,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
const proxy = require('http-proxy-middleware');
module.exports = function(app) {
app.use(
'/api',
proxy({
target: 'http://localhost:8090',
changeOrigin: true,
})
);
};
const fs = require('fs')
const pdf = require('pdf-parse')
const readPdf = (filename) => {
const dataBuffer = fs.readFileSync(filename)
return pdf(dataBuffer).then(function (data) {
return {
numpages: data.numpages,
text: data.text,
}
})
}
module.exports = { readPdf }
@@ -1,5 +1,5 @@
/*
* Copyright 2020 SkillTree
* Copyright 2025 SkillTree
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -38,109 +38,268 @@
//
// -- This will overwrite an existing command --
// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... })
import selectors from './selectors.js'
const backend = 'http://localhost:8080';
const baseUrl = Cypress.config().baseUrl;
const skillsDisplayHomePage = '/native/clientDisplay.html'
Cypress.Commands.add('onlyOn', (enabled) => {
if (enabled !== true) {
cy.state('runnable').ctx.skip()
}
})
Cypress.Commands.add("visitSkillsDisplay", (url = '') => {
cy.visit(`${skillsDisplayHomePage}${url}`);
})
Cypress.Commands.add("backendRegister", (user, pass, grantRoot) => {
return cy.request(`${backend}/app/users/validExistingDashboardUserId/${user}`)
.then((response) => {
if (response.body !== true) {
cy.log(`Creating user [${user}]`)
cy.request('PUT', `${backend}/createAccount`, {
firstName: 'Firstname',
lastName: 'LastName',
email: user,
password: pass,
});
if (grantRoot) {
cy.request('POST', `${backend}/grantFirstRoot`);
}
cy.request('POST', `${backend}/logout`);
} else {
cy.log(`User [${user}] already exist`)
}
return cy.request(`${backend}/app/users/validExistingDashboardUserId/${user}`)
.then((response) => {
if (response.body !== true) {
cy.log(`Creating user [${user}]`)
cy.request('PUT', `${backend}/createAccount`, {
firstName: 'Firstname',
lastName: 'LastName',
email: user,
password: pass,
});
if (grantRoot) {
cy.request('POST', `${backend}/grantFirstRoot`);
}
cy.backendLogout()
} else {
cy.log(`User [${user}] already exists`)
}
});
});
Cypress.Commands.add("backendLogout", () => {
return cy.request('POST', `${backend}/logout`);
})
Cypress.Commands.add("backendPost", (url) => {
return cy.request('POST', `${backend}/${url}`);
})
Cypress.Commands.add("backendLogin", (user, pass) => {
cy.request( {
method: 'POST',
url: `${backend}/performLogin`,
body: {
username: user,
password: pass
},
form: true,
})
return cy.request({
method: 'POST',
url: `${backend}/performLogin`,
body: {
username: user,
password: pass
},
form: true,
})
});
Cypress.Commands.add("backendLogout", () => {
cy.request('POST', `${backend}/logout`);
return cy.request('POST', `${backend}/logout`).as('request')
});
Cypress.Commands.add("backendPost", (url, body) => {
cy.request('POST', `${backend}${url}`, body)
return cy.request('POST', `${backend}${url}`, body)
});
Cypress.Commands.add("reportSkill", (skillId, projId = 'proj1') => {
cy.backendPost(`/api/projects/${projId}/skills/${skillId}`)
cy.backendPost(`/api/projects/${projId}/skills/${skillId}`)
})
Cypress.Commands.add("reportSkillForUser", (skillId, userId, projId = 'proj1', timestamp = Date.now()) => {
cy.backendPost(`/api/projects/${projId}/skills/${skillId}`, {userId: userId, timestamp: timestamp})
cy.backendPost(`/api/projects/${projId}/skills/${skillId}`, { userId: userId, timestamp: timestamp })
})
Cypress.Commands.add("backendAddSkill", (skillId, version = 0, projId ='proj1', subjId='subj0', pointIncrement = 50, numPerformToCompletion = 1) => {
cy.backendPost(`/admin/projects/${projId}/subjects/${subjId}/skills/${skillId}`, {
projectId: projId,
subjectId: subjId,
skillId: skillId,
name: `This is ${skillId}`,
type: "Skill",
pointIncrement: pointIncrement,
numPerformToCompletion: numPerformToCompletion,
pointIncrementInterval: 0,
numMaxOccurrencesIncrementInterval: -1,
description: "This skill a skill!",
version: version,
})
Cypress.Commands.add("backendAddSkill", (skillId, version = 0, projId = 'proj1', subjId = 'subj0', pointIncrement = 50, numPerformToCompletion = 1) => {
cy.backendPost(`/admin/projects/${projId}/subjects/${subjId}/skills/${skillId}`, {
projectId: projId,
subjectId: subjId,
skillId: skillId,
name: `This is ${skillId}`,
type: "Skill",
pointIncrement: pointIncrement,
numPerformToCompletion: numPerformToCompletion,
pointIncrementInterval: 0,
numMaxOccurrencesIncrementInterval: -1,
description: "This skill a skill!",
version: version,
})
});
Cypress.Commands.add("createDefaultProject", (numSubj = 3, numSkillsPerSubj = 2, pointIncrement = 50, numPerformToCompletion = 1, projId ='proj1') => {
const skillIdsToCreate = ['IronMan', 'Thor']
cy.backendPost(`/app/projects/${projId}`, {
projectId: projId,
name: `Very Cool Project with id ${projId}`
})
for(let i=0; i < numSubj; i++){
const subjId = `subj${i}`
cy.backendPost(`/admin/projects/${projId}/subjects/${subjId}`, {
projectId: 'proj1',
subjectId: subjId,
name: `Subject ${i}`
})
for(let j=0; j < numSkillsPerSubj; j++) {
let skillId = `${subjId}_skill${j}`
if (skillIdsToCreate.length > 0){
skillId = skillIdsToCreate.pop()
}
cy.backendAddSkill(skillId, 0, projId, subjId, pointIncrement, numPerformToCompletion)
}
Cypress.Commands.add("createDefaultProject", (numSubj = 3, numSkillsPerSubj = 2, pointIncrement = 50, numPerformToCompletion = 1, projId = 'proj1', projName = null) => {
const skillIdsToCreate = ['IronMan', 'Thor']
cy.backendPost(`/app/projects/${projId}`, {
projectId: projId,
name: projName || `Very Cool Project with id ${projId}`
}).then((resp => {
if (Cypress.env('oauthMode')) {
// if we're in oauthMode, then the foo-hyrda user will own the project. so we need to give the
// defaultUser admin rights since the user will access the project from the skills-int-service app
cy.fixture('vars.json').then((vars) => {
cy.backendPost(`/admin/projects/${projId}/users/${vars.defaultUser}/roles/ROLE_PROJECT_ADMIN`)
})
}
}))
for (let i = 0; i < numSubj; i++) {
const subjId = `subj${i}`
cy.backendPost(`/admin/projects/${projId}/subjects/${subjId}`, {
projectId: 'proj1',
subjectId: subjId,
name: `Subject ${i}`
})
for (let j = 0; j < numSkillsPerSubj; j++) {
let skillId = `${subjId}_skill${j}`
if (skillIdsToCreate.length > 0) {
skillId = skillIdsToCreate.pop()
}
cy.backendAddSkill(skillId, 0, projId, subjId, pointIncrement, numPerformToCompletion)
}
}
});
Cypress.Commands.add("createDefaultTinyProject", (projId ='proj1') => {
cy.createDefaultProject(1, 2, 50, 1, projId)
Cypress.Commands.add("createDefaultTinyProject", (projId = 'proj1', projName = null) => {
cy.createDefaultProject(1, 2, 50, 1, projId, projName)
});
Cypress.Commands.add("iframe", (handleIframeBody) => {
// iframe is not support natively (as of now)
cy.get('iframe').then((iframe) => {
const body = iframe.contents().find('body');
handleIframeBody(body);
})
// iframe is not support natively (as of now)
cy.get('iframe').then((iframe) => {
const body = iframe.contents().find('body');
handleIframeBody(body);
})
});
Cypress.Commands.add('visitHomePage', (homepage) => {
const winMessage = cy.stub().as('message')
cy.visit(homepage, {
onBeforeLoad(win) {
win.addEventListener('message', (e) => {
winMessage(e.data)
})
}
})
// wait for web socket to connect
cy.get('@message').should('have.been.calledWith', {skillsWebsocketConnected:true})
cy.window().should('have.property', 'skillsLogger')
cy.skillsLog(`Visit Home page for test [${Cypress.mocha.getRunner().test.title}]`)
});
Cypress.Commands.add("cdClickSubj", () => {
cy.wrapIframe().find(selectors.firstSubjectTileBtn).click();
cy.wrapIframe().find(selectors.titleSection).contains('Subject 0');
});
Cypress.Commands.add("cdBack", (expectedTitle = 'User Skills') => {
cy.wrapIframe().find(selectors.backButton).click()
cy.wrapIframe().contains(expectedTitle);
// back button should not exist on the home page, whose title is the default value
if (expectedTitle === 'User Skills') {
cy.wrapIframe().find(selectors.backButton).should('not.exist');
}
});
Cypress.Commands.add("clientDisplay", (firstVisit=false, project='proj1') => {
cy.intercept(`/api/projects/${project}/rank`).as(`getRank${project}`)
cy.intercept(`/api/projects/${project}/pointHistory`).as(`getPointsHistory${project}`)
if (firstVisit) {
cy.wait(`@getRank${project}`)
cy.wait(`@getPointsHistory${project}`)
}
return cy.wrapIframe();
});
Cypress.Commands.add('wrapIframe', () => {
return cy.get('iframe')
.its('0.contentDocument.body').should('not.be.empty')
.then(cy.wrap)
});
Cypress.Commands.add('skillsLog', (message) => {
cy.window().then(win => {
if (win.skillsLogger) {
win.skillsLogger.info(message)
} else {
console.error('no skillsLogger found in window');
console.log(message);
}
});
});
Cypress.Commands.add('loginBySingleSignOn', (projId = 'proj1') => {
Cypress.log({
name: 'loginBySingleSignOn',
})
// first try to get a skills token,
cy.request({
url: `http://localhost:8080/api/projects/${projId}/token`,
failOnStatusCode: false,
}).then((tokenResp) => {
if (tokenResp.status === 401) {
cy.skillsLog('Skills token request failed, authenticating with OAuth provider...');
cy.request({
url: 'http://localhost:8080/oauth2/authorization/hydra',
qs: { skillsRedirectUri: baseUrl, },
// qs: { skillsRedirectUri: `${baseUrl}${homePage}` },
}).then((resp) => {
expect(resp.status).to.eq(200)
// parse out the authenticity_token
const $html = Cypress.$(resp.body)
const authenticityToken = $html.find('input[name=_csrf]').val()
const challenge = $html.find('input[name=challenge]').val()
const options = {
method: 'POST',
url: 'http://localhost:3000/login',
form: true, // we are submitting a regular form body
body: {
_csrf: authenticityToken,
challenge,
email: '[email protected]',
password: 'foobar',
submit: 'Log in',
remember: '1',
},
};
cy.request(options).then((resp2) => {
expect(resp2.status).to.eq(200)
if (resp2.redirects[resp2.redirects.length-1].includes('/consent?consent_challenge')) {
cy.skillsLog('Granting consent with OAuth provider...');
const $html = Cypress.$(resp2.body)
const authenticityToken = $html.find('input[name=_csrf]').val()
const challenge = $html.find('input[name=challenge]').val()
// const consentUrl = resp2.redirects.filter(r => r.includes('/consent?consent_challenge'))[0].split(' ')[1]
const options = {
method: 'POST',
url: 'http://localhost:3000/consent',
form: true, // we are submitting a regular form body
qs: { consent_challenge: challenge },
body: {
_csrf: authenticityToken,
challenge,
grant_scope: 'openid',
// grant_scope: 'offline',
submit: 'Allow access',
remember: '1',
},
failOnStatusCode: false,
};
cy.request(options).then((resp3) => {
expect(resp3.status).to.eq(200)
})
}
})
})
} else {
cy.skillsLog('Received Skills token, already authenticated with OAuth provider.');
}
})
});
@@ -0,0 +1,70 @@
/*
* Copyright 2025 SkillTree
*
* 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// ***********************************************************
// This example support/index.js is processed and
// loaded automatically before your test files.
//
// This is a great place to put global configuration and
// behavior that modifies Cypress.
//
// You can change the location of this file or turn off
// automatically serving support files with the
// 'supportFile' configuration option.
//
// You can read more here:
// https://on.cypress.io/configuration
// ***********************************************************
// Import commands.js using ES2015 syntax:
import './commands'
// Alternatively you can use CommonJS syntax:
// require('./commands')
before(() => {
cy.readFile('../skills-int-client-js/package.json').then((packageJson) => {
const skillsClientJsVersion = packageJson['dependencies']['@skilltree/skills-client-js']
Cypress.env('skills-client-js-version', skillsClientJsVersion)
cy.log(`Running with skills-client-js version [${skillsClientJsVersion}]`)
})
})
beforeEach(() => {
// first call to npm fails, looks like this may be the bug: https://github.com/cypress-io/cypress/issues/6081
cy.exec('npm version', { failOnNonZeroExit: false })
cy.exec('npm run backend:resetDb')
cy.log(`Running with skills-client-js version [${Cypress.env('skills-client-js-version')}]`)
cy.fixture('vars.json').then((vars) => {
cy.request('api/config').then(resp => {
cy.backendRegister(vars.rootUser, vars.defaultPass, true);
cy.backendRegister(vars.defaultUser, vars.defaultPass); // used by the skills-int-service app
if (!Cypress.env('oauthMode')) {
cy.backendLogin(vars.defaultUser, vars.defaultPass);
Cypress.env('proxyUser', 'user1')
Cypress.env('tokenUrl', '/api/users/user1/token')
} else {
cy.loginBySingleSignOn()
Cypress.env('proxyUser', 'foo-hydra')
Cypress.env('tokenUrl', 'http://localhost:8080/api/projects/proj1/token')
}
});
})
})
afterEach(() => {
cy.skillsLog(`Completed test [${Cypress.mocha.getRunner().test.title}]`)
})
@@ -1,48 +0,0 @@
/*
* Copyright 2020 SkillTree
*
* 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// ***********************************************************
// This example support/index.js is processed and
// loaded automatically before your test files.
//
// This is a great place to put global configuration and
// behavior that modifies Cypress.
//
// You can change the location of this file or turn off
// automatically serving support files with the
// 'supportFile' configuration option.
//
// You can read more here:
// https://on.cypress.io/configuration
// ***********************************************************
// Import commands.js using ES2015 syntax:
import './commands'
// Alternatively you can use CommonJS syntax:
// require('./commands')
beforeEach(() => {
// first call to npm fails, looks like this may be the bug: https://github.com/cypress-io/cypress/issues/6081
cy.exec('npm version', {failOnNonZeroExit: false})
cy.exec('npm run backend:resetDb')
cy.fixture('vars.json').then((vars) => {
cy.backendRegister(vars.rootUser, vars.defaultPass, true);
cy.backendRegister(vars.defaultUser, vars.defaultPass);
cy.backendLogin(vars.defaultUser, vars.defaultPass);
});
})
@@ -0,0 +1,70 @@
/*
* Copyright 2025 SkillTree
*
* 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
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Utils from "../e2e/Utils";
const buildFirstSubjectTileBtnSelector = () => {
if (Utils.skillsServiceVersionLaterThan('3.0.0')) {
return '[data-cy="subjectTile-subj0"] [data-cy="subjectTileBtn"]'
}
return '[data-cy="subjectTile"]:nth-child(1)'
}
const buildMyRankBtnSelector = () => {
if (Utils.skillsServiceVersionLaterThan('3.0.0')) {
return '[data-cy="myRankBtn"]'
}
return '[data-cy="myRank"]'
}
const buildSkillLinkSelector = (skillId) => {
if (Utils.skillsServiceVersionLaterThan('3.0.0')) {
return `[data-cy="skillProgressTitle-${skillId}"] [data-cy="skillProgressTitle"]`
}
return `#skillRow-${skillId} [data-cy="skillProgressTitle"]`
}
const buildSkillTitleSelector = (skillId) => {
if (Utils.skillsServiceVersionLaterThan('3.0.0')) {
return `[data-cy="skillProgressTitle-${skillId}"]`
}
return `#skillProgressTitle-${skillId}`
}
const buildBreadcrumbLinkSelector = (itemId) => {
if (Utils.skillsServiceVersionLaterThan('3.0.0')) {
return `[data-cy="breadcrumbLink-${itemId}"]`
}
return`[data-cy="breadcrumb-${itemId}"]`
}
const selectors = {
backButton: '[data-cy=back]',
myRankButton: buildMyRankBtnSelector(),
titleSection: '[data-cy="skillsTitle"]',
nextSkillButton: '[data-cy="nextSkill"]',
firstSubjectTileBtn: buildFirstSubjectTileBtnSelector(),
buildSkillLinkSelector: buildSkillLinkSelector,
buildSkillTitleSelector: buildSkillTitleSelector,
buildBreadcrumbLinkSelector: buildBreadcrumbLinkSelector
}
export default selectors
@@ -1,4 +1,4 @@
-- Copyright 2020 SkillTree
-- Copyright 2025 SkillTree
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
@@ -12,7 +12,20 @@
-- See the License for the specific language governing permissions and
-- limitations under the License.
-- creating Inception project is expensive so lets not delete it
delete from PROJECT_DEFINITION where PROJECT_ID <> 'Inception';
delete from USER_ATTRS where USER_ID <> '[email protected]' and USER_ID <> '[email protected]';
delete from GLOBAL_BADGE_LEVEL_DEFINITION;
delete from SKILL_DEFINITION where PROJECT_ID is null;
delete from project_definition where project_id <> 'Inception';
delete from quiz_definition;
delete from user_attrs where user_id <> '[email protected]' and user_id <> '[email protected]';
delete from user_roles where user_id = '[email protected]' and (role_name = 'ROLE_SUPER_DUPER_USER' OR role_name = 'ROLE_SUPERVISOR' OR role_name = 'ROLE_PROJECT_ADMIN' OR role_name = 'ROLE_PRIVATE_PROJECT_USER' OR role_name = 'ROLE_DASHBOARD_ADMIN_ACCESS');
delete from user_roles where user_id = '[email protected]' and role_name = 'ROLE_SUPERVISOR';
delete from global_badge_level_definition;
delete from skill_definition where project_id is null;
delete from user_achievement;
delete from settings where setting_group <> 'project.inception';
delete from user_points where project_id = 'Inception';
delete from user_achievement where project_id = 'Inception';
delete from user_performed_skill where project_id = 'Inception';
delete from user_events where project_id = 'Inception';
delete from user_tags;
delete from notifications;
delete from user_actions_history;
delete from custom_icons;
@@ -0,0 +1,36 @@
###########################################################################
####### FOR DEMONSTRATION PURPOSES ONLY #######
###########################################################################
# #
# If you have not yet read the tutorial, do so now: #
# https://www.ory.sh/docs/hydra/5min-tutorial #
# #
# This set up is only for demonstration purposes. The login #
# endpoint can only be used if you follow the steps in the tutorial. #
# #
###########################################################################
version: '3'
services:
hydra-migrate:
image: oryd/hydra:v1.8.5
environment:
- DSN=mysql://root:secret@tcp(mysqld:3306)/mysql?max_conns=20&max_idle_conns=4
command:
migrate sql -e --yes
restart: on-failure
hydra:
depends_on:
- hydra-migrate
environment:
- DSN=mysql://root:secret@tcp(mysqld:3306)/mysql?max_conns=20&max_idle_conns=4
mysqld:
image: mysql:5.7
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=secret
@@ -0,0 +1,44 @@
###########################################################################
####### FOR DEMONSTRATION PURPOSES ONLY #######
###########################################################################
# #
# If you have not yet read the tutorial, do so now: #
# https://www.ory.sh/docs/hydra/5min-tutorial #
# #
# This set up is only for demonstration purposes. The login #
# endpoint can only be used if you follow the steps in the tutorial. #
# #
###########################################################################
version: '2.2'
services:
hydra-migrate:
image: oryd/hydra:v1.8.5
mem_limit: 512m
container_name: hydra_migrate
environment:
- DSN=postgres://hydra:secret@postgresd:5433/hydra?sslmode=disable&max_conns=20&max_idle_conns=4
command:
migrate sql -e --yes
restart: on-failure
hydra:
depends_on:
- hydra-migrate
environment:
- DSN=postgres://hydra:secret@postgresd:5433/hydra?sslmode=disable&max_conns=20&max_idle_conns=4
postgresd:
image: postgres:9.6
mem_limit: 512m
container_name: hydra_postgres
ports:
- "5433:5433"
environment:
- POSTGRES_USER=hydra
- POSTGRES_PASSWORD=secret
- POSTGRES_DB=hydra
- POSTGRES_PORT=5433
- PGPORT=5433
Loaded 100 of 219 files, more files were not shown because too many files have changed in this diff. Show more