diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 47ac4d71..90da1a07 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,7 +44,7 @@ jobs: - name: Install prerequisites run: | - wget -O box.phar https://github.com/humbug/box/releases/download/4.0.2/box.phar + wget -O box.phar https://github.com/humbug/box/releases/download/4.2.0/box.phar echo "BOX_BIN=$(pwd)/box.phar" >> $GITHUB_ENV sudo chown -R $(whoami):$(whoami) . diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3a98fd1d..949ee0b4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -27,7 +27,7 @@ jobs: run: composer install --prefer-dist --no-interaction --no-progress --ansi - name: Download box.phar - run: wget -O box.phar https://github.com/humbug/box/releases/download/4.0.2/box.phar + run: wget -O box.phar https://github.com/humbug/box/releases/download/4.2.0/box.phar - name: Compile project run: php ./box.phar compile diff --git a/bin/compile b/bin/compile index 2ef802ab..4c71351f 100755 --- a/bin/compile +++ b/bin/compile @@ -40,3 +40,8 @@ php schema.phar generate tmp/original tests/e2e/schema_openapi_ref.yml -n -vv -- diff tests/e2e/original/App/OpenApi/Entity/Order.php tmp/original/App/OpenApi/Entity/Order.php; diff tests/e2e/original/App/OpenApi/Entity/Pet.php tmp/original/App/OpenApi/Entity/Pet.php; diff tests/e2e/original/App/OpenApi/Entity/User.php tmp/original/App/OpenApi/Entity/User.php; + +php schema.phar generate tmp/original tests/e2e/schema_open_education_api.yml -n -vv --ansi; + +diff tests/e2e/original/App/OpenApi/Entity/AcademicSession.php tmp/original/App/OpenApi/Entity/AcademicSession.php; +diff tests/e2e/original/App/OpenApi/Entity/Association.php tmp/original/App/OpenApi/Entity/Association.php; diff --git a/composer.json b/composer.json index 7b0d8786..83b530e6 100644 --- a/composer.json +++ b/composer.json @@ -51,7 +51,7 @@ "symfony/string": "^5.2 || ^6.0" }, "require-dev": { - "api-platform/core": "^v2.7.0-rc.1", + "api-platform/core": "^v2.7", "doctrine/orm": "^2.7", "myclabs/php-enum": "^1.7", "symfony/doctrine-bridge": "^5.2 || ^6.0", diff --git a/composer.lock b/composer.lock index 6b9562a7..1e9fb6ec 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "4688a43631493064d637c15f530b0486", + "content-hash": "e015c44d59c43f760d99f9c278ce5c96", "packages": [ { "name": "cebe/php-openapi", @@ -77,16 +77,16 @@ }, { "name": "composer/pcre", - "version": "3.0.0", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd" + "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/e300eb6c535192decd27a85bc72a9290f0d6b3bd", - "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd", + "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", + "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", "shasum": "" }, "require": { @@ -128,7 +128,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.0.0" + "source": "https://github.com/composer/pcre/tree/3.1.0" }, "funding": [ { @@ -144,7 +144,7 @@ "type": "tidelift" } ], - "time": "2022-02-25T20:21:48+00:00" + "time": "2022-11-17T09:50:14+00:00" }, { "name": "composer/semver", @@ -368,28 +368,28 @@ }, { "name": "doctrine/inflector", - "version": "2.0.4", + "version": "2.0.6", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89" + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", - "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^8.2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "vimeo/psalm": "^4.10" + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^8.5 || ^9.5", + "vimeo/psalm": "^4.25" }, "type": "library", "autoload": { @@ -439,7 +439,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.4" + "source": "https://github.com/doctrine/inflector/tree/2.0.6" }, "funding": [ { @@ -455,7 +455,7 @@ "type": "tidelift" } ], - "time": "2021-10-22T20:16:43+00:00" + "time": "2022-10-20T09:10:12+00:00" }, { "name": "doctrine/lexer", @@ -535,16 +535,16 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.11.0", + "version": "v3.13.0", "source": { "type": "git", - "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "7dcdea3f2f5f473464e835be9be55283ff8cfdc3" + "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", + "reference": "a6232229a8309e8811dc751c28b91cb34b2943e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/7dcdea3f2f5f473464e835be9be55283ff8cfdc3", - "reference": "7dcdea3f2f5f473464e835be9be55283ff8cfdc3", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/a6232229a8309e8811dc751c28b91cb34b2943e1", + "reference": "a6232229a8309e8811dc751c28b91cb34b2943e1", "shasum": "" }, "require": { @@ -568,7 +568,7 @@ }, "require-dev": { "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^1.5", + "keradus/cli-executor": "^2.0", "mikey179/vfsstream": "^1.6.10", "php-coveralls/php-coveralls": "^2.5.2", "php-cs-fixer/accessible-object": "^1.1", @@ -577,8 +577,8 @@ "phpspec/prophecy": "^1.15", "phpspec/prophecy-phpunit": "^2.0", "phpunit/phpunit": "^9.5", - "phpunitgoodpractices/polyfill": "^1.5", - "phpunitgoodpractices/traits": "^1.9.1", + "phpunitgoodpractices/polyfill": "^1.6", + "phpunitgoodpractices/traits": "^1.9.2", "symfony/phpunit-bridge": "^6.0", "symfony/yaml": "^5.4 || ^6.0" }, @@ -611,8 +611,8 @@ ], "description": "A tool to automatically fix PHP code style", "support": { - "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", - "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.11.0" + "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.13.0" }, "funding": [ { @@ -620,7 +620,7 @@ "type": "github" } ], - "time": "2022-09-01T18:24:51+00:00" + "time": "2022-10-31T19:28:50+00:00" }, { "name": "justinrainbow/json-schema", @@ -783,25 +783,25 @@ }, { "name": "nette/php-generator", - "version": "v4.0.2", + "version": "v4.0.5", "source": { "type": "git", "url": "https://github.com/nette/php-generator.git", - "reference": "f19b7975c7c4d729be5b64fce7eb72f0d4aac6fc" + "reference": "a8d6abeae5d8c7202cd69600e086a7a72877fc86" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/php-generator/zipball/f19b7975c7c4d729be5b64fce7eb72f0d4aac6fc", - "reference": "f19b7975c7c4d729be5b64fce7eb72f0d4aac6fc", + "url": "https://api.github.com/repos/nette/php-generator/zipball/a8d6abeae5d8c7202cd69600e086a7a72877fc86", + "reference": "a8d6abeae5d8c7202cd69600e086a7a72877fc86", "shasum": "" }, "require": { "nette/utils": "^3.2.7 || ^4.0", - "php": ">=8.0 <8.2" + "php": ">=8.0 <8.3" }, "require-dev": { "nette/tester": "^2.4", - "nikic/php-parser": "^4.13", + "nikic/php-parser": "^4.15", "phpstan/phpstan": "^1.0", "tracy/tracy": "^2.8" }, @@ -835,7 +835,7 @@ "homepage": "https://nette.org/contributors" } ], - "description": "🐘 Nette PHP Generator: generates neat PHP code for you. Supports new PHP 8.1 features.", + "description": "🐘 Nette PHP Generator: generates neat PHP code for you. Supports new PHP 8.2 features.", "homepage": "https://nette.org/", "keywords": [ "code", @@ -845,9 +845,9 @@ ], "support": { "issues": "https://github.com/nette/php-generator/issues", - "source": "https://github.com/nette/php-generator/tree/v4.0.2" + "source": "https://github.com/nette/php-generator/tree/v4.0.5" }, - "time": "2022-06-17T12:20:08+00:00" + "time": "2022-11-02T20:37:46+00:00" }, { "name": "nette/utils", @@ -855,12 +855,12 @@ "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "52db62bc9605d7778f0190d8fde0d5db3787be24" + "reference": "7c2a4deaf2ebf54315fdb204911534f97cb19d18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/52db62bc9605d7778f0190d8fde0d5db3787be24", - "reference": "52db62bc9605d7778f0190d8fde0d5db3787be24", + "url": "https://api.github.com/repos/nette/utils/zipball/7c2a4deaf2ebf54315fdb204911534f97cb19d18", + "reference": "7c2a4deaf2ebf54315fdb204911534f97cb19d18", "shasum": "" }, "require": { @@ -933,20 +933,20 @@ "issues": "https://github.com/nette/utils/issues", "source": "https://github.com/nette/utils/tree/master" }, - "time": "2022-09-06T01:00:53+00:00" + "time": "2022-12-04T22:52:36+00:00" }, { "name": "nikic/php-parser", - "version": "v4.15.1", + "version": "v4.15.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900" + "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", - "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", + "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", "shasum": "" }, "require": { @@ -987,9 +987,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.2" }, - "time": "2022-09-04T07:30:47+00:00" + "time": "2022-11-12T15:38:23+00:00" }, { "name": "psr/cache", @@ -1261,16 +1261,16 @@ }, { "name": "sweetrdf/easyrdf", - "version": "1.6", + "version": "1.7.1", "source": { "type": "git", "url": "https://github.com/sweetrdf/easyrdf.git", - "reference": "cd970ff3cb7c209958537d7d097324e6961e8ea9" + "reference": "19ba21288e0aa344227267cab7f8f9c565eee426" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sweetrdf/easyrdf/zipball/cd970ff3cb7c209958537d7d097324e6961e8ea9", - "reference": "cd970ff3cb7c209958537d7d097324e6961e8ea9", + "url": "https://api.github.com/repos/sweetrdf/easyrdf/zipball/19ba21288e0aa344227267cab7f8f9c565eee426", + "reference": "19ba21288e0aa344227267cab7f8f9c565eee426", "shasum": "" }, "require": { @@ -1281,6 +1281,9 @@ "lib-libxml": "*", "php": "^7.1|^8.0" }, + "replace": { + "easyrdf/easyrdf": "1.0.*|1.1.*" + }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.0", "ml/json-ld": "^1.0", @@ -1331,22 +1334,22 @@ ], "support": { "issues": "https://github.com/sweetrdf/easyrdf/issues", - "source": "https://github.com/sweetrdf/easyrdf/tree/1.6" + "source": "https://github.com/sweetrdf/easyrdf/tree/1.7.1" }, - "time": "2022-08-08T09:12:46+00:00" + "time": "2022-11-08T08:13:50+00:00" }, { "name": "symfony/config", - "version": "v6.1.3", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "a0645dc585d378b73c01115dd7ab9348f7d40c85" + "reference": "ebf27792246165a2a0b6b69ec9c620cac8c5a2f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/a0645dc585d378b73c01115dd7ab9348f7d40c85", - "reference": "a0645dc585d378b73c01115dd7ab9348f7d40c85", + "url": "https://api.github.com/repos/symfony/config/zipball/ebf27792246165a2a0b6b69ec9c620cac8c5a2f0", + "reference": "ebf27792246165a2a0b6b69ec9c620cac8c5a2f0", "shasum": "" }, "require": { @@ -1394,7 +1397,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/config/tree/v6.1.3" + "source": "https://github.com/symfony/config/tree/v6.2.0" }, "funding": [ { @@ -1410,20 +1413,20 @@ "type": "tidelift" } ], - "time": "2022-07-20T15:00:40+00:00" + "time": "2022-11-02T09:08:04+00:00" }, { "name": "symfony/console", - "version": "v6.1.4", + "version": "v6.2.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "7fccea8728aa2d431a6725b02b3ce759049fc84d" + "reference": "58f6cef5dc5f641b7bbdbf8b32b44cc926c35f3f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/7fccea8728aa2d431a6725b02b3ce759049fc84d", - "reference": "7fccea8728aa2d431a6725b02b3ce759049fc84d", + "url": "https://api.github.com/repos/symfony/console/zipball/58f6cef5dc5f641b7bbdbf8b32b44cc926c35f3f", + "reference": "58f6cef5dc5f641b7bbdbf8b32b44cc926c35f3f", "shasum": "" }, "require": { @@ -1490,7 +1493,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.1.4" + "source": "https://github.com/symfony/console/tree/v6.2.1" }, "funding": [ { @@ -1506,20 +1509,20 @@ "type": "tidelift" } ], - "time": "2022-08-26T10:32:31+00:00" + "time": "2022-12-01T13:44:20+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.1.1", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918" + "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", - "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/1ee04c65529dea5d8744774d474e7cbd2f1206d3", + "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3", "shasum": "" }, "require": { @@ -1528,7 +1531,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.1-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -1557,7 +1560,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.1.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.0" }, "funding": [ { @@ -1573,20 +1576,20 @@ "type": "tidelift" } ], - "time": "2022-02-25T11:15:52+00:00" + "time": "2022-11-25T10:21:52+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.1.0", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "a0449a7ad7daa0f7c0acd508259f80544ab5a347" + "reference": "9efb1618fabee89515fe031314e8ed5625f85a53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a0449a7ad7daa0f7c0acd508259f80544ab5a347", - "reference": "a0449a7ad7daa0f7c0acd508259f80544ab5a347", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9efb1618fabee89515fe031314e8ed5625f85a53", + "reference": "9efb1618fabee89515fe031314e8ed5625f85a53", "shasum": "" }, "require": { @@ -1640,7 +1643,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.1.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.2.0" }, "funding": [ { @@ -1656,20 +1659,20 @@ "type": "tidelift" } ], - "time": "2022-05-05T16:51:07+00:00" + "time": "2022-11-02T09:08:04+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.1.1", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "02ff5eea2f453731cfbc6bc215e456b781480448" + "reference": "0782b0b52a737a05b4383d0df35a474303cabdae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/02ff5eea2f453731cfbc6bc215e456b781480448", - "reference": "02ff5eea2f453731cfbc6bc215e456b781480448", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0782b0b52a737a05b4383d0df35a474303cabdae", + "reference": "0782b0b52a737a05b4383d0df35a474303cabdae", "shasum": "" }, "require": { @@ -1682,7 +1685,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.1-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -1719,7 +1722,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.1.1" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.0" }, "funding": [ { @@ -1735,20 +1738,20 @@ "type": "tidelift" } ], - "time": "2022-02-25T11:15:52+00:00" + "time": "2022-11-25T10:21:52+00:00" }, { "name": "symfony/filesystem", - "version": "v6.1.4", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "3f39c04d2630c34019907b02f85672dac99f8659" + "reference": "50b2523c874605cf3d4acf7a9e2b30b6a440a016" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/3f39c04d2630c34019907b02f85672dac99f8659", - "reference": "3f39c04d2630c34019907b02f85672dac99f8659", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/50b2523c874605cf3d4acf7a9e2b30b6a440a016", + "reference": "50b2523c874605cf3d4acf7a9e2b30b6a440a016", "shasum": "" }, "require": { @@ -1782,7 +1785,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.1.4" + "source": "https://github.com/symfony/filesystem/tree/v6.2.0" }, "funding": [ { @@ -1798,20 +1801,20 @@ "type": "tidelift" } ], - "time": "2022-08-02T16:17:38+00:00" + "time": "2022-11-20T13:01:27+00:00" }, { "name": "symfony/finder", - "version": "v6.1.3", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "39696bff2c2970b3779a5cac7bf9f0b88fc2b709" + "reference": "eb2355f69519e4ef33f1835bca4c935f5d42e570" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/39696bff2c2970b3779a5cac7bf9f0b88fc2b709", - "reference": "39696bff2c2970b3779a5cac7bf9f0b88fc2b709", + "url": "https://api.github.com/repos/symfony/finder/zipball/eb2355f69519e4ef33f1835bca4c935f5d42e570", + "reference": "eb2355f69519e4ef33f1835bca4c935f5d42e570", "shasum": "" }, "require": { @@ -1846,7 +1849,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/finder/tree/v6.1.3" + "source": "https://github.com/symfony/finder/tree/v6.2.0" }, "funding": [ { @@ -1862,20 +1865,20 @@ "type": "tidelift" } ], - "time": "2022-07-29T07:42:06+00:00" + "time": "2022-10-09T08:55:40+00:00" }, { "name": "symfony/options-resolver", - "version": "v6.1.0", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "a3016f5442e28386ded73c43a32a5b68586dd1c4" + "reference": "d28f02acde71ff75e957082cd36e973df395f626" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/a3016f5442e28386ded73c43a32a5b68586dd1c4", - "reference": "a3016f5442e28386ded73c43a32a5b68586dd1c4", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/d28f02acde71ff75e957082cd36e973df395f626", + "reference": "d28f02acde71ff75e957082cd36e973df395f626", "shasum": "" }, "require": { @@ -1913,7 +1916,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.1.0" + "source": "https://github.com/symfony/options-resolver/tree/v6.2.0" }, "funding": [ { @@ -1929,20 +1932,20 @@ "type": "tidelift" } ], - "time": "2022-02-25T11:15:52+00:00" + "time": "2022-11-02T09:08:04+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", "shasum": "" }, "require": { @@ -1957,7 +1960,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1995,7 +1998,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" }, "funding": [ { @@ -2011,20 +2014,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "433d05519ce6990bf3530fba6957499d327395c2" + "reference": "511a08c03c1960e08a883f4cffcacd219b758354" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", - "reference": "433d05519ce6990bf3530fba6957499d327395c2", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354", "shasum": "" }, "require": { @@ -2036,7 +2039,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2076,7 +2079,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" }, "funding": [ { @@ -2092,20 +2095,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd" + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", "shasum": "" }, "require": { @@ -2117,7 +2120,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2160,7 +2163,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" }, "funding": [ { @@ -2176,20 +2179,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", "shasum": "" }, "require": { @@ -2204,7 +2207,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2243,7 +2246,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" }, "funding": [ { @@ -2259,20 +2262,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", "shasum": "" }, "require": { @@ -2281,7 +2284,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2326,7 +2329,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" }, "funding": [ { @@ -2342,20 +2345,20 @@ "type": "tidelift" } ], - "time": "2022-05-10T07:21:04+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", "shasum": "" }, "require": { @@ -2364,7 +2367,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2405,7 +2408,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" }, "funding": [ { @@ -2421,20 +2424,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/process", - "version": "v6.1.3", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "a6506e99cfad7059b1ab5cab395854a0a0c21292" + "reference": "ba6e55359f8f755fe996c58a81e00eaa67a35877" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/a6506e99cfad7059b1ab5cab395854a0a0c21292", - "reference": "a6506e99cfad7059b1ab5cab395854a0a0c21292", + "url": "https://api.github.com/repos/symfony/process/zipball/ba6e55359f8f755fe996c58a81e00eaa67a35877", + "reference": "ba6e55359f8f755fe996c58a81e00eaa67a35877", "shasum": "" }, "require": { @@ -2466,7 +2469,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/process/tree/v6.1.3" + "source": "https://github.com/symfony/process/tree/v6.2.0" }, "funding": [ { @@ -2482,7 +2485,7 @@ "type": "tidelift" } ], - "time": "2022-06-27T17:24:16+00:00" + "time": "2022-11-02T09:08:04+00:00" }, { "name": "symfony/service-contracts", @@ -2571,16 +2574,16 @@ }, { "name": "symfony/stopwatch", - "version": "v6.1.0", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "77dedae82ce2a26e2e9b481855473fc3b3e4e54d" + "reference": "266636bb8f3fbdccc302491df7b3a1b9a8c238a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/77dedae82ce2a26e2e9b481855473fc3b3e4e54d", - "reference": "77dedae82ce2a26e2e9b481855473fc3b3e4e54d", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/266636bb8f3fbdccc302491df7b3a1b9a8c238a7", + "reference": "266636bb8f3fbdccc302491df7b3a1b9a8c238a7", "shasum": "" }, "require": { @@ -2613,7 +2616,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.1.0" + "source": "https://github.com/symfony/stopwatch/tree/v6.2.0" }, "funding": [ { @@ -2629,20 +2632,20 @@ "type": "tidelift" } ], - "time": "2022-02-25T11:15:52+00:00" + "time": "2022-09-28T16:00:52+00:00" }, { "name": "symfony/string", - "version": "v6.1.4", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "290972cad7b364e3befaa74ba0ec729800fb161c" + "reference": "145702685e0d12f81d755c71127bfff7582fdd36" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/290972cad7b364e3befaa74ba0ec729800fb161c", - "reference": "290972cad7b364e3befaa74ba0ec729800fb161c", + "url": "https://api.github.com/repos/symfony/string/zipball/145702685e0d12f81d755c71127bfff7582fdd36", + "reference": "145702685e0d12f81d755c71127bfff7582fdd36", "shasum": "" }, "require": { @@ -2658,6 +2661,7 @@ "require-dev": { "symfony/error-handler": "^5.4|^6.0", "symfony/http-client": "^5.4|^6.0", + "symfony/intl": "^6.2", "symfony/translation-contracts": "^2.0|^3.0", "symfony/var-exporter": "^5.4|^6.0" }, @@ -2698,7 +2702,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.1.4" + "source": "https://github.com/symfony/string/tree/v6.2.0" }, "funding": [ { @@ -2714,20 +2718,20 @@ "type": "tidelift" } ], - "time": "2022-08-12T18:05:43+00:00" + "time": "2022-11-30T17:13:47+00:00" }, { "name": "symfony/yaml", - "version": "v6.1.4", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "86ee4d8fa594ed45e40d86eedfda1bcb66c8d919" + "reference": "f2570f21bd4adc3589aa3133323273995109bae0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/86ee4d8fa594ed45e40d86eedfda1bcb66c8d919", - "reference": "86ee4d8fa594ed45e40d86eedfda1bcb66c8d919", + "url": "https://api.github.com/repos/symfony/yaml/zipball/f2570f21bd4adc3589aa3133323273995109bae0", + "reference": "f2570f21bd4adc3589aa3133323273995109bae0", "shasum": "" }, "require": { @@ -2772,7 +2776,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.1.4" + "source": "https://github.com/symfony/yaml/tree/v6.2.0" }, "funding": [ { @@ -2788,20 +2792,20 @@ "type": "tidelift" } ], - "time": "2022-08-02T16:17:38+00:00" + "time": "2022-11-25T19:00:27+00:00" }, { "name": "twig/twig", - "version": "v3.4.2", + "version": "v3.4.3", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "e07cdd3d430cd7e453c31b36eb5ad6c0c5e43077" + "reference": "c38fd6b0b7f370c198db91ffd02e23b517426b58" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/e07cdd3d430cd7e453c31b36eb5ad6c0c5e43077", - "reference": "e07cdd3d430cd7e453c31b36eb5ad6c0c5e43077", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/c38fd6b0b7f370c198db91ffd02e23b517426b58", + "reference": "c38fd6b0b7f370c198db91ffd02e23b517426b58", "shasum": "" }, "require": { @@ -2852,7 +2856,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.4.2" + "source": "https://github.com/twigphp/Twig/tree/v3.4.3" }, "funding": [ { @@ -2864,30 +2868,30 @@ "type": "tidelift" } ], - "time": "2022-08-12T06:47:24+00:00" + "time": "2022-09-28T08:42:51+00:00" } ], "packages-dev": [ { "name": "api-platform/core", - "version": "v2.7.0-rc.2", + "version": "v2.7.5", "source": { "type": "git", "url": "https://github.com/api-platform/core.git", - "reference": "f2c8a6113d2e004eefe10f95671a8822ce307733" + "reference": "b670958db633d66b05bc46ff34c3bb7c1b306c70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/core/zipball/f2c8a6113d2e004eefe10f95671a8822ce307733", - "reference": "f2c8a6113d2e004eefe10f95671a8822ce307733", + "url": "https://api.github.com/repos/api-platform/core/zipball/b670958db633d66b05bc46ff34c3bb7c1b306c70", + "reference": "b670958db633d66b05bc46ff34c3bb7c1b306c70", "shasum": "" }, "require": { "doctrine/inflector": "^1.0 || ^2.0", - "fig/link-util": "^1.0", "php": ">=7.1", "psr/cache": "^1.0 || ^2.0 || ^3.0", "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", "symfony/http-foundation": "^4.4 || ^5.1 || ^6.0", "symfony/http-kernel": "^4.4 || ^5.1 || ^6.0", "symfony/property-access": "^3.4.19 || ^4.4 || ^5.1 || ^6.0", @@ -2900,7 +2904,8 @@ "doctrine/common": "<2.7", "doctrine/dbal": "<2.10", "doctrine/mongodb-odm": "<2.2", - "doctrine/persistence": "<1.3" + "doctrine/persistence": "<1.3", + "elasticsearch/elasticsearch": ">=8.0" }, "require-dev": { "behat/behat": "^3.1", @@ -2923,6 +2928,7 @@ "justinrainbow/json-schema": "^5.2.1", "phpdocumentor/reflection-docblock": "^3.0 || ^4.0 || ^5.1", "phpdocumentor/type-resolver": "^0.3 || ^0.4 || ^1.4", + "phpspec/prophecy": "^1.10", "phpstan/extension-installer": "^1.1", "phpstan/phpstan": "^1.1", "phpstan/phpstan-doctrine": "^1.0", @@ -3025,7 +3031,7 @@ ], "support": { "issues": "https://github.com/api-platform/core/issues", - "source": "https://github.com/api-platform/core/tree/v2.7.0-rc.2" + "source": "https://github.com/api-platform/core/tree/v2.7.5" }, "funding": [ { @@ -3033,7 +3039,7 @@ "type": "tidelift" } ], - "time": "2022-07-25T08:58:06+00:00" + "time": "2022-11-25T08:03:09+00:00" }, { "name": "doctrine/cache", @@ -3130,16 +3136,16 @@ }, { "name": "doctrine/collections", - "version": "1.7.2", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "3fe77330f5591108bbf1315da7377a7e704ed8a0" + "reference": "2b44dd4cbca8b5744327de78bafef5945c7e7b5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/3fe77330f5591108bbf1315da7377a7e704ed8a0", - "reference": "3fe77330f5591108bbf1315da7377a7e704ed8a0", + "url": "https://api.github.com/repos/doctrine/collections/zipball/2b44dd4cbca8b5744327de78bafef5945c7e7b5e", + "reference": "2b44dd4cbca8b5744327de78bafef5945c7e7b5e", "shasum": "" }, "require": { @@ -3194,22 +3200,22 @@ ], "support": { "issues": "https://github.com/doctrine/collections/issues", - "source": "https://github.com/doctrine/collections/tree/1.7.2" + "source": "https://github.com/doctrine/collections/tree/1.8.0" }, - "time": "2022-08-27T16:08:58+00:00" + "time": "2022-09-01T20:12:10+00:00" }, { "name": "doctrine/common", - "version": "3.4.0", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/doctrine/common.git", - "reference": "e09556bbdf95b8420e649162b19ae9da2d1a80f3" + "reference": "8b5e5650391f851ed58910b3e3d48a71062eeced" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/e09556bbdf95b8420e649162b19ae9da2d1a80f3", - "reference": "e09556bbdf95b8420e649162b19ae9da2d1a80f3", + "url": "https://api.github.com/repos/doctrine/common/zipball/8b5e5650391f851ed58910b3e3d48a71062eeced", + "reference": "8b5e5650391f851ed58910b3e3d48a71062eeced", "shasum": "" }, "require": { @@ -3217,13 +3223,13 @@ "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9.0", + "doctrine/coding-standard": "^9.0 || ^10.0", "doctrine/collections": "^1", "phpstan/phpstan": "^1.4.1", "phpstan/phpstan-phpunit": "^1", "phpunit/phpunit": "^7.5.20 || ^8.5 || ^9.0", "squizlabs/php_codesniffer": "^3.0", - "symfony/phpunit-bridge": "^4.0.5", + "symfony/phpunit-bridge": "^6.1", "vimeo/psalm": "^4.4" }, "type": "library", @@ -3271,7 +3277,7 @@ ], "support": { "issues": "https://github.com/doctrine/common/issues", - "source": "https://github.com/doctrine/common/tree/3.4.0" + "source": "https://github.com/doctrine/common/tree/3.4.3" }, "funding": [ { @@ -3287,27 +3293,27 @@ "type": "tidelift" } ], - "time": "2022-08-23T19:46:56+00:00" + "time": "2022-10-09T11:47:59+00:00" }, { "name": "doctrine/dbal", - "version": "3.4.4", + "version": "3.5.1", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "4cbbe6e4b9ef6c69d5f4c968c637476f47bb54f5" + "reference": "f38ee8aaca2d58ee88653cb34a6a3880c23f38a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/4cbbe6e4b9ef6c69d5f4c968c637476f47bb54f5", - "reference": "4cbbe6e4b9ef6c69d5f4c968c637476f47bb54f5", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/f38ee8aaca2d58ee88653cb34a6a3880c23f38a5", + "reference": "f38ee8aaca2d58ee88653cb34a6a3880c23f38a5", "shasum": "" }, "require": { "composer-runtime-api": "^2", "doctrine/cache": "^1.11|^2.0", "doctrine/deprecations": "^0.5.3|^1", - "doctrine/event-manager": "^1.0", + "doctrine/event-manager": "^1|^2", "php": "^7.4 || ^8.0", "psr/cache": "^1|^2|^3", "psr/log": "^1|^2|^3" @@ -3315,14 +3321,14 @@ "require-dev": { "doctrine/coding-standard": "10.0.0", "jetbrains/phpstorm-stubs": "2022.2", - "phpstan/phpstan": "1.8.3", - "phpstan/phpstan-strict-rules": "^1.3", - "phpunit/phpunit": "9.5.24", + "phpstan/phpstan": "1.8.10", + "phpstan/phpstan-strict-rules": "^1.4", + "phpunit/phpunit": "9.5.25", "psalm/plugin-phpunit": "0.17.0", "squizlabs/php_codesniffer": "3.7.1", "symfony/cache": "^5.4|^6.0", "symfony/console": "^4.4|^5.4|^6.0", - "vimeo/psalm": "4.27.0" + "vimeo/psalm": "4.29.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -3382,7 +3388,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.4.4" + "source": "https://github.com/doctrine/dbal/tree/3.5.1" }, "funding": [ { @@ -3398,7 +3404,7 @@ "type": "tidelift" } ], - "time": "2022-09-01T21:26:42+00:00" + "time": "2022-10-24T07:26:18+00:00" }, { "name": "doctrine/deprecations", @@ -3445,34 +3451,35 @@ }, { "name": "doctrine/event-manager", - "version": "1.1.2", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/event-manager.git", - "reference": "eb2ecf80e3093e8f3c2769ac838e27d8ede8e683" + "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/eb2ecf80e3093e8f3c2769ac838e27d8ede8e683", - "reference": "eb2ecf80e3093e8f3c2769ac838e27d8ede8e683", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520", + "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520", "shasum": "" }, "require": { + "doctrine/deprecations": "^0.5.3 || ^1", "php": "^7.1 || ^8.0" }, "conflict": { "doctrine/common": "<2.9" }, "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "~1.4.10 || ^1.5.4", + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "~1.4.10 || ^1.8.8", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.22" + "vimeo/psalm": "^4.24" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" + "Doctrine\\Common\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -3516,7 +3523,7 @@ ], "support": { "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/1.1.2" + "source": "https://github.com/doctrine/event-manager/tree/1.2.0" }, "funding": [ { @@ -3532,7 +3539,7 @@ "type": "tidelift" } ], - "time": "2022-07-27T22:18:11+00:00" + "time": "2022-10-12T20:51:15+00:00" }, { "name": "doctrine/instantiator", @@ -3606,16 +3613,16 @@ }, { "name": "doctrine/orm", - "version": "2.13.1", + "version": "2.13.4", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "35c44a56677adb3ce796138b6e4934ce93ec6811" + "reference": "a5a6cc6630ce497290396d5f206887227820a634" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/35c44a56677adb3ce796138b6e4934ce93ec6811", - "reference": "35c44a56677adb3ce796138b6e4934ce93ec6811", + "url": "https://api.github.com/repos/doctrine/orm/zipball/a5a6cc6630ce497290396d5f206887227820a634", + "reference": "a5a6cc6630ce497290396d5f206887227820a634", "shasum": "" }, "require": { @@ -3642,15 +3649,15 @@ }, "require-dev": { "doctrine/annotations": "^1.13", - "doctrine/coding-standard": "^9.0", + "doctrine/coding-standard": "^9.0.2 || ^10.0", "phpbench/phpbench": "^0.16.10 || ^1.0", - "phpstan/phpstan": "~1.4.10 || 1.8.2", + "phpstan/phpstan": "~1.4.10 || 1.9.2", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", "psr/log": "^1 || ^2 || ^3", "squizlabs/php_codesniffer": "3.7.1", "symfony/cache": "^4.4 || ^5.4 || ^6.0", "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0", - "vimeo/psalm": "4.26.0" + "vimeo/psalm": "4.30.0" }, "suggest": { "ext-dom": "Provides support for XSD validation for XML mapping files", @@ -3700,26 +3707,26 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/2.13.1" + "source": "https://github.com/doctrine/orm/tree/2.13.4" }, - "time": "2022-08-08T09:00:16+00:00" + "time": "2022-11-20T18:53:31+00:00" }, { "name": "doctrine/persistence", - "version": "3.0.3", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "ac6fce61f037d7e54dbb2435f5b5648d86548e23" + "reference": "2a9c70a5e21f8968c5a46b79f819ea52f322080b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/ac6fce61f037d7e54dbb2435f5b5648d86548e23", - "reference": "ac6fce61f037d7e54dbb2435f5b5648d86548e23", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/2a9c70a5e21f8968c5a46b79f819ea52f322080b", + "reference": "2a9c70a5e21f8968c5a46b79f819ea52f322080b", "shasum": "" }, "require": { - "doctrine/event-manager": "^1.0", + "doctrine/event-manager": "^1 || ^2", "php": "^7.2 || ^8.0", "psr/cache": "^1.0 || ^2.0 || ^3.0" }, @@ -3730,14 +3737,14 @@ "require-dev": { "composer/package-versions-deprecated": "^1.11", "doctrine/annotations": "^1.7", - "doctrine/coding-standard": "^9.0", + "doctrine/coding-standard": "^10", "doctrine/common": "^3.0", - "phpstan/phpstan": "1.5.0", + "phpstan/phpstan": "1.8.8", "phpstan/phpstan-phpunit": "^1", "phpstan/phpstan-strict-rules": "^1.1", "phpunit/phpunit": "^8.5 || ^9.5", "symfony/cache": "^4.4 || ^5.4 || ^6.0", - "vimeo/psalm": "4.22.0" + "vimeo/psalm": "4.29.0" }, "type": "library", "autoload": { @@ -3786,7 +3793,7 @@ ], "support": { "issues": "https://github.com/doctrine/persistence/issues", - "source": "https://github.com/doctrine/persistence/tree/3.0.3" + "source": "https://github.com/doctrine/persistence/tree/3.1.0" }, "funding": [ { @@ -3802,68 +3809,7 @@ "type": "tidelift" } ], - "time": "2022-08-04T21:14:21+00:00" - }, - { - "name": "fig/link-util", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/link-util.git", - "reference": "10e52348a2e9ad4581f2bf3e16458f0861a88c6a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/link-util/zipball/10e52348a2e9ad4581f2bf3e16458f0861a88c6a", - "reference": "10e52348a2e9ad4581f2bf3e16458f0861a88c6a", - "shasum": "" - }, - "require": { - "php": ">=8.0.0", - "psr/link": "^1.1.0 | ^2.0.0" - }, - "provide": { - "psr/link-implementation": "1.0" - }, - "require-dev": { - "phpunit/phpunit": "^9", - "squizlabs/php_codesniffer": "^2.3.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Fig\\Link\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common utility implementations for HTTP links", - "keywords": [ - "http", - "http-link", - "link", - "psr", - "psr-13", - "rest" - ], - "support": { - "issues": "https://github.com/php-fig/link-util/issues", - "source": "https://github.com/php-fig/link-util/tree/1.2.0" - }, - "time": "2021-03-11T23:09:19+00:00" + "time": "2022-11-18T14:10:19+00:00" }, { "name": "myclabs/deep-copy", @@ -4210,25 +4156,30 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.6.1", + "version": "1.6.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "77a32518733312af16a44300404e945338981de3" + "reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", - "reference": "77a32518733312af16a44300404e945338981de3", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/48f445a408c131e38cab1c235aa6d2bb7a0bb20d", + "reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", + "php": "^7.4 || ^8.0", "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { "ext-tokenizer": "*", - "psalm/phar": "^4.8" + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" }, "type": "library", "extra": { @@ -4254,27 +4205,27 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.2" }, - "time": "2022-03-15T21:29:03+00:00" + "time": "2022-10-14T12:47:21+00:00" }, { "name": "phpspec/prophecy", - "version": "v1.15.0", + "version": "v1.16.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" + "reference": "be8cac52a0827776ff9ccda8c381ac5b71aeb359" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be8cac52a0827776ff9ccda8c381ac5b71aeb359", + "reference": "be8cac52a0827776ff9ccda8c381ac5b71aeb359", "shasum": "" }, "require": { "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", + "php": "^7.2 || 8.0.* || 8.1.* || 8.2.*", "phpdocumentor/reflection-docblock": "^5.2", "sebastian/comparator": "^3.0 || ^4.0", "sebastian/recursion-context": "^3.0 || ^4.0" @@ -4321,9 +4272,9 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" + "source": "https://github.com/phpspec/prophecy/tree/v1.16.0" }, - "time": "2021-12-08T12:19:24+00:00" + "time": "2022-11-29T15:06:56+00:00" }, { "name": "phpspec/prophecy-phpunit", @@ -4379,16 +4330,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.8.4", + "version": "1.9.2", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "eed4c9da531f6ebb4787235b6fb486e2c20f34e5" + "reference": "d6fdf01c53978b6429f1393ba4afeca39cc68afa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/eed4c9da531f6ebb4787235b6fb486e2c20f34e5", - "reference": "eed4c9da531f6ebb4787235b6fb486e2c20f34e5", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/d6fdf01c53978b6429f1393ba4afeca39cc68afa", + "reference": "d6fdf01c53978b6429f1393ba4afeca39cc68afa", "shasum": "" }, "require": { @@ -4418,7 +4369,7 @@ ], "support": { "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.8.4" + "source": "https://github.com/phpstan/phpstan/tree/1.9.2" }, "funding": [ { @@ -4434,20 +4385,20 @@ "type": "tidelift" } ], - "time": "2022-09-03T13:08:04+00:00" + "time": "2022-11-10T09:56:11+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.17", + "version": "9.2.19", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8" + "reference": "c77b56b63e3d2031bd8997fcec43c1925ae46559" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/aa94dc41e8661fe90c7316849907cba3007b10d8", - "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c77b56b63e3d2031bd8997fcec43c1925ae46559", + "reference": "c77b56b63e3d2031bd8997fcec43c1925ae46559", "shasum": "" }, "require": { @@ -4503,7 +4454,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.17" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.19" }, "funding": [ { @@ -4511,7 +4462,7 @@ "type": "github" } ], - "time": "2022-08-30T12:24:04+00:00" + "time": "2022-11-18T07:47:47+00:00" }, { "name": "phpunit/php-file-iterator", @@ -4756,16 +4707,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.24", + "version": "9.5.27", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "d0aa6097bef9fd42458a9b3c49da32c6ce6129c5" + "reference": "a2bc7ffdca99f92d959b3f2270529334030bba38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d0aa6097bef9fd42458a9b3c49da32c6ce6129c5", - "reference": "d0aa6097bef9fd42458a9b3c49da32c6ce6129c5", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a2bc7ffdca99f92d959b3f2270529334030bba38", + "reference": "a2bc7ffdca99f92d959b3f2270529334030bba38", "shasum": "" }, "require": { @@ -4787,14 +4738,14 @@ "phpunit/php-timer": "^5.0.2", "sebastian/cli-parser": "^1.0.1", "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", + "sebastian/comparator": "^4.0.8", "sebastian/diff": "^4.0.3", "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", + "sebastian/exporter": "^4.0.5", "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.1", + "sebastian/type": "^3.2", "sebastian/version": "^3.0.2" }, "suggest": { @@ -4838,7 +4789,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.24" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.27" }, "funding": [ { @@ -4848,9 +4799,13 @@ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" } ], - "time": "2022-08-30T07:42:16+00:00" + "time": "2022-12-09T07:31:23+00:00" }, { "name": "psr/link", @@ -5077,16 +5032,16 @@ }, { "name": "sebastian/comparator", - "version": "4.0.6", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", "shasum": "" }, "require": { @@ -5139,7 +5094,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" }, "funding": [ { @@ -5147,7 +5102,7 @@ "type": "github" } ], - "time": "2020-10-26T15:49:45+00:00" + "time": "2022-09-14T12:41:17+00:00" }, { "name": "sebastian/complexity", @@ -5271,16 +5226,16 @@ }, { "name": "sebastian/exporter", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", "shasum": "" }, "require": { @@ -5336,7 +5291,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" }, "funding": [ { @@ -5344,7 +5299,7 @@ "type": "github" } ], - "time": "2021-11-11T14:18:36+00:00" + "time": "2022-09-14T06:03:37+00:00" }, { "name": "sebastian/global-state", @@ -5699,16 +5654,16 @@ }, { "name": "sebastian/type", - "version": "3.1.0", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "fb44e1cc6e557418387ad815780360057e40753e" + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb44e1cc6e557418387ad815780360057e40753e", - "reference": "fb44e1cc6e557418387ad815780360057e40753e", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", "shasum": "" }, "require": { @@ -5720,7 +5675,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -5743,7 +5698,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.1.0" + "source": "https://github.com/sebastianbergmann/type/tree/3.2.0" }, "funding": [ { @@ -5751,7 +5706,7 @@ "type": "github" } ], - "time": "2022-08-29T06:55:37+00:00" + "time": "2022-09-12T14:47:03+00:00" }, { "name": "sebastian/version", @@ -5808,20 +5763,20 @@ }, { "name": "symfony/doctrine-bridge", - "version": "v6.1.3", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "68b53b14f337dbc6f92cf6f1656a0adad42482e0" + "reference": "11c13fff0cd2fe1528ea1e60638fb23c9a0c748f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/68b53b14f337dbc6f92cf6f1656a0adad42482e0", - "reference": "68b53b14f337dbc6f92cf6f1656a0adad42482e0", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/11c13fff0cd2fe1528ea1e60638fb23c9a0c748f", + "reference": "11c13fff0cd2fe1528ea1e60638fb23c9a0c748f", "shasum": "" }, "require": { - "doctrine/event-manager": "~1.0", + "doctrine/event-manager": "^1.2|^2", "doctrine/persistence": "^2|^3", "php": ">=8.1", "symfony/deprecation-contracts": "^2.1|^3", @@ -5837,7 +5792,7 @@ "symfony/cache": "<5.4", "symfony/dependency-injection": "<5.4", "symfony/form": "<5.4", - "symfony/http-kernel": "<5.4", + "symfony/http-kernel": "<6.2", "symfony/messenger": "<5.4", "symfony/property-info": "<5.4", "symfony/security-bundle": "<5.4", @@ -5846,7 +5801,7 @@ }, "require-dev": { "doctrine/annotations": "^1.10.4", - "doctrine/collections": "~1.0", + "doctrine/collections": "^1.0|^2.0", "doctrine/data-fixtures": "^1.1", "doctrine/dbal": "^2.13.1|^3.0", "doctrine/orm": "^2.7.4", @@ -5857,7 +5812,7 @@ "symfony/doctrine-messenger": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/form": "^5.4.9|^6.0.9", - "symfony/http-kernel": "^5.4|^6.0", + "symfony/http-kernel": "^6.2", "symfony/messenger": "^5.4|^6.0", "symfony/property-access": "^5.4|^6.0", "symfony/property-info": "^5.4|^6.0", @@ -5903,7 +5858,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v6.1.3" + "source": "https://github.com/symfony/doctrine-bridge/tree/v6.2.0" }, "funding": [ { @@ -5919,20 +5874,20 @@ "type": "tidelift" } ], - "time": "2022-07-29T07:42:06+00:00" + "time": "2022-11-28T12:28:19+00:00" }, { "name": "symfony/error-handler", - "version": "v6.1.3", + "version": "v6.2.1", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "736e42db3fd586d91820355988698e434e1d8419" + "reference": "b4e41f62c1124378863ff2705158a60da3e4c6b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/736e42db3fd586d91820355988698e434e1d8419", - "reference": "736e42db3fd586d91820355988698e434e1d8419", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/b4e41f62c1124378863ff2705158a60da3e4c6b9", + "reference": "b4e41f62c1124378863ff2705158a60da3e4c6b9", "shasum": "" }, "require": { @@ -5974,7 +5929,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.1.3" + "source": "https://github.com/symfony/error-handler/tree/v6.2.1" }, "funding": [ { @@ -5990,20 +5945,20 @@ "type": "tidelift" } ], - "time": "2022-07-29T07:42:06+00:00" + "time": "2022-12-01T21:07:46+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.1.4", + "version": "v6.2.1", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "18e0f106a32887bcebef757e5b39c88e39a08f20" + "reference": "d0bbd5a7e81b38f32504399b9199f265505b7bac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/18e0f106a32887bcebef757e5b39c88e39a08f20", - "reference": "18e0f106a32887bcebef757e5b39c88e39a08f20", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d0bbd5a7e81b38f32504399b9199f265505b7bac", + "reference": "d0bbd5a7e81b38f32504399b9199f265505b7bac", "shasum": "" }, "require": { @@ -6011,6 +5966,9 @@ "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.1" }, + "conflict": { + "symfony/cache": "<6.2" + }, "require-dev": { "predis/predis": "~1.0", "symfony/cache": "^5.4|^6.0", @@ -6049,7 +6007,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.1.4" + "source": "https://github.com/symfony/http-foundation/tree/v6.2.1" }, "funding": [ { @@ -6065,25 +6023,26 @@ "type": "tidelift" } ], - "time": "2022-08-19T14:27:04+00:00" + "time": "2022-12-04T18:26:13+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.1.4", + "version": "v6.2.1", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "2144c53a278254af57fa1e6f71427be656fab6f4" + "reference": "bcbd2ea12fee651a4c8bff4f6f00cce2ac1f8404" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/2144c53a278254af57fa1e6f71427be656fab6f4", - "reference": "2144c53a278254af57fa1e6f71427be656fab6f4", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/bcbd2ea12fee651a4c8bff4f6f00cce2ac1f8404", + "reference": "bcbd2ea12fee651a4c8bff4f6f00cce2ac1f8404", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/error-handler": "^6.1", "symfony/event-dispatcher": "^5.4|^6.0", "symfony/http-foundation": "^5.4|^6.0", @@ -6094,7 +6053,7 @@ "symfony/cache": "<5.4", "symfony/config": "<6.1", "symfony/console": "<5.4", - "symfony/dependency-injection": "<6.1", + "symfony/dependency-injection": "<6.2", "symfony/doctrine-bridge": "<5.4", "symfony/form": "<5.4", "symfony/http-client": "<5.4", @@ -6114,7 +6073,7 @@ "symfony/config": "^6.1", "symfony/console": "^5.4|^6.0", "symfony/css-selector": "^5.4|^6.0", - "symfony/dependency-injection": "^6.1", + "symfony/dependency-injection": "^6.2", "symfony/dom-crawler": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/finder": "^5.4|^6.0", @@ -6159,7 +6118,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.1.4" + "source": "https://github.com/symfony/http-kernel/tree/v6.2.1" }, "funding": [ { @@ -6175,20 +6134,20 @@ "type": "tidelift" } ], - "time": "2022-08-26T14:50:30+00:00" + "time": "2022-12-06T17:28:26+00:00" }, { "name": "symfony/phpunit-bridge", - "version": "v6.1.3", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "75c2fa71d049c1f48e39d208c0cefba97e66335a" + "reference": "1bd3b17db6d2ec284efbdc916600e880d6d858df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/75c2fa71d049c1f48e39d208c0cefba97e66335a", - "reference": "75c2fa71d049c1f48e39d208c0cefba97e66335a", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/1bd3b17db6d2ec284efbdc916600e880d6d858df", + "reference": "1bd3b17db6d2ec284efbdc916600e880d6d858df", "shasum": "" }, "require": { @@ -6242,7 +6201,7 @@ "description": "Provides utilities for PHPUnit, especially user deprecation notices management", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v6.1.3" + "source": "https://github.com/symfony/phpunit-bridge/tree/v6.2.0" }, "funding": [ { @@ -6258,20 +6217,20 @@ "type": "tidelift" } ], - "time": "2022-07-28T13:40:41+00:00" + "time": "2022-11-18T19:08:09+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2" + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/bf44a9fd41feaac72b074de600314a93e2ae78e2", - "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", "shasum": "" }, "require": { @@ -6280,7 +6239,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -6318,7 +6277,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" }, "funding": [ { @@ -6334,24 +6293,25 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/property-access", - "version": "v6.1.3", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "25108ee9b62d6ef0815007d9c7cf6a7ba40bb7c5" + "reference": "ed937ca8e103fdcefb43020c8784f87d3e5d09c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/25108ee9b62d6ef0815007d9c7cf6a7ba40bb7c5", - "reference": "25108ee9b62d6ef0815007d9c7cf6a7ba40bb7c5", + "url": "https://api.github.com/repos/symfony/property-access/zipball/ed937ca8e103fdcefb43020c8784f87d3e5d09c3", + "reference": "ed937ca8e103fdcefb43020c8784f87d3e5d09c3", "shasum": "" }, "require": { "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/property-info": "^5.4|^6.0" }, "require-dev": { @@ -6397,7 +6357,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v6.1.3" + "source": "https://github.com/symfony/property-access/tree/v6.2.0" }, "funding": [ { @@ -6413,20 +6373,20 @@ "type": "tidelift" } ], - "time": "2022-06-27T17:24:16+00:00" + "time": "2022-10-28T16:24:13+00:00" }, { "name": "symfony/property-info", - "version": "v6.1.3", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "2fc363ed2f2b5d3b231ed0824e066d140d3fd1d8" + "reference": "ddfa5c49812d7bcfea21f9ad5341092daa82e4cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/2fc363ed2f2b5d3b231ed0824e066d140d3fd1d8", - "reference": "2fc363ed2f2b5d3b231ed0824e066d140d3fd1d8", + "url": "https://api.github.com/repos/symfony/property-info/zipball/ddfa5c49812d7bcfea21f9ad5341092daa82e4cc", + "reference": "ddfa5c49812d7bcfea21f9ad5341092daa82e4cc", "shasum": "" }, "require": { @@ -6486,7 +6446,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v6.1.3" + "source": "https://github.com/symfony/property-info/tree/v6.2.0" }, "funding": [ { @@ -6502,20 +6462,20 @@ "type": "tidelift" } ], - "time": "2022-07-19T08:34:05+00:00" + "time": "2022-11-25T07:37:13+00:00" }, { "name": "symfony/serializer", - "version": "v6.1.4", + "version": "v6.2.1", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "03e5987dd9bb98038c60c7af3e58500c81c4aec1" + "reference": "e7655a4697c2af2416f0abc6c9f41189ae3eaf0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/03e5987dd9bb98038c60c7af3e58500c81c4aec1", - "reference": "03e5987dd9bb98038c60c7af3e58500c81c4aec1", + "url": "https://api.github.com/repos/symfony/serializer/zipball/e7655a4697c2af2416f0abc6c9f41189ae3eaf0e", + "reference": "e7655a4697c2af2416f0abc6c9f41189ae3eaf0e", "shasum": "" }, "require": { @@ -6525,7 +6485,7 @@ "conflict": { "doctrine/annotations": "<1.12", "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", + "phpdocumentor/type-resolver": "<1.4.0|>=1.7.0", "symfony/dependency-injection": "<5.4", "symfony/property-access": "<5.4", "symfony/property-info": "<5.4", @@ -6587,7 +6547,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/serializer/tree/v6.1.4" + "source": "https://github.com/symfony/serializer/tree/v6.2.1" }, "funding": [ { @@ -6603,20 +6563,20 @@ "type": "tidelift" } ], - "time": "2022-08-26T10:32:31+00:00" + "time": "2022-12-04T18:26:13+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.1.1", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "606be0f48e05116baef052f7f3abdb345c8e02cc" + "reference": "68cce71402305a015f8c1589bfada1280dc64fe7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/606be0f48e05116baef052f7f3abdb345c8e02cc", - "reference": "606be0f48e05116baef052f7f3abdb345c8e02cc", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/68cce71402305a015f8c1589bfada1280dc64fe7", + "reference": "68cce71402305a015f8c1589bfada1280dc64fe7", "shasum": "" }, "require": { @@ -6628,7 +6588,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.1-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -6668,7 +6628,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.1.1" + "source": "https://github.com/symfony/translation-contracts/tree/v3.2.0" }, "funding": [ { @@ -6684,20 +6644,20 @@ "type": "tidelift" } ], - "time": "2022-06-27T17:24:16+00:00" + "time": "2022-11-25T10:21:52+00:00" }, { "name": "symfony/validator", - "version": "v6.1.4", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "14ec426b9c8ca8cf02bd863a645fb0cc0d73db79" + "reference": "0f74ad1cab71f5899dca8233db774a50f8656de0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/14ec426b9c8ca8cf02bd863a645fb0cc0d73db79", - "reference": "14ec426b9c8ca8cf02bd863a645fb0cc0d73db79", + "url": "https://api.github.com/repos/symfony/validator/zipball/0f74ad1cab71f5899dca8233db774a50f8656de0", + "reference": "0f74ad1cab71f5899dca8233db774a50f8656de0", "shasum": "" }, "require": { @@ -6776,7 +6736,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/validator/tree/v6.1.4" + "source": "https://github.com/symfony/validator/tree/v6.2.0" }, "funding": [ { @@ -6792,20 +6752,20 @@ "type": "tidelift" } ], - "time": "2022-08-12T13:09:07+00:00" + "time": "2022-11-25T08:42:40+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.1.3", + "version": "v6.2.1", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "d5a5e44a2260c5eb5e746bf4f1fbd12ee6ceb427" + "reference": "1e7544c8698627b908657e5276854d52ab70087a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/d5a5e44a2260c5eb5e746bf4f1fbd12ee6ceb427", - "reference": "d5a5e44a2260c5eb5e746bf4f1fbd12ee6ceb427", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/1e7544c8698627b908657e5276854d52ab70087a", + "reference": "1e7544c8698627b908657e5276854d52ab70087a", "shasum": "" }, "require": { @@ -6864,7 +6824,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.1.3" + "source": "https://github.com/symfony/var-dumper/tree/v6.2.1" }, "funding": [ { @@ -6880,20 +6840,20 @@ "type": "tidelift" } ], - "time": "2022-07-20T13:46:29+00:00" + "time": "2022-12-03T22:32:58+00:00" }, { "name": "symfony/web-link", - "version": "v6.1.0", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/web-link.git", - "reference": "d6ef738f97b60d859652d92f10bf8645bca28cd6" + "reference": "068136a48bd945b0b4a4a13ceaa1327ac6606aa3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-link/zipball/d6ef738f97b60d859652d92f10bf8645bca28cd6", - "reference": "d6ef738f97b60d859652d92f10bf8645bca28cd6", + "url": "https://api.github.com/repos/symfony/web-link/zipball/068136a48bd945b0b4a4a13ceaa1327ac6606aa3", + "reference": "068136a48bd945b0b4a4a13ceaa1327ac6606aa3", "shasum": "" }, "require": { @@ -6950,7 +6910,7 @@ "push" ], "support": { - "source": "https://github.com/symfony/web-link/tree/v6.1.0" + "source": "https://github.com/symfony/web-link/tree/v6.2.0" }, "funding": [ { @@ -6966,7 +6926,7 @@ "type": "tidelift" } ], - "time": "2022-02-25T11:15:52+00:00" + "time": "2022-08-25T15:27:04+00:00" }, { "name": "theseer/tokenizer", @@ -7136,8 +7096,7 @@ "aliases": [], "minimum-stability": "stable", "stability-flags": { - "nette/utils": 20, - "api-platform/core": 5 + "nette/utils": 20 }, "prefer-stable": false, "prefer-lowest": false, diff --git a/src/AnnotationGenerator/PhpDocAnnotationGenerator.php b/src/AnnotationGenerator/PhpDocAnnotationGenerator.php index 2924cf95..44e725b4 100644 --- a/src/AnnotationGenerator/PhpDocAnnotationGenerator.php +++ b/src/AnnotationGenerator/PhpDocAnnotationGenerator.php @@ -199,18 +199,19 @@ protected function toPhpDocType(Property $property, bool $adderOrRemover = false { $suffix = $property->isNullable ? '|null' : ''; if ($property->isEnum) { - if ($property->isArray) { + if ($property->isArray()) { return 'string[]'.$suffix; } return 'string'.$suffix; } - $enforcedNonArrayProperty = clone $property; - $enforcedNonArrayProperty->isArray = false; + if (!$property->reference && null !== $phpDocType = $this->phpTypeConverter->getPhpType($property)) { + if ('array' === $phpDocType && $property->type) { + $phpDocType = $property->type->getPhp(); + } - if (!$property->reference && null !== $phpDocType = $this->phpTypeConverter->getPhpType($enforcedNonArrayProperty)) { - return ($property->isArray ? sprintf('%s[]', $phpDocType) : $phpDocType).$suffix; + return $phpDocType.$suffix; } if (!$property->reference) { @@ -218,7 +219,7 @@ protected function toPhpDocType(Property $property, bool $adderOrRemover = false } $phpDocType = $property->reference->interfaceName() ?: $property->reference->name(); - if (!$property->isArray || $adderOrRemover) { + if ($adderOrRemover || !$property->isArray()) { return $phpDocType.$suffix; } diff --git a/src/AttributeGenerator/ConstraintAttributeGenerator.php b/src/AttributeGenerator/ConstraintAttributeGenerator.php index a50f4705..a5ea99d6 100644 --- a/src/AttributeGenerator/ConstraintAttributeGenerator.php +++ b/src/AttributeGenerator/ConstraintAttributeGenerator.php @@ -42,8 +42,8 @@ public function generatePropertyAttributes(Property $property, string $className $asserts = []; - if (!$property->isArray && $property->type) { - switch ($property->type) { + if ($property->type && !$property->isArray()) { + switch ((string) $property->type) { case 'url': $asserts[] = new Attribute('Assert\Url'); break; @@ -74,7 +74,7 @@ public function generatePropertyAttributes(Property $property, string $className if ($property->isEnum && $property->reference) { $args = ['callback' => [new Literal(sprintf('%s::class', $property->reference->name())), 'toArray']]; - if ($property->isArray) { + if ($property->isArray()) { $args['multiple'] = true; } diff --git a/src/AttributeGenerator/DoctrineMongoDBAttributeGenerator.php b/src/AttributeGenerator/DoctrineMongoDBAttributeGenerator.php index b4c0f84d..e75fe6af 100644 --- a/src/AttributeGenerator/DoctrineMongoDBAttributeGenerator.php +++ b/src/AttributeGenerator/DoctrineMongoDBAttributeGenerator.php @@ -17,6 +17,7 @@ use ApiPlatform\SchemaGenerator\Model\Attribute; use ApiPlatform\SchemaGenerator\Model\Class_; use ApiPlatform\SchemaGenerator\Model\Property; +use ApiPlatform\SchemaGenerator\Model\Type\CompositeType; use ApiPlatform\SchemaGenerator\Model\Use_; use Nette\PhpGenerator\Literal; @@ -86,34 +87,38 @@ public function generatePropertyAttributes(Property $property, string $className $type = null; if ($property->isEnum) { - $type = $property->isArray ? 'simple_array' : 'string'; - } elseif ($property->isArray && $property->type) { + $type = $property->isArray() ? 'simple_array' : 'string'; + } elseif (!$property->reference && $property->isArray()) { $type = 'collection'; - } elseif (!$property->isArray && $property->type && !$property->reference && null !== ($phpType = $this->phpTypeConverter->getPhpType($property, $this->config, []))) { - switch ($property->type) { - case 'time': - $type = 'time'; - break; - case 'dateTime': - $type = 'date'; - break; - default: - $type = $phpType; - switch ($phpType) { - case 'bool': - $type = 'boolean'; - break; - case 'int': - $type = 'integer'; - break; - case '\\'.\DateTimeInterface::class: - $type = 'date'; - break; - case '\\'.\DateInterval::class: - $type = 'string'; - break; - } - break; + } elseif ($property->type && !$property->reference && !$property->isArray() && null !== ($phpType = $this->phpTypeConverter->getPhpType($property, $this->config, []))) { + if ($property->type instanceof CompositeType) { + $type = 'raw'; + } else { + switch ((string) $property->type) { + case 'time': + $type = 'time'; + break; + case 'dateTime': + $type = 'date'; + break; + default: + $type = $phpType; + switch ($phpType) { + case 'bool': + $type = 'boolean'; + break; + case 'int': + $type = 'integer'; + break; + case '\\'.\DateTimeInterface::class: + $type = 'date'; + break; + case '\\'.\DateInterval::class: + $type = 'string'; + break; + } + break; + } } } diff --git a/src/AttributeGenerator/DoctrineOrmAttributeGenerator.php b/src/AttributeGenerator/DoctrineOrmAttributeGenerator.php index e418c043..6ddad3f9 100644 --- a/src/AttributeGenerator/DoctrineOrmAttributeGenerator.php +++ b/src/AttributeGenerator/DoctrineOrmAttributeGenerator.php @@ -17,6 +17,7 @@ use ApiPlatform\SchemaGenerator\Model\Attribute; use ApiPlatform\SchemaGenerator\Model\Class_; use ApiPlatform\SchemaGenerator\Model\Property; +use ApiPlatform\SchemaGenerator\Model\Type\CompositeType; use ApiPlatform\SchemaGenerator\Model\Use_; use Nette\PhpGenerator\Literal; @@ -102,10 +103,10 @@ public function generatePropertyAttributes(Property $property, string $className $type = null; if ($property->isEnum) { - $type = $property->isArray ? 'simple_array' : 'string'; - } elseif ($property->isArray && $property->type) { + $type = $property->isArray() ? 'simple_array' : 'string'; + } elseif (!$property->reference && $property->isArray()) { $type = 'json'; - } elseif (!$property->isArray && $property->type && !$property->reference && null !== ($phpType = $this->phpTypeConverter->getPhpType($property, $this->config, []))) { + } elseif ($property->type && !$property instanceof CompositeType && !$property->reference && !$property->isArray() && null !== ($phpType = $this->phpTypeConverter->getPhpType($property, $this->config, []))) { switch ($property->type) { case 'time': $type = 'time'; diff --git a/src/ClassMutator/AnnotationsAppender.php b/src/ClassMutator/AnnotationsAppender.php index 14d5c5ad..fc074e65 100644 --- a/src/ClassMutator/AnnotationsAppender.php +++ b/src/ClassMutator/AnnotationsAppender.php @@ -119,7 +119,7 @@ private function generatePropertiesAnnotations(Class_ $class): void $property->addGetterAnnotation($getterAnnotation); } - if ($property->isArray) { + if ($property->isArray()) { foreach ($annotationGenerator->generateAdderAnnotations($property) as $adderAnnotation) { $property->addAdderAnnotation($adderAnnotation); } diff --git a/src/ClassMutator/ClassPropertiesTypehintMutator.php b/src/ClassMutator/ClassPropertiesTypehintMutator.php index 9ba9db2d..62e46b90 100644 --- a/src/ClassMutator/ClassPropertiesTypehintMutator.php +++ b/src/ClassMutator/ClassPropertiesTypehintMutator.php @@ -14,6 +14,7 @@ namespace ApiPlatform\SchemaGenerator\ClassMutator; use ApiPlatform\SchemaGenerator\Model\Class_; +use ApiPlatform\SchemaGenerator\Model\Type\ArrayType; use ApiPlatform\SchemaGenerator\PhpTypeConverterInterface; final class ClassPropertiesTypehintMutator implements ClassMutatorInterface @@ -48,9 +49,9 @@ public function __invoke(Class_ $class, array $context): void $this->classes ); - if ($property->isArray) { + if ($property->type instanceof ArrayType) { $nonArrayForcedProperty = clone $property; - $nonArrayForcedProperty->isArray = false; + $nonArrayForcedProperty->type = $property->type->type; $property->adderRemoverTypeHint = $this->phpTypeConverter->getPhpType($nonArrayForcedProperty, $this->config, $this->classes); } diff --git a/src/Model/Class_.php b/src/Model/Class_.php index 7827a72c..a7003fc8 100644 --- a/src/Model/Class_.php +++ b/src/Model/Class_.php @@ -318,7 +318,7 @@ public function toNetteFile(array $config, InflectorInterface $inflector, ?PhpFi } foreach ($sortedProperties as $property) { - if ($property->isArray && 'array' !== $property->typeHint && !$property->isEnum) { + if (!$property->isEnum && 'array' !== $property->typeHint && $property->isArray()) { $constructor->addBody('$this->? = new ArrayCollection();', [$property->name()]); } } diff --git a/src/Model/Property.php b/src/Model/Property.php index 58221496..27c27226 100644 --- a/src/Model/Property.php +++ b/src/Model/Property.php @@ -13,6 +13,8 @@ namespace ApiPlatform\SchemaGenerator\Model; +use ApiPlatform\SchemaGenerator\Model\Type\ArrayType; +use ApiPlatform\SchemaGenerator\Model\Type\Type; use Nette\PhpGenerator\ClassType; use Nette\PhpGenerator\Method; use Nette\PhpGenerator\PhpNamespace; @@ -25,14 +27,10 @@ abstract class Property private string $name; public string $cardinality; - /** @var ?string the data type (array and object are not one) */ - public ?string $type = null; + /** @var ?Type the data types (object is not one) */ + public ?Type $type = null; /** @var mixed */ public $defaultValue = null; - /** @var ?string the array data type (object is not one) */ - public ?string $arrayType = null; - /** @var bool can be true and array type false if the property is an array of references */ - public bool $isArray = false; public ?Class_ $reference = null; public bool $isReadable = true; public bool $isWritable = true; @@ -76,6 +74,11 @@ abstract public function description(): ?string; abstract public function rdfType(): ?string; + public function isArray(): bool + { + return $this->type instanceof ArrayType; + } + public function addAnnotation(string $annotation): self { if ('' === $annotation || !\in_array($annotation, $this->annotations, true)) { @@ -146,7 +149,7 @@ public function toNetteProperty(PhpNamespace $namespace, string $visibility = nu $property->setType($this->resolveName($namespace, $this->typeHint)); } - if (!$this->isArray || $this->isTypeHintedAsCollection()) { + if (!$this->isArray() || $this->isTypeHintedAsCollection()) { $property->setNullable($this->isNullable); } @@ -206,7 +209,7 @@ private function generateGetter(PhpNamespace $namespace): Method } if ($this->typeHint) { $getter->setReturnType($this->resolveName($namespace, $this->typeHint)); - if ($this->isNullable && !$this->isArray) { + if ($this->isNullable && !$this->isArray()) { $getter->setReturnNullable(); } } @@ -229,7 +232,7 @@ private function generateMutators( } $mutators = []; - if ($this->isArray) { + if ($this->isArray()) { $singularProperty = $singularize($this->name()); $adder = (new Method('add'.ucfirst($singularProperty)))->setVisibility(ClassType::VISIBILITY_PUBLIC); @@ -307,7 +310,7 @@ private function generateMutators( */ private function guessDefaultGeneratedValue(bool $useDoctrineCollections = true) { - if ($this->isArray && !$this->isTypeHintedAsCollection() && ($this->isEnum || !$this->typeHint || 'array' === $this->typeHint || !$useDoctrineCollections)) { + if (($this->isEnum || !$this->typeHint || 'array' === $this->typeHint || !$useDoctrineCollections) && $this->isArray() && !$this->isTypeHintedAsCollection()) { return []; } diff --git a/src/Model/Type/ArrayType.php b/src/Model/Type/ArrayType.php new file mode 100644 index 00000000..f6e496d1 --- /dev/null +++ b/src/Model/Type/ArrayType.php @@ -0,0 +1,42 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace ApiPlatform\SchemaGenerator\Model\Type; + +final class ArrayType implements Type +{ + public ?Type $type; + + public function __construct(?Type $type = null) + { + $this->type = $type; + } + + public function __toString(): string + { + if ($this->type instanceof CompositeType) { + return '('.$this->type.')[]'; + } + + return $this->type ? $this->type.'[]' : 'array'; + } + + public function getPhp(): string + { + if ($this->type instanceof CompositeType) { + return '('.$this->type.')[]'; + } + + return $this->type ? $this->type.'[]' : 'array'; + } +} diff --git a/src/Model/Type/CompositeType.php b/src/Model/Type/CompositeType.php new file mode 100644 index 00000000..538742f0 --- /dev/null +++ b/src/Model/Type/CompositeType.php @@ -0,0 +1,18 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace ApiPlatform\SchemaGenerator\Model\Type; + +interface CompositeType extends Type +{ +} diff --git a/src/Model/Type/PrimitiveType.php b/src/Model/Type/PrimitiveType.php new file mode 100644 index 00000000..dd06776f --- /dev/null +++ b/src/Model/Type/PrimitiveType.php @@ -0,0 +1,34 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace ApiPlatform\SchemaGenerator\Model\Type; + +final class PrimitiveType implements Type +{ + public string $name; + + public function __construct(string $name) + { + $this->name = $name; + } + + public function __toString(): string + { + return $this->name; + } + + public function getPhp(): string + { + return $this->name; + } +} diff --git a/src/Model/Type/Type.php b/src/Model/Type/Type.php new file mode 100644 index 00000000..8d4139fc --- /dev/null +++ b/src/Model/Type/Type.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace ApiPlatform\SchemaGenerator\Model\Type; + +interface Type +{ + public function __toString(): string; + + public function getPhp(): string; +} diff --git a/src/Model/Type/UnionType.php b/src/Model/Type/UnionType.php new file mode 100644 index 00000000..3fd09c86 --- /dev/null +++ b/src/Model/Type/UnionType.php @@ -0,0 +1,44 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace ApiPlatform\SchemaGenerator\Model\Type; + +final class UnionType implements CompositeType +{ + /** @var Type[] */ + public array $types; + + /** + * @param Type[] $types + */ + public function __construct(array $types) + { + $this->types = $types; + } + + public function __toString(): string + { + return implode('|', array_map(fn (Type $type) => $type instanceof CompositeType ? '('.$type.')' : $type, $this->types)); + } + + public function getPhp(): string + { + // Deduplicate PHP types. + $phpTypes = []; + foreach ($this->types as $type) { + $phpTypes[$type->getPhp()] = $type; + } + + return implode('|', array_map(fn (Type $type) => $type instanceof CompositeType ? '('.$type->getPhp().')' : $type->getPhp(), $phpTypes)); + } +} diff --git a/src/OpenApi/ClassGenerator.php b/src/OpenApi/ClassGenerator.php index 9f42ea9d..b23d50a9 100644 --- a/src/OpenApi/ClassGenerator.php +++ b/src/OpenApi/ClassGenerator.php @@ -40,6 +40,7 @@ final class ClassGenerator { use LoggerAwareTrait; + use SchemaTraversalTrait; private InflectorInterface $inflector; private PhpTypeConverterInterface $phpTypeConverter; @@ -153,7 +154,7 @@ public function generate(OpenApi $openApi, array $config): array if ($reference = $classes[preg_replace('/Ids?$/', '', $this->inflector->singularize(u($property->name())->title()->toString())[0])] ?? null) { $property->reference = $reference; $property->cardinality = $property->isNullable ? CardinalitiesExtractor::CARDINALITY_0_1 : CardinalitiesExtractor::CARDINALITY_1_1; - if ($property->isArray) { + if ($property->isArray()) { $property->cardinality = $property->isNullable ? CardinalitiesExtractor::CARDINALITY_0_N : CardinalitiesExtractor::CARDINALITY_1_N; } } @@ -166,7 +167,7 @@ public function generate(OpenApi $openApi, array $config): array // Try to guess the mapped by from the references foreach ($class->properties() as $property) { - if ($property->reference && $property->isArray) { + if ($property->reference && $property->isArray()) { $mappedByName = strtolower($class->name()); foreach ($property->reference->properties() as $referenceProperty) { if ($mappedByName === $referenceProperty->name()) { @@ -227,7 +228,12 @@ private function buildClassFromSchema(Schema $schema, string $name, array $confi $class->setRdfType($schema->externalDocs->url); } - foreach ($schema->properties as $propertyName => $schemaProperty) { + $schemaProperties = []; + foreach ($this->getSchemaItem($schema) as $schemaItem) { + $schemaProperties = array_merge($schemaProperties, $schemaItem->properties); + } + + foreach ($schemaProperties as $propertyName => $schemaProperty) { \assert($schemaProperty instanceof Schema); $property = ($this->propertyGenerator)($propertyName, $config, $class, ['schema' => $schema, 'property' => $schemaProperty]); if ($property) { diff --git a/src/OpenApi/Model/Type/PrimitiveType.php b/src/OpenApi/Model/Type/PrimitiveType.php new file mode 100644 index 00000000..4f8603e8 --- /dev/null +++ b/src/OpenApi/Model/Type/PrimitiveType.php @@ -0,0 +1,50 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace ApiPlatform\SchemaGenerator\OpenApi\Model\Type; + +use ApiPlatform\SchemaGenerator\Model\Type\Type; + +final class PrimitiveType implements Type +{ + public string $name; + + public function __construct(string $name) + { + $this->name = $name; + } + + public function __toString(): string + { + return $this->name; + } + + public function getPhp(): string + { + /* @see https://swagger.io/specification/#data-types */ + switch ($this->name) { + case 'integer': + return 'int'; + case 'boolean': + return 'bool'; + case 'float': + case 'double': + return 'float'; + case 'date': + case 'dateTime': + return '\\'.\DateTimeInterface::class; + default: + return 'string'; + } + } +} diff --git a/src/OpenApi/PhpTypeConverter.php b/src/OpenApi/PhpTypeConverter.php index a2a6b303..e0b82fe0 100644 --- a/src/OpenApi/PhpTypeConverter.php +++ b/src/OpenApi/PhpTypeConverter.php @@ -20,33 +20,23 @@ final class PhpTypeConverter implements PhpTypeConverterInterface { public function getPhpType(Property $property, array $config = [], array $classes = []): ?string { - if ($property->reference && $property->isArray) { + if ($property->reference && $property->isArray()) { return ($config['doctrine']['useCollection'] ?? false) ? 'Collection' : 'array'; } - if ($property->reference && !$property->isArray) { + if ($property->reference && !$property->isArray()) { return $property->reference->name(); } - if ($property->isArray) { + if ($property->isArray()) { return 'array'; } - /* @see https://swagger.io/specification/#data-types */ - switch ($property->type) { - case 'integer': - return 'int'; - case 'boolean': - return 'bool'; - case 'float': - case 'double': - return 'float'; - case 'date': - case 'dateTime': - return '\\'.\DateTimeInterface::class; - default: - return 'string'; + if (!$property->type) { + return 'string'; } + + return $property->type->getPhp(); } public function escapeIdentifier(string $identifier): string diff --git a/src/OpenApi/PropertyGenerator/IdPropertyGenerator.php b/src/OpenApi/PropertyGenerator/IdPropertyGenerator.php index 73d7ee94..830f2c77 100644 --- a/src/OpenApi/PropertyGenerator/IdPropertyGenerator.php +++ b/src/OpenApi/PropertyGenerator/IdPropertyGenerator.php @@ -14,7 +14,9 @@ namespace ApiPlatform\SchemaGenerator\OpenApi\PropertyGenerator; use ApiPlatform\SchemaGenerator\Model\Property; +use ApiPlatform\SchemaGenerator\Model\Type\PrimitiveType; use ApiPlatform\SchemaGenerator\OpenApi\Model\Property as OpenApiProperty; +use ApiPlatform\SchemaGenerator\OpenApi\Model\Type\PrimitiveType as OpenApiPrimitiveType; use ApiPlatform\SchemaGenerator\PropertyGenerator\IdPropertyGenerator as CommonIdPropertyGenerator; use ApiPlatform\SchemaGenerator\PropertyGenerator\IdPropertyGeneratorInterface; @@ -29,6 +31,10 @@ public function __construct(?IdPropertyGeneratorInterface $idPropertyGenerator = public function __invoke(string $generationStrategy, bool $supportsWritableId, ?Property $property = null): Property { - return ($this->idPropertyGenerator)($generationStrategy, $supportsWritableId, new OpenApiProperty('id')); + $idProperty = ($this->idPropertyGenerator)($generationStrategy, $supportsWritableId, new OpenApiProperty('id')); + + $idProperty->type = $idProperty->type instanceof PrimitiveType ? new OpenApiPrimitiveType($idProperty->type->name) : null; + + return $idProperty; } } diff --git a/src/OpenApi/PropertyGenerator/PropertyGenerator.php b/src/OpenApi/PropertyGenerator/PropertyGenerator.php index 1eae587f..ef0d0135 100644 --- a/src/OpenApi/PropertyGenerator/PropertyGenerator.php +++ b/src/OpenApi/PropertyGenerator/PropertyGenerator.php @@ -15,7 +15,12 @@ use ApiPlatform\SchemaGenerator\Model\Class_; use ApiPlatform\SchemaGenerator\Model\Property; +use ApiPlatform\SchemaGenerator\Model\Type\ArrayType; +use ApiPlatform\SchemaGenerator\Model\Type\Type; +use ApiPlatform\SchemaGenerator\Model\Type\UnionType; use ApiPlatform\SchemaGenerator\OpenApi\Model\Property as OpenApiProperty; +use ApiPlatform\SchemaGenerator\OpenApi\Model\Type\PrimitiveType; +use ApiPlatform\SchemaGenerator\OpenApi\SchemaTraversalTrait; use ApiPlatform\SchemaGenerator\PropertyGenerator\PropertyGenerator as CommonPropertyGenerator; use ApiPlatform\SchemaGenerator\PropertyGenerator\PropertyGeneratorInterface; use cebe\openapi\spec\Schema; @@ -24,6 +29,8 @@ final class PropertyGenerator implements PropertyGeneratorInterface { + use SchemaTraversalTrait; + private PropertyGeneratorInterface $propertyGenerator; public function __construct(?PropertyGeneratorInterface $propertyGenerator = null) @@ -41,7 +48,7 @@ public function __invoke(string $name, array $config, Class_ $class, array $cont $schemaProperty = $context['property']; $openApiProperty = new OpenApiProperty($name); - $openApiProperty->isArray = 'array' === $schemaProperty->type; + $openApiProperty->type = $this->getType($schemaProperty); $openApiProperty = ($this->propertyGenerator)($name, $config, $class, $context, $isCustom, $openApiProperty); @@ -51,10 +58,6 @@ public function __invoke(string $name, array $config, Class_ $class, array $cont $requiredFields = $schema->required ?? []; - $openApiProperty->type = $this->getType($schemaProperty->type, $schemaProperty->format); - $openApiProperty->arrayType = $openApiProperty->isArray && $schemaProperty->items instanceof Schema - ? $this->getType($schemaProperty->items->type, $schemaProperty->items->format) - : null; if ($schemaProperty->description) { $openApiProperty->setDescription($schemaProperty->description); } @@ -70,22 +73,66 @@ public function __invoke(string $name, array $config, Class_ $class, array $cont return $openApiProperty; } - private function getType(string $type, ?string $format): ?string + private function getType(Schema $schemaProperty, bool $inComposite = false): ?Type { + if ($schemaProperty->oneOf) { + $types = []; + foreach ($schemaProperty->oneOf as $oneOfProperty) { + \assert($oneOfProperty instanceof Schema); + if ($oneOfType = $this->getType($oneOfProperty, true)) { + $types[] = $oneOfType; + } + } + + return new UnionType($types); + } + + // Merge properties. + if ($schemaProperty->allOf) { + $type = 'string'; + $format = 'string'; + foreach ($this->getSchemaItem($schemaProperty) as $schemaPropertyItem) { + $type = $schemaPropertyItem->type ?? $type; + $format = $schemaPropertyItem->format ?? $format; + } + $schemaProperty = new Schema([ + 'type' => $type, + 'format' => $format, + ]); + } + + // Not supported. + if ($schemaProperty->anyOf || $schemaProperty->not) { + return null; + } + + if ('array' === $schemaProperty->type) { + return new ArrayType($schemaProperty->items instanceof Schema ? $this->getType($schemaProperty->items) : null); + } + + $type = $schemaProperty->type; + $format = $schemaProperty->format; + + $primitiveType = new PrimitiveType($type); + if ($format) { switch ($format) { case 'int32': case 'int64': - return 'integer'; + $primitiveType = new PrimitiveType('integer'); + + break; default: - return u(str_replace('-', '_', $format))->camel()->toString(); + $primitiveType = new PrimitiveType(u(str_replace('-', '_', $format))->camel()->toString()); } + + return $primitiveType; } - if (\in_array($type, ['array', 'object'], true)) { + if (!$inComposite && \in_array($type, ['array', 'object'], true)) { return null; } - return $type; + return $primitiveType; } } diff --git a/src/OpenApi/SchemaTraversalTrait.php b/src/OpenApi/SchemaTraversalTrait.php new file mode 100644 index 00000000..21b6b8b6 --- /dev/null +++ b/src/OpenApi/SchemaTraversalTrait.php @@ -0,0 +1,50 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace ApiPlatform\SchemaGenerator\OpenApi; + +use cebe\openapi\spec\Schema; + +trait SchemaTraversalTrait +{ + /** + * @return \Generator + */ + private function getSchemaItem(Schema $schema): \Generator + { + if (!$schema->oneOf && !$schema->allOf) { + yield $schema; + + return; + } + + if ($schema->oneOf) { + // Only use the first oneOf item. Needs to be improved. + $oneOfSchema = $schema->oneOf[0]; + \assert($oneOfSchema instanceof Schema); + foreach ($this->getSchemaItem($oneOfSchema) as $schemaItem) { + yield $schemaItem; + } + } + + foreach ($schema->allOf ?? [] as $allOfSchema) { + \assert($allOfSchema instanceof Schema); + foreach ($this->getSchemaItem($allOfSchema) as $schemaItem) { + yield $schemaItem; + } + } + + // Once all items have been used, yield the main schema in case there are some properties in it. + yield $schema; + } +} diff --git a/src/PhpTypeConverter.php b/src/PhpTypeConverter.php index 68cbbfa3..e06a924d 100644 --- a/src/PhpTypeConverter.php +++ b/src/PhpTypeConverter.php @@ -25,11 +25,11 @@ public function getPhpType(Property $property, array $config = [], array $classe throw new \LogicException(sprintf('Property "%s" has to be an instance of "%s".', $property->name(), SchemaProperty::class)); } - if ($property->isArray && $property->reference) { + if ($property->reference && $property->isArray()) { return ($config['doctrine']['useCollection'] ?? false) ? 'Collection' : 'array'; } - if ($property->isArray) { + if ($property->isArray()) { return 'array'; } @@ -61,31 +61,7 @@ private function getNonArrayType(SchemaProperty $property, array $classes): ?str } if ($property->type) { - switch ($property->type) { - case 'integer': - case 'negativeInteger': - case 'nonNegativeInteger': - case 'positiveInteger': - case 'nonPositiveInteger': - case 'byte': - return 'int'; - case 'boolean': - return 'bool'; - case 'float': - case 'double': - case 'decimal': - return 'float'; - case 'date': - case 'dateTime': - case 'time': - return '\\'.\DateTimeInterface::class; - case 'duration': - return '\\'.\DateInterval::class; - case 'mixed': - return null; - default: - return 'string'; - } + return $property->type->getPhp(); } $typeName = $property->rangeName; diff --git a/src/PropertyGenerator/IdPropertyGenerator.php b/src/PropertyGenerator/IdPropertyGenerator.php index 8208ffea..2559f7b1 100644 --- a/src/PropertyGenerator/IdPropertyGenerator.php +++ b/src/PropertyGenerator/IdPropertyGenerator.php @@ -15,6 +15,7 @@ use ApiPlatform\SchemaGenerator\CardinalitiesExtractor; use ApiPlatform\SchemaGenerator\Model\Property; +use ApiPlatform\SchemaGenerator\Model\Type\PrimitiveType; final class IdPropertyGenerator implements IdPropertyGeneratorInterface { @@ -57,7 +58,7 @@ public function __invoke(string $generationStrategy, bool $supportsWritableId, ? $property->isUnique = false; $property->isCustom = true; $property->isId = true; - $property->type = $type; + $property->type = new PrimitiveType($type); $property->typeHint = $typeHint; return $property; diff --git a/src/PropertyGenerator/PropertyGenerator.php b/src/PropertyGenerator/PropertyGenerator.php index 5f2562fd..0df61662 100644 --- a/src/PropertyGenerator/PropertyGenerator.php +++ b/src/PropertyGenerator/PropertyGenerator.php @@ -30,7 +30,7 @@ public function __invoke(string $name, array $config, Class_ $class, array $cont $property->isCustom = $isCustom; - if ($property->isArray) { + if ($property->isArray()) { $class->hasConstructor = true; } diff --git a/src/Schema/Model/Type/PrimitiveType.php b/src/Schema/Model/Type/PrimitiveType.php new file mode 100644 index 00000000..16b62891 --- /dev/null +++ b/src/Schema/Model/Type/PrimitiveType.php @@ -0,0 +1,60 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace ApiPlatform\SchemaGenerator\Schema\Model\Type; + +use ApiPlatform\SchemaGenerator\Model\Type\Type; + +final class PrimitiveType implements Type +{ + public string $name; + + public function __construct(string $name) + { + $this->name = $name; + } + + public function __toString(): string + { + return $this->name; + } + + public function getPhp(): string + { + switch ($this->name) { + case 'integer': + case 'negativeInteger': + case 'nonNegativeInteger': + case 'positiveInteger': + case 'nonPositiveInteger': + case 'byte': + return 'int'; + case 'boolean': + return 'bool'; + case 'float': + case 'double': + case 'decimal': + return 'float'; + case 'date': + case 'dateTime': + case 'time': + return '\\'.\DateTimeInterface::class; + case 'duration': + return '\\'.\DateInterval::class; + case 'mixed': + return ''; + default: + return 'string'; + } + } +} diff --git a/src/Schema/PropertyGenerator/IdPropertyGenerator.php b/src/Schema/PropertyGenerator/IdPropertyGenerator.php index e78e6816..93cd83a7 100644 --- a/src/Schema/PropertyGenerator/IdPropertyGenerator.php +++ b/src/Schema/PropertyGenerator/IdPropertyGenerator.php @@ -14,9 +14,11 @@ namespace ApiPlatform\SchemaGenerator\Schema\PropertyGenerator; use ApiPlatform\SchemaGenerator\Model\Property; +use ApiPlatform\SchemaGenerator\Model\Type\PrimitiveType; use ApiPlatform\SchemaGenerator\PropertyGenerator\IdPropertyGenerator as CommonIdPropertyGenerator; use ApiPlatform\SchemaGenerator\PropertyGenerator\IdPropertyGeneratorInterface; use ApiPlatform\SchemaGenerator\Schema\Model\Property as SchemaProperty; +use ApiPlatform\SchemaGenerator\Schema\Model\Type\PrimitiveType as SchemaPrimitiveType; use EasyRdf\Resource as RdfResource; final class IdPropertyGenerator implements IdPropertyGeneratorInterface @@ -36,6 +38,8 @@ public function __invoke(string $generationStrategy, bool $supportsWritableId, ? throw new \LogicException(sprintf('ID property has to be an instance of "%s".', SchemaProperty::class)); } + $idProperty->type = $idProperty->type instanceof PrimitiveType ? new SchemaPrimitiveType($idProperty->type->name) : null; + $rangeName = 'Text'; $uri = 'https://schema.org/Text'; if ('auto' === $generationStrategy) { diff --git a/src/Schema/PropertyGenerator/PropertyGenerator.php b/src/Schema/PropertyGenerator/PropertyGenerator.php index e10b248c..124e88cf 100644 --- a/src/Schema/PropertyGenerator/PropertyGenerator.php +++ b/src/Schema/PropertyGenerator/PropertyGenerator.php @@ -17,10 +17,12 @@ use ApiPlatform\SchemaGenerator\GoodRelationsBridge; use ApiPlatform\SchemaGenerator\Model\Class_; use ApiPlatform\SchemaGenerator\Model\Property; +use ApiPlatform\SchemaGenerator\Model\Type\ArrayType; use ApiPlatform\SchemaGenerator\PhpTypeConverterInterface; use ApiPlatform\SchemaGenerator\PropertyGenerator\PropertyGenerator as CommonPropertyGenerator; use ApiPlatform\SchemaGenerator\PropertyGenerator\PropertyGeneratorInterface; use ApiPlatform\SchemaGenerator\Schema\Model\Property as SchemaProperty; +use ApiPlatform\SchemaGenerator\Schema\Model\Type\PrimitiveType; use ApiPlatform\SchemaGenerator\Schema\TypeConverter; use EasyRdf\Resource as RdfResource; use Psr\Log\LoggerAwareTrait; @@ -134,7 +136,11 @@ public function __invoke(string $name, array $config, Class_ $class, array $cont ], true); $schemaProperty = new SchemaProperty($name); - $schemaProperty->isArray = $isArray; + if ($isArray) { + $schemaProperty->type = new ArrayType($type ? new PrimitiveType($type) : null); + } elseif ($type) { + $schemaProperty->type = new PrimitiveType($type); + } $schemaProperty = ($this->propertyGenerator)($name, $config, $class, $context, $isCustom, $schemaProperty); @@ -150,7 +156,6 @@ public function __invoke(string $name, array $config, Class_ $class, array $cont $schemaProperty->resource = $typeProperty; $schemaProperty->range = $range; $schemaProperty->rangeName = $rangeName; - $schemaProperty->type = $type; $schemaProperty->defaultValue = $propertyConfig['defaultValue'] ?? null; $schemaProperty->cardinality = $cardinality; $schemaProperty->isReadable = $propertyConfig['readable'] ?? true; diff --git a/tests/AnnotationGenerator/PhpDocAnnotationGeneratorTest.php b/tests/AnnotationGenerator/PhpDocAnnotationGeneratorTest.php index 5c262729..85545a24 100644 --- a/tests/AnnotationGenerator/PhpDocAnnotationGeneratorTest.php +++ b/tests/AnnotationGenerator/PhpDocAnnotationGeneratorTest.php @@ -17,9 +17,11 @@ use ApiPlatform\SchemaGenerator\Model\Class_; use ApiPlatform\SchemaGenerator\Model\Interface_; use ApiPlatform\SchemaGenerator\Model\Property; +use ApiPlatform\SchemaGenerator\Model\Type\ArrayType; use ApiPlatform\SchemaGenerator\PhpTypeConverter; use ApiPlatform\SchemaGenerator\Schema\Model\Class_ as SchemaClass; use ApiPlatform\SchemaGenerator\Schema\Model\Property as SchemaProperty; +use ApiPlatform\SchemaGenerator\Schema\Model\Type\PrimitiveType as SchemaPrimitiveType; use ApiPlatform\SchemaGenerator\SchemaGeneratorConfiguration; use EasyRdf\Graph as RdfGraph; use EasyRdf\Resource as RdfResource; @@ -87,9 +89,8 @@ public function provideGeneratePropertyAnnotationsCases(): \Generator $resource = new RdfResource('https://schema.org/review', $graph); $resource->addResource('rdfs:comment', 'A review of the item.'); $property->resource = $resource; - $property->isArray = true; $property->typeHint = 'array'; - $property->type = 'string'; + $property->type = new ArrayType(new SchemaPrimitiveType('string')); $property->range = new RdfResource('https://schema.org/Text'); yield 'array of strings property' => [$property, 'Place', ['@var string[]|null A review of the item.', '@see https://schema.org/review', '']]; @@ -97,8 +98,8 @@ public function provideGeneratePropertyAnnotationsCases(): \Generator $property = new SchemaProperty('address'); $graph = new RdfGraph(); $property->isNullable = false; - $property->isArray = true; $property->typeHint = 'array'; + $property->type = new ArrayType(); $property->reference = new SchemaClass('PostalAddress', new RdfResource('https://schema.org/PostalAddress', $graph)); yield 'reference property' => [$property, 'Place', ['@var Collection ', '']]; diff --git a/tests/AttributeGenerator/ConstraintAttributeGeneratorTest.php b/tests/AttributeGenerator/ConstraintAttributeGeneratorTest.php index 03f1df0a..9f4d2e6f 100644 --- a/tests/AttributeGenerator/ConstraintAttributeGeneratorTest.php +++ b/tests/AttributeGenerator/ConstraintAttributeGeneratorTest.php @@ -15,10 +15,12 @@ use ApiPlatform\SchemaGenerator\AttributeGenerator\ConstraintAttributeGenerator; use ApiPlatform\SchemaGenerator\Model\Attribute; +use ApiPlatform\SchemaGenerator\Model\Type\ArrayType; use ApiPlatform\SchemaGenerator\Model\Use_; use ApiPlatform\SchemaGenerator\PhpTypeConverter; use ApiPlatform\SchemaGenerator\Schema\Model\Class_ as SchemaClass; use ApiPlatform\SchemaGenerator\Schema\Model\Property; +use ApiPlatform\SchemaGenerator\Schema\Model\Type\PrimitiveType as SchemaPrimitiveType; use ApiPlatform\SchemaGenerator\TypesGenerator; use EasyRdf\Graph as RdfGraph; use EasyRdf\Resource as RdfResource; @@ -93,14 +95,14 @@ public function provideGeneratePropertyAttributesCases(): \Generator $property = new Property('prop'); $property->resource = new RdfResource('https://schema.org/email'); - $property->type = 'string'; + $property->type = new SchemaPrimitiveType('string'); $property->isNullable = false; yield 'email' => [$property, [new Attribute('Assert\Email'), new Attribute('Assert\NotNull')]]; $property = new Property('prop'); $property->reference = new SchemaClass('Enum', new RdfResource('https://schema.org/Enum', new RdfGraph())); $property->isEnum = true; - $property->isArray = true; + $property->type = new ArrayType(); yield 'enum' => [$property, [new Attribute('Assert\Choice', ['callback' => [new Literal('Enum::class'), 'toArray'], 'multiple' => true])]]; } diff --git a/tests/AttributeGenerator/DoctrineMongoDBAttributeGeneratorTest.php b/tests/AttributeGenerator/DoctrineMongoDBAttributeGeneratorTest.php index 2c1c2be6..42dcc0e9 100644 --- a/tests/AttributeGenerator/DoctrineMongoDBAttributeGeneratorTest.php +++ b/tests/AttributeGenerator/DoctrineMongoDBAttributeGeneratorTest.php @@ -16,9 +16,11 @@ use ApiPlatform\SchemaGenerator\AttributeGenerator\DoctrineMongoDBAttributeGenerator; use ApiPlatform\SchemaGenerator\CardinalitiesExtractor; use ApiPlatform\SchemaGenerator\Model\Attribute; +use ApiPlatform\SchemaGenerator\Model\Type\ArrayType; use ApiPlatform\SchemaGenerator\PhpTypeConverter; use ApiPlatform\SchemaGenerator\Schema\Model\Class_ as SchemaClass; use ApiPlatform\SchemaGenerator\Schema\Model\Property; +use ApiPlatform\SchemaGenerator\Schema\Model\Type\PrimitiveType as SchemaPrimitiveType; use ApiPlatform\SchemaGenerator\SchemaGeneratorConfiguration; use ApiPlatform\SchemaGenerator\TypesGenerator; use EasyRdf\Graph as RdfGraph; @@ -57,7 +59,7 @@ protected function setUp(): void $idProperty = new Property('id'); $idProperty->rangeName = 'identifier'; $idProperty->range = new RdfResource('https://schema.org/identifier'); - $idProperty->type = 'string'; + $idProperty->type = new SchemaPrimitiveType('string'); $idProperty->isId = true; $vehicle->addProperty($idProperty); $enumProperty = new Property('enum'); @@ -65,18 +67,17 @@ protected function setUp(): void $enumProperty->range = new RdfResource('https://schema.org/Thing'); $enumProperty->reference = new SchemaClass('Thing', new RdfResource('htts://schema.org/Thing', $graph)); $enumProperty->isEnum = true; - $enumProperty->isArray = true; + $enumProperty->type = new ArrayType(); $vehicle->addProperty($enumProperty); $collectionProperty = new Property('collection'); $collectionProperty->rangeName = 'string'; $collectionProperty->range = new RdfResource('http://www.w3.org/2001/XMLSchema#string'); - $collectionProperty->type = 'string'; - $collectionProperty->isArray = true; + $collectionProperty->type = new ArrayType(new SchemaPrimitiveType('string')); $vehicle->addProperty($collectionProperty); $weightProperty = new Property('weight'); $weightProperty->rangeName = 'nonPositiveInteger'; $weightProperty->range = new RdfResource('http://www.w3.org/2001/XMLSchema#nonPositiveInteger'); - $weightProperty->type = 'nonPositiveInteger'; + $weightProperty->type = new SchemaPrimitiveType('nonPositiveInteger'); $vehicle->addProperty($weightProperty); $productProperty = new Property('product'); $productProperty->rangeName = 'Product'; @@ -94,7 +95,7 @@ protected function setUp(): void $relationsProperty->range = new RdfResource('https://schema.org/Person'); $relationsProperty->reference = new SchemaClass('Person', new RdfResource('htts://schema.org/Person', $graph)); $relationsProperty->cardinality = CardinalitiesExtractor::CARDINALITY_1_N; - $relationsProperty->isArray = true; + $relationsProperty->type = new ArrayType(); $vehicle->addProperty($relationsProperty); $this->classMap[$vehicle->name()] = $vehicle; diff --git a/tests/AttributeGenerator/DoctrineOrmAttributeGeneratorTest.php b/tests/AttributeGenerator/DoctrineOrmAttributeGeneratorTest.php index f0a86ab9..a8a11942 100644 --- a/tests/AttributeGenerator/DoctrineOrmAttributeGeneratorTest.php +++ b/tests/AttributeGenerator/DoctrineOrmAttributeGeneratorTest.php @@ -16,9 +16,11 @@ use ApiPlatform\SchemaGenerator\AttributeGenerator\DoctrineOrmAttributeGenerator; use ApiPlatform\SchemaGenerator\CardinalitiesExtractor; use ApiPlatform\SchemaGenerator\Model\Attribute; +use ApiPlatform\SchemaGenerator\Model\Type\ArrayType; use ApiPlatform\SchemaGenerator\PhpTypeConverter; use ApiPlatform\SchemaGenerator\Schema\Model\Class_ as SchemaClass; use ApiPlatform\SchemaGenerator\Schema\Model\Property; +use ApiPlatform\SchemaGenerator\Schema\Model\Type\PrimitiveType as SchemaPrimitiveType; use ApiPlatform\SchemaGenerator\SchemaGeneratorConfiguration; use ApiPlatform\SchemaGenerator\TypesGenerator; use EasyRdf\Graph as RdfGraph; @@ -60,26 +62,25 @@ protected function setUp(): void $idProperty = new Property('id'); $idProperty->rangeName = 'identifier'; $idProperty->range = new RdfResource('https://schema.org/identifier'); - $idProperty->type = 'string'; + $idProperty->type = new SchemaPrimitiveType('string'); $idProperty->isId = true; $vehicle->addProperty($idProperty); $enumProperty = new Property('enum'); $enumProperty->rangeName = 'Thing'; $enumProperty->range = new RdfResource('https://schema.org/Thing'); $enumProperty->isEnum = true; - $enumProperty->isArray = true; + $enumProperty->type = new ArrayType(); $enumProperty->reference = new SchemaClass('Thing', new RdfResource('htts://schema.org/Thing', $graph)); $vehicle->addProperty($enumProperty); $collectionProperty = new Property('collection'); $collectionProperty->rangeName = 'string'; $collectionProperty->range = new RdfResource('http://www.w3.org/2001/XMLSchema#string'); - $collectionProperty->type = 'string'; - $collectionProperty->isArray = true; + $collectionProperty->type = new ArrayType(new SchemaPrimitiveType('string')); $vehicle->addProperty($collectionProperty); $weightProperty = new Property('weight'); $weightProperty->rangeName = 'nonPositiveInteger'; $weightProperty->range = new RdfResource('http://www.w3.org/2001/XMLSchema#nonPositiveInteger'); - $weightProperty->type = 'nonPositiveInteger'; + $weightProperty->type = new SchemaPrimitiveType('nonPositiveInteger'); $vehicle->addProperty($weightProperty); $prefixedWeightProperty = new Property('prefixedWeight'); $prefixedWeightProperty->isEmbedded = true; @@ -121,28 +122,28 @@ protected function setUp(): void $relation0NProperty->range = new RdfResource('https://schema.org/QuantitativeValue'); $relation0NProperty->reference = new SchemaClass('QuantitativeValue', new RdfResource('htts://schema.org/QuantitativeValue', $graph)); $relation0NProperty->cardinality = CardinalitiesExtractor::CARDINALITY_0_N; - $relation0NProperty->isArray = true; + $relation0NProperty->type = new ArrayType(); $vehicle->addProperty($relation0NProperty); $relation1NProperty = new Property('relation1_N'); $relation1NProperty->rangeName = 'QuantitativeValue'; $relation1NProperty->range = new RdfResource('https://schema.org/QuantitativeValue'); $relation1NProperty->reference = new SchemaClass('QuantitativeValue', new RdfResource('htts://schema.org/QuantitativeValue', $graph)); $relation1NProperty->cardinality = CardinalitiesExtractor::CARDINALITY_1_N; - $relation1NProperty->isArray = true; + $relation1NProperty->type = new ArrayType(); $vehicle->addProperty($relation1NProperty); $relation1NSelfReferencingProperty = new Property('relation1_N_self_referencing'); $relation1NSelfReferencingProperty->rangeName = 'Vehicle'; $relation1NSelfReferencingProperty->range = new RdfResource('https://schema.org/Vehicle'); $relation1NSelfReferencingProperty->reference = new SchemaClass('Vehicle', new RdfResource('htts://schema.org/Vehicle', $graph)); $relation1NSelfReferencingProperty->cardinality = CardinalitiesExtractor::CARDINALITY_1_N; - $relation1NSelfReferencingProperty->isArray = true; + $relation1NSelfReferencingProperty->type = new ArrayType(); $vehicle->addProperty($relation1NSelfReferencingProperty); $relationNNProperty = new Property('relationN_N'); $relationNNProperty->rangeName = 'QuantitativeValue'; $relationNNProperty->range = new RdfResource('https://schema.org/QuantitativeValue'); $relationNNProperty->reference = new SchemaClass('QuantitativeValue', new RdfResource('htts://schema.org/QuantitativeValue', $graph)); $relationNNProperty->cardinality = CardinalitiesExtractor::CARDINALITY_N_N; - $relationNNProperty->isArray = true; + $relationNNProperty->type = new ArrayType(); $vehicle->addProperty($relationNNProperty); $this->classMap[$vehicle->name()] = $vehicle; diff --git a/tests/ClassMutator/ClassPropertiesAppenderTest.php b/tests/ClassMutator/ClassPropertiesAppenderTest.php index 6f78d3f6..bf4c2e26 100644 --- a/tests/ClassMutator/ClassPropertiesAppenderTest.php +++ b/tests/ClassMutator/ClassPropertiesAppenderTest.php @@ -19,6 +19,7 @@ use ApiPlatform\SchemaGenerator\PhpTypeConverter; use ApiPlatform\SchemaGenerator\Schema\Model\Class_ as SchemaClass; use ApiPlatform\SchemaGenerator\Schema\Model\Property; +use ApiPlatform\SchemaGenerator\Schema\Model\Type\PrimitiveType as SchemaPrimitiveType; use ApiPlatform\SchemaGenerator\Schema\PropertyGenerator\PropertyGenerator as SchemaPropertyGenerator; use ApiPlatform\SchemaGenerator\Schema\TypeConverter; use ApiPlatform\SchemaGenerator\SchemaGeneratorConfiguration; @@ -105,14 +106,14 @@ public function provideInvokeTestCases(): \Generator $expectedArticleBodyProperty->resource = new RdfResource('https://schema.org/articleBody', $graph); $expectedArticleBodyProperty->range = new RdfResource('https://schema.org/Text', $graph); $expectedArticleBodyProperty->rangeName = 'Text'; - $expectedArticleBodyProperty->type = 'string'; + $expectedArticleBodyProperty->type = new SchemaPrimitiveType('string'); $expectedArticleBodyProperty->isNullable = true; $expectedArticleSectionProperty = new Property('articleSection'); $expectedArticleSectionProperty->cardinality = CardinalitiesExtractor::CARDINALITY_UNKNOWN; $expectedArticleSectionProperty->resource = new RdfResource('https://schema.org/articleSection', $graph); $expectedArticleSectionProperty->range = new RdfResource('https://schema.org/Text', $graph); $expectedArticleSectionProperty->rangeName = 'Text'; - $expectedArticleSectionProperty->type = 'string'; + $expectedArticleSectionProperty->type = new SchemaPrimitiveType('string'); $expectedArticleSectionProperty->isNullable = true; yield 'no configuration' => [clone $article, (clone $article)->addProperty($expectedArticleBodyProperty)->addProperty($expectedArticleSectionProperty), $graph]; @@ -123,7 +124,7 @@ public function provideInvokeTestCases(): \Generator $expectedGivenNameProperty->resource = new RdfResource('https://schema.org/givenName', $graph); $expectedGivenNameProperty->range = new RdfResource('https://schema.org/Text', $graph); $expectedGivenNameProperty->rangeName = 'Text'; - $expectedGivenNameProperty->type = 'string'; + $expectedGivenNameProperty->type = new SchemaPrimitiveType('string'); $expectedGivenNameProperty->isNullable = true; $expectedGivenNameProperty->isRequired = true; yield 'with configuration' => [clone $person, (clone $person)->addProperty($expectedGivenNameProperty), $graph]; diff --git a/tests/e2e/open-education-api-v5/consumers/EDUXCHANGE/V1/Course.yaml b/tests/e2e/open-education-api-v5/consumers/EDUXCHANGE/V1/Course.yaml new file mode 100644 index 00000000..3c2532d4 --- /dev/null +++ b/tests/e2e/open-education-api-v5/consumers/EDUXCHANGE/V1/Course.yaml @@ -0,0 +1,45 @@ +type: object +required: + - consumerKey + - alliances +properties: + consumerKey: + type: string + alliances: + type: array + items: + type: object + required: + - name + properties: + name: + type: string + description: The name of the alliance + enum: + - ewuu + - lde + theme: + type: string + description: the theme of the Program or Course within the alliance + selection: + type: boolean + description: A boolean value (`true` or `false`) indicating whether this Program or Course is selective, e.g. whether student need to pass extra requirements before being allowed to enroll. + type: + type: string + description: A string indicating whether a Program or Course is broadening or deepening + enum: + - broadening + - deepening + visibleForOwnStudents: + type: boolean + description: a boolean value (`true` or `false`) indicating whether this Program or Course should be visible for students of the offering institution. The default values for this attribute is specified outside of this specification on the alliance level. + enrollmentForOwnStudents: + type: string + description: a string indicating which enrollments process should be followed for students of the offering institution. Allowed values are "broker"` or `"url"`. This attribute is only used if `visibleForOwnStudents` is set to `true`. If `"url"` is chosen the attribute `enrollmentUrl` is mandatory. + enum: + - broker + - url + enrollmentUrl: + type: string + description: a string formatted as an url to which students will be redirected if `enrollmentForOwnStudents is set to `"url"`. + format: url diff --git a/tests/e2e/open-education-api-v5/consumers/EDUXCHANGE/V1/Person.yaml b/tests/e2e/open-education-api-v5/consumers/EDUXCHANGE/V1/Person.yaml new file mode 100644 index 00000000..a1bc8980 --- /dev/null +++ b/tests/e2e/open-education-api-v5/consumers/EDUXCHANGE/V1/Person.yaml @@ -0,0 +1,47 @@ +type: object +required: + - consumerKey + - enrollments + - institutionBRINCode +properties: + consumerKey: + type: string + enrollments: + type: array + items: + type: object + required: + - crohoCreboCode + - name + properties: + crohoCreboCode: + type: string + description: The crohoCreboCode for this program. This should be a five character string, e.g. "34401". + name: + type: string + description: The name of the program this enrollment is for. + phase: + type: string + description: The phase of the program for this enrollment. + enum: + - bachelor + - master + modeOfStudy: + type: string + description: The modeOfStudy of the program for this enrollment + enum: + - full-time + - part-time + - dual training + - self-paced + startDate: + type: string + description: The start date for this enrollment. Should be a string formatted as an RFC3099 full-date. + format: date + endDate: + type: string + description: The end date for this enrollment. Should be a string formatted as an RFC3099 full-date. + format: date + institutionBRINCode: + type: string + pattern: ^\d{2}[A-Z]{2}$ diff --git a/tests/e2e/open-education-api-v5/consumers/EDUXCHANGE/V1/Program.yaml b/tests/e2e/open-education-api-v5/consumers/EDUXCHANGE/V1/Program.yaml new file mode 100644 index 00000000..3c2532d4 --- /dev/null +++ b/tests/e2e/open-education-api-v5/consumers/EDUXCHANGE/V1/Program.yaml @@ -0,0 +1,45 @@ +type: object +required: + - consumerKey + - alliances +properties: + consumerKey: + type: string + alliances: + type: array + items: + type: object + required: + - name + properties: + name: + type: string + description: The name of the alliance + enum: + - ewuu + - lde + theme: + type: string + description: the theme of the Program or Course within the alliance + selection: + type: boolean + description: A boolean value (`true` or `false`) indicating whether this Program or Course is selective, e.g. whether student need to pass extra requirements before being allowed to enroll. + type: + type: string + description: A string indicating whether a Program or Course is broadening or deepening + enum: + - broadening + - deepening + visibleForOwnStudents: + type: boolean + description: a boolean value (`true` or `false`) indicating whether this Program or Course should be visible for students of the offering institution. The default values for this attribute is specified outside of this specification on the alliance level. + enrollmentForOwnStudents: + type: string + description: a string indicating which enrollments process should be followed for students of the offering institution. Allowed values are "broker"` or `"url"`. This attribute is only used if `visibleForOwnStudents` is set to `true`. If `"url"` is chosen the attribute `enrollmentUrl` is mandatory. + enum: + - broker + - url + enrollmentUrl: + type: string + description: a string formatted as an url to which students will be redirected if `enrollmentForOwnStudents is set to `"url"`. + format: url diff --git a/tests/e2e/open-education-api-v5/consumers/RIO/V1/Course.yaml b/tests/e2e/open-education-api-v5/consumers/RIO/V1/Course.yaml new file mode 100644 index 00000000..edddaf9e --- /dev/null +++ b/tests/e2e/open-education-api-v5/consumers/RIO/V1/Course.yaml @@ -0,0 +1,42 @@ +type: object +description: RIO add-on attributes to a course that lead to a certifiable learning outcome +required: + - educationOffererCode +properties: + educationOffererCode: + type: string + description: | + onderwijsaanbiedercode + Een betekenisloze identifier voor een onderwijsaanbieder in de Registratie Instellingen en Opleidingen. + pattern: ^(?:\d{3}A\d{3})$ + educationLocationCode: + type: string + description: | + onderwijslocatiecode + Een betekenisloze identifier voor een onderwijslocatie in de Registratie Instellingen en Opleidingen. + pattern: ^(?:\d{3}X\d{3})$ + consentParticipationSTAP: + type: string + description: | + toestemmingDeelnameSTAP + Geeft aan of een AangebodenOpleiding beschikbaar is in het kader van de STAP-regeling en voorkomt in het Scholingsregister. + enum: + - permission_granted + - permission_not_granted + jointPartnerCodes: + type: array + items: + type: string + pattern: ^(?:\d{3}A\d{3})$ + minItems: 1 + description: | + samenwerkendeOnderwijsaanbiedercode + Code van de onderwijsaanbieder waarmee wordt samengewerkt OnderwijsaanbiederID-v01 + foreignPartners: + type: array + items: string + minItems: 1 + description: | + buitenlandsePartner + Beschrijving van de organisatie waarmee door een Nederlandse onderwijsbestuur wordt samengewerkt + bij het verzorgen van een Joint Degree. diff --git a/tests/e2e/open-education-api-v5/consumers/RIO/V1/EducationSpecification.yaml b/tests/e2e/open-education-api-v5/consumers/RIO/V1/EducationSpecification.yaml new file mode 100644 index 00000000..bf9b14ba --- /dev/null +++ b/tests/e2e/open-education-api-v5/consumers/RIO/V1/EducationSpecification.yaml @@ -0,0 +1,42 @@ +type: object +description: RIO add-on attributes to an education specification +required: +properties: + educationSpecificationSubType: + type: string + description: | + The subtype of the EducationSpecification. At the moment only used for EducationSpecification's of the type `program`: + Allowed subtypes when type = `program`: + - variant: if the subtype attribute is set to `variant`, the program maps to a HoOpleiding of 'soort' `VARIANT` + - *...*: if the `educationSpecificationSubType`` attribute is absent, the program maps to a HoOpleiding of 'soort' `OPLEIDING` + enum: + - variant + example: program + category: + type: array + description: | + A classification for programs in non-formal education. Used when describing EducationSpecification's that will map to a `articuliereOpleiding in RIO + minItems: 0 + maxItems: 3 + items: + type: string + enum: + - business_and_project_support + - economy + - behavior_and_society + - healthcare_and_sport + - hobby_and_leisure_time + - agriculture_food_and_natural_environment + - management_and_project_management + - nature + - education + - law + - cross_sectoral + - language_and_culture + - technology_and_ict + - tourism_hospitality_and_recreation + - transport_and_logistics + - security_and_defense + example: + - business_and_project_support + - economy diff --git a/tests/e2e/open-education-api-v5/consumers/RIO/V1/Offering.yaml b/tests/e2e/open-education-api-v5/consumers/RIO/V1/Offering.yaml new file mode 100644 index 00000000..e00e41d3 --- /dev/null +++ b/tests/e2e/open-education-api-v5/consumers/RIO/V1/Offering.yaml @@ -0,0 +1,29 @@ +type: object +description: RIO add-on attributes to the offerings of either a collection of courses or courses that lead to a certifiable learning outcome +required: + - registrationStatus + - requiredPermissionRegistration +properties: + explanationRequiredPermission: + type: string + description: | + toelichtingVereisteToestemming + Is een tekstuele toelichting op de voor aanmelding vereiste toestemming van de onderwijsaanbieder + requiredPermissionRegistration: + type: string + description: | + toestemmingVereistVoorAanmelding + Geeft aan of een aspirant-student voor een bepaald cohort van een aangeboden opleiding toestemming van de onderwijsaanbieder nodig heeft om zich aan te mogen melden. + - yes: JA + - no: NEE + enum: + - yes + - no + registrationStatus: + type: string + description: | + cohortStatus + De toegestane waarden voor de status van een cohort van een aangeboden opleiding. Hiermee kan bijvoorbeeld worden aangegeven of een bepaald cohort open staat voor aanmelding, of dat het gesloten is. + enum: + - open + - closed diff --git a/tests/e2e/open-education-api-v5/consumers/RIO/V1/Program.yaml b/tests/e2e/open-education-api-v5/consumers/RIO/V1/Program.yaml new file mode 100644 index 00000000..6bccce51 --- /dev/null +++ b/tests/e2e/open-education-api-v5/consumers/RIO/V1/Program.yaml @@ -0,0 +1,95 @@ +type: object +description: RIO add-on attributes to a collection of courses that lead to a certifiable learning outcome +required: + - educationOffererCode +properties: + educationOffererCode: + type: string + description: | + onderwijsaanbiedercode + Een betekenisloze identifier voor een onderwijsaanbieder in de Registratie Instellingen en Opleidingen. + pattern: ^(?:\d{3}A\d{3})$ + educationLocationCode: + type: string + description: | + onderwijslocatiecode + Een betekenisloze identifier voor een onderwijslocatie in de Registratie Instellingen en Opleidingen. + pattern: ^(?:\d{3}X\d{3})$ + consentParticipationSTAP: + type: string + description: | + toestemmingDeelnameSTAP + Geeft aan of een AangebodenOpleiding beschikbaar is in het kader van de STAP-regeling en voorkomt in het Scholingsregister. + enum: + - permission_granted + - permission_not_granted + jointPartnerCodes: + type: array + items: + type: string + pattern: ^(?:\d{3}A\d{3})$ + minItems: 1 + description: | + samenwerkendeOnderwijsaanbiedercode + Code van de onderwijsaanbieder waarmee wordt samengewerkt OnderwijsaanbiederID-v01 + foreignPartners: + type: array + items: string + minItems: 1 + description: | + buitenlandsePartner + Beschrijving van de organisatie waarmee door een Nederlandse onderwijsbestuur wordt samengewerkt + bij het verzorgen van een Joint Degree. + deficiency: + type: string + description: | + deficientie Geeft aan of inschrijving met onvoldoende vooropleiding mogelijk is + - deficiencies: DEFICIENTIES Inschrijving mogelijk met onvoldoende vooropleiding + - no_dediciencies: GEEN_DEFICIENTIES Inschrijving alleen mogelijk met voldoende vooropleiding + enum: + - deficiencies + - no_deficiencies + requirementsActivities: + type: string + description: | + eisenWerkzaamheden + Geeft aan of er eisen zijn gesteld aan het type werkzaamheden die verricht worden in het kader van de opleiding. + - requirements: EISEN Er zijn eisen gesteld aan de werkzaamheden in het kader van de opleiding + - no_requirements: GEEN_EISEN Er zijn geen eisen gesteld aan de werkzaamheden in het kader van de opleiding + enum: + - requirements + - no_requirements + propaedeuticPhase: + type: string + description: | + propadeutischeFase + Geeft aan of de aangeboden opleiding een propedeutische fase kent en of deze wordt afgesloten met een propedeutisch examen. + - no_propaedeutic_phase: GEEN_PROPEDEUTISCHE_FASE Geen propedeutische fase + - propaedeutic_phase_exam: PROPEDEUTISCHE_FASE_EXAMEN Propedeutische fase met examen + - propaedeutic_phase_no_exam: PROPEDEUTISCHE_FASE_ZONDER_EXAMEN Propedeutische fase zonder examen + enum: + - no_propaedeutic_phase + - propaedeutic_phase_exam + - propaedeutic_phase_no_exam + studyChoiceCheck: + type: string + description: | + studiekeuzecheck + Specificeert of er en zo ja hoe een controle op geschiktheid van een aankomend student voor deelname aan gekozen studie plaatsvindt. + - no_study_choice_check: GEEN_STUDIEKEUZE_CHECK Geen studiekeuzecheck + - study_choice_check_available: STUDIEKEUZE_CHECK_VAN_TOEPASSING Studiekeuzecheck van toepassing + - study_choice_check_mandatory: STUDIEKEUZE_CHECK_VERPLICHT Studiekeuzecheck verplicht + enum: + - no_study_choice_check + - study_choice_check_available + - study_choice_check_mandatory + acceleratedRoute: + type: string + description: | + versneldTraject + Geeft aan of een student een versneld programma volgt zodat het opleiding in minder tijd dan normaal doorlopen kan worden. + - accelerated_route: VERSNELD_TRAJECT Versneld traject + - no_accelerated_route: GEEN_VERSNELD_TRAJECT Geen versneld traject + enum: + - accelerated_route + - no_accelerated_route diff --git a/tests/e2e/open-education-api-v5/consumers/RIO/V1/examples/Course.yaml b/tests/e2e/open-education-api-v5/consumers/RIO/V1/examples/Course.yaml new file mode 100644 index 00000000..383a84a8 --- /dev/null +++ b/tests/e2e/open-education-api-v5/consumers/RIO/V1/examples/Course.yaml @@ -0,0 +1,6 @@ +- consumerKey: rio + educationOffererCode: 123A321 + educationLocationCode: 334X123 + consentParticipationSTAP: permission_granted + jointPartnerCodes: [123A123] + foreignPartners: ["Harvard University"] diff --git a/tests/e2e/open-education-api-v5/consumers/RIO/V1/examples/EducationSpecification.yaml b/tests/e2e/open-education-api-v5/consumers/RIO/V1/examples/EducationSpecification.yaml new file mode 100644 index 00000000..bc158a40 --- /dev/null +++ b/tests/e2e/open-education-api-v5/consumers/RIO/V1/examples/EducationSpecification.yaml @@ -0,0 +1,3 @@ +- consumerKey: rio + educationSpecificationSubType: variant + category: ['business_and_project_support', 'economy'] diff --git a/tests/e2e/open-education-api-v5/consumers/RIO/V1/examples/Offering.yaml b/tests/e2e/open-education-api-v5/consumers/RIO/V1/examples/Offering.yaml new file mode 100644 index 00000000..92a02eb3 --- /dev/null +++ b/tests/e2e/open-education-api-v5/consumers/RIO/V1/examples/Offering.yaml @@ -0,0 +1,4 @@ +- consumerKey: rio + explanationRequiredPermission: Toestemming is vereist omdat we daarom vragen. + requiredPermissionRegistration: yes + registrationStatus: open diff --git a/tests/e2e/open-education-api-v5/consumers/RIO/V1/examples/Program.yaml b/tests/e2e/open-education-api-v5/consumers/RIO/V1/examples/Program.yaml new file mode 100644 index 00000000..8c7a9ddf --- /dev/null +++ b/tests/e2e/open-education-api-v5/consumers/RIO/V1/examples/Program.yaml @@ -0,0 +1,11 @@ +- consumerKey: rio + educationOffererCode: 122A112 + educationLocationCode: 123X122 + consentParticipationSTAP: permission_granted + jointPartnerCodes: [122A113] + foreignPartners: ["Harvard University"] + deficiency: deficiencies + requirementsActivities: requirements + propaedeuticPhase: no_propaedeutic_phase + studyChoiceCheck: no_study_choice_check + acceleratedRoute: accelerated_route diff --git a/tests/e2e/open-education-api-v5/consumers/TEST/V1/TestConsumer.yaml b/tests/e2e/open-education-api-v5/consumers/TEST/V1/TestConsumer.yaml new file mode 100644 index 00000000..c5564bfb --- /dev/null +++ b/tests/e2e/open-education-api-v5/consumers/TEST/V1/TestConsumer.yaml @@ -0,0 +1,7 @@ +type: object +description: extra elements +properties: + additional: + type: string + attributes: + type: string diff --git a/tests/e2e/open-education-api-v5/consumers/TEST/V1/examples/TestConsumer.yaml b/tests/e2e/open-education-api-v5/consumers/TEST/V1/examples/TestConsumer.yaml new file mode 100644 index 00000000..ec410aaf --- /dev/null +++ b/tests/e2e/open-education-api-v5/consumers/TEST/V1/examples/TestConsumer.yaml @@ -0,0 +1,3 @@ +- consumerKey: x-test-consumer + additional: custom + attributes: here diff --git a/tests/e2e/open-education-api-v5/enumerations/ICERelationType.yaml b/tests/e2e/open-education-api-v5/enumerations/ICERelationType.yaml new file mode 100644 index 00000000..440b0682 --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/ICERelationType.yaml @@ -0,0 +1,7 @@ +type: string +description: Type of relation between person and In Case of Emergency contact +enum: + - partner + - parent + - other +example: partner diff --git a/tests/e2e/open-education-api-v5/enumerations/academicSessionType.yaml b/tests/e2e/open-education-api-v5/enumerations/academicSessionType.yaml new file mode 100644 index 00000000..3a64b977 --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/academicSessionType.yaml @@ -0,0 +1,19 @@ +type: string +description: | + The type of this Academic Session This is an *extensible enumeration*. + - academic year: academic year + - semester: semester, typically there are two semesters per academic year + - trimester: trimester, typically there are three semesters per academic year + - quarter: quarter, typically there are four quarters per academic year + - testing period: a period in which tests take place + - period: any other period in an academic year + + Implementations are allowed to add additional values to those above, as long as they do not overlap in definition to existing values. +example: semester +x-ooapi-extensible-enum: + - academic year + - semester + - trimester + - quarter + - testing period + - period diff --git a/tests/e2e/open-education-api-v5/enumerations/addressType.yaml b/tests/e2e/open-education-api-v5/enumerations/addressType.yaml new file mode 100644 index 00000000..4ed1445c --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/addressType.yaml @@ -0,0 +1,14 @@ +type: string +description: | + Address type + - postal: post + - visit: bezoek + - deliveries: bezorg + - billing: factuur + - teaching: the address where education takes place +enum: + - postal + - visit + - deliveries + - billing + - teaching diff --git a/tests/e2e/open-education-api-v5/enumerations/associationRole.yaml b/tests/e2e/open-education-api-v5/enumerations/associationRole.yaml new file mode 100644 index 00000000..6b2c4c9b --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/associationRole.yaml @@ -0,0 +1,15 @@ +type: string +description: | + The role of this person associated with the offering + - student: student + - lecturer: docent + - teaching assistant: studentassistent + - coordinator: coördinator + - guest: gast +enum: + - student + - lecturer + - teaching assistant + - coordinator + - guest +example: student diff --git a/tests/e2e/open-education-api-v5/enumerations/associationState.yaml b/tests/e2e/open-education-api-v5/enumerations/associationState.yaml new file mode 100644 index 00000000..33fb7c6b --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/associationState.yaml @@ -0,0 +1,9 @@ +type: string +description: The state of this association +enum: + - pending + - canceled + - denied + - associated + - queued +example: associated diff --git a/tests/e2e/open-education-api-v5/enumerations/codeType.yaml b/tests/e2e/open-education-api-v5/enumerations/codeType.yaml new file mode 100644 index 00000000..7bfa853b --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/codeType.yaml @@ -0,0 +1,59 @@ +type: string +description: | + The code/identifier type. + + This is an *extensible enumeration*. Use `x-` to prefix custom values + + The predefined values are: + - `brin`: The registration number for a Dutch educational institution that is issued by the Dutch Ministry of Education, Culture and Science + - `crohoCreboCode`: programs with a CREBO and CROHO number are accredited by the Dutch Ministry of Education, Culture and Science (OCW) + - `programCode`: Identifier for the program (collection of courses) + - `componentCode`: The code for a component (part of a course) + - `offeringCode`: The code to identify a specific offering (program, course or component offering) + - `organizationId`: The identifier for the organization + - `buildingId`: The number or code to identify a building + - `bagId`: The identification of a building as it is known in the Dutch Building Administration (BAG) + - `roomCode`: The code for a room + - `systemId`: Identifier assigned to an entity in context of a specific system + - `productId`: Identifier assigned to a specific product + - `nationalIdentityNumber`: Identifier assigned by the governement of the person. e.g. a social security number in the USA + - `studentNumber`: Identifier for the student + - `studielinkNumber`: Identifier for the person as determined by Studielink + - `esi`: European Student Identifier + - `userName`: The name of a user + - `accountId`: Identifier assigned to a specific account + - `emailAdress`: An email address + - `groupCode`: The identifier for a group (of persons) + - `isbn`: International Standard Book Number that serve as product identifiers for Books + - `issn`: International Standard Book Number that serve as product identifiers for periodicals + - `orcId`: Open Researcher and Contributor ID + - `uuid`: A universally unique identifier + - `schacHome`: Home organization using the domain name of the organization + - `identifier`: Generic Identifier +x-ooapi-extensible-enum: + - brin + - crohoCreboCode + - programCode + - componentCode + - offeringCode + - organizationId + - buildingId + - bagId + - roomCode + - systemId + - productId + - nationalIdentityNumber + - studentNumber + - studielinkNumber + - esi + - userName + - accountId + - emailAdress + - groupCode + - isbn + - issn + - orcId + - uuid + - schacHome + - identifier +example: identifier diff --git a/tests/e2e/open-education-api-v5/enumerations/componentType.yaml b/tests/e2e/open-education-api-v5/enumerations/componentType.yaml new file mode 100644 index 00000000..b4c1517a --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/componentType.yaml @@ -0,0 +1,27 @@ +type: string +description: | + The component type + - test: tentamen + - lecture: college + - practical: practicum + - tutorial: werkcollege + - consultation: consultatie + - project: project + - workshop: workshop + - excursion: excursie + - independent study: zelfstudie + - external: extern + - skills training: vaardighedentraining +enum: + - test + - lecture + - practical + - tutorial + - consultation + - project + - workshop + - excursion + - independent study + - external + - skills training +example: test diff --git a/tests/e2e/open-education-api-v5/enumerations/costType.yaml b/tests/e2e/open-education-api-v5/enumerations/costType.yaml new file mode 100644 index 00000000..c9620568 --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/costType.yaml @@ -0,0 +1,13 @@ +type: string +description: | + The type of the cost. This is an *extensible enumeration*. + + The following values have been defined in the specification: + - `STAP eligible`: the costs that a student can get STAP subsidy for + - `total costs`: the total costs that a student is to pay to follow this offering + + Implementations are allowed to add additional values to those above, as long as they do not overlap in definition to existing values. +example: total costs +x-ooapi-extensible-enum: + - STAP eligible + - total costs diff --git a/tests/e2e/open-education-api-v5/enumerations/educationSpecificationType.yaml b/tests/e2e/open-education-api-v5/enumerations/educationSpecificationType.yaml new file mode 100644 index 00000000..94fee9c9 --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/educationSpecificationType.yaml @@ -0,0 +1,13 @@ +type: string +description: | + The type of education specification + - program: HOOPLEIDING + - privateProgram: PARTICULIEREOPLEIDING + - programCluster: HOONDERWIJSEENHEDENCLUSTER + - course: HOONDERWIJSEENHEID +enum: + - program + - privateProgram + - cluster + - course +example: program diff --git a/tests/e2e/open-education-api-v5/enumerations/formalDocument.yaml b/tests/e2e/open-education-api-v5/enumerations/formalDocument.yaml new file mode 100644 index 00000000..34f8c086 --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/formalDocument.yaml @@ -0,0 +1,15 @@ +type: string +description: | + The type of formal document obtained after completion of this education + - diploma: DIPLOMA + - certificate: CERTIFICAAT + - no official document: GEEN OFFICIEEL DOCUMENT + - testimonial: GETUIGSCHRIFT + - school advice: SCHOOLADVIES +enum: + - diploma + - certificate + - no official document + - testimonial + - school advice +example: diploma diff --git a/tests/e2e/open-education-api-v5/enumerations/gender.yaml b/tests/e2e/open-education-api-v5/enumerations/gender.yaml new file mode 100644 index 00000000..68049b98 --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/gender.yaml @@ -0,0 +1,8 @@ +type: string +description: The gender of this person +enum: + - M + - F + - U + - X +example: F diff --git a/tests/e2e/open-education-api-v5/enumerations/groupType.yaml b/tests/e2e/open-education-api-v5/enumerations/groupType.yaml new file mode 100644 index 00000000..8d151ff8 --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/groupType.yaml @@ -0,0 +1,11 @@ +type: string +description: | + The type of this group + - learning group: A collection of participants carrying out common learning activities + - class: A collection of participants carrying out jointly scheduled educational activities + - team: A collection of members of a team, either students, employees or mixed. +enum: + - learning group + - class + - team +example: learning group diff --git a/tests/e2e/open-education-api-v5/enumerations/level.yaml b/tests/e2e/open-education-api-v5/enumerations/level.yaml new file mode 100644 index 00000000..bf7a5e75 --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/level.yaml @@ -0,0 +1,31 @@ +type: string +description: | + The level of this course (ECTS-year of study if applicable) + - secondary vocational education: mbo + - secondary vocational education 1: mbo 1, corresponds to levelOfQualification 1 + - secondary vocational education 2: mbo 2, corresponds to levelOfQualification 2 + - secondary vocational education 3: mbo 3, corresponds to levelOfQualification 3 + - secondary vocational education 4: mbo 4, corresponds to levelOfQualification 4 + - associate degree: associate degree, corresponds to levelOfQualification 5 + - bachelor: bachelor, corresponds to levelOfQualification 6 + - master: master, corresponds to levelOfQualification 7 + - doctoral: doctoraal, corresponds to levelOfQualification 8 + - undefined: onbepaald + - undivided: ongedeeld + - nt2-1: NT2 niveau 1 + - nt2-2: NT2 niveau 2 +enum: + - secondary vocational education + - secondary vocational education 1 + - secondary vocational education 2 + - secondary vocational education 3 + - secondary vocational education 4 + - associate degree + - bachelor + - master + - doctoral + - undefined + - undivided + - nt2-1 + - nt2-2 +example: master diff --git a/tests/e2e/open-education-api-v5/enumerations/levelOfQualification.yaml b/tests/e2e/open-education-api-v5/enumerations/levelOfQualification.yaml new file mode 100644 index 00000000..c3f4f407 --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/levelOfQualification.yaml @@ -0,0 +1,13 @@ +type: string +description: Level of qualification according to the Dutch National Qualification Framework and the European Qualifications Framework, see [this overview](https://nlqf.nl/images/downloads/English2018/Schematic_overview_NLQF_2020.pdf) for more information. +enum: + - '1' + - '2' + - '3' + - '4' + - '4+' + - '5' + - '6' + - '7' + - '8' +example: '6' diff --git a/tests/e2e/open-education-api-v5/enumerations/modeOfStudy.yaml b/tests/e2e/open-education-api-v5/enumerations/modeOfStudy.yaml new file mode 100644 index 00000000..d844a045 --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/modeOfStudy.yaml @@ -0,0 +1,12 @@ +type: string +description: | + Indicates whether the education is full-time, part-time, dual or self-paced. + - full-time: fulltime + - part-time: parttime + - dual training: duaal + - self-paced: eigen tempo +enum: + - full-time + - part-time + - dual training + - self-paced \ No newline at end of file diff --git a/tests/e2e/open-education-api-v5/enumerations/modesOfDelivery.yaml b/tests/e2e/open-education-api-v5/enumerations/modesOfDelivery.yaml new file mode 100644 index 00000000..76cb9dea --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/modesOfDelivery.yaml @@ -0,0 +1,17 @@ +type: array +description: | + The mode of delivery of the component (ECTS-mode of delivery) + - distance-learning: afstandsleren + - on campus: op de campus + - online: online + - hybrid: hybride + - situated: op locatie +items: + type: string + enum: + - distance-learning + - on campus + - online + - hybrid + - situated + example: situated diff --git a/tests/e2e/open-education-api-v5/enumerations/newsItemType.yaml b/tests/e2e/open-education-api-v5/enumerations/newsItemType.yaml new file mode 100644 index 00000000..0107a467 --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/newsItemType.yaml @@ -0,0 +1,12 @@ +type: string +description: | + The type of this news item + - calamity: calamiteit + - general: algemeen + - schedule-change: roosterwijziging + - announcement: aankondiging +enum: + - calamity + - general + - schedule-change + - announcement diff --git a/tests/e2e/open-education-api-v5/enumerations/offeringType.yaml b/tests/e2e/open-education-api-v5/enumerations/offeringType.yaml new file mode 100644 index 00000000..aa8fb100 --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/offeringType.yaml @@ -0,0 +1,7 @@ +type: string +description: The type of offering based on the object that is offered +enum: + - program + - course + - component +example: course diff --git a/tests/e2e/open-education-api-v5/enumerations/organizationType.yaml b/tests/e2e/open-education-api-v5/enumerations/organizationType.yaml new file mode 100644 index 00000000..a6231ff1 --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/organizationType.yaml @@ -0,0 +1,19 @@ +type: string +description: | + The type of this organization. Each OOAPI endpoint should have a single organization with type `root`, describing the root organization. + - root: the root of this organization, representing the Educational Institution itself + - institute: instituut + - department: departement + - faculty: faculteit + - branch: vestiging + - academy: academie + - school: school +enum: + - root + - institute + - department + - faculty + - branch + - academy + - school +example: root diff --git a/tests/e2e/open-education-api-v5/enumerations/passState.yaml b/tests/e2e/open-education-api-v5/enumerations/passState.yaml new file mode 100644 index 00000000..eb041389 --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/passState.yaml @@ -0,0 +1,7 @@ +type: string +description: The state of this result +enum: + - unknown + - passed + - failed +example: passed diff --git a/tests/e2e/open-education-api-v5/enumerations/personAffiliations.yaml b/tests/e2e/open-education-api-v5/enumerations/personAffiliations.yaml new file mode 100644 index 00000000..82a4563b --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/personAffiliations.yaml @@ -0,0 +1,13 @@ +type: array +description: | + The affiliations of this person, the relations a person has with the organization providing this endpoint + - student: student + - employee: medewerker + - guest: gast +items: + type: string + enum: + - student + - employee + - guest + example: student diff --git a/tests/e2e/open-education-api-v5/enumerations/programType.yaml b/tests/e2e/open-education-api-v5/enumerations/programType.yaml new file mode 100644 index 00000000..5e2ea5a3 --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/programType.yaml @@ -0,0 +1,15 @@ +type: string +description: | + The type of this program + - program: opleiding + - minor: minor + - honours: honours + - specialization: specialisatie + - track: track +enum: + - program + - minor + - honours + - specialization + - track +example: program diff --git a/tests/e2e/open-education-api-v5/enumerations/qualificationAwarded.yaml b/tests/e2e/open-education-api-v5/enumerations/qualificationAwarded.yaml new file mode 100644 index 00000000..f0ada2ef --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/qualificationAwarded.yaml @@ -0,0 +1,13 @@ +type: string +description: Type of qualificaton that can be obtained on finishing the program +enum: + - AD + - BA + - BSc + - LLB + - MA + - MSc + - LLM + - Phd + - None +example: None diff --git a/tests/e2e/open-education-api-v5/enumerations/remoteAssociationState.yaml b/tests/e2e/open-education-api-v5/enumerations/remoteAssociationState.yaml new file mode 100644 index 00000000..c7b21ee5 --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/remoteAssociationState.yaml @@ -0,0 +1,9 @@ +type: string +description: The state of this association for the institution performing the request. +enum: + - pending + - canceled + - denied + - associated + - queued +example: associated diff --git a/tests/e2e/open-education-api-v5/enumerations/resultState.yaml b/tests/e2e/open-education-api-v5/enumerations/resultState.yaml new file mode 100644 index 00000000..9763a414 --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/resultState.yaml @@ -0,0 +1,8 @@ +type: string +description: The state of this result +enum: + - in progress + - postponed + - completed + - queued +example: completed diff --git a/tests/e2e/open-education-api-v5/enumerations/resultValueType.yaml b/tests/e2e/open-education-api-v5/enumerations/resultValueType.yaml new file mode 100644 index 00000000..04948836 --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/resultValueType.yaml @@ -0,0 +1,9 @@ +type: string +description: The result value type for this offering +enum: + - 'pass-or-fail' + - 'US letter' + - 'UK letter' + - '0-100' + - '1-10' +example: '1-10' diff --git a/tests/e2e/open-education-api-v5/enumerations/roomType.yaml b/tests/e2e/open-education-api-v5/enumerations/roomType.yaml new file mode 100644 index 00000000..527870c0 --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/roomType.yaml @@ -0,0 +1,25 @@ +type: string +description: | + The type of this room + - general purpose: algemeen + - lecture room: collegezaal + - computer room: computerruimte + - laboratory: laboratorium + - office: kantoor + - workspace: werkruimte + - exam location: tentamenruimte + - study room: studieruimte + - examination room: onderzoekskamer + - conference room: vergaderkamer +enum: + - general purpose + - lecture room + - computer room + - laboratory + - office + - workspace + - exam location + - study room + - examination room + - conference room +example: exam location diff --git a/tests/e2e/open-education-api-v5/enumerations/sector.yaml b/tests/e2e/open-education-api-v5/enumerations/sector.yaml new file mode 100644 index 00000000..f6dadf89 --- /dev/null +++ b/tests/e2e/open-education-api-v5/enumerations/sector.yaml @@ -0,0 +1,11 @@ +type: string +description: | + The sector for this program + - secondary vocational education: middelbaar beroepsonderwijs + - higher professional education: hoger beroepsonderwijs + - university education: universitair onderwijs +enum: + - secondary vocational education + - higher professional education + - university education +example: university education diff --git a/tests/e2e/open-education-api-v5/parameters/consumer.yaml b/tests/e2e/open-education-api-v5/parameters/consumer.yaml new file mode 100644 index 00000000..31dc9556 --- /dev/null +++ b/tests/e2e/open-education-api-v5/parameters/consumer.yaml @@ -0,0 +1,6 @@ +name: consumer +in: query +description: Request entities meant for a specific consumer. This query parameter is independent from the `consumers` attribute. See the [documentation on support for specific consumers](https://open-education-api.github.io/specification/#/consumers) for more information about this mechanism. +required: false +schema: + type: string diff --git a/tests/e2e/open-education-api-v5/parameters/pageNumber.yaml b/tests/e2e/open-education-api-v5/parameters/pageNumber.yaml new file mode 100644 index 00000000..35cfdf27 --- /dev/null +++ b/tests/e2e/open-education-api-v5/parameters/pageNumber.yaml @@ -0,0 +1,9 @@ +name: pageNumber +in: query +description: The page number to get. Page numbers start at 1. +required: false +schema: + type: integer + format: int32 + example: 1 + minimum: 1 diff --git a/tests/e2e/open-education-api-v5/parameters/pageSize.yaml b/tests/e2e/open-education-api-v5/parameters/pageSize.yaml new file mode 100644 index 00000000..4677acc2 --- /dev/null +++ b/tests/e2e/open-education-api-v5/parameters/pageSize.yaml @@ -0,0 +1,14 @@ +name: pageSize +in: query +description: The number of items per page +required: false +schema: + type: integer + format: int32 + default: 10 + enum: + - 10 + - 20 + - 50 + - 100 + - 250 diff --git a/tests/e2e/open-education-api-v5/parameters/personSearch.yaml b/tests/e2e/open-education-api-v5/parameters/personSearch.yaml new file mode 100644 index 00000000..20b31a40 --- /dev/null +++ b/tests/e2e/open-education-api-v5/parameters/personSearch.yaml @@ -0,0 +1,6 @@ +name: q +in: query +description: Filter by persons having a givenName, surNamePrefix, surname, displayName, initials, mail or secondaryMail containing the given search term (exact partial match, case insensitive) +required: false +schema: + type: string diff --git a/tests/e2e/open-education-api-v5/parameters/primaryCode.yaml b/tests/e2e/open-education-api-v5/parameters/primaryCode.yaml new file mode 100644 index 00000000..be3a625b --- /dev/null +++ b/tests/e2e/open-education-api-v5/parameters/primaryCode.yaml @@ -0,0 +1,6 @@ +name: primaryCode +in: query +description: The primaryCode of the requested item. This is often the source identifier as defined by the institution. +required: false +schema: + type: string diff --git a/tests/e2e/open-education-api-v5/parameters/returnTimelineOverrides.yaml b/tests/e2e/open-education-api-v5/parameters/returnTimelineOverrides.yaml new file mode 100644 index 00000000..6aa3da87 --- /dev/null +++ b/tests/e2e/open-education-api-v5/parameters/returnTimelineOverrides.yaml @@ -0,0 +1,7 @@ +name: returnTimelineOverrides +in: query +description: Controls whether the attribute `timelineOverrides` is returned or not. The default is `false`, so this has to explicitly set to `true` if a client needs the timeline overrides. See [GET /education-specifications/{educationSpecificationId}](#tag/education-specifications/paths/~1education-specifications~1{educationSpecificationId}/get) for an example. +required: false +schema: + type: boolean + default: false diff --git a/tests/e2e/open-education-api-v5/parameters/search.yaml b/tests/e2e/open-education-api-v5/parameters/search.yaml new file mode 100644 index 00000000..d03b610f --- /dev/null +++ b/tests/e2e/open-education-api-v5/parameters/search.yaml @@ -0,0 +1,6 @@ +name: q +in: query +description: Filter by items having a name, abbreviation or description containing the given search term (exact partial match, case insensitive) +required: false +schema: + type: string diff --git a/tests/e2e/open-education-api-v5/parameters/teachingLanguage.yaml b/tests/e2e/open-education-api-v5/parameters/teachingLanguage.yaml new file mode 100644 index 00000000..dafe1868 --- /dev/null +++ b/tests/e2e/open-education-api-v5/parameters/teachingLanguage.yaml @@ -0,0 +1,10 @@ +name: teachingLanguage +in: query +description: Filter by teachingLanguage, which is a string describing the main teaching language, should be a three-letter language code as specified by ISO 639-2. +required: false +schema: + type: string + pattern: "^[a-z]{3}$" + minLength: 3 + maxLength: 3 +example: nld diff --git a/tests/e2e/open-education-api-v5/paths/AcademicSessionCollection.yaml b/tests/e2e/open-education-api-v5/paths/AcademicSessionCollection.yaml new file mode 100644 index 00000000..1976f0d5 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/AcademicSessionCollection.yaml @@ -0,0 +1,80 @@ +get: + summary: GET /academic-sessions + description: Get a list of all academic sessions, ordered chronologically. + tags: + - academic sessions + parameters: + - $ref: '../parameters/primaryCode.yaml' + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - name: academicSessionType + in: query + description: Filter by academic session type + required: false + schema: + $ref: '../enumerations/academicSessionType.yaml' + - name: parent + in: query + description: Filter by parent (academicSessionId) + required: false + schema: + type: string + format: uuid + - name: year + in: query + description: Filter by year (academicSessionId) + required: false + schema: + type: string + format: uuid + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - academicSessionId + - name + - startDate + - -academicSessionId + - -name + - -startDate + default: [ startDate ] + example: + - startDate + - -academicSessionId + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + $ref: '../schemas/AcademicSession.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/AcademicSessionInstance.yaml b/tests/e2e/open-education-api-v5/paths/AcademicSessionInstance.yaml new file mode 100644 index 00000000..5110a581 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/AcademicSessionInstance.yaml @@ -0,0 +1,47 @@ +get: + summary: GET /academic-sessions/{academicSessionId} + description: Get a single academic session. + tags: + - academic sessions + parameters: + - name: academicSessionId + in: path + description: Academic session ID + required: true + schema: + type: string + format: uuid + - name: expand + in: query + explode: false + description: Optional properties to expand, separated by a comma + required: false + schema: + type: array + items: + type: string + enum: + - parent + - children + - year + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../schemas/AcademicSession.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/AcademicSessionOfferingCollection.yaml b/tests/e2e/open-education-api-v5/paths/AcademicSessionOfferingCollection.yaml new file mode 100644 index 00000000..9d86a656 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/AcademicSessionOfferingCollection.yaml @@ -0,0 +1,105 @@ +get: + summary: GET /academic-sessions/{academicSessionId}/offerings + description: Get a list of all offerings during this academic session + tags: + - academic sessions + parameters: + - name: academicSessionId + in: path + description: Academic session ID + required: true + schema: + type: string + format: uuid + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - $ref: '../parameters/teachingLanguage.yaml' + - name: offeringType + in: query + description: Filter by offering type + required: false + schema: + type: string + enum: + - program + - course + - component + - name: resultExpected + in: query + description: Filter by resultExpected + required: false + schema: + type: boolean + - name: since + in: query + description: Filter all offerings by providing a minimum start date for the corresponding academic session, RFC3339 (full-date). By default only future offerings are shown (equal to `?since=`). + required: false + schema: + type: string + format: date + - name: until + in: query + description: Filter all offerings by providing a maximum end date for the corresponding academic session, RFC3339 (full-date). + required: false + schema: + type: string + format: date + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - offeringId + - name + - startDate + - endDate + - -offeringId + - -name + - -startDate + - -endDate + default: [ startDate ] + example: + - startDate + - -name + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + oneOf: + - $ref: '../schemas/ProgramOffering.yaml' + - $ref: '../schemas/CourseOffering.yaml' + - $ref: '../schemas/ComponentOffering.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/AssociationInstance.yaml b/tests/e2e/open-education-api-v5/paths/AssociationInstance.yaml new file mode 100644 index 00000000..151799be --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/AssociationInstance.yaml @@ -0,0 +1,102 @@ +get: + summary: GET /associations/{associationId} + description: Get a single association. + tags: + - associations + parameters: + - name: associationId + in: path + description: Association ID + required: true + schema: + type: string + format: uuid + - name: expand + in: query + explode: false + description: Optional properties to expand, separated by a comma + required: false + schema: + type: array + items: + type: string + enum: + - person + - offering + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../schemas/AssociationFull.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' + + + + +patch: + summary: PATCH /associations/{associationId} + description: | + Update the status or result of an enrollment. Other elements of the association object COULD + also be PATCHED. But are not likely and have therefor not been included in this endpoint. + Implementation of the PATCH activity is based on use PATCH with JSON Merge Patch standard, + a specialized media type `application/merge-patch+json` for partial resource representation + to update parts of resource objects. + security: + - openId: + - associations.write + tags: + - associations + + parameters: + - name: associationId + in: path + description: The id of the association to update + required: true + schema: + type: string + format: uuid + + requestBody: + required: true + content: + application/merge-patch+json: + schema: + properties: + remoteState: + $ref: '../enumerations/remoteAssociationState.yaml' + result: + oneOf: + - $ref: '../schemas/ComponentResult.yaml' + - $ref: '../schemas/CourseResult.yaml' + - $ref: '../schemas/ProgramResult.yaml' + + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/AssociationId.yaml' + - $ref: '../schemas/PostResponse.yaml' + - properties: + state: + $ref: '../enumerations/associationState.yaml' + + '400': + $ref: '../schemas/ErrorBadRequest.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/AssociationInstanceExternalMe.yaml b/tests/e2e/open-education-api-v5/paths/AssociationInstanceExternalMe.yaml new file mode 100644 index 00000000..b38640bd --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/AssociationInstanceExternalMe.yaml @@ -0,0 +1,41 @@ +post: + summary: POST /associations/external/me + description: | + POST a single association enroll a person based on person information obtained from .wellknown endpoint, an offering, + and the organization/type=root information form the organization that is issuing this association. + The offering can either be identified by an offeringId if known or the full offering details. + security: + - openId: + - associations:external:me.write + tags: + - associations + + requestBody: + required: true + content: + application/json: + schema: + required: + - remoteState + allOf: + - $ref: '../schemas/AssociationWrite.yaml' + - properties: + issuer: + $ref: '../schemas/Organization.yaml' + + responses: + '201': + description: CREATED + content: + application/json: + schema: + allOf: + - $ref: '../schemas/AssociationId.yaml' + - $ref: '../schemas/PostResponse.yaml' + - properties: + state: + $ref: '../enumerations/associationState.yaml' + + + '400': + $ref: '../schemas/ErrorBadRequest.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/AssociationInstanceMe.yaml b/tests/e2e/open-education-api-v5/paths/AssociationInstanceMe.yaml new file mode 100644 index 00000000..15f694c9 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/AssociationInstanceMe.yaml @@ -0,0 +1,33 @@ +post: + summary: POST /associations/me + description: POST a single association to enroll a person based on person information obtained from .wellknown endpoint and an offering. The offering can either be identified by an offeringId if known or the full offering details. + security: + - openId: + - associations:me.write + tags: + - associations + + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/AssociationFull.yaml' + + + responses: + '201': + description: CREATED + content: + application/json: + schema: + allOf: + - $ref: '../schemas/AssociationId.yaml' + - $ref: '../schemas/PostResponse.yaml' + + '400': + description: Bad Request + content: + application/problem+json: + schema: + $ref: '../schemas/Problem.yaml' \ No newline at end of file diff --git a/tests/e2e/open-education-api-v5/paths/BuildingCollection.yaml b/tests/e2e/open-education-api-v5/paths/BuildingCollection.yaml new file mode 100644 index 00000000..f4c93670 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/BuildingCollection.yaml @@ -0,0 +1,59 @@ +get: + summary: GET /buildings + description: Get a list of all buildings, ordered by name (ascending). + tags: + - buildings + parameters: + - $ref: '../parameters/primaryCode.yaml' + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - buildingId + - name + - -buildingId + - -name + default: [ name ] + example: + - name + - -buildingId + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + $ref: '../schemas/Building.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/BuildingInstance.yaml b/tests/e2e/open-education-api-v5/paths/BuildingInstance.yaml new file mode 100644 index 00000000..9f6b815d --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/BuildingInstance.yaml @@ -0,0 +1,34 @@ +get: + summary: GET /buildings/{buildingId} + description: Get a single building. + tags: + - buildings + parameters: + - name: buildingId + in: path + description: Building ID + required: true + schema: + type: string + format: uuid + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../schemas/Building.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/BuildingRoomCollection.yaml b/tests/e2e/open-education-api-v5/paths/BuildingRoomCollection.yaml new file mode 100644 index 00000000..65005f1e --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/BuildingRoomCollection.yaml @@ -0,0 +1,77 @@ +get: + summary: GET /buildings/{buildingId}/rooms + description: Get a list of all rooms in a building. + tags: + - buildings + parameters: + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - name: buildingId + in: path + description: The id of the building to find rooms for + required: true + schema: + type: string + format: uuid + - name: roomType + in: query + description: Filter by room type + required: false + schema: + $ref: '../enumerations/roomType.yaml' + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - roomId + - name + - totalSeats + - availableSeats + - -roomId + - -name + - -totalSeats + - -availableSeats + default: [ name ] + example: + - name + - -availableSeats + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + $ref: '../schemas/Room.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/ComponentInstance.yaml b/tests/e2e/open-education-api-v5/paths/ComponentInstance.yaml new file mode 100644 index 00000000..c0a8251d --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/ComponentInstance.yaml @@ -0,0 +1,46 @@ +get: + summary: GET /components/{componentId} + description: Get a single component. + tags: + - components + parameters: + - name: componentId + in: path + description: component ID + required: true + schema: + type: string + format: uuid + - name: expand + in: query + explode: false + description: Optional properties to expand, separated by a comma + required: false + schema: + type: array + items: + type: string + enum: + - course + - organization + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../schemas/Component.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/ComponentOfferingCollection.yaml b/tests/e2e/open-education-api-v5/paths/ComponentOfferingCollection.yaml new file mode 100644 index 00000000..5e709f2c --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/ComponentOfferingCollection.yaml @@ -0,0 +1,92 @@ +get: + summary: GET /components/{componentId}/offerings + description: Get a list of all offerings for this component, ordered chronologically. + tags: + - components + parameters: + - name: componentId + in: path + description: Component ID + required: true + schema: + type: string + format: uuid + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - $ref: '../parameters/teachingLanguage.yaml' + - name: resultExpected + in: query + description: Filter by resultExpected + required: false + schema: + type: boolean + - name: since + in: query + description: Filter all offerings by providing a minimum start date for the corresponding academic session, RFC3339 (full-date). By default only future offerings are shown (equal to `?since=`). + required: false + schema: + type: string + format: date + - name: until + in: query + description: Filter all offerings by providing a maximum end date for the corresponding academic session, RFC3339 (full-date). + required: false + schema: + type: string + format: date + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - offeringId + - name + - startDateTime + - endDateTime + - -offeringId + - -name + - -startDateTime + - -endDateTime + default: [ startDateTime ] + example: + - offeringId + - -startDateTime + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + $ref: '../schemas/ComponentOffering.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/CourseCollection.yaml b/tests/e2e/open-education-api-v5/paths/CourseCollection.yaml new file mode 100644 index 00000000..4f9b57dd --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/CourseCollection.yaml @@ -0,0 +1,72 @@ +get: + summary: GET /courses + description: Get a list of all courses, ordered by name (ascending). + tags: + - courses + parameters: + - $ref: '../parameters/primaryCode.yaml' + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - $ref: '../parameters/teachingLanguage.yaml' + - name: level + in: query + description: Filter by level + required: false + schema: + $ref: '../enumerations/level.yaml' + - name: modeOfDelivery + in: query + description: Filter by modeOfDelivery + required: false + schema: + $ref: '../enumerations/modesOfDelivery.yaml' + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - courseId + - name + - -courseId + - -name + default: [ name ] + example: + - name + - -courseId + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + $ref: '../schemas/Course.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/CourseComponentCollection.yaml b/tests/e2e/open-education-api-v5/paths/CourseComponentCollection.yaml new file mode 100644 index 00000000..fdd4ddbb --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/CourseComponentCollection.yaml @@ -0,0 +1,74 @@ +get: + summary: GET /courses/{courseId}/components + description: Get an ordered list of all course components. + tags: + - courses + parameters: + - name: courseId + in: path + description: Course ID + required: true + schema: + type: string + format: uuid + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - $ref: '../parameters/teachingLanguage.yaml' + - name: componentType + in: query + description: Filter by component type + required: false + schema: + $ref: '../enumerations/componentType.yaml' + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - componentId + - name + - -componentId + - -name + default: [ componentId ] + example: + - name + - -componentId + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + $ref: '../schemas/Component.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/CourseInstance.yaml b/tests/e2e/open-education-api-v5/paths/CourseInstance.yaml new file mode 100644 index 00000000..7a379769 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/CourseInstance.yaml @@ -0,0 +1,49 @@ +get: + summary: GET /courses/{courseId} + description: Get a single course. + tags: + - courses + parameters: + - name: courseId + in: path + description: Course ID + required: true + schema: + type: string + format: uuid + - name: expand + in: query + explode: false + description: Optional properties to include, separated by a comma + required: false + schema: + type: array + items: + type: string + enum: + - programs + - coordinators + - organization + - educationSpecification + - $ref: '../parameters/returnTimelineOverrides.yaml' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../schemas/CourseExpanded.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/CourseOfferingCollection.yaml b/tests/e2e/open-education-api-v5/paths/CourseOfferingCollection.yaml new file mode 100644 index 00000000..01f19a4c --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/CourseOfferingCollection.yaml @@ -0,0 +1,98 @@ +get: + summary: GET /courses/{courseId}/offerings + description: Get a list of all offerings for this course, ordered chronologically. + tags: + - courses + parameters: + - name: courseId + in: path + description: Course ID + required: true + schema: + type: string + format: uuid + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - $ref: '../parameters/teachingLanguage.yaml' + - name: modeOfDelivery + in: query + description: Filter by modeOfDelivery + required: false + schema: + $ref: '../enumerations/modesOfDelivery.yaml' + - name: resultExpected + in: query + description: Filter by resultExpected + required: false + schema: + type: boolean + - name: since + in: query + description: Filter all offerings by providing a minimum start date for the corresponding academic session, RFC3339 (full-date). By default only future offerings are shown (equal to `?since=`). + required: false + schema: + type: string + format: date + - name: until + in: query + description: Filter all offerings by providing a maximum end date for the corresponding academic session, RFC3339 (full-date). + required: false + schema: + type: string + format: date + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - offeringId + - name + - startDate + - endDate + - -offeringId + - -name + - -startDate + - -endDate + default: [ startDate ] + example: + - offeringId + - -endDate + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + $ref: '../schemas/CourseOffering.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/EducationSpecificationCollection.yaml b/tests/e2e/open-education-api-v5/paths/EducationSpecificationCollection.yaml new file mode 100644 index 00000000..dcca08ab --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/EducationSpecificationCollection.yaml @@ -0,0 +1,75 @@ +get: + summary: GET /education-specifications + description: Get a list of all education specifications, ordered by name (ascending). + tags: + - education specifications + parameters: + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - name: educationSpecificationType + in: query + description: Filter by type of education specification + required: false + schema: + $ref: '../enumerations/educationSpecificationType.yaml' + - name: primaryCode + in: query + description: Filter by primary code of education specification + required: false + schema: + type: string + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - educationSpecificationType + - name + - primaryCode + - -educationSpecificationType + - -name + - -primaryCode + default: + - [ name ] + example: + - educationSpecificationType + - -primaryCode + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + $ref: '../schemas/EducationSpecification.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/EducationSpecificationCourseCollection.yaml b/tests/e2e/open-education-api-v5/paths/EducationSpecificationCourseCollection.yaml new file mode 100644 index 00000000..d97299b3 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/EducationSpecificationCourseCollection.yaml @@ -0,0 +1,80 @@ +get: + summary: GET /education-specifications/{educationSpecificationId}/courses + description: Get an ordered list of all courses given through this EducationSpecification. + tags: + - education specifications + parameters: + - name: educationSpecificationId + in: path + description: Education Specification ID + required: true + schema: + type: string + format: uuid + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - $ref: '../parameters/teachingLanguage.yaml' + - name: level + in: query + description: Filter by level + required: false + schema: + $ref: '../enumerations/level.yaml' + - name: modeOfDelivery + in: query + description: Filter by modeOfDelivery + required: false + schema: + $ref: '../enumerations/modesOfDelivery.yaml' + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - courseId + - name + - -courseId + - -name + default: [ courseId ] + example: + - courseId + - -name + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + $ref: '../schemas/Course.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/EducationSpecificationEducationSpecificationCollection.yaml b/tests/e2e/open-education-api-v5/paths/EducationSpecificationEducationSpecificationCollection.yaml new file mode 100644 index 00000000..41cf7135 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/EducationSpecificationEducationSpecificationCollection.yaml @@ -0,0 +1,69 @@ +get: + summary: GET /education-specifications/{educationSpecificationId}/education-specifications + description: Get an ordered list of all education-specifications given through this educationspecification. + tags: + - education specifications + parameters: + - name: educationSpecificationId + in: path + description: Education Specification ID + required: true + schema: + type: string + format: uuid + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - educationSpecificationId + - name + - educationSpecificationType + - -educationSpecificationId + - -name + - -educationSpecificationType + default: [ educationSpecificationId ] + example: + - educationSpecificationId + - -name + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + $ref: '../schemas/Course.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/EducationSpecificationInstance.yaml b/tests/e2e/open-education-api-v5/paths/EducationSpecificationInstance.yaml new file mode 100644 index 00000000..f76b6bba --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/EducationSpecificationInstance.yaml @@ -0,0 +1,52 @@ +get: + summary: GET /education-specifications/{educationSpecificationId} + description: Get a single education specification. + tags: + - education specifications + parameters: + - name: educationSpecificationId + in: path + description: Education specification ID + required: true + schema: + type: string + format: uuid + - $ref: '../parameters/returnTimelineOverrides.yaml' + - name: expand + in: query + explode: false + description: Optional properties to include, separated by a comma + required: false + schema: + type: array + items: + type: string + enum: + - parent + - children + - organization + responses: + '200': + description: OK + content: + application/json: + schema: + oneOf: + - title: Without timelineOverrides (default) + $ref: '../schemas/EducationSpecification.yaml' + - title: With timelineOverrides + $ref: '../schemas/EducationSpecificationExpanded.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/EducationSpecificationProgramCollection.yaml b/tests/e2e/open-education-api-v5/paths/EducationSpecificationProgramCollection.yaml new file mode 100644 index 00000000..84722ce6 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/EducationSpecificationProgramCollection.yaml @@ -0,0 +1,104 @@ +get: + summary: GET /education-specifications/{educationSpecificationId}/programs + description: Get an ordered list of all programs for a given education specification, ordered by name. + tags: + - education specifications + parameters: + - name: educationSpecificationId + in: path + description: Education Specification ID + required: true + schema: + type: string + format: uuid + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - $ref: '../parameters/teachingLanguage.yaml' + - name: programType + in: query + description: Filter by program type + required: false + schema: + $ref: '../enumerations/programType.yaml' + - name: qualificationAwarded + in: query + description: Filter by qualificationAwarded + required: false + schema: + $ref: '../enumerations/qualificationAwarded.yaml' + - name: levelOfQualification + in: query + description: Filter by levelOfQualification + required: false + schema: + $ref: '../enumerations/levelOfQualification.yaml' + - name: sector + in: query + description: Filter by sector + required: false + schema: + $ref: '../enumerations/sector.yaml' + - name: fieldsOfStudy + in: query + description: Filter by fieldsOfStudy + required: false + schema: + type: string + - name: croho-creboCode + in: query + description: Filter by croho-creboCode + required: false + schema: + type: string + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - programId + - name + - -programId + - -name + default: [ name ] + example: + - programId + - -name + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + $ref: '../schemas/Program.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/GroupCollection.yaml b/tests/e2e/open-education-api-v5/paths/GroupCollection.yaml new file mode 100644 index 00000000..6e8cb0fb --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/GroupCollection.yaml @@ -0,0 +1,87 @@ +get: + summary: GET /groups + description: Get a list of all groups, ordered by name (ascending). + tags: + - groups + parameters: + - $ref: '../parameters/primaryCode.yaml' + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - name: groupType + in: query + description: Filter by group type + required: false + schema: + $ref: '../enumerations/groupType.yaml' + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - groupId + - name + - startDate + - -groupId + - -name + - -startDate + default: [ name ] + example: + - groupId + - -startDate + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + required: + - pageSize + - pageNumber + - hasPreviousPage + - hasNextPage + - items + properties: + pageSize: + type: integer + format: int32 + description: The number of items per page + pageNumber: + type: integer + format: int32 + description: The current page number + hasPreviousPage: + type: boolean + description: Whether there is a previous page + hasNextPage: + type: boolean + description: Whether there is a previous page + totalPages: + type: integer + format: int32 + description: Total number of pages + items: + type: array + items: + $ref: '../schemas/Group.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/GroupInstance.yaml b/tests/e2e/open-education-api-v5/paths/GroupInstance.yaml new file mode 100644 index 00000000..c74ba60b --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/GroupInstance.yaml @@ -0,0 +1,45 @@ +get: + summary: GET /groups/{groupId} + description: Get a single group. + tags: + - groups + parameters: + - name: groupId + in: path + description: Group ID + required: true + schema: + type: string + format: uuid + - name: expand + in: query + explode: false + description: Optional properties to expand, separated by a comma + required: false + schema: + type: array + items: + type: string + enum: + - organization + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../schemas/Group.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/GroupPersonCollection.yaml b/tests/e2e/open-education-api-v5/paths/GroupPersonCollection.yaml new file mode 100644 index 00000000..2783a5db --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/GroupPersonCollection.yaml @@ -0,0 +1,95 @@ +get: + summary: GET /groups/{groupId}/persons + description: Get an ordered list of all persons that are member of a given group, ordered by personId. + tags: + - groups + parameters: + - name: groupId + in: path + description: Group ID + required: true + schema: + type: string + format: uuid + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/personSearch.yaml' + - name: affiliations + in: query + description: Filter by affiliations + required: false + schema: + $ref: '../enumerations/personAffiliations.yaml' + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - personId + - givenName + - surName + - displayName + - -personId + - -givenName + - -surName + - -displayName + default: [ personId ] + example: + - personId + - -givenName + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + required: + - pageSize + - pageNumber + - hasPreviousPage + - hasNextPage + - items + properties: + pageSize: + type: integer + format: int32 + description: The number of items per page + pageNumber: + type: integer + format: int32 + description: The current page number + hasPreviousPage: + type: boolean + description: Whether there is a previous page + hasNextPage: + type: boolean + description: Whether there is a previous page + totalPages: + type: integer + format: int32 + description: Total number of pages + items: + type: array + items: + $ref: '../schemas/Person.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/NewsFeedCollection.yaml b/tests/e2e/open-education-api-v5/paths/NewsFeedCollection.yaml new file mode 100644 index 00000000..e6368aee --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/NewsFeedCollection.yaml @@ -0,0 +1,72 @@ +get: + summary: GET /news-feeds + description: Get a list of all news feeds, ordered by title. + tags: + - news + parameters: + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - name: newsFeedType + in: query + description: Filter by news type + required: false + schema: + type: string + enum: + - organization + - program + - course + - component + - person + - building + - room + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - newsFeedId + - name + - -newsFeedId + - -name + default: [ name ] + example: + - name + - -newsFeedId + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + $ref: '../schemas/NewsFeed.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/NewsFeedInstance.yaml b/tests/e2e/open-education-api-v5/paths/NewsFeedInstance.yaml new file mode 100644 index 00000000..9f6cfb5a --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/NewsFeedInstance.yaml @@ -0,0 +1,34 @@ +get: + summary: GET /news-feeds/{newsFeedId} + description: Get a single news feed. + tags: + - news + parameters: + - name: newsFeedId + in: path + description: News feed ID + required: true + schema: + type: string + format: uuid + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../schemas/NewsFeed.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/NewsFeedItemCollection.yaml b/tests/e2e/open-education-api-v5/paths/NewsFeedItemCollection.yaml new file mode 100644 index 00000000..e509e718 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/NewsFeedItemCollection.yaml @@ -0,0 +1,79 @@ +get: + summary: GET /news-feeds/{newsFeedId}/news-items + description: Get an ordered list of all news items. + tags: + - news + parameters: + - name: newsFeedId + in: path + description: News feed ID + required: true + schema: + type: string + format: uuid + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - name: author + in: query + description: Filter by author + required: false + schema: + type: string + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - newsItemId + - name + - validFrom + - validUntil + - lastModified + - -newsItemId + - -name + - -validFrom + - -validUntil + - -lastModified + default: [ newsItemId ] + example: + - validFrom + - -name + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + $ref: '../schemas/NewsItem.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/NewsItemInstance.yaml b/tests/e2e/open-education-api-v5/paths/NewsItemInstance.yaml new file mode 100644 index 00000000..e0eb3768 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/NewsItemInstance.yaml @@ -0,0 +1,45 @@ +get: + summary: GET /news-items/{newsItemId} + description: Get a single news item. + tags: + - news + parameters: + - name: newsItemId + in: path + description: News item ID + required: true + schema: + type: string + format: uuid + - name: expand + in: query + explode: false + description: Optional properties to include, separated by a comma + required: false + schema: + type: array + items: + type: string + enum: + - newsFeeds + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../schemas/NewsItem.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/OfferingAssociationCollection.yaml b/tests/e2e/open-education-api-v5/paths/OfferingAssociationCollection.yaml new file mode 100644 index 00000000..7e914118 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/OfferingAssociationCollection.yaml @@ -0,0 +1,95 @@ +get: + summary: GET /offerings/{offeringId}/associations + description: Get a list of all offering associations. + tags: + - offerings + parameters: + - name: offeringId + in: path + description: Offering ID + required: true + schema: + type: string + format: uuid + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - name: associationType + in: query + description: Filter by association type + required: false + schema: + type: string + enum: + - programOffering + - courseOffering + - componentOffering + - name: role + in: query + description: Filter by role + required: false + schema: + $ref: '../enumerations/associationRole.yaml' + - name: state + in: query + description: Filter by state + required: false + schema: + $ref: '../enumerations/associationState.yaml' + - name: result-state + in: query + description: Filter by result state + required: false + schema: + $ref: '../enumerations/resultState.yaml' + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - associationId + - -associationId + default: + - associationId + example: + - associationId + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + oneOf: + - $ref: '../schemas/ProgramOfferingAssociationExpandable.yaml' + - $ref: '../schemas/CourseOfferingAssociationExpandable.yaml' + - $ref: '../schemas/ComponentOfferingAssociationExpandable.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/OfferingAssociationInstanceMe.yaml b/tests/e2e/open-education-api-v5/paths/OfferingAssociationInstanceMe.yaml new file mode 100644 index 00000000..175c3028 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/OfferingAssociationInstanceMe.yaml @@ -0,0 +1,41 @@ +post: + summary: POST offerings/{offeringId}/associations/me + description: | + POST a single association to enroll a person based on hte .wellknown information of the person at the institution. The offeringId is provided in the path. + security: + - openId: + - associations:me.write + tags: + - offerings + parameters: + - name: offeringId + in: path + description: Offering ID + required: true + schema: + type: string + format: uuid + + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/AssociationProperties.yaml' + + responses: + '201': + description: CREATED + content: + application/json: + schema: + allOf: + - $ref: '../schemas/AssociationId.yaml' + - $ref: '../schemas/PostResponse.yaml' + + '400': + description: Bad Request + content: + application/problem+json: + schema: + $ref: '../schemas/Problem.yaml' \ No newline at end of file diff --git a/tests/e2e/open-education-api-v5/paths/OfferingGroupCollection.yaml b/tests/e2e/open-education-api-v5/paths/OfferingGroupCollection.yaml new file mode 100644 index 00000000..f26717f8 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/OfferingGroupCollection.yaml @@ -0,0 +1,93 @@ +get: + summary: GET /offerings/{offeringId}/groups + description: Get an ordered list of all groups related to an offering, ordered by name. + tags: + - offerings + parameters: + - name: offeringId + in: path + description: Offering ID + required: true + schema: + type: string + format: uuid + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - name: groupType + in: query + description: Filter by group type + required: false + schema: + $ref: '../enumerations/groupType.yaml' + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - groupId + - name + - startDate + - -groupId + - -name + - -startDate + default: [ name ] + example: + - name + - -startDate + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + required: + - pageSize + - pageNumber + - hasPreviousPage + - hasNextPage + - items + properties: + pageSize: + type: integer + format: int32 + description: The number of items per page + pageNumber: + type: integer + format: int32 + description: The current page number + hasPreviousPage: + type: boolean + description: Whether there is a previous page + hasNextPage: + type: boolean + description: Whether there is a previous page + totalPages: + type: integer + format: int32 + description: Total number of pages + items: + type: array + items: + $ref: '../schemas/Group.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/OfferingInstance.yaml b/tests/e2e/open-education-api-v5/paths/OfferingInstance.yaml new file mode 100644 index 00000000..2bcfad24 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/OfferingInstance.yaml @@ -0,0 +1,59 @@ +get: + summary: GET /offerings/{offeringId} + description: Get a single offering. + tags: + - offerings + parameters: + - name: offeringId + in: path + description: Offering ID + required: true + schema: + type: string + format: uuid + - name: expand + in: query + explode: false + description: Optional properties to expand, separated by a comma + required: false + schema: + type: array + items: + type: string + enum: + - program + - programOffering + - course + - courseOffering + - component + - organization + - academicSession + responses: + '200': + description: OK + content: + application/json: + schema: + oneOf: + - $ref: '../schemas/CourseOffering.yaml' + title: courseOffering + - $ref: '../schemas/ComponentOffering.yaml' + title: componentOffering + - $ref: '../schemas/ProgramOffering.yaml' + title: programOffering + + + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/OrganizationCollection.yaml b/tests/e2e/open-education-api-v5/paths/OrganizationCollection.yaml new file mode 100644 index 00000000..fb8b7ee0 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/OrganizationCollection.yaml @@ -0,0 +1,65 @@ +get: + summary: GET /organizations + description: Get an ordered list of all organizations, ordered by name. + tags: + - organizations + parameters: + - $ref: '../parameters/primaryCode.yaml' + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - name: organizationType + in: query + description: Filter by organization type + required: false + schema: + $ref: '../enumerations/organizationType.yaml' + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - organizationId + - name + - -organizationId + - -name + default: [ name ] + example: + - name + - -organizationId + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + $ref: '../schemas/Organization.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/OrganizationComponentCollection.yaml b/tests/e2e/open-education-api-v5/paths/OrganizationComponentCollection.yaml new file mode 100644 index 00000000..4dc1bb07 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/OrganizationComponentCollection.yaml @@ -0,0 +1,74 @@ +get: + summary: GET /organizations/{organizationId}/components + description: Get an ordered list of all components for a given organization, ordered by name. + tags: + - organizations + parameters: + - name: organizationId + in: path + description: Organization ID + required: true + schema: + type: string + format: uuid + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - $ref: '../parameters/teachingLanguage.yaml' + - name: componentType + in: query + description: Filter by component type + required: false + schema: + $ref: '../enumerations/componentType.yaml' + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - componentId + - name + - -componentId + - -name + default: [ name ] + example: + - componentId + - -name + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + $ref: '../schemas/Component.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/OrganizationCourseCollection.yaml b/tests/e2e/open-education-api-v5/paths/OrganizationCourseCollection.yaml new file mode 100644 index 00000000..0dd90ac5 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/OrganizationCourseCollection.yaml @@ -0,0 +1,80 @@ +get: + summary: GET /organizations/{organizationId}/courses + description: Get an ordered list of all courses for a given organization, ordered by name. + tags: + - organizations + parameters: + - name: organizationId + in: path + description: Organization ID + required: true + schema: + type: string + format: uuid + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - $ref: '../parameters/teachingLanguage.yaml' + - name: level + in: query + description: Filter by level + required: false + schema: + $ref: '../enumerations/level.yaml' + - name: modeOfDelivery + in: query + description: Filter by modeOfDelivery + required: false + schema: + $ref: '../enumerations/modesOfDelivery.yaml' + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - courseId + - name + - -courseId + - -name + default: [ name ] + example: + - name + - -courseId + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + $ref: '../schemas/Course.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/OrganizationEducationSpecificationCollection.yaml b/tests/e2e/open-education-api-v5/paths/OrganizationEducationSpecificationCollection.yaml new file mode 100644 index 00000000..222f57fe --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/OrganizationEducationSpecificationCollection.yaml @@ -0,0 +1,75 @@ +get: + summary: GET /organizations/{organizationId}/education-specifications + description: Get an ordered list of all EducationSpecifications for a given organization, ordered by name. + tags: + - organizations + parameters: + - name: organizationId + in: path + description: Organization ID + required: true + schema: + type: string + format: uuid + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - name: educationSpecificationType + in: query + description: Filter by type of education specification + required: false + schema: + $ref: '../enumerations/educationSpecificationType.yaml' + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - educationSpecificationType + - name + - primarycode + - -educationSpecificationType + - -name + - -primarycode + default: [ name ] + example: + - name + - -educationSpecificationType + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + $ref: '../schemas/EducationSpecification.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/OrganizationGroupCollection.yaml b/tests/e2e/open-education-api-v5/paths/OrganizationGroupCollection.yaml new file mode 100644 index 00000000..f1bb1003 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/OrganizationGroupCollection.yaml @@ -0,0 +1,73 @@ +get: + summary: GET /organizations/{organizationId}/groups + description: Get an ordered list of all groups for a given organization, ordered by name. + tags: + - organizations + parameters: + - name: organizationId + in: path + description: Organization ID + required: true + schema: + type: string + format: uuid + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - name: groupType + in: query + description: Filter by group type + required: false + schema: + $ref: '../enumerations/groupType.yaml' + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - groupId + - name + - startDate + - -groupId + - -name + - -startDate + default: [ name ] + example: + - groupId + - -name + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + $ref: '../schemas/Group.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/OrganizationInstance.yaml b/tests/e2e/open-education-api-v5/paths/OrganizationInstance.yaml new file mode 100644 index 00000000..9e4e3ee5 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/OrganizationInstance.yaml @@ -0,0 +1,46 @@ +get: + summary: GET /organizations/{organizationId} + description: Get a single organization. + tags: + - organizations + parameters: + - name: organizationId + in: path + description: Organization ID + required: true + schema: + type: string + format: uuid + - name: expand + in: query + explode: false + description: Optional properties to expand, separated by a comma + required: false + schema: + type: array + items: + type: string + enum: + - parent + - children + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../schemas/Organization.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/OrganizationOfferingCollection.yaml b/tests/e2e/open-education-api-v5/paths/OrganizationOfferingCollection.yaml new file mode 100644 index 00000000..96cf73ce --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/OrganizationOfferingCollection.yaml @@ -0,0 +1,105 @@ +get: + summary: GET /organizations/{organizationId}/offerings + description: Get a list of all offerings for a given organization + tags: + - organizations + parameters: + - name: organizationId + in: path + description: Organization ID + required: true + schema: + type: string + format: uuid + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - $ref: '../parameters/teachingLanguage.yaml' + - name: offeringType + in: query + description: Filter by offering type + required: false + schema: + type: string + enum: + - program + - course + - component + - name: resultExpected + in: query + description: Filter by resultExpected + required: false + schema: + type: boolean + - name: since + in: query + description: Filter all offerings by providing a minimum start date for the corresponding academic session, RFC3339 (full-date). By default only future offerings are shown (equal to `?since=`). + required: false + schema: + type: string + format: date + - name: until + in: query + description: Filter all offerings by providing a maximum end date for the corresponding academic session, RFC3339 (full-date). + required: false + schema: + type: string + format: date + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - offeringId + - name + - startDate + - endDate + - -offeringId + - -name + - -startDate + - -endDate + default: [ startDate ] + example: + - name + - -startDate + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + oneOf: + - $ref: '../schemas/ProgramOffering.yaml' + - $ref: '../schemas/CourseOffering.yaml' + - $ref: '../schemas/ComponentOffering.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/OrganizationProgramCollection.yaml b/tests/e2e/open-education-api-v5/paths/OrganizationProgramCollection.yaml new file mode 100644 index 00000000..31e47988 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/OrganizationProgramCollection.yaml @@ -0,0 +1,98 @@ +get: + summary: GET /organizations/{organizationId}/programs + description: Get an ordered list of all programs for a given organization, ordered by name. + tags: + - organizations + parameters: + - name: organizationId + in: path + description: Organization ID + required: true + schema: + type: string + format: uuid + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - $ref: '../parameters/teachingLanguage.yaml' + - name: programType + in: query + description: Filter by program type + required: false + schema: + $ref: '../enumerations/programType.yaml' + - name: qualificationAwarded + in: query + description: Filter by qualificationAwarded + required: false + schema: + $ref: '../enumerations/qualificationAwarded.yaml' + - name: levelOfQualification + in: query + description: Filter by levelOfQualification + required: false + schema: + $ref: '../enumerations/levelOfQualification.yaml' + - name: sector + in: query + description: Filter by sector + required: false + schema: + $ref: '../enumerations/sector.yaml' + - name: fieldsOfStudy + in: query + description: Filter by fieldsOfStudy + required: false + schema: + type: string + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - programId + - name + - -programId + - -name + default: [ name ] + example: + - name + - -programId + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + $ref: '../schemas/Program.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/PersonAssociationCollection.yaml b/tests/e2e/open-education-api-v5/paths/PersonAssociationCollection.yaml new file mode 100644 index 00000000..57440bb0 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/PersonAssociationCollection.yaml @@ -0,0 +1,121 @@ +get: + summary: GET /persons/{personId}/associations + description: Get a list of all associations for an individual person. + tags: + - persons + parameters: + - name: personId + in: path + description: Person ID + required: true + schema: + type: string + format: uuid + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - name: associationType + in: query + description: Filter by association type + required: false + schema: + type: string + enum: + - programOffering + - courseOffering + - componentOffering + - name: role + in: query + description: Filter by role + required: false + schema: + $ref: '../enumerations/associationRole.yaml' + - name: state + in: query + description: Filter by state + required: false + schema: + $ref: '../enumerations/associationState.yaml' + - name: result-state + in: query + description: Filter by result state + required: false + schema: + $ref: '../enumerations/resultState.yaml' + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - associationId + - -associationId + default: [ associationId ] + example: + - associationId + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + oneOf: + - allOf: + - $ref: '../schemas/ProgramOfferingAssociation.yaml' + - type: object + required: + - offering + properties: + offering: + $ref: '../schemas/ProgramOffering.yaml' + academicSession: + $ref: '../schemas/AcademicSession.yaml' + - allOf: + - $ref: '../schemas/CourseOfferingAssociation.yaml' + - type: object + required: + - offering + properties: + offering: + $ref: '../schemas/CourseOffering.yaml' + academicSession: + $ref: '../schemas/AcademicSession.yaml' + - allOf: + - $ref: '../schemas/ComponentOfferingAssociation.yaml' + - type: object + required: + - offering + properties: + offering: + $ref: '../schemas/ComponentOffering.yaml' + academicSession: + $ref: '../schemas/AcademicSession.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/PersonCollection.yaml b/tests/e2e/open-education-api-v5/paths/PersonCollection.yaml new file mode 100644 index 00000000..a347130a --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/PersonCollection.yaml @@ -0,0 +1,96 @@ +get: + summary: GET /persons + description: Get an ordered list of all persons. + tags: + - persons + parameters: + - $ref: '../parameters/primaryCode.yaml' + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/personSearch.yaml' + - name: affiliations + in: query + description: Filter by affiliations + required: false + schema: + $ref: '../enumerations/personAffiliations.yaml' + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - personId + - givenName + - surName + - displayName + - -personId + - -givenName + - -surName + - -displayName + default: [ personId ] + example: + - surName + - -personId + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + $ref: '../schemas/Person.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' + +post: + summary: POST /persons + description: POST a single person. + tags: + - persons + requestBody: + required: true + content: + application/json: + schema: + allOf: + - $ref: '../schemas/PersonProperties.yaml' + + + responses: + '201': + description: CREATED + content: + application/json: + schema: + allOf: + - $ref: '../schemas/PersonId.yaml' + - $ref: '../schemas/PostResponse.yaml' + + '400': + $ref: '../schemas/ErrorBadRequest.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/PersonGroupCollection.yaml b/tests/e2e/open-education-api-v5/paths/PersonGroupCollection.yaml new file mode 100644 index 00000000..6da00cc7 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/PersonGroupCollection.yaml @@ -0,0 +1,93 @@ +get: + summary: GET /persons/{personId}/groups + description: Get an ordered list of all groups for a given person, ordered by name. + tags: + - persons + parameters: + - name: personId + in: path + description: Person ID + required: true + schema: + type: string + format: uuid + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - name: groupType + in: query + description: Filter by group type + required: false + schema: + $ref: '../enumerations/groupType.yaml' + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - groupId + - name + - startDate + - -groupId + - -name + - -startDate + default: [ name ] + example: + - name + - -groupId + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + required: + - pageSize + - pageNumber + - hasPreviousPage + - hasNextPage + - items + properties: + pageSize: + type: integer + format: int32 + description: The number of items per page + pageNumber: + type: integer + format: int32 + description: The current page number + hasPreviousPage: + type: boolean + description: Whether there is a previous page + hasNextPage: + type: boolean + description: Whether there is a previous page + totalPages: + type: integer + format: int32 + description: Total number of pages + items: + type: array + items: + $ref: '../schemas/Group.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/PersonInstance.yaml b/tests/e2e/open-education-api-v5/paths/PersonInstance.yaml new file mode 100644 index 00000000..46e9b2cb --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/PersonInstance.yaml @@ -0,0 +1,34 @@ +get: + summary: GET /persons/{personId} + description: Get a single person. + tags: + - persons + parameters: + - name: personId + in: path + description: User ID + required: true + schema: + type: string + format: uuid + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../schemas/Person.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/PersonMe.yaml b/tests/e2e/open-education-api-v5/paths/PersonMe.yaml new file mode 100644 index 00000000..de91d00a --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/PersonMe.yaml @@ -0,0 +1,28 @@ +get: + summary: GET /persons/me + description: Returns the person object for the currently authenticated user. + security: + - bearerAuth: [] + tags: + - persons + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../schemas/Person.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/ProgramCollection.yaml b/tests/e2e/open-education-api-v5/paths/ProgramCollection.yaml new file mode 100644 index 00000000..cfd375b9 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/ProgramCollection.yaml @@ -0,0 +1,90 @@ +get: + summary: GET /programs + description: Get an ordered list of all programs, ordered by name. + tags: + - programs + parameters: + - $ref: '../parameters/primaryCode.yaml' + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - $ref: '../parameters/teachingLanguage.yaml' + - name: programType + in: query + description: Filter by program type + required: false + schema: + $ref: '../enumerations/programType.yaml' + - name: qualificationAwarded + in: query + description: Filter by qualificationAwarded + required: false + schema: + $ref: '../enumerations/qualificationAwarded.yaml' + - name: levelOfQualification + in: query + description: Filter by levelOfQualification + required: false + schema: + $ref: '../enumerations/levelOfQualification.yaml' + - name: sector + in: query + description: Filter by sector + required: false + schema: + $ref: '../enumerations/sector.yaml' + - name: fieldsOfStudy + in: query + description: Filter by fieldsOfStudy + required: false + schema: + type: string + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - programId + - name + - -programId + - -name + default: [ name ] + example: + - name + - programId + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + $ref: '../schemas/Program.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/ProgramCourseCollection.yaml b/tests/e2e/open-education-api-v5/paths/ProgramCourseCollection.yaml new file mode 100644 index 00000000..3ee838a3 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/ProgramCourseCollection.yaml @@ -0,0 +1,80 @@ +get: + summary: GET /programs/{programId}/courses + description: Get an ordered list of all courses given through this program. + tags: + - programs + parameters: + - name: programId + in: path + description: Program ID + required: true + schema: + type: string + format: uuid + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - $ref: '../parameters/teachingLanguage.yaml' + - name: level + in: query + description: Filter by level + required: false + schema: + $ref: '../enumerations/level.yaml' + - name: modeOfDelivery + in: query + description: Filter by modeOfDelivery + required: false + schema: + $ref: '../enumerations/modesOfDelivery.yaml' + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - courseId + - name + - -courseId + - -name + default: [ courseId ] + example: + - name + - -courseId + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + $ref: '../schemas/Course.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/ProgramInstance.yaml b/tests/e2e/open-education-api-v5/paths/ProgramInstance.yaml new file mode 100644 index 00000000..7893b45e --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/ProgramInstance.yaml @@ -0,0 +1,50 @@ +get: + summary: GET /programs/{programId} + description: Get a single program. + tags: + - programs + parameters: + - name: programId + in: path + description: Program ID + required: true + schema: + type: string + format: uuid + - name: expand + in: query + explode: false + description: Optional properties to include, separated by a comma + required: false + schema: + type: array + items: + type: string + enum: + - parent + - children + - coordinators + - organization + - educationSpecification + - $ref: '../parameters/returnTimelineOverrides.yaml' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../schemas/ProgramExpanded.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/ProgramOfferingCollection.yaml b/tests/e2e/open-education-api-v5/paths/ProgramOfferingCollection.yaml new file mode 100644 index 00000000..ffb90b21 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/ProgramOfferingCollection.yaml @@ -0,0 +1,98 @@ +get: + summary: GET /programs/{programId}/offerings + description: Get a list of all offerings for this program, ordered chronologically. + tags: + - programs + parameters: + - name: programId + in: path + description: Program ID + required: true + schema: + type: string + format: uuid + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - $ref: '../parameters/teachingLanguage.yaml' + - name: modeOfStudy + in: query + description: Filter by modeOfStudy + required: false + schema: + $ref: '../enumerations/modeOfStudy.yaml' + - name: resultExpected + in: query + description: Filter by resultExpected + required: false + schema: + type: boolean + - name: since + in: query + description: Filter all offerings by providing a minimum start date for the corresponding academic session, RFC3339 (full-date). By default only future offerings are shown (equal to `?since=`). + required: false + schema: + type: string + format: date + - name: until + in: query + description: Filter all offerings by providing a maximum end date for the corresponding academic session, RFC3339 (full-date). + required: false + schema: + type: string + format: date + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - offeringId + - name + - startDate + - endDate + - -offeringId + - -name + - -startDate + - -endDate + default: [ startDate ] + example: + - name + - -startDate + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + $ref: '../schemas/ProgramOffering.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/ProgramProgramCollection.yaml b/tests/e2e/open-education-api-v5/paths/ProgramProgramCollection.yaml new file mode 100644 index 00000000..6716f124 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/ProgramProgramCollection.yaml @@ -0,0 +1,96 @@ +get: + summary: GET /programs/{programId}/programs + description: Get an ordered list of nested programs, ordered by name. + tags: + - programs + parameters: + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - $ref: '../parameters/teachingLanguage.yaml' + - name: programId + in: path + description: the id of the program to find nested programs for + required: true + schema: + type: string + format: uuid + - name: programType + in: query + description: Filter by program type + required: false + schema: + $ref: '../enumerations/programType.yaml' + - name: qualificationAwarded + in: query + description: Filter by qualificationAwarded + required: false + schema: + $ref: '../enumerations/qualificationAwarded.yaml' + - name: levelOfQualification + in: query + description: Filter by levelOfQualification + required: false + schema: + $ref: '../enumerations/levelOfQualification.yaml' + - name: sector + in: query + description: Filter by sector + required: false + schema: + $ref: '../enumerations/sector.yaml' + - name: fieldsOfStudy + in: query + description: Filter by fieldsOfStudy + required: false + schema: + type: string + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - programId + - name + - -programId + - -name + default: [ name ] + example: + - name + - -programId + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + $ref: '../schemas/Program.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/RoomCollection.yaml b/tests/e2e/open-education-api-v5/paths/RoomCollection.yaml new file mode 100644 index 00000000..776d74a1 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/RoomCollection.yaml @@ -0,0 +1,69 @@ +get: + summary: GET /rooms + description: Get a list of all rooms, ordered by name (ascending). + tags: + - rooms + parameters: + - $ref: '../parameters/primaryCode.yaml' + - $ref: '../parameters/pageSize.yaml' + - $ref: '../parameters/pageNumber.yaml' + - $ref: '../parameters/consumer.yaml' + - $ref: '../parameters/search.yaml' + - name: roomType + in: query + description: Filter by room type + required: false + schema: + $ref: '../enumerations/roomType.yaml' + - name: sort + in: query + explode: false + description: 'Sort by one or more attributes, the default is ascending. Prefixing the attribute with a minus sign `-` allows for descending sort. Examples: [ATTR | -ATTR | ATTR1,-ATTR2]' + required: false + schema: + type: array + items: + type: string + enum: + - roomId + - name + - totalSeats + - availableSeats + - -roomId + - -name + - -totalSeats + - -availableSeats + default: [ name ] + example: + - name + - -availableSeats + responses: + '200': + description: OK + content: + application/json: + schema: + allOf: + - $ref: '../schemas/Pagination.yaml' + - type: object + required: + - items + properties: + items: + type: array + items: + $ref: '../schemas/Room.yaml' + ext: + $ref: '../schemas/Ext.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/RoomInstance.yaml b/tests/e2e/open-education-api-v5/paths/RoomInstance.yaml new file mode 100644 index 00000000..9733f436 --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/RoomInstance.yaml @@ -0,0 +1,45 @@ +get: + summary: GET /rooms/{roomId} + description: Get a single room. + tags: + - rooms + parameters: + - name: roomId + in: path + description: Room ID + required: true + schema: + type: string + format: uuid + - name: expand + in: query + explode: false + description: Optional properties to expand, separated by a comma + required: false + schema: + type: array + items: + type: string + enum: + - building + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../schemas/Room.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/paths/Service.yaml b/tests/e2e/open-education-api-v5/paths/Service.yaml new file mode 100644 index 00000000..5459dbdc --- /dev/null +++ b/tests/e2e/open-education-api-v5/paths/Service.yaml @@ -0,0 +1,27 @@ +get: + parameters: [] + summary: GET / + description: Get metadata for the service. + tags: + - service metadata + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../schemas/Service.yaml' + '400': + $ref: '../schemas/ErrorBadRequest.yaml' + '401': + $ref: '../schemas/ErrorUnauthorized.yaml' + '403': + $ref: '../schemas/ErrorForbidden.yaml' + '404': + $ref: '../schemas/ErrorNotFound.yaml' + '405': + $ref: '../schemas/ErrorMethodNotAllowed.yaml' + '429': + $ref: '../schemas/ErrorTooManyRequests.yaml' + '500': + $ref: '../schemas/ErrorInternalServerError.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/AcademicSession.yaml b/tests/e2e/open-education-api-v5/schemas/AcademicSession.yaml new file mode 100644 index 00000000..9ab552da --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/AcademicSession.yaml @@ -0,0 +1,80 @@ +type: object +description: | + A named period of time that can be used to communicate the various schedules and time periods an institution recognizes and uses to organize their education. AcademicSessions can be nested. + Offerings MAY be be linked to a specific AcademicSession to indicate that the specified Offering takes place during the AcademicSession, however this is not mandatory. +required: + - academicSessionId + - name + - startDate + - endDate +properties: + academicSessionId: + type: string + description: Unique id for this academic session + format: uuid + example: 123e4567-e89b-12d3-a456-426614174000 + readOnly: true + academicSessionType: + $ref: '../enumerations/academicSessionType.yaml' + primaryCode: + description: The primary human readable identifier for this academic session. This is often the source identifier as defined by the institution. + $ref: './IdentifierEntry.yaml' + example: + codeType: identifier + code: '2012-Q1' + name: + type: array + description: The name of this academic session + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: Fall semester 2020 + startDate: + type: string + description: The day on which this academic session starts, RFC3339 (full-date) + format: date + example: '2020-08-17' + endDate: + type: string + description: The day on which this academic session ends, RFC3339 (full-date) + format: date + example: '2020-12-18' + parent: + description: The parent Academicsession of this session (e.g. fall semester 20xx where the current session is a week 40). This object is [`expandable`](#tag/academic_sessions_model) + oneOf: + - $ref: './Identifier.yaml' + title: academicSessionId + - $ref: './AcademicSession.yaml' + title: Expanded AcademicSession + children: + type: array + description: The list of Academicsession children of this Session (e.g. all academic sessions in fall semester 20xx). This object is [`expandable`](#tag/academic_sessions_model) + items: + oneOf: + - $ref: './Identifier.yaml' + title: academicSessionId + - $ref: './AcademicSession.yaml' + title: Expanded AcademicSession + year: + description: The top level year of this session (e.g. 20xx where the current session is a week 40 of a semester). This object is [`expandable`](#tag/academic_sessions_model) + oneOf: + - $ref: './Identifier.yaml' + title: academicSessionId + - $ref: './AcademicSession.yaml' + title: Expanded AcademicSession + otherCodes: + type: array + description: An array of additional human readable codes/identifiers for the entity being described. + items: + $ref: './IdentifierEntry.yaml' + consumers: + description: The additional consumer elements that can be provided, see the [documentation on support for specific consumers](https://open-education-api.github.io/specification/#/consumers) for more information about this mechanism. + type: array + items: + $ref: './Consumer.yaml' + example: + $ref: '../consumers/TEST/V1/examples/TestConsumer.yaml' + ext: + $ref: './Ext.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/Address.yaml b/tests/e2e/open-education-api-v5/schemas/Address.yaml new file mode 100644 index 00000000..0ca44888 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/Address.yaml @@ -0,0 +1,53 @@ +type: object +description: The full street address +required: + - addressType +properties: + addressType: + $ref: '../enumerations/addressType.yaml' + street: + type: string + description: The street name + example: Moreelsepark + streetNumber: + type: string + description: The street number + example: "48" + additional: + type: array + description: Further details like building name, suite, apartment number, etc. + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: On the other side of the road + postalCode: + type: string + description: Postal code + example: 3511 EP + city: + type: string + description: name of the city / locality + example: Utrecht + countryCode: + type: string + description: the country code according to [iso-3166-1-alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) + example: NL + geolocation: + type: object + description: Geolocation of the entrance of this address (WGS84 coordinate reference system) + required: + - latitude + - longitude + properties: + latitude: + type: number + format: double + example: 52.089123 + longitude: + type: number + format: double + example: 5.113337 + ext: + $ref: './Ext.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/Association.yaml b/tests/e2e/open-education-api-v5/schemas/Association.yaml new file mode 100644 index 00000000..99879d48 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/Association.yaml @@ -0,0 +1,3 @@ +allOf: + - $ref: '../schemas/AssociationId.yaml' + - $ref: '../schemas/AssociationProperties.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/AssociationFull.yaml b/tests/e2e/open-education-api-v5/schemas/AssociationFull.yaml new file mode 100644 index 00000000..6f78db12 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/AssociationFull.yaml @@ -0,0 +1,26 @@ +# oneOf: +# - $ref: '../schemas/ComponentOfferingAssociation.yaml' +# - $ref: '../schemas/CourseOfferingAssociation.yaml' +# - $ref: '../schemas/ProgramOfferingAssociation.yaml' +oneOf: + - $ref: '../schemas/ProgramOfferingAssociation.yaml' + - $ref: '../schemas/CourseOfferingAssociation.yaml' + - $ref: '../schemas/ComponentOfferingAssociation.yaml' +properties: + person: + readOnly: true + oneOf: + - $ref: '../schemas/Identifier.yaml' + title: personId + - $ref: '../schemas/Person.yaml' + title: Person + offering: + oneOf: + - $ref: '../schemas/Identifier.yaml' + title: offeringId + - $ref: '../schemas/ComponentOffering.yaml' + title: ComponentOffering + - $ref: '../schemas/CourseOffering.yaml' + title: CourseOffering + - $ref: '../schemas/ProgramOffering.yaml' + title: ProgramOffering \ No newline at end of file diff --git a/tests/e2e/open-education-api-v5/schemas/AssociationId.yaml b/tests/e2e/open-education-api-v5/schemas/AssociationId.yaml new file mode 100644 index 00000000..ddf56d18 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/AssociationId.yaml @@ -0,0 +1,11 @@ +type: object +properties: + associationId: + type: string + description: Unique id of this association + format: uuid + example: 123e4567-e89b-12d3-a456-426614174000 + readOnly: true +required: + - associationId + \ No newline at end of file diff --git a/tests/e2e/open-education-api-v5/schemas/AssociationProperties.yaml b/tests/e2e/open-education-api-v5/schemas/AssociationProperties.yaml new file mode 100644 index 00000000..f0ee1b42 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/AssociationProperties.yaml @@ -0,0 +1,33 @@ +type: object +description: A relationship between a person object and an offering +required: + - associationType + - role + - state +properties: + associationType: + type: string + description: The type of this association + enum: + - programOfferingAssociation + - courseOfferingAssociation + - componentOfferingAssociation + example: componentOfferingAssociation + readOnly: true + role: + $ref: '../enumerations/associationRole.yaml' + state: + $ref: '../enumerations/associationState.yaml' + readOnly: true + remoteState: + $ref: '../enumerations/remoteAssociationState.yaml' + writeOnly: true + consumers: + description: The additional consumer elements that can be provided, see the [documentation on support for specific consumers](https://open-education-api.github.io/specification/#/consumers) for more information about this mechanism. + type: array + items: + $ref: './Consumer.yaml' + example: + $ref: '../consumers/TEST/V1/examples/TestConsumer.yaml' + ext: + $ref: './Ext.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/AssociationWrite.yaml b/tests/e2e/open-education-api-v5/schemas/AssociationWrite.yaml new file mode 100644 index 00000000..918562ef --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/AssociationWrite.yaml @@ -0,0 +1,14 @@ +oneOf: + - $ref: '../schemas/ProgramOfferingAssociation.yaml' + - $ref: '../schemas/CourseOfferingAssociation.yaml' + - $ref: '../schemas/ComponentOfferingAssociation.yaml' +properties: + offering: + description: The offering this association is for + oneOf: + - $ref: '../schemas/ComponentOffering.yaml' + title: ComponentOffering + - $ref: '../schemas/CourseOffering.yaml' + title: CourseOffering + - $ref: '../schemas/ProgramOffering.yaml' + title: ProgramOffering diff --git a/tests/e2e/open-education-api-v5/schemas/Building.yaml b/tests/e2e/open-education-api-v5/schemas/Building.yaml new file mode 100644 index 00000000..f24c2a02 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/Building.yaml @@ -0,0 +1,61 @@ +type: object +description: An object describing a building and the properties of a building. +required: + - buildingId + - name + - address + - primaryCode +properties: + buildingId: + type: string + description: Unique id of this building + format: uuid + example: 123e4567-e89b-12d3-a456-331214174000 + primaryCode: + description: The primary human readable identifier for this building. This is often the source identifier as defined by the institution. + $ref: './IdentifierEntry.yaml' + example: + codeType: buildingId + code: '45' + abbreviation: + type: string + description: The abbreviation of the name of this building + maxLength: 256 + example: Bb + name: + type: array + description: The name of this building + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: Beatrix building + description: + type: array + description: The description of this building. + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: external rooms location for exams + address: + $ref: './Address.yaml' + otherCodes: + type: array + description: An array of additional human readable codes/identifiers for the entity being described. + items: + $ref: './IdentifierEntry.yaml' + example: + - codeType: bagId + code: '0344100000139910' + consumers: + description: The additional consumer elements that can be provided, see the [documentation on support for specific consumers](https://open-education-api.github.io/specification/#/consumers) for more information about this mechanism. + type: array + items: + $ref: './Consumer.yaml' + example: + $ref: '../consumers/TEST/V1/examples/TestConsumer.yaml' + ext: + $ref: './Ext.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/Component.yaml b/tests/e2e/open-education-api-v5/schemas/Component.yaml new file mode 100644 index 00000000..e403f338 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/Component.yaml @@ -0,0 +1,150 @@ +type: object +description: A component is a part of a course +required: + - componentId + - componentType + - name + - teachingLanguage + - abbreviation + - primaryCode +properties: + componentId: + type: string + description: Unique id of this component + format: uuid + example: 123e4567-e89b-12d3-a456-426614174000 + readOnly: true + primaryCode: + description: The primary human readable identifier for this component. This is often the source identifier as defined by the institution. + $ref: './IdentifierEntry.yaml' + example: + codeType: componentCode + code: INFOMQNM-WRKCLG-1 + readOnly: true + componentType: + $ref: '../enumerations/componentType.yaml' + name: + type: array + description: The name of this component + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: Written test for INFOMQNM + abbreviation: + type: string + description: The abbreviation of this component + maxLength: 256 + example: Test-INFOMQNM + modeOfDelivery: + $ref: '../enumerations/modesOfDelivery.yaml' + duration: + type: string + description: The duration of this component. The duration format is from the ISO 8601 ABNF as given in Appendix A of RFC 3339. + pattern: '^(-?)P(?=\d|T\d)(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)([DW]))?(?:T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+(?:\.\d+)?)S)?)?$' + example: P1DT30H4S + description: + type: array + description: The description of this component. + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: > + 'Prove executable knowledge of research methods, including: + Acquire knowledge of HCI research paradigms + Able to design suitable research studies (e.g., choose between within and between subject designs) + Define/apply/design metrics and scales + Define/produce materials (e.g., stimuli and questionnaires) + Define protocols for research studies + Understands and take in account concepts of reliability and validity + Analyze and improve methods and analysis of published scientific articles + Able to deliver scientific reports + + Prove executable knowledge of ­­­statistics, including: + Handle hypothesis testing with complex designs (e.g., including , dependent, independent, and co variates) + Data preparation (e.g., coding and feature selection) + Reason towards adequate techniques to ensure valid outcomes (e.g., be aware of type I, type II errors) + Select an appropriate sampling method (e.g., stratified) + Perform parametric tests (e.g., repeated measures (M)ANOVA) + Perform non-parametric tests (e.g., Chi-square, Mann-Whitney, and Kruskal-Wallis)' + teachingLanguage: + type: string + description: The (primary) teaching language in which this component is given, should be a three-letter language code as specified by ISO 639-2. + minLength: 3 + maxLength: 3 + pattern: "^[a-z]{3}$" + example: nld + learningOutcomes: + type: array + description: Statements that describe the knowledge or skills students should acquire by the end of a particular course (ECTS-learningoutcome). + items: + type: array + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: 'Executable knowledge of research methods, including: Acquire knowledge of HCI research paradigms.' + enrollment: + type: array + items: + $ref: './LanguageTypedString.yaml' + description: The extra information that is provided for enrollment + example: + - language: en-GB + value: enrollment through SIS. [The limited implementation of Git Hub Markdown syntax](#tag/formatting-and-displaying-results-from-API) MAY be used for rich text representation. + resources: + type: array + description: An overview of the literature and other resources that is used in this course (ECTS-recommended reading and other sources) + items: + type: string + example: ['book to be announced', 'on-line resource x'] + assessment: + type: array + description: A description of the way exams for this course are taken (ECTS-assessment method and criteria). + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: Exam on campus + addresses: + type: array + description: Addresses for this component + items: + $ref: './Address.yaml' + otherCodes: + type: array + description: An array of additional human readable codes/identifiers for the entity being described. + items: + $ref: './IdentifierEntry.yaml' + course: + description: | + The course of which this component is a part. [`expandable`](#tag/course_model) + By default only the `courseId` (a string) is returned. If the client requested an expansion of `course` the full course object should be returned. + oneOf: + - $ref: './Identifier.yaml' + title: courseId + - $ref: './Course.yaml' + title: Course object + organization: + description: | + The organization which provides this component. [`expandable`](#tag/organization_model) + By default only the `organizationId` (a string) is returned. If the client requested an expansion of `organization` the full organization object should be returned. + oneOf: + - $ref: './Identifier.yaml' + title: organizationId + - $ref: './Organization.yaml' + title: Organization object + consumers: + description: The additional consumer elements that can be provided, see the [documentation on support for specific consumers](https://open-education-api.github.io/specification/#/consumers) for more information about this mechanism. + type: array + items: + $ref: './Consumer.yaml' + example: + $ref: '../consumers/TEST/V1/examples/TestConsumer.yaml' + ext: + $ref: './Ext.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/ComponentOffering.yaml b/tests/e2e/open-education-api-v5/schemas/ComponentOffering.yaml new file mode 100644 index 00000000..912ba213 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/ComponentOffering.yaml @@ -0,0 +1,80 @@ +allOf: + - $ref: './Offering.yaml' + - type: object + required: + - startDateTime + - endDateTime + properties: + startDateTime: + type: string + description: The moment on which this offering starts, RFC3339 (date-time) + format: date-time + example: 2020-12-15 + endDateTime: + type: string + description: The moment on which this offering ends, RFC3339 (date-time) + format: date-time + example: 2020-12-16 + enrollStartDate: + type: string + description: The first day on which a student can enroll for this course. + format: date + enrollEndDate: + type: string + description: The last day on which a student can enroll for this course. + format: date + resultWeight: + type: integer + description: The result weight of this offering + minimum: 0 + maximum: 100 + example: 100 + addresses: + type: array + description: Addresses for this offering + items: + $ref: './Address.yaml' + priceInformation: + type: array + description: Price information for this offering. + items: + $ref: './Cost.yaml' + room: + $ref: './Room.yaml' + component: + description: | + The component that is offered in this componentoffering. [`expandable`](#tag/component_model) + By default only the `componentId` (a string) is returned. If the client requested an expansion of `component` the full component object should be returned. + oneOf: + - $ref: './Identifier.yaml' + title: componentId + - $ref: './Component.yaml' + title: Component object + courseOffering: + description: | + The courseoffering where this componentoffering is related to. [`expandable`](#tag/course_offering_model) + By default only the `courseOfferingId` (a string) is returned. If the client requested an expansion of `courseOffering` the full courseOffering object should be returned. + oneOf: + - $ref: './Identifier.yaml' + title: courseOfferingId + - $ref: './CourseOffering.yaml' + title: CourseOffering object + organization: + description: | + The organization that manages this componentoffering. [`expandable`](#tag/organization_model) + By default only the `organizationId` (a string) is returned. If the client requested an expansion of `organization` the full organization object should be returned. + oneOf: + - $ref: './Identifier.yaml' + title: organizationId + - $ref: './Organization.yaml' + title: Organization object + academicSession: + description: | + The academicsession during which this componentoffering takes place. [`expandable`](#tag/academic_session_model) + By default only the `academicSessionId` (a string) is returned. If the client requested an expansion of `academicSession` the full academicsession object should be returned. + oneOf: + - $ref: './Identifier.yaml' + title: academicSessionId + - $ref: './AcademicSession.yaml' + title: AcademicSession object + diff --git a/tests/e2e/open-education-api-v5/schemas/ComponentOfferingAssociation.yaml b/tests/e2e/open-education-api-v5/schemas/ComponentOfferingAssociation.yaml new file mode 100644 index 00000000..6150c047 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/ComponentOfferingAssociation.yaml @@ -0,0 +1,6 @@ +allOf: + - $ref: './Association.yaml' + - type: object + properties: + result: + $ref: './ComponentResult.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/ComponentOfferingAssociationExpandable.yaml b/tests/e2e/open-education-api-v5/schemas/ComponentOfferingAssociationExpandable.yaml new file mode 100644 index 00000000..740689c2 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/ComponentOfferingAssociationExpandable.yaml @@ -0,0 +1,8 @@ +allOf: + - $ref: './Association.yaml' + - type: object + properties: + result: + $ref: './ComponentResult.yaml' + person: + $ref: './PersonId.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/ComponentOfferingAssociationExpanded.yaml b/tests/e2e/open-education-api-v5/schemas/ComponentOfferingAssociationExpanded.yaml new file mode 100644 index 00000000..000970bb --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/ComponentOfferingAssociationExpanded.yaml @@ -0,0 +1,16 @@ +allOf: + - $ref: '../schemas/ComponentOfferingAssociation.yaml' +properties: + person: + readOnly: true + oneOf: + - $ref: '../schemas/Identifier.yaml' + title: personId + - $ref: '../schemas/Person.yaml' + title: Person + offering: + oneOf: + - $ref: '../schemas/Identifier.yaml' + title: offeringId + - $ref: '../schemas/ComponentOffering.yaml' + title: ComponentOffering diff --git a/tests/e2e/open-education-api-v5/schemas/ComponentResult.yaml b/tests/e2e/open-education-api-v5/schemas/ComponentResult.yaml new file mode 100644 index 00000000..9eececac --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/ComponentResult.yaml @@ -0,0 +1,13 @@ +allOf: + - $ref: './Result.yaml' + - type: object + required: + - weight + properties: + weight: + type: integer + description: The weight to 100 as total for this offering in the course + format: int32 + minimum: 0 + maximum: 100 + example: 100 diff --git a/tests/e2e/open-education-api-v5/schemas/Consumer.yaml b/tests/e2e/open-education-api-v5/schemas/Consumer.yaml new file mode 100644 index 00000000..01bb21b2 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/Consumer.yaml @@ -0,0 +1,9 @@ +type: object +description: Object for communicating data to a specific consumer (destination). This object has no relationship with the `consumer` query parameter. +required: + - consumerKey +properties: + consumerKey: + description: The key of the consumer (destination) for which this information is intended. See the [consumer registry](https://open-education-api.github.io/specification/#/consumers) for more information. + type: string +additionalProperties: true diff --git a/tests/e2e/open-education-api-v5/schemas/Cost.yaml b/tests/e2e/open-education-api-v5/schemas/Cost.yaml new file mode 100644 index 00000000..7855e2c5 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/Cost.yaml @@ -0,0 +1,38 @@ +type: object +required: + - costType +properties: + costType: + $ref: '../enumerations/costType.yaml' + amount: + type: string + pattern: '^\d+(?:\.\d+)?$' + description: The total amount of the cost as a string. Use a '.' (dot) as an optional separator. The numbers before the separator signify the major units of the currency, after the dot the minor units. Only a single separator is allowed. Do not use a comma. + example: '340.84' + vatAmount: + type: string + pattern: '^\d+(?:\.\d+)?$' + description: The part of the cost that is VAT, as a string. Use a '.' (dot) as an optional separator. The numbers before the separator signify the major units of the currency, after the dot the minor units. Only a single separator is allowed. Do not use a comma. + example: '40' + amountWithoutVat: + type: string + pattern: '^\d+(?:\.\d+)?$' + description: The part of the cost that is non-VAT. as a string. Use a '.' (dot) as an optional separator. The numbers before the separator signify the major units of the currency, after the dot the minor units. Only a single separator is allowed. Do not use a comma. + example: '300.84' + currency: + type: string + description: The currency this cost is in. Should correspond to one of the currency codes from ISO 4217. + example: EUR + displayAmount: + type: array + items: + $ref: './LanguageTypedString.yaml' + description: An array of optional pre-formatted strings in different locales. Clients can choose to use this string instead of rendering their own based on the current locale of the user. + example: + - language: nl-NL + value: '€380,84' + - language: en-US + value: '$401.17' + ext: + $ref: './Ext.yaml' +additionalProperties: false diff --git a/tests/e2e/open-education-api-v5/schemas/Course.yaml b/tests/e2e/open-education-api-v5/schemas/Course.yaml new file mode 100644 index 00000000..92fbaf50 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/Course.yaml @@ -0,0 +1,12 @@ +allOf: + - $ref: '../schemas/CourseId.yaml' + - $ref: '../schemas/CourseProperties.yaml' + - properties: + validFrom: + description: The first day this course is valid (inclusive). + type: string + format: date + validTo: + description: The day this course ceases to be valid (e.g. exclusive). + type: string + format: date diff --git a/tests/e2e/open-education-api-v5/schemas/CourseExpanded.yaml b/tests/e2e/open-education-api-v5/schemas/CourseExpanded.yaml new file mode 100644 index 00000000..085bb5bf --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/CourseExpanded.yaml @@ -0,0 +1,10 @@ +allOf: + - $ref: './Course.yaml' + - type: object + description: These properties are only present when explicitly included + properties: + timelineOverrides: + description: Timeline overrides allow an implementation to provide versions of entities that will be valid in the future or have been in the past. + type: array + items: + $ref: './TimelineOverrideCourse.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/CourseId.yaml b/tests/e2e/open-education-api-v5/schemas/CourseId.yaml new file mode 100644 index 00000000..5192d659 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/CourseId.yaml @@ -0,0 +1,11 @@ +type: object +description: An object describing the metadata of a course +required: + - courseId +properties: + courseId: + type: string + description: Unique id of this course + format: uuid + example: 123e4567-e89b-12d3-a456-426614174000 + readOnly: true diff --git a/tests/e2e/open-education-api-v5/schemas/CourseOffering.yaml b/tests/e2e/open-education-api-v5/schemas/CourseOffering.yaml new file mode 100644 index 00000000..c63f9e39 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/CourseOffering.yaml @@ -0,0 +1,85 @@ +allOf: + - $ref: './Offering.yaml' + - type: object + required: + - modeOfStudy + - startDate + - endDate + properties: + startDate: + type: string + description: The moment on which this offering starts, RFC3339 (full-date) + format: date + example: 2019-08-21 + endDate: + type: string + description: The moment on which this offering ends, RFC3339 (full-date) + format: date + example: 2019-10-23 + enrollStartDate: + type: string + description: The first day on which a student can enroll for this course. + format: date + example: 2019-05-01 + enrollEndDate: + type: string + description: The last day on which a student can enroll for this course. + format: date + example: 2019-08-01 + flexibleEntryPeriodStart: + type: string + description: If this is a course wherein participants can start at various moments, without missing anything, use this attribute in combination with `flexibleEntryPeriodEnd`. + format: date + flexibleEntryPeriodEnd: + type: string + description: If this is a course wherein participants can start at various moments, without missing anything, use this attribute in combination with `flexibleEntryPeriodStart`. + format: date + addresses: + type: array + description: Addresses for this offering + items: + $ref: './Address.yaml' + priceInformation: + type: array + description: Price information for this offering. + items: + $ref: './Cost.yaml' + course: + description: | + The course that is offered in this courseoffering. [`expandable`](#tag/course_model) + By default only the `courseId` (a string) is returned. If the client requested an expansion of `course` the full course object should be returned. + oneOf: + - $ref: './Identifier.yaml' + title: courseId + - $ref: './Course.yaml' + title: Course object + programOffering: + description: | + The programoffering where this courseoffering is related to. [`expandable`](#tag/program_offering_model) + By default only the `programOfferingId` (a string) is returned. If the client requested an expansion of `programOffering` the full programOffering object should be returned. + oneOf: + - $ref: './Identifier.yaml' + title: programOfferingId + - $ref: './ProgramOffering.yaml' + title: ProgramOffering object + organization: + description: | + The organization that manages this courseoffering. [`expandable`](#tag/organization_model) + By default only the `organizationId` (a string) is returned. If the client requested an expansion of `organization` the full organization object should be returned. + oneOf: + - $ref: './Identifier.yaml' + title: organizationId + - $ref: './Organization.yaml' + title: Organization object + academicSession: + description: | + The academicsession during which this courseoffering takes place. [`expandable`](#tag/academic_session_model) + By default only the `academicSessionId` (a string) is returned. If the client requested an expansion of `academicSession` the full academicsession object should be returned. + oneOf: + - $ref: './Identifier.yaml' + title: academicSessionId + - $ref: './AcademicSession.yaml' + title: AcademicSession object + + + diff --git a/tests/e2e/open-education-api-v5/schemas/CourseOfferingAssociation.yaml b/tests/e2e/open-education-api-v5/schemas/CourseOfferingAssociation.yaml new file mode 100644 index 00000000..a7588873 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/CourseOfferingAssociation.yaml @@ -0,0 +1,6 @@ +allOf: + - $ref: './Association.yaml' + - type: object + properties: + result: + $ref: './CourseResult.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/CourseOfferingAssociationExpandable.yaml b/tests/e2e/open-education-api-v5/schemas/CourseOfferingAssociationExpandable.yaml new file mode 100644 index 00000000..f6a6cf3c --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/CourseOfferingAssociationExpandable.yaml @@ -0,0 +1,8 @@ +allOf: + - $ref: './Association.yaml' + - type: object + properties: + result: + $ref: './CourseResult.yaml' + person: + $ref: './PersonId.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/CourseOfferingAssociationExpanded.yaml b/tests/e2e/open-education-api-v5/schemas/CourseOfferingAssociationExpanded.yaml new file mode 100644 index 00000000..ee61c618 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/CourseOfferingAssociationExpanded.yaml @@ -0,0 +1,13 @@ +allOf: + - $ref: './Association.yaml' + - type: object + properties: + result: + $ref: './CourseResult.yaml' + person: + description: The person this association is to + $ref: './Person.yaml' + offering: + description: The offering this association is for + $ref: './Offering.yaml' + \ No newline at end of file diff --git a/tests/e2e/open-education-api-v5/schemas/CourseProperties.yaml b/tests/e2e/open-education-api-v5/schemas/CourseProperties.yaml new file mode 100644 index 00000000..638e7197 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/CourseProperties.yaml @@ -0,0 +1,172 @@ +type: object +description: An object describing the metadata of a course +required: + - name + - abbreviation + - description + - teachingLanguage + - level + - primaryCode +properties: + primaryCode: + description: The primary human readable identifier for this course. This is often the source identifier as defined by the institution. + $ref: './IdentifierEntry.yaml' + readOnly: true + name: + type: array + description: The name of this course (ECTS-title) + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: Academic and Professional Writing + abbreviation: + type: string + description: The abbreviation or internal code used to identify this course (ECTS-code) + maxLength: 256 + example: INFOMQNM + studyLoad: + $ref: './StudyLoadDescriptor.yaml' + modeOfDelivery: + $ref: '../enumerations/modesOfDelivery.yaml' + duration: + type: string + description: The duration of this course. The duration format is from the ISO 8601 ABNF as given in Appendix A of RFC 3339. + pattern: '^(-?)P(?=\d|T\d)(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)([DW]))?(?:T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+(?:\.\d+)?)S)?)?$' + example: P1DT30H4S + firstStartDate: + type: string + description: The date when participants can follow this course for the first time. + format: date + description: + type: array + description: The description of this course (ECTS-description). + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: 'As with all empirical sciences, to assure valid outcomes, HCI studies heavily rely on research methods and statistics. This holds for the design of user interfaces, personalized recommender systems, and interaction paradigms for the internet of things. This course prepares you to do so by learning you to collect data, design experiments, and analyze the results. By the end of the course, you will have a detailed understanding of how to select and apply quantitative research methods and analysis to address virtually all HCI challenges. Quantitative research and data analysis will be taught in the context of state-of-the-art HCI challenges. Lectures will be alternated with hands-on learning, including work with predefined datasets (e.g., addressing facial features, cognitive load, and emotion). Additionally, students will set up their own research (e.g., using eye tracking). Data processing and analysis will be executed using R.' + teachingLanguage: + type: string + description: The (primary) teaching language in which this course is given, should be a three-letter language code as specified by ISO 639-2. + minLength: 3 + maxLength: 3 + pattern: "^[a-z]{3}$" + example: nld + fieldsOfStudy: + type: string + description: Field(s) of study (e.g. ISCED-F) (http://uis.unesco.org/sites/default/files/documents/isced-fields-of-education-and-training-2013-en.pdf. + maxLength: 4 + example: '0732' + learningOutcomes: + type: array + description: Statements that describe the knowledge or skills students should acquire by the end of a particular course (ECTS-learningoutcome). + items: + type: array + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: 'Executable knowledge of research methods, including: Acquire knowledge of HCI research paradigms.' + admissionRequirements: + type: array + description: This information may be given at an institutional level and/or at the level of individual programmes. Make sure that it is clear whether the information applies to fee-paying students (national and/or international) or to exchange students. + example: + - language: en-GB + value: Students need to be enrolled at qualifying institutions of higher education that participate in this alliance + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + qualificationRequirements: + type: array + description: Normally, students will receive a diploma when they have completed the (official) study program and have obtained the required number of credits. If there are any other specific requirements that students need to have fulfilled, mention them here. + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + level: + $ref: '../enumerations/level.yaml' + enrollment: + type: array + items: + $ref: './LanguageTypedString.yaml' + description: The extra information that is provided for enrollment + example: + - language: en-GB + value: enrollment through SIS. [The limited implementation of Git Hub Markdown syntax](#tag/formatting-and-displaying-results-from-API) MAY be used for rich text representation. + resources: + type: array + description: An overview of the literature and other resources that is used in this course (ECTS-recommended reading and other sources) + items: + type: string + example: ['book to be announced', 'on-line resource x'] + assessment: + type: array + description: A description of the way exams for this course are taken (ECTS-assessment method and criteria). + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: Exam on campus + link: + type: string + description: URL of the course's website + format: uri + maxLength: 2048 + example: https://osiris.uu.nl/osiris_student_uuprd/OnderwijsCatalogusZoekCursus.do#submitForm?cursuscode=INFOMQNM + educationSpecification: + description: The educationSpecification of which this course is a more concrete implementation. [`expandable`](#tag/education_specification_model) + oneOf: + - $ref: './Identifier.yaml' + title: educationSpecificationId + - $ref: './EducationSpecification.yaml' + title: EducationSpecification + addresses: + type: array + description: Addresses for this course + items: + $ref: './Address.yaml' + otherCodes: + type: array + description: An array of additional human readable codes/identifiers for the entity being described. + items: + $ref: './IdentifierEntry.yaml' + consumers: + description: The additional consumer elements that can be provided, see the [documentation on support for specific consumers](https://open-education-api.github.io/specification/#/consumers) for more information about this mechanism. + type: array + items: + $ref: './Consumer.yaml' + example: + $ref: '../consumers/RIO/V1/examples/Course.yaml' + ext: + $ref: './Ext.yaml' + programs: + description: The program of which this course is a part of. This object is [`expandable`](#tag/program_model) + type: array # array is used because of implementation of alliances in program where courses can be part of regular education and alliances + items: + oneOf: + - $ref: './Identifier.yaml' + title: programId + - $ref: './Program.yaml' + title: Program object + coordinators: + description: The person(s) responsible for this course. This object is [`expandable`](#tag/person_model) + type: array + items: + oneOf: + - $ref: './Identifier.yaml' + title: personId + - $ref: './Person.yaml' + title: Person object + organization: + description: | + The organization that manages this group. [`expandable`](#tag/organization_model) + By default only the `organizationId` (a string) is returned. If the client requested an expansion of `organization` the full organization object should be returned. + oneOf: + - $ref: './Identifier.yaml' + title: organizationId + - $ref: './Organization.yaml' + title: Organization object diff --git a/tests/e2e/open-education-api-v5/schemas/CourseResult.yaml b/tests/e2e/open-education-api-v5/schemas/CourseResult.yaml new file mode 100644 index 00000000..ddd0fba3 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/CourseResult.yaml @@ -0,0 +1,8 @@ +allOf: + - $ref: './Result.yaml' + - type: object + required: + - studyLoad + properties: + studyLoad: + $ref: './StudyLoadDescriptor.yaml' \ No newline at end of file diff --git a/tests/e2e/open-education-api-v5/schemas/EducationSpecification.yaml b/tests/e2e/open-education-api-v5/schemas/EducationSpecification.yaml new file mode 100644 index 00000000..edc532aa --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/EducationSpecification.yaml @@ -0,0 +1,12 @@ +allOf: + - $ref: '../schemas/EducationSpecificationId.yaml' + - $ref: '../schemas/EducationSpecificationProperties.yaml' + - properties: + validFrom: + description: The first day this EducationSpecification is valid (inclusive). + type: string + format: date + validTo: + description: The day this EducationSpecification ceases to be valid (e.g. exclusive). + type: string + format: date diff --git a/tests/e2e/open-education-api-v5/schemas/EducationSpecificationExpanded.yaml b/tests/e2e/open-education-api-v5/schemas/EducationSpecificationExpanded.yaml new file mode 100644 index 00000000..409dfb85 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/EducationSpecificationExpanded.yaml @@ -0,0 +1,10 @@ +allOf: + - $ref: '../schemas/EducationSpecification.yaml' + - type: object + title: With timelineOverrides + properties: + timelineOverrides: + description: Timeline overrides allow an implementation to provide versions of entities that will be valid in the future or have been in the past. + type: array + items: + $ref: '../schemas/TimelineOverrideEducationSpecification.yaml' \ No newline at end of file diff --git a/tests/e2e/open-education-api-v5/schemas/EducationSpecificationId.yaml b/tests/e2e/open-education-api-v5/schemas/EducationSpecificationId.yaml new file mode 100644 index 00000000..dd31240b --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/EducationSpecificationId.yaml @@ -0,0 +1,9 @@ +type: object +properties: + educationSpecificationId: + type: string + description: Unique id for this education specification + format: uuid + example: 123e4567-e89b-12d3-a456-426614174000 +required: + - educationSpecificationId diff --git a/tests/e2e/open-education-api-v5/schemas/EducationSpecificationProperties.yaml b/tests/e2e/open-education-api-v5/schemas/EducationSpecificationProperties.yaml new file mode 100644 index 00000000..5b703d5a --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/EducationSpecificationProperties.yaml @@ -0,0 +1,112 @@ +type: object +description: | + The specification of an education object. This specification allows for other education objects to be derived from it. + It is used to aggregate education objects from a supplying institution. + It clusters programs to a main educationSpecification that is used in registries such as RIO. +required: + - primaryCode + - educationSpecificationType + - name +properties: + primaryCode: + description: | + The primary human readable identifier for the entity. + This will often take the form of a human readable code as defined by the institution or region + $ref: './IdentifierEntry.yaml' + otherCodes: + type: array + description: An array of additional human readable codes/identifiers for the entity being described. + items: + $ref: './IdentifierEntry.yaml' + example: + - codeType: crohoCreboCode + code: '1234123' + educationSpecificationType: + $ref: '../enumerations/educationSpecificationType.yaml' + name: + type: array + items: + $ref: './LanguageTypedString.yaml' + description: The name of this education specification + example: + - language: en-GB + value: Bachelor Chemical technology + abbreviation: + type: string + description: The abbreviation of this program + maxLength: 256 + example: B Scheikundige Technologie + description: + type: array + items: + $ref: './LanguageTypedString.yaml' + description: The description of this program. [The limited implementation of Git Hub Markdown syntax](#tag/formatting-and-displaying-results-from-API) MAY be used for rich text representation. + example: + - language: en-GB + value: program that is a place holder for all courses that are made available for student mobility + formalDocument: + $ref: '../enumerations/formalDocument.yaml' + level: + $ref: '../enumerations/level.yaml' + sector: + $ref: '../enumerations/sector.yaml' + levelOfQualification: + $ref: '../enumerations/levelOfQualification.yaml' + fieldsOfStudy: + type: string + description: Field(s) of study (e.g. ISCED-F) (http://uis.unesco.org/sites/default/files/documents/isced-fields-of-education-and-training-2013-en.pdf. + maxLength: 4 + example: '0732' + studyLoad: + $ref: './StudyLoadDescriptor.yaml' + learningOutcomes: + type: array + description: Statements that describe the knowledge or skills students should acquire by the end of a particular course or program (ECTS-learningoutcome). + items: + type: array + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: 'Executable knowledge of Chemical technology, including: Acquire knowledge of research paradigms.' + link: + type: string + description: URL of the program's website + format: uri + maxLength: 2048 + example: https://bijvak.nl + parent: + description: The educationSpecification that is the parent of this educationSpecification if it exists. [`expandable`](#tag/education_specification_model) + oneOf: + - $ref: './Identifier.yaml' + title: educationSpecificationId + - $ref: './EducationSpecification.yaml' + title: EducationSpecification + children: + type: array + description: The EducationSpecifications that have this EducationSpecification as their parent. [`expandable`](#tag/education_specification_model) + items: + oneOf: + - $ref: './Identifier.yaml' + title: educationSpecificationId + - $ref: './EducationSpecification.yaml' + title: EducationSpecification + organization: + description: | + The organization that manages this group. [`expandable`](#tag/organization_model) + By default only the `organizationId` (a string) is returned. If the client requested an expansion of `organization` the full organization object should be returned. + oneOf: + - $ref: './Identifier.yaml' + title: organizationId + - $ref: './Organization.yaml' + title: Organization object + consumers: + description: The additional consumer elements that can be provided, see the [documentation on support for specific consumers](https://open-education-api.github.io/specification/#/consumers) for more information about this mechanism. + type: array + items: + $ref: './Consumer.yaml' + example: + $ref: '../consumers/RIO/V1/examples/EducationSpecification.yaml' + ext: + $ref: './Ext.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/ErrorBadRequest.yaml b/tests/e2e/open-education-api-v5/schemas/ErrorBadRequest.yaml new file mode 100644 index 00000000..efe9aa1f --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/ErrorBadRequest.yaml @@ -0,0 +1,5 @@ +description: Bad request +content: + application/problem+json: + schema: + $ref: 'Problem.yaml' \ No newline at end of file diff --git a/tests/e2e/open-education-api-v5/schemas/ErrorForbidden.yaml b/tests/e2e/open-education-api-v5/schemas/ErrorForbidden.yaml new file mode 100644 index 00000000..e3b4ac73 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/ErrorForbidden.yaml @@ -0,0 +1,5 @@ +description: Forbidden +content: + application/problem+json: + schema: + $ref: 'Problem.yaml' \ No newline at end of file diff --git a/tests/e2e/open-education-api-v5/schemas/ErrorInternalServerError.yaml b/tests/e2e/open-education-api-v5/schemas/ErrorInternalServerError.yaml new file mode 100644 index 00000000..c6f3809a --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/ErrorInternalServerError.yaml @@ -0,0 +1,5 @@ +description: Internal Server Error +content: + application/problem+json: + schema: + $ref: 'Problem.yaml' \ No newline at end of file diff --git a/tests/e2e/open-education-api-v5/schemas/ErrorMethodNotAllowed.yaml b/tests/e2e/open-education-api-v5/schemas/ErrorMethodNotAllowed.yaml new file mode 100644 index 00000000..23adf76f --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/ErrorMethodNotAllowed.yaml @@ -0,0 +1,5 @@ +description: Method not allowed +content: + application/problem+json: + schema: + $ref: 'Problem.yaml' \ No newline at end of file diff --git a/tests/e2e/open-education-api-v5/schemas/ErrorNotFound.yaml b/tests/e2e/open-education-api-v5/schemas/ErrorNotFound.yaml new file mode 100644 index 00000000..778f4d92 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/ErrorNotFound.yaml @@ -0,0 +1,5 @@ +description: Not Found +content: + application/problem+json: + schema: + $ref: 'Problem.yaml' \ No newline at end of file diff --git a/tests/e2e/open-education-api-v5/schemas/ErrorTooManyRequests.yaml b/tests/e2e/open-education-api-v5/schemas/ErrorTooManyRequests.yaml new file mode 100644 index 00000000..7e510147 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/ErrorTooManyRequests.yaml @@ -0,0 +1,5 @@ +description: Too many requests +content: + application/problem+json: + schema: + $ref: 'Problem.yaml' \ No newline at end of file diff --git a/tests/e2e/open-education-api-v5/schemas/ErrorUnauthorized.yaml b/tests/e2e/open-education-api-v5/schemas/ErrorUnauthorized.yaml new file mode 100644 index 00000000..beb48d3f --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/ErrorUnauthorized.yaml @@ -0,0 +1,5 @@ +description: Unauthorized +content: + application/problem+json: + schema: + $ref: 'Problem.yaml' \ No newline at end of file diff --git a/tests/e2e/open-education-api-v5/schemas/Ext.yaml b/tests/e2e/open-education-api-v5/schemas/Ext.yaml new file mode 100644 index 00000000..d6501ad7 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/Ext.yaml @@ -0,0 +1,2 @@ +type: object +description: Object for additional non-standard attributes diff --git a/tests/e2e/open-education-api-v5/schemas/Group.yaml b/tests/e2e/open-education-api-v5/schemas/Group.yaml new file mode 100644 index 00000000..d08cb9ef --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/Group.yaml @@ -0,0 +1,81 @@ +type: object +description: | + A group is simply a collection of persons. Groups can be used to accommodate various usecases. + + Groups MAY optionally have a relation to an Offering, however the meaning of such relations is left unspecified and is left up to the implementer. +required: + - groupId + - groupType + - name + - primaryCode +properties: + groupId: + type: string + description: Unique id for this group + format: uuid + example: 123e4567-e89b-12d3-a456-426614174000 + primaryCode: + description: The primary human readable identifier for this group. This is often the source identifier as defined by the institution. + $ref: './IdentifierEntry.yaml' + example: + codeType: groupCode + code: group-abc987 + groupType: + $ref: '../enumerations/groupType.yaml' + name: + type: array + description: The name of this group + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: statistics students + description: + type: array + description: The description of this group + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: The group of students that follow statistics classes + startDate: + type: string + description: The day on which this group starts being active, RFC3339 (full-date) + format: date + example: '2020-08-17' + endDate: + type: string + description: The day on which this group ends being active, RFC3339 (full-date) + format: date + example: '2020-12-18' + personCount: + type: number + description: The number of persons that are member of this group + format: int32 + minimum: 0 + example: 183 + otherCodes: + type: array + description: An array of additional human readable codes/identifiers for the entity being described. + items: + $ref: './IdentifierEntry.yaml' + consumers: + description: The additional consumer elements that can be provided, see the [documentation on support for specific consumers](https://open-education-api.github.io/specification/#/consumers) for more information about this mechanism. + type: array + items: + $ref: './Consumer.yaml' + example: + $ref: '../consumers/TEST/V1/examples/TestConsumer.yaml' + organization: + description: | + The organization that manages this group. [`expandable`](.#tag/organization_model) + By default only the `organizationId` (a string) is returned. If the client requested an expansion of `organization` the full organization object should be returned. + oneOf: + - $ref: './Identifier.yaml' + title: organizationId + - $ref: './Organization.yaml' + title: Expanded organization + ext: + $ref: './Ext.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/GroupExpanded.yaml b/tests/e2e/open-education-api-v5/schemas/GroupExpanded.yaml new file mode 100644 index 00000000..eaae9742 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/GroupExpanded.yaml @@ -0,0 +1,9 @@ +allOf: + - $ref: './Group.yaml' + - type: object + description: These properties are only present when explicitly included. This allows for categorizing of groups + properties: + organization: + allOf: # Use allOf to make sure description renders + - $ref: './Organization.yaml' + - description: The organization providing this group diff --git a/tests/e2e/open-education-api-v5/schemas/Identifier.yaml b/tests/e2e/open-education-api-v5/schemas/Identifier.yaml new file mode 100644 index 00000000..c9a73649 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/Identifier.yaml @@ -0,0 +1,3 @@ +type: string +description: An identifier of another resource. +format: uuid \ No newline at end of file diff --git a/tests/e2e/open-education-api-v5/schemas/IdentifierEntry.yaml b/tests/e2e/open-education-api-v5/schemas/IdentifierEntry.yaml new file mode 100644 index 00000000..06d8dda5 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/IdentifierEntry.yaml @@ -0,0 +1,14 @@ +type: object +properties: + codeType: + $ref: '../enumerations/codeType.yaml' + code: + description: Human readable value for the code/identifier + type: string +required: + - codeType + - code +additionalProperties: false +example: + codeType: 'identifier' + code: '1234qwe12' \ No newline at end of file diff --git a/tests/e2e/open-education-api-v5/schemas/LanguageTypedString.yaml b/tests/e2e/open-education-api-v5/schemas/LanguageTypedString.yaml new file mode 100644 index 00000000..17dbbd94 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/LanguageTypedString.yaml @@ -0,0 +1,13 @@ +type: object +description: A String with an associated language code. +properties: + language: + description: The language used in the described entity. A string formatted according to RFC3066. + type: string + pattern: "^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$" + value: + description: String to describe the entity. + type: string +example: + language: en-GB + value: program that is a place holder for all courses that are made available for student mobility diff --git a/tests/e2e/open-education-api-v5/schemas/NewsFeed.yaml b/tests/e2e/open-education-api-v5/schemas/NewsFeed.yaml new file mode 100644 index 00000000..20a144a2 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/NewsFeed.yaml @@ -0,0 +1,52 @@ +type: object +description: A placeholder or collection of news items +required: + - newsFeedId + - newsFeedType + - name + - description +properties: + newsFeedId: + type: string + description: Unique id for this news feed + format: uuid + example: 123e4567-e89b-12d3-a456-134564174222 + newsFeedType: + type: string + description: The type of the object this news feed relates to + enum: + - organization + - program + - course + - component + - person + - building + - room + example: room + name: + type: array + description: The name for this news feed + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: room Bb 4.35 news + description: + type: array + description: The description of this news feed. + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: all information on what happens in room Bb 4.35 + consumers: + description: The additional consumer elements that can be provided, see the [documentation on support for specific consumers](https://open-education-api.github.io/specification/#/consumers) for more information about this mechanism. + type: array + items: + $ref: './Consumer.yaml' + example: + $ref: '../consumers/TEST/V1/examples/TestConsumer.yaml' + ext: + $ref: './Ext.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/NewsItem.yaml b/tests/e2e/open-education-api-v5/schemas/NewsItem.yaml new file mode 100644 index 00000000..113a46cd --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/NewsItem.yaml @@ -0,0 +1,83 @@ +type: object +description: A newsitem contains the message and metadata of that message +required: + - newsItemId + - name +properties: + newsItemId: + type: string + description: Unique id for this news item + format: uuid + example: 123e4567-e89b-12d3-a456-122564174000 + newsItemType: + $ref: '../enumerations/newsItemType.yaml' + name: + type: array + description: The name for this news item + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: Room Bb 4.35 will be un available from 2020-09-29 until 2020-09-30 + authors: + type: array + description: The authors of the article with this news item + items: + type: string + maxLength: 256 + example: ['admin@universiteitvanharderwijk.nl'] + image: + type: string + description: The url containing the address of the image belonging to this news item + format: uri + maxLength: 2048 + example: https://upload.wikimedia.org/wikipedia/commons/4/44/Antu_emblem-unavailable.svg + link: + type: string + description: The url containing the address of the article belonging to this news item + format: uri + maxLength: 2048 + example: https://www.universiteitvanharderwijk.nl/cms/ruimtegebrek + content: + type: array + description: The content of this news item. + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: 'The room Bb 4.35 will be under maintenance' + newsFeeds: + description: The newsFeeds where this item can be found. [`expandable`](#tag/news_feed_model) + type: array + items: + oneOf: + - $ref: './Identifier.yaml' + title: newsFeedId + - $ref: './NewsFeed.yaml' + title: NewsFeed + validFrom: + type: string + description: The moment from which this news item is valid, RFC3339 (date-time) + format: date-time + example: 2020-09-28T08:30:00.000Z + validUntil: + type: string + description: The moment until which this news item is valid, RFC3339 (date-time) + format: date-time + example: 2020-09-30T20:00:00.000Z + lastModified: + type: string + description: The moment on which this news item was updated, RFC3339 (date-time) + format: date-time + example: 2020-09-28T00:00:00.000Z + consumers: + description: The additional consumer elements that can be provided, see the [documentation on support for specific consumers](https://open-education-api.github.io/specification/#/consumers) for more information about this mechanism. + type: array + items: + $ref: './Consumer.yaml' + example: + $ref: '../consumers/TEST/V1/examples/TestConsumer.yaml' + ext: + $ref: './Ext.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/Offering.yaml b/tests/e2e/open-education-api-v5/schemas/Offering.yaml new file mode 100644 index 00000000..89126b6f --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/Offering.yaml @@ -0,0 +1,3 @@ +allOf: + - $ref: '../schemas/OfferingId.yaml' + - $ref: '../schemas/OfferingProperties.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/OfferingId.yaml b/tests/e2e/open-education-api-v5/schemas/OfferingId.yaml new file mode 100644 index 00000000..d2f56481 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/OfferingId.yaml @@ -0,0 +1,11 @@ +type: object +description: ID of Either a program, course or component offering which descrbes the program, course or offering in time +required: + - offeringId +properties: + offeringId: + type: string + description: Unique id of this offering + format: uuid + example: 123e4567-e89b-12d3-a456-134564174000 + readOnly: true diff --git a/tests/e2e/open-education-api-v5/schemas/OfferingIdAndType.yaml b/tests/e2e/open-education-api-v5/schemas/OfferingIdAndType.yaml new file mode 100644 index 00000000..6fb07c98 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/OfferingIdAndType.yaml @@ -0,0 +1,11 @@ +type: object +description: ID and type of Either a program, course or component offering which descrbes the program, course or offering in time +required: + - offeringId +properties: + offeringId: + $ref: '../schemas/OfferingId.yaml' + offeringType: + $ref: '../enumerations/offeringType.yaml' + + diff --git a/tests/e2e/open-education-api-v5/schemas/OfferingProperties.yaml b/tests/e2e/open-education-api-v5/schemas/OfferingProperties.yaml new file mode 100644 index 00000000..2a2842bd --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/OfferingProperties.yaml @@ -0,0 +1,128 @@ +type: object +description: Either a program, course or component offering which descrbes the program, course or offering in time +required: + - primaryCode + - offeringType + - name + - description + - teachingLanguage + - resultExpected +properties: + primaryCode: + description: The primary human readable identifier for this offering. This is often the source identifier as defined by the institution. + $ref: './IdentifierEntry.yaml' + example: + codeType: offeringCode + code: INFOMQNM-20FS + readOnly: true + offeringType: + type: string + description: The type of this offering + enum: + - program + - course + - component + example: component + academicSession: + $ref: './AcademicSession.yaml' + name: + type: array + description: The name of this offering + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: Final written test for INFOMQNM for fall semseter 2020 + abbreviation: + type: string + description: The abbreviation or internal code used to identify this offering + maxLength: 256 + example: Test-INFOMQNM-20FS + description: + type: array + description: The description of this offering. + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: | + 'Prove in writing knowledge of research methods, including: + Acquire knowledge of HCI research paradigms + Able to design suitable research studies (e.g., choose between within and between subject designs) + Define/apply/design metrics and scales + Define/produce materials (e.g., stimuli and questionnaires) + Define protocols for research studies + Understands and take in account concepts of reliability and validity + Analyze and improve methods and analysis of published scientific articles + Able to deliver scientific reports + Prove in writing knowledge of ­­­statistics, including: + Handle hypothesis testing with complex designs (e.g., including , dependent, independent, and co variates) + Data preparation (e.g., coding and feature selection) + Reason towards adequate techniques to ensure valid outcomes (e.g., be aware of type I, type II errors) + Select an appropriate sampling method (e.g., stratified) + Perform parametric tests (e.g., repeated measures (M)ANOVA) + Perform non-parametric tests (e.g., Chi-square, Mann-Whitney, and Kruskal-Wallis)' + teachingLanguage: + type: string + description: The (primary) teaching language in which this offering is given, should be a three-letter language code as specified by ISO 639-2. + minLength: 3 + maxLength: 3 + pattern: "^[a-z]{3}$" + example: nld + modeOfDelivery: + $ref: '../enumerations/modesOfDelivery.yaml' + maxNumberStudents: + type: number + description: The maximum number of students allowed to enroll for this offering + format: int32 + minimum: 0 + example: 200 + enrolledNumberStudents: + type: number + description: The number of students that have already enrolled for this offering + format: int32 + minimum: 0 + example: 150 + pendingNumberStudents: + type: number + description: The number of students that have a pending enrollment request for this offering + format: int32 + minimum: 0 + example: 50 + minNumberStudents: + type: number + description: The minimum number of students needed for this offering to proceed + format: int32 + minimum: 0 + example: 15 + resultExpected: + type: boolean + description: | + resultExpected, previously knwon as isLineItem is used so the specific instance of the object is identified as being an element that CAN contain “grade” information. + Offerings do not always have to result in a grade or an other type of result. + If there is a result expected from a programOffering/courseOffering/componentOffering the is resultExpected field should parse true + example: true + resultValueType: + $ref: '../enumerations/resultValueType.yaml' + link: + type: string + description: URL of this offering's webpage. + format: uri + maxLength: 2048 + example: https://osiris.uu.nl/osiris_student_uuprd/OnderwijsCatalogusZoekCursus.do#submitForm?cursuscode=INFOMQNM + otherCodes: + type: array + description: An array of additional human readable codes/identifiers for the entity being described. + items: + $ref: './IdentifierEntry.yaml' + consumers: + description: The additional consumer elements that can be provided, see the [documentation on support for specific consumers](https://open-education-api.github.io/specification/#/consumers) for more information about this mechanism. + type: array + items: + $ref: './Consumer.yaml' + example: + $ref: '../consumers/RIO/V1/examples/Offering.yaml' + ext: + $ref: './Ext.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/Organization.yaml b/tests/e2e/open-education-api-v5/schemas/Organization.yaml new file mode 100644 index 00000000..5797f1be --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/Organization.yaml @@ -0,0 +1,104 @@ +type: object +description: A description of a group of people working together to achieve a goal +required: + - organizationId + - organizationType + - name + - shortName + - primaryCode +properties: + organizationId: + type: string + description: Unique id of this organization + format: uuid + example: 123e4567-e89b-12d3-a456-123514174000 + readOnly: true + primaryCode: + description: The primary human readable identifier for the organization. This is often the source identifier as defined by the institution. + $ref: './IdentifierEntry.yaml' + example: + codeType: orgId + code: Org01-Root + readOnly: true + organizationType: + $ref: '../enumerations/organizationType.yaml' + name: + type: array + description: The name of the organization + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: nl-NL + value: Coöperatie SURF U.A. + shortName: + type: string + description: Short name of the organization + maxLength: 256 + example: SURF + description: + type: array + description: Any general description of the organization should clearly mention the type of higher education organization, especially in the case of a binary system. In Dutch; universiteit (university) or hogeschool (university of applied sciences). + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: nl-NL + value: SURF is een coöperatieve vereniging van Nederlandse onderwijs- en onderzoeksinstellingen waarin de leden hun krachten bundelen. De leden zijn eigenaar van SURF. + addresses: + type: array + description: Addresses of this organization + items: + $ref: './Address.yaml' + link: + type: string + description: URL of the organization's website + format: uri + maxLength: 2048 + example: https://surf.nl + logo: + type: string + description: Logo of this organization + format: uri + maxLength: 2048 + example: https://www.surf.nl/themes/surf/logo.svg + otherCodes: + type: array + description: An array of additional human readable codes/identifiers for the entity being described. + minItems: 1 + items: + $ref: './IdentifierEntry.yaml' + example: + - codeType: brin + code: 00AA + - codeType: kvk + code: '12345678' + parent: + description: | + The organizational unit which is the parent of this organization. [`expandable`](#tag/organization_model) + By default only the `organizationId` (a string) is returned. If the client requested an expansion of `organization` the full organization object should be returned. + oneOf: + - $ref: './Identifier.yaml' + title: organizationId + - $ref: './Organization.yaml' + title: Organization object + children: + type: array + description: | + All the organizational units for which this organization is the parent. [`expandable`](#tag/organization_model) + By default only the `organizationId` (a string) is returned. If the client requested an expansion of `organization` the full organization object should be returned. + items: + oneOf: + - $ref: './Identifier.yaml' + title: organizationId + - $ref: './Organization.yaml' + title: Organization object + consumers: + description: The additional consumer elements that can be provided, see the [documentation on support for specific consumers](https://open-education-api.github.io/specification/#/consumers) for more information about this mechanism. + type: array + items: + $ref: './Consumer.yaml' + example: + $ref: '../consumers/TEST/V1/examples/TestConsumer.yaml' + ext: + $ref: './Ext.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/Pagination.yaml b/tests/e2e/open-education-api-v5/schemas/Pagination.yaml new file mode 100644 index 00000000..f3650fa6 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/Pagination.yaml @@ -0,0 +1,32 @@ +type: object +required: + - pageSize + - pageNumber + - hasPreviousPage + - hasNextPage + - items +properties: + pageSize: + type: integer + format: int32 + description: The number of items per page + example: 10 + pageNumber: + type: integer + format: int32 + description: The current page number + example: 1 + minimum: 1 + hasPreviousPage: + type: boolean + description: Whether there is a previous page + example: false + hasNextPage: + type: boolean + description: Whether there is a previous page + example: true + totalPages: + type: integer + format: int32 + description: Total number of pages + example: 8 diff --git a/tests/e2e/open-education-api-v5/schemas/Person.yaml b/tests/e2e/open-education-api-v5/schemas/Person.yaml new file mode 100644 index 00000000..5647c2e5 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/Person.yaml @@ -0,0 +1,3 @@ +allOf: + - $ref: '../schemas/PersonId.yaml' + - $ref: '../schemas/PersonProperties.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/PersonId.yaml b/tests/e2e/open-education-api-v5/schemas/PersonId.yaml new file mode 100644 index 00000000..d7ed81a6 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/PersonId.yaml @@ -0,0 +1,11 @@ +type: object +# description: ID of a person that has a relationship with this institution +properties: + personId: + type: string + description: Unique id of this person + format: uuid + example: 123e4567-e89b-12d3-a456-426614174000 +required: + - personId + \ No newline at end of file diff --git a/tests/e2e/open-education-api-v5/schemas/PersonProperties.yaml b/tests/e2e/open-education-api-v5/schemas/PersonProperties.yaml new file mode 100644 index 00000000..400e0929 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/PersonProperties.yaml @@ -0,0 +1,154 @@ +type: object +description: A person that has a relationship with this institution +required: + - givenName + - surname + - displayName + - affiliations + - mail + - primaryCode + - activeEnrollment +properties: + primaryCode: + description: The primary human readable identifier for the person. This is often the source identifier as defined by the institution. + $ref: './IdentifierEntry.yaml' + example: + codeType: studentNumber + code: 0000000 + # Returned by GET, not used in POST/PUT/PATCH + readOnly: true + givenName: + type: string + description: The first name of this person + maxLength: 256 + example: Maartje + surnamePrefix: + type: string + description: The prefix of the family name of this person + example: van + surname: + type: string + description: The family name of this person + maxLength: 256 + example: Damme + displayName: + type: string + description: The name of this person which will be displayed + maxLength: 256 + example: Maartje van Damme + initials: + type: string + description: The initials of this person + example: MCW + activeEnrollment: + type: boolean + description: Whether this person has an active enrollment. + example: false + dateOfBirth: + type: string + description: The date of birth of this person, RFC3339 (full-date) + format: date + example: '2003-09-30' + cityOfBirth: + type: string + description: The city of birth of this person + example: Utrecht + countryOfBirth: + type: string + description: The country of birth of this person the country code according to [iso-3166-1-alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) + example: NL + nationality: + type: string + description: The nationality of this person the nationality according to https://gist.github.com/zspine/2365808 + example: Dutch + dateOfNationality: + type: string + description: The date of nationality of this person, RFC3339 (full-date) + format: date + example: '2003-09-30' + affiliations: + $ref: '../enumerations/personAffiliations.yaml' + mail: + type: string + description: The primary e-mailaddress of this person + format: email + maxLength: 256 + example: vandamme.mcw@universiteitvanharderwijk.nl + secondaryMail: + type: string + description: The secondary e-mailaddress of this person + format: email + maxLength: 256 + example: poekie@xyz.nl + telephoneNumber: + type: string + description: The telephone number of this person + maxLength: 256 + example: +31 123 456 789 + mobileNumber: + type: string + description: The mobile number of this person + maxLength: 256 + example: +31 612 345 678 + photoSocial: + type: string + description: The url of the informal picture of this person + format: uri + maxLength: 2048 + example: https://upload.wikimedia.org/wikipedia/commons/thumb/d/d5/Placeholder_female_superhero_c.png/203px-Placeholder_female_superhero_c.png + photoOfficial: + type: string + description: The url of the official picture of this person + format: uri + maxLength: 2048 + example: https://upload.wikimedia.org/wikipedia/commons/6/66/Johannes_Vermeer_%281632-1675%29_-_The_Girl_With_The_Pearl_Earring_%281665%29.jpg + gender: + $ref: '../enumerations/gender.yaml' + titlePrefix: + type: string + description: A title prefix to be used for this person + example: drs + titleSuffix: + type: string + description: A title suffix to be used for this person + example: BSc + office: + type: string + description: The name of the office where this person is located + address: + $ref: './Address.yaml' + ICEName: + type: string + description: Full name of In Case of Emergency contact + maxLength: 256 + example: Janne + ICEPhoneNumber: + type: string + description: Phone number of In Case of Emergency contact + maxLength: 256 + example: +31 623 456 789 + ICERelation: + $ref: '../enumerations/ICERelationType.yaml' + languageOfChoice: + type: array + description: The language(s) of choice for this person, RFC3066 + items: + type: string + example: nl-NL + otherCodes: + type: array + description: An array of additional human readable codes/identifiers for the entity being described. + items: + $ref: './IdentifierEntry.yaml' + example: + - codeType: nationalIdentityNumber + code: '00000' + consumers: + description: The additional consumer elements that can be provided, see the [documentation on support for specific consumers](https://open-education-api.github.io/specification/#/consumers) for more information about this mechanism. + type: array + items: + $ref: './Consumer.yaml' + example: + $ref: '../consumers/TEST/V1/examples/TestConsumer.yaml' + ext: + $ref: './Ext.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/PostResponse.yaml b/tests/e2e/open-education-api-v5/schemas/PostResponse.yaml new file mode 100644 index 00000000..ca6b7e4a --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/PostResponse.yaml @@ -0,0 +1,18 @@ +type: object +description: A system message as a response to a POST message +required: + - message +properties: + message: + description: information displayed to user + type: array + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: Your enrollment was partly succesful, you have been placed on the waitinglist + redirect: + description: URL where additional information can be found e.g. by use of deeplink + type: string + format: uri \ No newline at end of file diff --git a/tests/e2e/open-education-api-v5/schemas/Problem.yaml b/tests/e2e/open-education-api-v5/schemas/Problem.yaml new file mode 100644 index 00000000..f1460c50 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/Problem.yaml @@ -0,0 +1,17 @@ +type: object +description: A system message including the error code and an explanation +required: + - status + - title +properties: + status: + type: string + description: The HTTP status code + example: '404' + title: + type: string + description: A short, human-readable summary of the problem type + example: Resource not found + detail: + type: string + description: A human-readable explanation specific to this occurrence of the problem diff --git a/tests/e2e/open-education-api-v5/schemas/Program.yaml b/tests/e2e/open-education-api-v5/schemas/Program.yaml new file mode 100644 index 00000000..d2170d0c --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/Program.yaml @@ -0,0 +1,12 @@ +allOf: + - $ref: '../schemas/ProgramId.yaml' + - $ref: '../schemas/ProgramProperties.yaml' + - properties: + validFrom: + description: The first day this program is valid (inclusive). + type: string + format: date + validTo: + description: The day this program ceases to be valid (e.g. exclusive). + type: string + format: date diff --git a/tests/e2e/open-education-api-v5/schemas/ProgramExpanded.yaml b/tests/e2e/open-education-api-v5/schemas/ProgramExpanded.yaml new file mode 100644 index 00000000..88f681d7 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/ProgramExpanded.yaml @@ -0,0 +1,10 @@ +allOf: + - $ref: './Program.yaml' + - type: object + description: These properties are only present when explicitly included. This allows for creating and displaying structures of programs + properties: + timelineOverrides: + description: Timeline overrides allow an implementation to provide versions of entities that will be valid in the future or have been in the past. + type: array + items: + $ref: './TimelineOverrideProgram.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/ProgramId.yaml b/tests/e2e/open-education-api-v5/schemas/ProgramId.yaml new file mode 100644 index 00000000..726364b1 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/ProgramId.yaml @@ -0,0 +1,11 @@ +type: object +description: A collection of courses that lead to a certifiable learning outcome +required: + - programId +properties: + programId: + type: string + description: Unique id for this program + format: uuid + example: 123e4567-e89b-12d3-a456-426614174000 + readOnly: true diff --git a/tests/e2e/open-education-api-v5/schemas/ProgramOffering.yaml b/tests/e2e/open-education-api-v5/schemas/ProgramOffering.yaml new file mode 100644 index 00000000..279aeaf5 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/ProgramOffering.yaml @@ -0,0 +1,74 @@ +allOf: + - $ref: './Offering.yaml' + - type: object + required: + - modeOfStudy + - startDate + - endDate + properties: + startDate: + type: string + description: The moment on which this offering starts, RFC3339 (full-date) + format: date + example: 2019-08-21 + endDate: + type: string + description: The moment on which this offering ends, RFC3339 (full-date) + format: date + example: 2023-06-15 + enrollStartDate: + type: string + description: The first day on which a student can enroll for this program. + format: date + example: 2019-05-01 + enrollEndDate: + type: string + description: The last day on which a student can enroll for this program. + format: date + example: 2019-08-01 + flexibleEntryPeriodStart: + type: string + description: If this is a program wherein participants can start at various moments, without missing anything, use this attribute in combination with `flexibleEntryPeriodEnd`. + format: date + flexibleEntryPeriodEnd: + type: string + description: If this is a program wherein participants can start at various moments, without missing anything, use this attribute in combination with `flexibleEntryPeriodStart`. + format: date + addresses: + type: array + description: Addresses for this offering + items: + $ref: './Address.yaml' + priceInformation: + type: array + description: Price information for this offering. + items: + $ref: './Cost.yaml' + minItems: 1 + program: + description: | + The Program that is offered in this programoffering. [`expandable`](#tag/program_model) + By default only the `programId` (a string) is returned. If the client requested an expansion of `program` the full program object should be returned. + oneOf: + - $ref: './Identifier.yaml' + title: programId + - $ref: './Program.yaml' + title: Program object + organization: + description: | + The organization that manages this programeoffering. [`expandable`](#tag/organization_model) + By default only the `organizationId` (a string) is returned. If the client requested an expansion of `organization` the full organization object should be returned. + oneOf: + - $ref: './Identifier.yaml' + title: organizationId + - $ref: './Organization.yaml' + title: Organization object + academicSession: + description: | + The academicsession during which this programoffering takes place. [`expandable`](#tag/academic_session_model) + By default only the `academicSessionId` (a string) is returned. If the client requested an expansion of `academicSession` the full academicsession object should be returned. + oneOf: + - $ref: './Identifier.yaml' + title: academicSessionId + - $ref: './AcademicSession.yaml' + title: AcademicSession object diff --git a/tests/e2e/open-education-api-v5/schemas/ProgramOfferingAssociation.yaml b/tests/e2e/open-education-api-v5/schemas/ProgramOfferingAssociation.yaml new file mode 100644 index 00000000..b750379f --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/ProgramOfferingAssociation.yaml @@ -0,0 +1,6 @@ +allOf: + - $ref: './Association.yaml' + - type: object + properties: + result: + $ref: './ProgramResult.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/ProgramOfferingAssociationExpandable.yaml b/tests/e2e/open-education-api-v5/schemas/ProgramOfferingAssociationExpandable.yaml new file mode 100644 index 00000000..5954b7f7 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/ProgramOfferingAssociationExpandable.yaml @@ -0,0 +1,9 @@ +allOf: + - $ref: './Association.yaml' + - type: object + properties: + result: + $ref: './ProgramResult.yaml' + person: + $ref: './PersonId.yaml' + diff --git a/tests/e2e/open-education-api-v5/schemas/ProgramOfferingAssociationExpanded.yaml b/tests/e2e/open-education-api-v5/schemas/ProgramOfferingAssociationExpanded.yaml new file mode 100644 index 00000000..e2e478d1 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/ProgramOfferingAssociationExpanded.yaml @@ -0,0 +1,12 @@ +allOf: + - $ref: './Association.yaml' + - type: object + properties: + result: + $ref: './ProgramResult.yaml' + person: + description: The person this association is to + $ref: './Person.yaml' + offering: + description: The offering this association is for + $ref: './Offering.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/ProgramProperties.yaml b/tests/e2e/open-education-api-v5/schemas/ProgramProperties.yaml new file mode 100644 index 00000000..879efd4b --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/ProgramProperties.yaml @@ -0,0 +1,195 @@ +type: object +description: A collection of courses that lead to a certifiable learning outcome +required: + - programType + - name + - abbreviation + - description + - primaryCode + - teachingLanguage +properties: + primaryCode: + description: The primary human readable identifier for the program. This is often the source identifier as defined by the institution. + $ref: './IdentifierEntry.yaml' + example: + codeType: programCode + code: BIO + readOnly: true + programType: + $ref: '../enumerations/programType.yaml' + name: + description: The name of this program + type: array + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: Biology + abbreviation: + type: string + description: The abbreviation of this program + maxLength: 256 + example: BIO + description: + type: array + description: The description of this program + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: The study of life + teachingLanguage: + type: string + description: The (primary) teaching language in which this program is given, should be a three-letter language code as specified by ISO 639-2. + minLength: 3 + maxLength: 3 + pattern: "^[a-z]{3}$" + example: nld + studyLoad: + $ref: './StudyLoadDescriptor.yaml' + qualificationAwarded: + $ref: '../enumerations/qualificationAwarded.yaml' + modeOfStudy: + $ref: '../enumerations/modeOfStudy.yaml' + modeOfDelivery: + $ref: '../enumerations/modesOfDelivery.yaml' + duration: + type: string + description: The duration of this program. The duration format is from the ISO 8601 ABNF as given in Appendix A of RFC 3339. + pattern: '^(-?)P(?=\d|T\d)(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)([DW]))?(?:T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+(?:\.\d+)?)S)?)?$' + example: P1DT30H4S + firstStartDate: + type: string + description: The date when participants can follow this program for the first time. + format: date + levelOfQualification: + $ref: '../enumerations/levelOfQualification.yaml' + level: + $ref: '../enumerations/level.yaml' + sector: + $ref: '../enumerations/sector.yaml' + fieldsOfStudy: + type: string + description: Field(s) of study (e.g. ISCED-F) (http://uis.unesco.org/sites/default/files/documents/isced-fields-of-education-and-training-2013-en.pdf. + maxLength: 4 + example: '0732' + enrollment: + type: array + items: + $ref: './LanguageTypedString.yaml' + description: The extra information that is provided for enrollment + example: + - language: en-GB + value: enrollment through SIS. [The limited implementation of Git Hub Markdown syntax](#tag/formatting-and-displaying-results-from-API) MAY be used for rich text representation. + resources: + type: array + description: An overview of the literature and other resources that is used in this course (ECTS-recommended reading and other sources) + items: + type: string + example: ['book to be announced', 'on-line resource x'] + learningOutcomes: + type: array + description: List of learning outcomes at program level. It is advisable to limit the number of learning outcomes to approximately 20. It is also advisable to make sure that the program learning outcomes in the course catalogue correspond with those on the Diploma Supplement. + items: + type: array + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: 'Executable knowledge of research methods, including: Acquire knowledge of HCI research paradigms.' + assessment: + type: array + description: A description of the way exams for this course are taken (ECTS-assessment method and criteria). + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: Exam on campus + admissionRequirements: + type: array + description: This information may be given at an institutional level and/or at the level of individual programmes. Make sure that it is clear whether the information applies to fee-paying students (national and/or international) or to exchange students. + example: + - language: en-GB + value: Students need to be enrolled at qualifying institutions of higher education that participate in this alliance + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + qualificationRequirements: + type: array + description: Normally, students will receive a diploma when they have completed the (official) study program and have obtained the required number of credits. If there are any other specific requirements that students need to have fulfilled, mention them here. + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + link: + type: string + description: URL of the program's website + format: uri + maxLength: 2048 + example: https://bijvak.nl + educationSpecification: + description: The educationSpecification of which this program is a more concrete implementation. [`expandable`](#tag/education_specification_model) + oneOf: + - $ref: './Identifier.yaml' + title: educationSpecificationId + - $ref: './EducationSpecification.yaml' + title: EducationSpecification + otherCodes: + type: array + description: An array of additional human readable codes/identifiers for the entity being described. + items: + $ref: './IdentifierEntry.yaml' + example: + - codeType: crohoCreboCode + code: '59312' + addresses: + type: array + description: Addresses for this program + items: + $ref: './Address.yaml' + parent: + description: Parent program of which the current program is a child. This object is [`expandable`](#tag/program_model) + oneOf: + - $ref: './Identifier.yaml' + title: programId + - $ref: './Program.yaml' + title: Expanded Program + children: + type: array + description: Programs which are a part of this program (e.g specializations). This object is [`expandable`](#tag/program_model) + items: + oneOf: + - $ref: './Identifier.yaml' + title: programId + - $ref: './Program.yaml' + title: Expanded Program + coordinators: + description: The person(s) responsible for this program. This object is [`expandable`](#tag/person_model) + type: array + items: + oneOf: + - $ref: './Identifier.yaml' + title: personId + - $ref: './Person.yaml' + title: Person object + organization: + description: | + The organization providing this program. [`expandable`](#tag/organization_model) + By default only the `organizationId` (a string) is returned. If the client requested an expansion of `organization` the full organization object should be returned. + oneOf: + - $ref: './Identifier.yaml' + title: organizationId + - $ref: './Organization.yaml' + title: Organization object + consumers: + description: The additional consumer elements that can be provided, see the [documentation on support for specific consumers](https://open-education-api.github.io/specification/#/consumers) for more information about this mechanism. + type: array + items: + $ref: './Consumer.yaml' + example: + $ref: '../consumers/RIO/V1/examples/Program.yaml' + ext: + $ref: './Ext.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/ProgramResult.yaml b/tests/e2e/open-education-api-v5/schemas/ProgramResult.yaml new file mode 100644 index 00000000..a3f169e9 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/ProgramResult.yaml @@ -0,0 +1,8 @@ +allOf: + - $ref: './Result.yaml' + - type: object + required: + - studyLoad + properties: + studyLoad: + $ref: './StudyLoadDescriptor.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/Result.yaml b/tests/e2e/open-education-api-v5/schemas/Result.yaml new file mode 100644 index 00000000..0e905e37 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/Result.yaml @@ -0,0 +1,25 @@ +type: object +description: A result as part of an association +required: + - state + - resultDate +properties: + state: + $ref: '../enumerations/resultState.yaml' +# added state based on request by CACI + pass: + $ref: '../enumerations/passState.yaml' + comment: + type: string + description: The comment on this result + score: + type: string + description: The score of this program/course/component association (based on resultValueType in offering) + example: '9' + resultDate: + type: string + description: The date this result has been published, RFC3339 (full-date) + format: date + example: 2020-09-28 + ext: + $ref: './Ext.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/Room.yaml b/tests/e2e/open-education-api-v5/schemas/Room.yaml new file mode 100644 index 00000000..d90382a1 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/Room.yaml @@ -0,0 +1,100 @@ +type: object +description: An area within a building where education can take place +required: + - roomId + - roomType + - name + - primaryCode +properties: + roomId: + type: string + description: Unique id for this room + format: uuid + example: 123e4567-e89b-12d3-a456-332114174000 + primaryCode: + description: The primary human readable identifier for the room. This is often the source identifier as defined by the institution. + $ref: './IdentifierEntry.yaml' + example: + codeType: roomCode + code: Bb4.54 + roomType: + $ref: '../enumerations/roomType.yaml' + abbreviation: + type: string + description: The abbreviation of the name of this room + maxLength: 256 + example: Bb4.54 + name: + type: array + description: The name of this room + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: Beatrix building room 4.54 + description: + type: array + description: The description of this room. [The limited implementation of Git Hub Markdown syntax](#tag/formatting-and-displaying-results-from-API) MAY be used for rich text representation. + minItems: 1 + items: + $ref: './LanguageTypedString.yaml' + example: + - language: en-GB + value: External education and exam room 4.54 + totalSeats: + type: integer + format: int32 + description: The total number of seats located in the room + example: 300 + availableSeats: + type: integer + format: int32 + description: The total number of available (=non-reserved) seats in the room + example: 200 + floor: + type: string + description: The floor on which this room is located + example: '4' + wing: + type: string + description: The wing in which this room is located + example: None + geolocation: + type: object + description: Geolocation of the entrance of this room (WGS84 coordinate reference system) + required: + - latitude + - longitude + properties: + latitude: + type: number + format: double + example: 52.088255 + longitude: + type: number + format: double + example: 5.106669 + otherCodes: + type: array + description: An array of additional human readable codes/identifiers for the entity being described. + items: + $ref: './IdentifierEntry.yaml' + building: + description: | + The building in which the room is located. [`expandable`](#tag/building_model) + By default only the `buildingId` (a string) is returned. If the client requested an expansion of `building` the full building object should be returned. + oneOf: + - $ref: './Identifier.yaml' + title: buildingId + - $ref: './Building.yaml' + title: Building object + consumers: + description: The additional consumer elements that can be provided, see the [documentation on support for specific consumers](https://open-education-api.github.io/specification/#/consumers) for more information about this mechanism. + type: array + items: + $ref: './Consumer.yaml' + example: + $ref: '../consumers/TEST/V1/examples/TestConsumer.yaml' + ext: + $ref: './Ext.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/Service.yaml b/tests/e2e/open-education-api-v5/schemas/Service.yaml new file mode 100644 index 00000000..4eee321e --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/Service.yaml @@ -0,0 +1,34 @@ +type: object +description: A metadataset providing details on the provider of this OOAPI implementation +required: + - contactEmail + - specification + - documentation +properties: + contactEmail: + type: string + description: Contact e-mail address of the service owner + format: email + maxLength: 256 + example: admin@universiteitvanharderwijk.nl + specification: + type: string + description: URL of the API specification (YAML or JSON, compliant with [Open API Specification v3](https://github.com/OAI/OpenAPI-Specification/)) + format: uri + maxLength: 2048 + example: https://rawgit.com/open-education-api/specification/v3/docs.html#tag/course-offerings/paths/~1course-offerings/get + documentation: + type: string + description: URL of the API documentation, including general terms and privacy statement + format: uri + maxLength: 2048 + example: https://open-education-api.github.io/specification/v4/docs.html + consumers: + description: The additional consumer elements that can be provided, see the [documentation on support for specific consumers](https://open-education-api.github.io/specification/#/consumers) for more information about this mechanism. + type: array + items: + $ref: './Consumer.yaml' + example: + $ref: '../consumers/TEST/V1/examples/TestConsumer.yaml' + ext: + $ref: './Ext.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/StudyLoadDescriptor.yaml b/tests/e2e/open-education-api-v5/schemas/StudyLoadDescriptor.yaml new file mode 100644 index 00000000..3bbc5a86 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/StudyLoadDescriptor.yaml @@ -0,0 +1,26 @@ +type: object +description: The amount of effort to complete this education in the specified unit. +properties: + studyLoadUnit: + description: | + The unit in which the studyload is specfied + - contacttime: CONTACTUUR amount of time spent in classes + - ects: ECTS_PUNT European Credit Transfer System + - sbu: SBU studentloadhours + - sp: STUDIEPUNT studentpoints + - hour: UUR hours + type: string + enum: + - contacttime + - ects + - sbu + - sp + - hour + example: ects + value: + description: The amount of load depicted in numbers + type: number + example: 3 +example: + studyLoadUnit: ects + value: 3 diff --git a/tests/e2e/open-education-api-v5/schemas/TimelineOverrideCourse.yaml b/tests/e2e/open-education-api-v5/schemas/TimelineOverrideCourse.yaml new file mode 100644 index 00000000..3c99d457 --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/TimelineOverrideCourse.yaml @@ -0,0 +1,18 @@ +type: object +required: + - validFrom + - course +description: A timeline override of the course. +properties: + validFrom: + type: string + description: The day on which this timelineOverride starts (inclusive), RFC3339 (date) + format: date + example: '2021-09-01' + validTo: + type: string + description: The day on which this timelineOverride ends (exclusive), RFC3339 (date) + format: date + example: '2022-08-31' + course: + $ref: './CourseProperties.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/TimelineOverrideEducationSpecification.yaml b/tests/e2e/open-education-api-v5/schemas/TimelineOverrideEducationSpecification.yaml new file mode 100644 index 00000000..b332943a --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/TimelineOverrideEducationSpecification.yaml @@ -0,0 +1,18 @@ +type: object +description: A timeline override of the EducationSpecification. +required: + - validFrom + - educationSpecification +properties: + validFrom: + type: string + description: The day on which this timelineOverride starts (inclusive), RFC3339 (date) + format: date + example: '2021-09-01' + validTo: + type: string + description: The day on which this timelineOverride ends (exclusive), RFC3339 (date) + format: date + example: '2022-08-31' + educationSpecification: + $ref: './EducationSpecificationProperties.yaml' diff --git a/tests/e2e/open-education-api-v5/schemas/TimelineOverrideProgram.yaml b/tests/e2e/open-education-api-v5/schemas/TimelineOverrideProgram.yaml new file mode 100644 index 00000000..85678f6a --- /dev/null +++ b/tests/e2e/open-education-api-v5/schemas/TimelineOverrideProgram.yaml @@ -0,0 +1,18 @@ +type: object +description: A time-line override of the program. +required: + - validFrom + - program +properties: + validFrom: + type: string + description: The day on which this timelineOverride starts (inclusive), RFC3339 (date) + format: date + example: '2021-09-01' + validTo: + type: string + description: The day on which this timelineOverride ends (exclusive), RFC3339 (date) + format: date + example: '2022-08-31' + program: + $ref: './ProgramProperties.yaml' diff --git a/tests/e2e/open-education-api-v5/spec.yaml b/tests/e2e/open-education-api-v5/spec.yaml new file mode 100644 index 00000000..36821de4 --- /dev/null +++ b/tests/e2e/open-education-api-v5/spec.yaml @@ -0,0 +1,355 @@ +openapi: "3.0.3" +info: + version: "5.0.0" + title: Open Education API + description: | + OpenAPI (fka Swagger) specification for the Open Education API. + +
+ + OOAPI information model that feeds OOAPI specification + +
OOAPI information model that feeds OOAPI specification (click to enlage)
+
+ + The model provides an overview of how the objects on which the API is specified are related. The overarching concept educations is not found in the in the end points of the API. The smaller concepts of programOffering, courseOffering and conceptOffering are all found in the offering endpoint. The different types of association can all be found in the association endpoint. + + The original file for this model can be found here + + The program relations object is not found as a separate endpoint but relations between programs can be found within the program endpoint by expanding that endpoint. + + Information about earlier meetings and presentations can be found here + + Information on the EDU-API model that was also used for this api is shown here + + + + x-logo: + url: ../logo.png + +servers: + - url: http://demo01.eduapi.nl/v5 + description: SURF demo implementation + +tags: + - name: service metadata + description: The service API provides additional metadata needed to make the OOAPI fit for this organization. + - name: academic sessions + description: The academic sessions API provides information about the different time periods a program can be offered. + - name: associations + description: | + The associations API provides information about the association between an offering and a person (e.g. students, lecturers, etc). + Associations can be posted between institutions This requires information details on the offering and the persons. + To allow for this information a complete person object and offering object can be part of the API. + The structure is explained in the following model: + + + + + + + + + + + + + + + + + + + + + +
offering
studentexternal
internalPOST /associations/external/me gets student details from .wellknown at home institution. It passes offering details (provided by external institution) to the home institution so the home institution can create a placeholder for the offering and its results. +
externalno support needed
+ Direct update of current information: PATCH /associations/{associationId} + This call is currently limited to passing results and a remote state. For future use other association resource information could be passed. + More information on the support for student mobility can be found + here + + - name: buildings + description: The building API provides a building that is currently used by the organization. Including all location details. + - name: courses + description: The courses API provides a self-contained and formally structured learning experience. Aimed at providing learning outcomes to students. Usually placed in the context of a program. + - name: components + description: The components API provides information about components being part of parent courses. + - name: education specifications + description: | + The education specification API provides information on the specification of an education object. + This specification allows for other education objects to be derived from it. + It is used to aggregate education objects from a supplying institution. + It clusters programs to a main educationSpecification that is used in registries such as RIO. + - name: groups + description: The groups API provides information about groups that are related to organizations, persons and offerings. Groups of students that are related to an offering are typically used for rostering. The rostering application assigns students based on these groups. For example, class 1b will be assigned to the course offering on monday morning. Not all groups are related to an offering. A group of people can also be a team that is working on a task outside the OOAPI scope. These can be teams of students, but also teams of employees. + - name: news + description: The news API provides news feeds and items regarding a specific subject. + - name: offerings + description: The offerings API provides information about offerings which have a global timeframe, e.g. a period to which students can enroll. + - name: organizations + description: The organizations API provides the organizations that are responsible for the execution and recognition of education. + - name: persons + description: The persons API provides information about persons related to an organization. + - name: programs + description: The programs API provides a coherent set of educational components, aimed at the realization of competences or objectives in the field of knowledge, insight, attitudes and skills that the person who completes the program must have. + - name: rooms + description: The rooms API provides the part of a building where an activity can take place. Including detail information on the resources available, number of seats, etc. (Updated continuously) + + - name: service_model + x-displayName: Service + description: | + + - name: education_specification_model + x-displayName: EducationSpecification + description: | + + - name: program_model + x-displayName: Program + description: | + + - name: course_model + x-displayName: Course + description: | + + - name: component_model + x-displayName: Component + description: | + + - name: program_offering_model + x-displayName: ProgramOffering + description: | + + - name: course_offering_model + x-displayName: CourseOffering + description: | + + - name: component_offering_model + x-displayName: ComponentOffering + description: | + + - name: association_model + x-displayName: Association + description: | + + - name: person_model + x-displayName: Person + description: | + + - name: group_model + x-displayName: Group + description: | + + - name: academic_session_model + x-displayName: AcademicSession + description: | + + - name: organization_model + x-displayName: Organization + description: | + + - name: building_model + x-displayName: Building + description: | + + - name: room_model + x-displayName: Room + description: | + + - name: news_feed_model + x-displayName: NewsFeed + description: | + + - name: news_item_model + x-displayName: NewsItem + description: | + + +x-tagGroups: + - name: Requests and respones + tags: + - service metadata + - academic sessions + - associations + - buildings + - courses + - components + - education specifications + - groups + - news + - offerings + - organizations + - persons + - programs + - rooms + - name: Models + tags: + - service_model + - academic_session_model + - association_model + - building_model + - component_model + - component_offering_model + - course_model + - course_offering_model + - education_specification_model + - group_model + - news_feed_model + - news_item_model + - organization_model + - person_model + - program_model + - program_offering_model + - room_model + +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + openId: + type: openIdConnect + openIdConnectUrl: https://example.nl/.well-known/openid-configuration + schemas: + # allOf: + # - $ref: 'schemas/Service.yaml' + # - $ref: schemas/AcademicSession.yaml + # - $ref: schemas/Building.yaml + # - $ref: schemas/Component.yaml + # - $ref: schemas/ComponentOffering.yaml + # - $ref: schemas/Course.yaml + # - $ref: schemas/CourseOffering.yaml + # - $ref: schemas/EducationSpecification.yaml + # - $ref: schemas/Group.yaml + # - $ref: schemas/NewsFeed.yaml + # - $ref: schemas/NewsItem.yaml + # - $ref: schemas/Organization.yaml + # - $ref: schemas/Person.yaml + # - $ref: schemas/Program.yaml + # - $ref: schemas/ProgramOffering.yaml + # - $ref: schemas/Room.yaml + # - $ref: schemas/AssociationFull.yaml + +paths: + /: + $ref: paths/Service.yaml + /persons: + $ref: paths/PersonCollection.yaml + /persons/me: + $ref: paths/PersonMe.yaml + /persons/{personId}: + $ref: paths/PersonInstance.yaml + /persons/{personId}/associations: + $ref: paths/PersonAssociationCollection.yaml + /persons/{personId}/groups: + $ref: paths/PersonGroupCollection.yaml + /organizations: + $ref: paths/OrganizationCollection.yaml + /organizations/{organizationId}: + $ref: paths/OrganizationInstance.yaml + /organizations/{organizationId}/programs: + $ref: paths/OrganizationProgramCollection.yaml + /organizations/{organizationId}/courses: + $ref: paths/OrganizationCourseCollection.yaml + /organizations/{organizationId}/components: + $ref: paths/OrganizationComponentCollection.yaml + /organizations/{organizationId}/offerings: + $ref: paths/OrganizationOfferingCollection.yaml + /organizations/{organizationId}/groups: + $ref: paths/OrganizationGroupCollection.yaml + /organizations/{organizationId}/education-specifications: + $ref: paths/OrganizationEducationSpecificationCollection.yaml + /academic-sessions: + $ref: paths/AcademicSessionCollection.yaml + /academic-sessions/{academicSessionId}: + $ref: paths/AcademicSessionInstance.yaml + /academic-sessions/{academicSessionId}/offerings: + $ref: paths/AcademicSessionOfferingCollection.yaml + /programs: + $ref: paths/ProgramCollection.yaml + /programs/{programId}: + $ref: paths/ProgramInstance.yaml + /programs/{programId}/programs: + $ref: paths/ProgramProgramCollection.yaml + /programs/{programId}/courses: + $ref: paths/ProgramCourseCollection.yaml + /programs/{programId}/offerings: + $ref: paths/ProgramOfferingCollection.yaml + /courses: + $ref: paths/CourseCollection.yaml + /courses/{courseId}: + $ref: paths/CourseInstance.yaml + /courses/{courseId}/components: + $ref: paths/CourseComponentCollection.yaml + /courses/{courseId}/offerings: + $ref: paths/CourseOfferingCollection.yaml + /components/{componentId}: + $ref: paths/ComponentInstance.yaml + /components/{componentId}/offerings: + $ref: paths/ComponentOfferingCollection.yaml + /offerings/{offeringId}: + $ref: paths/OfferingInstance.yaml + /offerings/{offeringId}/associations: + $ref: paths/OfferingAssociationCollection.yaml + # /offerings/{offeringId}/associations/me: + # $ref: paths/OfferingAssociationInstanceMe.yaml + /offerings/{offeringId}/groups: + $ref: paths/OfferingGroupCollection.yaml + /associations/{associationId}: + $ref: paths/AssociationInstance.yaml + # /associations/me: + # $ref: paths/AssociationInstanceMe.yaml + /associations/external/me: + $ref: paths/AssociationInstanceExternalMe.yaml + /buildings: + $ref: paths/BuildingCollection.yaml + /buildings/{buildingId}: + $ref: paths/BuildingInstance.yaml + /buildings/{buildingId}/rooms: + $ref: paths/BuildingRoomCollection.yaml + /rooms: + $ref: paths/RoomCollection.yaml + /rooms/{roomId}: + $ref: paths/RoomInstance.yaml + /news-feeds: + $ref: paths/NewsFeedCollection.yaml + /news-feeds/{newsFeedId}: + $ref: paths/NewsFeedInstance.yaml + /news-feeds/{newsFeedId}/news-items: + $ref: paths/NewsFeedItemCollection.yaml + /news-items/{newsItemId}: + $ref: paths/NewsItemInstance.yaml + /education-specifications: + $ref: paths/EducationSpecificationCollection.yaml + /education-specifications/{educationSpecificationId}: + $ref: paths/EducationSpecificationInstance.yaml + /education-specifications/{educationSpecificationId}/education-specifications: + $ref: paths/EducationSpecificationEducationSpecificationCollection.yaml + /education-specifications/{educationSpecificationId}/courses: + $ref: paths/EducationSpecificationCourseCollection.yaml + /education-specifications/{educationSpecificationId}/programs: + $ref: paths/EducationSpecificationProgramCollection.yaml + /groups: + $ref: paths/GroupCollection.yaml + /groups/{groupId}: + $ref: paths/GroupInstance.yaml + /groups/{groupId}/persons: + $ref: paths/GroupPersonCollection.yaml diff --git a/tests/e2e/original/App/OpenApi/Entity/AcademicSession.php b/tests/e2e/original/App/OpenApi/Entity/AcademicSession.php new file mode 100644 index 00000000..9384ed84 --- /dev/null +++ b/tests/e2e/original/App/OpenApi/Entity/AcademicSession.php @@ -0,0 +1,270 @@ +id; + } + + public function getAcademicSessionId(): AcademicSession + { + return $this->academicSessionId; + } + + public function setAcademicSessionType(string $academicSessionType): void + { + $this->academicSessionType = $academicSessionType; + } + + public function getAcademicSessionType(): string + { + return $this->academicSessionType; + } + + public function setPrimaryCode(string $primaryCode): void + { + $this->primaryCode = $primaryCode; + } + + public function getPrimaryCode(): string + { + return $this->primaryCode; + } + + public function addName(string $name): void + { + $this->name[] = $name; + } + + public function removeName(string $name): void + { + if (false !== $key = array_search($name, $this->name, true)) { + unset($this->name[$key]); + } + } + + public function getName(): array + { + return $this->name; + } + + public function setStartDate(\DateTimeInterface $startDate): void + { + $this->startDate = $startDate; + } + + public function getStartDate(): \DateTimeInterface + { + return $this->startDate; + } + + public function setEndDate(\DateTimeInterface $endDate): void + { + $this->endDate = $endDate; + } + + public function getEndDate(): \DateTimeInterface + { + return $this->endDate; + } + + public function setParent(string $parent): void + { + $this->parent = $parent; + } + + public function getParent(): string + { + return $this->parent; + } + + public function addChild(string $child): void + { + $this->children[] = $child; + } + + public function removeChild(string $child): void + { + if (false !== $key = array_search($child, $this->children, true)) { + unset($this->children[$key]); + } + } + + /** + * @return (uuid|object)[] + */ + public function getChildren(): array + { + return $this->children; + } + + public function setYear(string $year): void + { + $this->year = $year; + } + + public function getYear(): string + { + return $this->year; + } + + public function addOtherCod(string $otherCod): void + { + $this->otherCodes[] = $otherCod; + } + + public function removeOtherCod(string $otherCod): void + { + if (false !== $key = array_search($otherCod, $this->otherCodes, true)) { + unset($this->otherCodes[$key]); + } + } + + public function getOtherCodes(): array + { + return $this->otherCodes; + } + + public function addConsumer(string $consumer): void + { + $this->consumers[] = $consumer; + } + + public function removeConsumer(string $consumer): void + { + if (false !== $key = array_search($consumer, $this->consumers, true)) { + unset($this->consumers[$key]); + } + } + + public function getConsumers(): array + { + return $this->consumers; + } + + public function setExt(string $ext): void + { + $this->ext = $ext; + } + + public function getExt(): string + { + return $this->ext; + } +} diff --git a/tests/e2e/original/App/OpenApi/Entity/Association.php b/tests/e2e/original/App/OpenApi/Entity/Association.php new file mode 100644 index 00000000..c1c52a39 --- /dev/null +++ b/tests/e2e/original/App/OpenApi/Entity/Association.php @@ -0,0 +1,192 @@ +id; + } + + public function getAssociationId(): Association + { + return $this->associationId; + } + + public function getAssociationType(): string + { + return $this->associationType; + } + + public function setRole(string $role): void + { + $this->role = $role; + } + + public function getRole(): string + { + return $this->role; + } + + public function setState(string $state): void + { + $this->state = $state; + } + + public function getState(): string + { + return $this->state; + } + + public function setRemoteState(string $remoteState): void + { + $this->remoteState = $remoteState; + } + + public function getRemoteState(): string + { + return $this->remoteState; + } + + public function addConsumer(string $consumer): void + { + $this->consumers[] = $consumer; + } + + public function removeConsumer(string $consumer): void + { + if (false !== $key = array_search($consumer, $this->consumers, true)) { + unset($this->consumers[$key]); + } + } + + public function getConsumers(): array + { + return $this->consumers; + } + + public function setExt(string $ext): void + { + $this->ext = $ext; + } + + public function getExt(): string + { + return $this->ext; + } + + public function setResult(string $result): void + { + $this->result = $result; + } + + public function getResult(): string + { + return $this->result; + } + + public function getPerson(): Person + { + return $this->person; + } + + public function setOffering(Offering $offering): void + { + $this->offering = $offering; + } + + public function getOffering(): Offering + { + return $this->offering; + } +} diff --git a/tests/e2e/original/App/OpenApi/Entity/Pet.php b/tests/e2e/original/App/OpenApi/Entity/Pet.php index 705897cc..e7b46b7b 100644 --- a/tests/e2e/original/App/OpenApi/Entity/Pet.php +++ b/tests/e2e/original/App/OpenApi/Entity/Pet.php @@ -33,13 +33,12 @@ class Pet /** * @var string[] */ + #[ORM\Column(type: 'json')] #[ApiProperty] #[Assert\NotNull] private array $photoUrls = []; - /** - * @var string[] - */ + #[ORM\Column(type: 'json')] #[ApiProperty] #[Assert\NotNull] private array $tags = []; @@ -110,9 +109,6 @@ public function removeTag(string $tag): void } } - /** - * @return string[] - */ public function getTags(): array { return $this->tags; diff --git a/tests/e2e/schema_open_education_api.yml b/tests/e2e/schema_open_education_api.yml new file mode 100644 index 00000000..2dc75f83 --- /dev/null +++ b/tests/e2e/schema_open_education_api.yml @@ -0,0 +1,7 @@ +namespaces: + entity: App\OpenApi\Entity + enum: App\OpenApi\Enum + interface: App\OpenApi\Model + +openApi: + file: './open-education-api-v5/spec.yaml'