21 |
404
22 |
23 |
Page not found :(
24 |
The requested page could not be found.
25 |
26 |
--------------------------------------------------------------------------------
/docs/Gemfile:
--------------------------------------------------------------------------------
1 | source "https://rubygems.org"
2 | # Hello! This is where you manage which Jekyll version is used to run.
3 | # When you want to use a different version, change it below, save the
4 | # file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
5 | #
6 | # bundle exec jekyll serve
7 | #
8 | # This will help ensure the proper Jekyll version is running.
9 | # Happy Jekylling!
10 | #gem "jekyll", "~> 4.2.0"
11 | # This is the default theme for new Jekyll sites. You may change this to anything you like.
12 | gem "minima", "~> 2.5.1"
13 | # If you want to use GitHub Pages, remove the "gem "jekyll"" above and
14 | # uncomment the line below. To upgrade, run `bundle update github-pages`.
15 | gem "github-pages", "~> 217", group: :jekyll_plugins
16 | # If you have any plugins, put them here!
17 | group :jekyll_plugins do
18 | gem "jekyll-feed", "~> 0.12"
19 | end
20 |
21 | # Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
22 | # and associated library.
23 | platforms :mingw, :x64_mingw, :mswin, :jruby do
24 | gem "tzinfo", "~> 1.2"
25 | gem "tzinfo-data"
26 | end
27 |
28 | # Performance-booster for watching directories on Windows
29 | gem "wdm", "~> 0.1.1", :platforms => [:mingw, :x64_mingw, :mswin]
30 |
31 |
--------------------------------------------------------------------------------
/docs/_config.yml:
--------------------------------------------------------------------------------
1 | # Welcome to Jekyll!
2 | #
3 | # This config file is meant for settings that affect your whole blog, values
4 | # which you are expected to set up once and rarely edit after that. If you find
5 | # yourself editing this file very often, consider using Jekyll's data files
6 | # feature for the data you need to update frequently.
7 | #
8 | # For technical reasons, this file is *NOT* reloaded automatically when you use
9 | # 'bundle exec jekyll serve'. If you change this file, please restart the server process.
10 | #
11 | # If you need help with YAML syntax, here are some quick references for you:
12 | # https://learn-the-web.algonquindesign.ca/topics/markdown-yaml-cheat-sheet/#yaml
13 | # https://learnxinyminutes.com/docs/yaml/
14 | #
15 | # Site settings
16 | # These are used to personalize your new site. If you look in the HTML files,
17 | # you will see them accessed via {{ site.title }}, {{ site.email }}, and so on.
18 | # You can create any custom variable you would like, and they will be accessible
19 | # in the templates via {{ site.myvariable }}.
20 |
21 | title: CATAPULT Documentation
22 | description: >-
23 | User documentation for the CATAPULT cmi5 Player, LMS Test Suite, and Content Test Suite.
24 | baseurl: "/CATAPULT" # the subpath of your site, e.g. /blog
25 | url: "https://adlnet.github.io"
26 | twitter_username: ADL_Initiative
27 | github_username: adlnet
28 |
29 | # Build settings
30 | theme: minima
31 | header_pages:
32 | - about.markdown
33 |
34 | plugins:
35 | - jekyll-feed
36 |
37 | # Exclude from processing.
38 | # The following items will not be processed, by default.
39 | # Any item listed under the `exclude:` key here will be automatically added to
40 | # the internal "default list".
41 | #
42 | # Excluded items can be processed by explicitly listing the directories or
43 | # their entries' file path in the `include:` list.
44 | #
45 | # exclude:
46 | # - .sass-cache/
47 | # - .jekyll-cache/
48 | # - gemfiles/
49 | # - Gemfile
50 | # - Gemfile.lock
51 | # - node_modules/
52 | # - vendor/bundle/
53 | # - vendor/cache/
54 | # - vendor/gems/
55 | # - vendor/ruby/
56 |
--------------------------------------------------------------------------------
/docs/_includes/header.html:
--------------------------------------------------------------------------------
1 |
32 |
--------------------------------------------------------------------------------
/docs/assets/main.scss:
--------------------------------------------------------------------------------
1 | ---
2 | # Overrides for some style rules in the minima theme that have WCAG 2.0 issues.
3 | ---
4 |
5 | $brand-color: #345d96;
6 | $grey-color: #71767a;
7 |
8 | @import "minima";
9 |
10 | a {
11 | text-decoration: underline;
12 | }
13 |
14 | figure > img {
15 | border: 1px solid #c6cace;
16 | }
17 |
--------------------------------------------------------------------------------
/docs/cts/img/au_card.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adlnet/CATAPULT/515126a016718d199abc008d027e89d1f9d8775f/docs/cts/img/au_card.png
--------------------------------------------------------------------------------
/docs/cts/img/au_configuration.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adlnet/CATAPULT/515126a016718d199abc008d027e89d1f9d8775f/docs/cts/img/au_configuration.png
--------------------------------------------------------------------------------
/docs/cts/img/au_session.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adlnet/CATAPULT/515126a016718d199abc008d027e89d1f9d8775f/docs/cts/img/au_session.png
--------------------------------------------------------------------------------
/docs/cts/img/au_session_requirement_violated.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adlnet/CATAPULT/515126a016718d199abc008d027e89d1f9d8775f/docs/cts/img/au_session_requirement_violated.png
--------------------------------------------------------------------------------
/docs/cts/img/course_details_no_tests.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adlnet/CATAPULT/515126a016718d199abc008d027e89d1f9d8775f/docs/cts/img/course_details_no_tests.png
--------------------------------------------------------------------------------
/docs/cts/img/course_details_structure.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adlnet/CATAPULT/515126a016718d199abc008d027e89d1f9d8775f/docs/cts/img/course_details_structure.png
--------------------------------------------------------------------------------
/docs/cts/img/course_details_tests.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adlnet/CATAPULT/515126a016718d199abc008d027e89d1f9d8775f/docs/cts/img/course_details_tests.png
--------------------------------------------------------------------------------
/docs/cts/img/course_list.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adlnet/CATAPULT/515126a016718d199abc008d027e89d1f9d8775f/docs/cts/img/course_list.png
--------------------------------------------------------------------------------
/docs/cts/img/delete_course.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adlnet/CATAPULT/515126a016718d199abc008d027e89d1f9d8775f/docs/cts/img/delete_course.png
--------------------------------------------------------------------------------
/docs/cts/img/first_user.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adlnet/CATAPULT/515126a016718d199abc008d027e89d1f9d8775f/docs/cts/img/first_user.png
--------------------------------------------------------------------------------
/docs/cts/img/navbar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adlnet/CATAPULT/515126a016718d199abc008d027e89d1f9d8775f/docs/cts/img/navbar.png
--------------------------------------------------------------------------------
/docs/cts/img/new_course_error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adlnet/CATAPULT/515126a016718d199abc008d027e89d1f9d8775f/docs/cts/img/new_course_error.png
--------------------------------------------------------------------------------
/docs/cts/img/new_course_view.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adlnet/CATAPULT/515126a016718d199abc008d027e89d1f9d8775f/docs/cts/img/new_course_view.png
--------------------------------------------------------------------------------
/docs/cts/img/new_test_registration.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adlnet/CATAPULT/515126a016718d199abc008d027e89d1f9d8775f/docs/cts/img/new_test_registration.png
--------------------------------------------------------------------------------
/docs/cts/img/requirements.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adlnet/CATAPULT/515126a016718d199abc008d027e89d1f9d8775f/docs/cts/img/requirements.png
--------------------------------------------------------------------------------
/docs/cts/img/sign_in.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adlnet/CATAPULT/515126a016718d199abc008d027e89d1f9d8775f/docs/cts/img/sign_in.png
--------------------------------------------------------------------------------
/docs/cts/img/sign_out.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adlnet/CATAPULT/515126a016718d199abc008d027e89d1f9d8775f/docs/cts/img/sign_out.png
--------------------------------------------------------------------------------
/docs/cts/img/test_agent_profile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adlnet/CATAPULT/515126a016718d199abc008d027e89d1f9d8775f/docs/cts/img/test_agent_profile.png
--------------------------------------------------------------------------------
/docs/cts/img/test_details.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adlnet/CATAPULT/515126a016718d199abc008d027e89d1f9d8775f/docs/cts/img/test_details.png
--------------------------------------------------------------------------------
/docs/cts/img/test_report.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adlnet/CATAPULT/515126a016718d199abc008d027e89d1f9d8775f/docs/cts/img/test_report.png
--------------------------------------------------------------------------------
/docs/cts/img/test_results.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adlnet/CATAPULT/515126a016718d199abc008d027e89d1f9d8775f/docs/cts/img/test_results.png
--------------------------------------------------------------------------------
/docs/cts/img/test_session_initial.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adlnet/CATAPULT/515126a016718d199abc008d027e89d1f9d8775f/docs/cts/img/test_session_initial.png
--------------------------------------------------------------------------------
/docs/cts/img/test_session_passed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adlnet/CATAPULT/515126a016718d199abc008d027e89d1f9d8775f/docs/cts/img/test_session_passed.png
--------------------------------------------------------------------------------
/docs/cts/img/xml_editor_error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adlnet/CATAPULT/515126a016718d199abc008d027e89d1f9d8775f/docs/cts/img/xml_editor_error.png
--------------------------------------------------------------------------------
/docs/index.markdown:
--------------------------------------------------------------------------------
1 | ---
2 | layout: home
3 | ---
4 |
19 |
20 | CATAPULT (cmi5 Advanced Testing Application and Player Underpinning Learning Technologies) is a project funded by ADL
21 | to develop tools and resources to support the adoption of cmi5 and xAPI across the Department of Defense (DoD)
22 | enterprise.
23 |
24 | * [About CATAPULT]({{ "/about" | relative_url }})
25 | * [Project CATAPULT GitHub Repository](https://github.com/adlnet/CATAPULT)
26 | * [Project CATAPULT Course Examples](https://github.com/adlnet/CATAPULT/tree/main/course_examples)
27 | * [cmi5 Content Test Suite User Guide]({{ "/cts" | relative_url }})
28 | * [cmi5 Content Test Suite README](https://github.com/adlnet/CATAPULT/blob/main/cts/README.md)
29 | * [cmi5 LMS Test Suite README](https://github.com/adlnet/CATAPULT/blob/main/lts/README.md)
30 | * [cmi5 Player User Guide]({{ "/player" | relative_url }})
31 | * [cmi5 Player README](https://github.com/adlnet/CATAPULT/blob/main/player/README.md)
32 |
33 | ### Other Resources
34 |
35 | * [Course Examples](https://github.com/adlnet/CATAPULT/tree/main/course_examples)
36 | * [cmi5 Best Practices Guide](https://adlnet.gov/assets/uploads/cmi5%20Best%20Practices%20Guide%20-%20From%20Conception%20to%20Conformance.pdf) (PDF)
37 | * [cmi5 CATAPULT!](https://adlnet.gov/projects/cmi5-CATAPULT/)
38 | * [cmi5 Resources](https://www.adlnet.gov/resources/cmi5-resources/) from ADL Initiative
39 | * [cmi5 specification](https://aicc.github.io/CMI-5_Spec_Current/)
40 | * [xAPI specification](https://github.com/adlnet/xAPI-Spec)
41 |
--------------------------------------------------------------------------------
/docs/player/img/api_doc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adlnet/CATAPULT/515126a016718d199abc008d027e89d1f9d8775f/docs/player/img/api_doc.png
--------------------------------------------------------------------------------
/lts/.gitignore:
--------------------------------------------------------------------------------
1 | .env
2 | var
3 | lib/lms.custom.js
4 |
--------------------------------------------------------------------------------
/lts/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 | # LMS Test Suite
4 |
5 | ## Building the Package Library
6 |
7 | This test suite is a CLI Node.js application. Install the test suite dependencies in the `lts/` directory by doing:
8 |
9 | npm ci
10 |
11 | Then build the LMS test packages by doing:
12 |
13 | cd pkg
14 | npx webpack
15 |
16 | ## Running Manually
17 |
18 | The test suite itself can then be executed manually by following the [documented test procedure (procedure.md)](procedure.md) using an LMS user interface and the package library.
19 |
20 | ## Running Automatically
21 |
22 | To run this suite automatically or via CI the LMS needs to provide a custom LMS implementation library script. The LMS script should be modeled after the example found at `lib/lms.catapult-player.js`. There is a template at `lib/lms.template.js` that can be copied and used as a starting point. Name the file `lib/lms.custom.js` to have it ignored in the repository by default. The template file is extensively commented to provide direction for implementers.
23 |
24 | Once the library script has been written, create a `.env` file in the directory pointed to its location. For example:
25 |
26 | # path to LMS script (required)
27 | CATAPULT_LMS="./lib/lms.catapult-player.js"
28 |
29 | # any values leveraged by the referenced script (optional)
30 | CATAPULT_PLAYER_API_URL="http://localhost:3398/api/v1/"
31 | CATAPULT_PLAYER_KEY="my-key"
32 | CATAPULT_PLAYER_SECRET="my-keys-secret"
33 | LRS_ENDPOINT="http://localhost:8081/catapult/lrs/"
34 | LRS_KEY="my-lrs-key"
35 | LRS_SECRET="my-lrs-secret"
36 |
37 | With those files in place the dependencies should be installed using:
38 |
39 | npm ci
40 |
41 | and then the tests can be run using:
42 |
43 | npx jest
44 |
45 | This will display the test output in the console and write a uniquely named JUnit formatted XML file to the `var/` directory.
46 |
--------------------------------------------------------------------------------
/lts/arch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adlnet/CATAPULT/515126a016718d199abc008d027e89d1f9d8775f/lts/arch.png
--------------------------------------------------------------------------------
/lts/jest-puppeteer.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | launch: {
3 | headless: process.env.HEADLESS !== "false",
4 | devtools: true
5 | }
6 | };
7 |
--------------------------------------------------------------------------------
/lts/jest.setup.js:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2021 Rustici Software
3 |
4 | Licensed under the Apache License, Version 2.0 (the "License");
5 | you may not use this file except in compliance with the License.
6 | You may obtain a copy of the License at
7 |
8 | http://www.apache.org/licenses/LICENSE-2.0
9 |
10 | Unless required by applicable law or agreed to in writing, software
11 | distributed under the License is distributed on an "AS IS" BASIS,
12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | See the License for the specific language governing permissions and
14 | limitations under the License.
15 | */
16 | require("expect-puppeteer");
17 |
18 | if (! process.env.CATAPULT_LMS) {
19 | throw new Error("empty CATAPULT_LMS variable");
20 | }
21 |
22 | try {
23 | global.LMS = require(process.env.CATAPULT_LMS);
24 | }
25 | catch (ex) {
26 | throw new Error(`Failed to load LMS script: ${ex}`);
27 | }
28 |
29 | expect.extend(
30 | {
31 | toContainObject (received, argument) {
32 | const pass = this.equals(
33 | received,
34 | expect.arrayContaining([
35 | expect.objectContaining(argument)
36 | ])
37 | );
38 |
39 | if (pass) {
40 | return {
41 | message: () => (`expected ${this.utils.printReceived(received)} not to contain object ${this.utils.printExpected(argument)}`),
42 | pass: true
43 | };
44 | }
45 | else {
46 | return {
47 | message: () => (`expected ${this.utils.printReceived(received)} to contain object ${this.utils.printExpected(argument)}`),
48 | pass: false
49 | };
50 | }
51 | }
52 | }
53 | );
54 |
--------------------------------------------------------------------------------
/lts/lib/errors.js:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2021 Rustici Software
3 |
4 | Licensed under the Apache License, Version 2.0 (the "License");
5 | you may not use this file except in compliance with the License.
6 | You may obtain a copy of the License at
7 |
8 | http://www.apache.org/licenses/LICENSE-2.0
9 |
10 | Unless required by applicable law or agreed to in writing, software
11 | distributed under the License is distributed on an "AS IS" BASIS,
12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | See the License for the specific language governing permissions and
14 | limitations under the License.
15 | */
16 | class InvalidPackageError extends Error {};
17 | Object.defineProperty(
18 | InvalidPackageError.prototype,
19 | "name",
20 | {
21 | value: InvalidPackageError.name
22 | }
23 | );
24 |
25 | module.exports = {
26 | InvalidPackageError
27 | };
28 |
--------------------------------------------------------------------------------
/lts/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "catapult-lts",
3 | "version": "1.0.0",
4 | "description": "Catapult LMS testing system",
5 | "repository": {
6 | "type": "git",
7 | "url": "git+https://github.com/adlnet/CATAPULT.git"
8 | },
9 | "scripts": {
10 | "test": "jest"
11 | },
12 | "keywords": [
13 | "cmi5"
14 | ],
15 | "author": "Rustici Software