ov-components: Added unit tests

pull/848/head
Carlos Santos 2024-10-10 20:30:02 +02:00
parent 9a7a2e3adb
commit 52422fb58a
55 changed files with 680 additions and 2356 deletions

View File

@ -31,14 +31,12 @@
"@angular/compiler-cli": "18.2.5",
"@angular/elements": "18.2.5",
"@compodoc/compodoc": "^1.1.25",
"@types/chai": "4.3.19",
"@types/dom-mediacapture-transform": "0.1.9",
"@types/dom-webcodecs": "0.1.11",
"@types/mocha": "9.1.1",
"@types/jasmine": "^5.1.4",
"@types/node": "20.12.14",
"@types/selenium-webdriver": "4.1.16",
"@types/ws": "^8.5.12",
"chai": "4.3.10",
"chromedriver": "129.0.0",
"concat": "^1.0.3",
"cross-env": "^7.0.3",
@ -58,7 +56,6 @@
"karma-mocha-reporter": "2.2.5",
"karma-notify-reporter": "1.3.0",
"lint-staged": "^15.2.10",
"mocha": "9.2.2",
"ng-packagr": "18.2.1",
"npm-watch": "^0.13.0",
"prettier": "3.3.3",
@ -4842,12 +4839,6 @@
"@types/node": "*"
}
},
"node_modules/@types/chai": {
"version": "4.3.19",
"resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.19.tgz",
"integrity": "sha512-2hHHvQBVE2FiSK4eN0Br6snX9MtolHaTo/batnLjlGRhoQzlCL61iVpxoqO7SfFyOw+P/pwv+0zNHzKoGWz9Cw==",
"dev": true
},
"node_modules/@types/connect": {
"version": "3.4.38",
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
@ -4942,6 +4933,12 @@
"@types/node": "*"
}
},
"node_modules/@types/jasmine": {
"version": "5.1.4",
"resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-5.1.4.tgz",
"integrity": "sha512-px7OMFO/ncXxixDe1zR13V1iycqWae0MxTaw62RpFlksUi5QuNWgQJFkTQjIOvrmutJbI7Fp2Y2N1F6D2R4G6w==",
"dev": true
},
"node_modules/@types/json-schema": {
"version": "7.0.15",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
@ -4954,12 +4951,6 @@
"integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
"dev": true
},
"node_modules/@types/mocha": {
"version": "9.1.1",
"resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz",
"integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==",
"dev": true
},
"node_modules/@types/mute-stream": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz",
@ -5084,12 +5075,6 @@
"@types/node": "*"
}
},
"node_modules/@ungap/promise-all-settled": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
"integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
"dev": true
},
"node_modules/@vitejs/plugin-basic-ssl": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz",
@ -5587,15 +5572,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/assertion-error": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
"integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
"dev": true,
"engines": {
"node": "*"
}
},
"node_modules/ast-types": {
"version": "0.13.4",
"resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz",
@ -5983,12 +5959,6 @@
"base64-js": "^1.1.2"
}
},
"node_modules/browser-stdout": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
"dev": true
},
"node_modules/browserslist": {
"version": "4.23.3",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
@ -6159,18 +6129,6 @@
"node": ">=6"
}
},
"node_modules/camelcase": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
"integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"dev": true,
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001663",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz",
@ -6191,24 +6149,6 @@
}
]
},
"node_modules/chai": {
"version": "4.3.10",
"resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz",
"integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==",
"dev": true,
"dependencies": {
"assertion-error": "^1.1.0",
"check-error": "^1.0.3",
"deep-eql": "^4.1.3",
"get-func-name": "^2.0.2",
"loupe": "^2.3.6",
"pathval": "^1.1.1",
"type-detect": "^4.0.8"
},
"engines": {
"node": ">=4"
}
},
"node_modules/chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
@ -6229,18 +6169,6 @@
"integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
"dev": true
},
"node_modules/check-error": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz",
"integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==",
"dev": true,
"dependencies": {
"get-func-name": "^2.0.2"
},
"engines": {
"node": "*"
}
},
"node_modules/cheerio": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0.tgz",
@ -7285,30 +7213,6 @@
"callsite": "^1.0.0"
}
},
"node_modules/decamelize": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
"integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
"dev": true,
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/deep-eql": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz",
"integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==",
"dev": true,
"dependencies": {
"type-detect": "^4.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/deep-equal": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz",
@ -7627,15 +7531,6 @@
"integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==",
"dev": true
},
"node_modules/diff": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
"integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
"dev": true,
"engines": {
"node": ">=0.3.1"
}
},
"node_modules/dns-packet": {
"version": "5.6.1",
"resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz",
@ -8960,6 +8855,7 @@
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
"integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
"dev": true,
"peer": true,
"dependencies": {
"locate-path": "^6.0.0",
"path-exists": "^4.0.0"
@ -9208,15 +9104,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/get-func-name": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
"integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
"dev": true,
"engines": {
"node": "*"
}
},
"node_modules/get-intrinsic": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
@ -9408,15 +9295,6 @@
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"dev": true
},
"node_modules/growl": {
"version": "1.10.5",
"resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
"integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
"dev": true,
"engines": {
"node": ">=4.x"
}
},
"node_modules/growly": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
@ -11892,6 +11770,7 @@
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
"integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
"dev": true,
"peer": true,
"dependencies": {
"p-locate": "^5.0.0"
},
@ -12111,15 +11990,6 @@
"integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==",
"dev": true
},
"node_modules/loupe": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz",
"integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==",
"dev": true,
"dependencies": {
"get-func-name": "^2.0.1"
}
},
"node_modules/lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
@ -12579,350 +12449,6 @@
"mkdirp": "bin/cmd.js"
}
},
"node_modules/mocha": {
"version": "9.2.2",
"resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz",
"integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==",
"dev": true,
"dependencies": {
"@ungap/promise-all-settled": "1.1.2",
"ansi-colors": "4.1.1",
"browser-stdout": "1.3.1",
"chokidar": "3.5.3",
"debug": "4.3.3",
"diff": "5.0.0",
"escape-string-regexp": "4.0.0",
"find-up": "5.0.0",
"glob": "7.2.0",
"growl": "1.10.5",
"he": "1.2.0",
"js-yaml": "4.1.0",
"log-symbols": "4.1.0",
"minimatch": "4.2.1",
"ms": "2.1.3",
"nanoid": "3.3.1",
"serialize-javascript": "6.0.0",
"strip-json-comments": "3.1.1",
"supports-color": "8.1.1",
"which": "2.0.2",
"workerpool": "6.2.0",
"yargs": "16.2.0",
"yargs-parser": "20.2.4",
"yargs-unparser": "2.0.0"
},
"bin": {
"_mocha": "bin/_mocha",
"mocha": "bin/mocha"
},
"engines": {
"node": ">= 12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/mochajs"
}
},
"node_modules/mocha/node_modules/ansi-colors": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
"integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/mocha/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/mocha/node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/mocha/node_modules/chalk/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/mocha/node_modules/chokidar": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
"dev": true,
"funding": [
{
"type": "individual",
"url": "https://paulmillr.com/funding/"
}
],
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
"glob-parent": "~5.1.2",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.6.0"
},
"engines": {
"node": ">= 8.10.0"
},
"optionalDependencies": {
"fsevents": "~2.3.2"
}
},
"node_modules/mocha/node_modules/cliui": {
"version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
"integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
"dev": true,
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
"wrap-ansi": "^7.0.0"
}
},
"node_modules/mocha/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/mocha/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/mocha/node_modules/debug": {
"version": "4.3.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
"integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
"dev": true,
"dependencies": {
"ms": "2.1.2"
},
"engines": {
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"node_modules/mocha/node_modules/debug/node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
"node_modules/mocha/node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true
},
"node_modules/mocha/node_modules/escape-string-regexp": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"dev": true,
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/mocha/node_modules/glob": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
"integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
"deprecated": "Glob versions prior to v9 are no longer supported",
"dev": true,
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
},
"engines": {
"node": "*"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/mocha/node_modules/glob/node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
"dependencies": {
"brace-expansion": "^1.1.7"
},
"engines": {
"node": "*"
}
},
"node_modules/mocha/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/mocha/node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/mocha/node_modules/log-symbols": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
"integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
"dev": true,
"dependencies": {
"chalk": "^4.1.0",
"is-unicode-supported": "^0.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/mocha/node_modules/minimatch": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz",
"integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==",
"dev": true,
"dependencies": {
"brace-expansion": "^1.1.7"
},
"engines": {
"node": ">=10"
}
},
"node_modules/mocha/node_modules/serialize-javascript": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
"integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
"dev": true,
"dependencies": {
"randombytes": "^2.1.0"
}
},
"node_modules/mocha/node_modules/string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/mocha/node_modules/supports-color": {
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
"node_modules/mocha/node_modules/wrap-ansi": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"node_modules/mocha/node_modules/yargs": {
"version": "16.2.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
"integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
"dev": true,
"dependencies": {
"cliui": "^7.0.2",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
"string-width": "^4.2.0",
"y18n": "^5.0.5",
"yargs-parser": "^20.2.2"
},
"engines": {
"node": ">=10"
}
},
"node_modules/moment": {
"version": "2.30.1",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
@ -13031,18 +12557,6 @@
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
"node_modules/nanoid": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz",
"integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==",
"dev": true,
"bin": {
"nanoid": "bin/nanoid.cjs"
},
"engines": {
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
"node_modules/natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
@ -13997,6 +13511,7 @@
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
"integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
"peer": true,
"dependencies": {
"yocto-queue": "^0.1.0"
},
@ -14012,6 +13527,7 @@
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
"integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
"dev": true,
"peer": true,
"dependencies": {
"p-limit": "^3.0.2"
},
@ -14343,15 +13859,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/pathval": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
"integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
"dev": true,
"engines": {
"node": "*"
}
},
"node_modules/pause-stream": {
"version": "0.0.11",
"resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
@ -16527,6 +16034,7 @@
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true,
"peer": true,
"engines": {
"node": ">=8"
},
@ -17187,15 +16695,6 @@
"node": ">= 0.8.0"
}
},
"node_modules/type-detect": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz",
"integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/type-fest": {
"version": "0.21.3",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
@ -18862,12 +18361,6 @@
"integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
"dev": true
},
"node_modules/workerpool": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz",
"integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==",
"dev": true
},
"node_modules/wrap-ansi": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
@ -19115,38 +18608,14 @@
}
},
"node_modules/yargs-parser": {
"version": "20.2.4",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
"integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
"version": "20.2.9",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
"integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
"dev": true,
"engines": {
"node": ">=10"
}
},
"node_modules/yargs-unparser": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
"integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
"dev": true,
"dependencies": {
"camelcase": "^6.0.0",
"decamelize": "^4.0.0",
"flat": "^5.0.2",
"is-plain-obj": "^2.1.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/yargs-unparser/node_modules/is-plain-obj": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
"integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/yargs/node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
@ -19209,6 +18678,7 @@
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
"dev": true,
"peer": true,
"engines": {
"node": ">=10"
},

View File

@ -23,14 +23,12 @@
"@angular/compiler-cli": "18.2.5",
"@angular/elements": "18.2.5",
"@compodoc/compodoc": "^1.1.25",
"@types/chai": "4.3.19",
"@types/dom-mediacapture-transform": "0.1.9",
"@types/dom-webcodecs": "0.1.11",
"@types/mocha": "9.1.1",
"@types/jasmine": "^5.1.4",
"@types/node": "20.12.14",
"@types/selenium-webdriver": "4.1.16",
"@types/ws": "^8.5.12",
"chai": "4.3.10",
"chromedriver": "129.0.0",
"concat": "^1.0.3",
"cross-env": "^7.0.3",
@ -50,7 +48,6 @@
"karma-mocha-reporter": "2.2.5",
"karma-notify-reporter": "1.3.0",
"lint-staged": "^15.2.10",
"mocha": "9.2.2",
"ng-packagr": "18.2.1",
"npm-watch": "^0.13.0",
"prettier": "3.3.3",

View File

@ -1,25 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { AdminDashboardComponent } from './admin-dashboard.component';
describe('DashboardComponent', () => {
let component: AdminDashboardComponent;
let fixture: ComponentFixture<AdminDashboardComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ AdminDashboardComponent ]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(AdminDashboardComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -1,25 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { AdminLoginComponent } from './login.component';
describe('LoginComponent', () => {
let component: AdminLoginComponent;
let fixture: ComponentFixture<AdminLoginComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ AdminLoginComponent ]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(AdminLoginComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -1,25 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { AudioWaveComponent } from './audio-wave.component';
describe('AudioWaveComponent', () => {
let component: AudioWaveComponent;
let fixture: ComponentFixture<AudioWaveComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ AudioWaveComponent ]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(AudioWaveComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -1,25 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { AvatarProfileComponent } from './avatar-profile.component';
describe('AvatarProfileComponent', () => {
let component: AvatarProfileComponent;
let fixture: ComponentFixture<AvatarProfileComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ AvatarProfileComponent ]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(AvatarProfileComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -1,25 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { CaptionsComponent } from './captions.component';
describe('CaptionsComponent', () => {
let component: CaptionsComponent;
let fixture: ComponentFixture<CaptionsComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ CaptionsComponent ]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(CaptionsComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -1,37 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { RemoteUserService, LocalUserService } from '../../../public-api';
import { ChatService } from '../../services/chat/chat.service';
import { ChatServiceMock } from '../../services/chat/chat.service.mock';
import { LayoutService } from '../../services/layout/layout.service';
import { LocalUserServiceMock } from '../../services/local-user/local-user.service.mock';
import { RemoteUserServiceMock } from '../../services/remote-user/remote-user.service.mock';
import { LayoutComponent } from './layout.component';
describe('LayoutComponent', () => {
let component: LayoutComponent;
let fixture: ComponentFixture<LayoutComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ LayoutComponent ],
providers: [
{ provide: RemoteUserService, useClass: RemoteUserServiceMock },
{ provide: LocalUserService, useClass: LocalUserServiceMock },
{ provide: ChatService, useClass: ChatServiceMock },
{ provide: LayoutService, useClass: LayoutService }
]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(LayoutComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -1,25 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { VideoComponent } from './media-element.component';
describe('VideoComponent', () => {
let component: VideoComponent;
let fixture: ComponentFixture<VideoComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ VideoComponent ]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(VideoComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -1,25 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ActivitiesPanelComponent } from './activities-panel.component';
describe('ActivitiesPanelComponent', () => {
let component: ActivitiesPanelComponent;
let fixture: ComponentFixture<ActivitiesPanelComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ ActivitiesPanelComponent ]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(ActivitiesPanelComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -1,23 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { BroadcastingActivityComponent } from './broadcasting-activity.component';
describe('BroadcastingActivityComponent', () => {
let component: BroadcastingActivityComponent;
let fixture: ComponentFixture<BroadcastingActivityComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ BroadcastingActivityComponent ]
})
.compileComponents();
fixture = TestBed.createComponent(BroadcastingActivityComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -1,25 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { RecordingActivityComponent } from './recording-activity.component';
describe('RecordingActivityComponent', () => {
let component: RecordingActivityComponent;
let fixture: ComponentFixture<RecordingActivityComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ RecordingActivityComponent ]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(RecordingActivityComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -1,25 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { BackgroundEffectsPanelComponent } from './background-effects-panel.component';
describe('BackgroundEffectsPanelComponent', () => {
let component: BackgroundEffectsPanelComponent;
let fixture: ComponentFixture<BackgroundEffectsPanelComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ BackgroundEffectsPanelComponent ]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(BackgroundEffectsPanelComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -1,27 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ChatService } from '../../../services/chat/chat.service';
import { ChatServiceMock } from '../../../services/chat/chat.service.mock';
import { ChatPanelComponent } from './chat-panel.component';
describe('ChatPanelComponent', () => {
let component: ChatPanelComponent;
let fixture: ComponentFixture<ChatPanelComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ChatPanelComponent],
providers: [{ provide: ChatService, useClass: ChatServiceMock }]
}).compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(ChatPanelComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -1,25 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ParticipantPanelItemComponent } from './participant-panel-item.component';
describe('ParticipantPanelItemComponent', () => {
let component: ParticipantPanelItemComponent;
let fixture: ComponentFixture<ParticipantPanelItemComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ ParticipantPanelItemComponent ]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(ParticipantPanelItemComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -1,25 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ParticipantsPanelComponent } from './participants-panel.component';
describe('ParticipantsPanelComponent', () => {
let component: ParticipantsPanelComponent;
let fixture: ComponentFixture<ParticipantsPanelComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ ParticipantsPanelComponent ]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(ParticipantsPanelComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -1,25 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { SettingsPanelComponent } from './settings-panel.component';
describe('SettingsPanelComponent', () => {
let component: SettingsPanelComponent;
let fixture: ComponentFixture<SettingsPanelComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ SettingsPanelComponent ]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(SettingsPanelComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -1,25 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { PreJoinComponent } from './pre-join.component';
describe('PreJoinComponent', () => {
let component: PreJoinComponent;
let fixture: ComponentFixture<PreJoinComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ PreJoinComponent ]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(PreJoinComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -1,4 +1,7 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ActionService } from '../../services/action/action.service';
import { ActionServiceMock } from '../../services/action/action.service.mock';
@ -7,26 +10,34 @@ import { ChatServiceMock } from '../../services/chat/chat.service.mock';
import { LoggerService } from '../../services/logger/logger.service';
import { LoggerServiceMock } from '../../services/logger/logger.service.mock';
import { ParticipantService } from '../../services/participant/participant.service';
import { ParticipantServiceMock } from '../../services/participant/participant.service.mock';
// import { ParticipantService } from '../../services/participant/participant.service';
// import { ParticipantServiceMock } from '../../services/participant/participant.service.mock';
import { PlatformService } from '../../services/platform/platform.service';
import { PlatformServiceMock } from '../../services/platform/platform.service.mock';
import { SessionComponent } from './session.component';
import { Room, RoomEvent } from 'livekit-client';
import { TranslateService } from '../../services/translate/translate.service';
import { TranslateServiceMock } from '../../services/translate/translate.service.mock';
import { TranslatePipe } from '../../pipes/translate.pipe';
describe('SessionComponent', () => {
let component: SessionComponent;
let fixture: ComponentFixture<SessionComponent>;
let actionService: ActionServiceMock;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [SessionComponent],
declarations: [SessionComponent, TranslatePipe],
imports: [MatProgressSpinnerModule, NoopAnimationsModule],
providers: [
{ provide: LoggerService, useClass: LoggerServiceMock },
{ provide: ActionService, useClass: ActionServiceMock },
{ provide: ParticipantService, useClass: ParticipantServiceMock },
// { provide: ParticipantService, useClass: ParticipantServiceMock },
{ provide: ChatService, useClass: ChatServiceMock },
{ provide: PlatformService, useClass: PlatformServiceMock }
{ provide: PlatformService, useClass: PlatformServiceMock },
{ provide: TranslateService, useClass: TranslateServiceMock },
{ provide: 'OPENVIDU_COMPONENTS_CONFIG', useValue: { production: false } }
]
}).compileComponents();
});
@ -34,10 +45,52 @@ describe('SessionComponent', () => {
beforeEach(() => {
fixture = TestBed.createComponent(SessionComponent);
component = fixture.componentInstance;
actionService = TestBed.inject(ActionService);
// Espías para verificar las llamadas a los métodos de diálogo
spyOn(actionService, 'openConnectionDialog').and.callThrough();
spyOn(actionService, 'closeConnectionDialog').and.callThrough();
component.room = {
on: jasmine.createSpy('on').and.callFake((event: RoomEvent, callback: () => void) => {
// Guarda los callbacks para invocarlos manualmente
if (event === RoomEvent.Reconnecting) {
component.room['reconnectingCallback'] = callback;
}
if (event === RoomEvent.Reconnected) {
component.room['reconnectedCallback'] = callback;
}
return component.room;
}),
removeAllListeners: jasmine.createSpy('removeAllListeners')
} as unknown as Room;
component['subscribeToReconnection']();
fixture.detectChanges();
});
function emitReconnectingEvent() {
component.room['reconnectingCallback']();
}
function emitReconnectedEvent() {
component.room['reconnectedCallback']();
}
it('should create', () => {
expect(component).toBeTruthy();
});
it('should open the connection dialog', () => {
emitReconnectingEvent();
// Verifica que se haya abierto el diálogo
expect(actionService.openConnectionDialog).toHaveBeenCalledTimes(1);
});
it('should close the connection dialog', () => {
emitReconnectingEvent();
emitReconnectedEvent();
expect(actionService.closeConnectionDialog).toHaveBeenCalledTimes(1);
});
});

View File

@ -1,25 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { AudioDevicesComponent } from './audio-devices.component';
describe('AudioDevicesComponent', () => {
let component: AudioDevicesComponent;
let fixture: ComponentFixture<AudioDevicesComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ AudioDevicesComponent ]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(AudioDevicesComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -1,24 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { CaptionsSettingComponent } from './captions.component';
describe('CaptionsSettingComponent', () => {
let component: CaptionsSettingComponent;
let fixture: ComponentFixture<CaptionsSettingComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [CaptionsSettingComponent]
}).compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(CaptionsSettingComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -1,25 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { LangSelectorComponent } from './lang-selector.component';
describe('LangSelectorComponent', () => {
let component: LangSelectorComponent;
let fixture: ComponentFixture<LangSelectorComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ LangSelectorComponent ]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(LangSelectorComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -1,25 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ParticipantNameInputComponent } from './participant-name-input.component';
describe('ParticipantNameInputComponent', () => {
let component: ParticipantNameInputComponent;
let fixture: ComponentFixture<ParticipantNameInputComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ ParticipantNameInputComponent ]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(ParticipantNameInputComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -1,25 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { VideoDevicesComponent } from './video-devices.component';
describe('VideoDevicesComponent', () => {
let component: VideoDevicesComponent;
let fixture: ComponentFixture<VideoDevicesComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ VideoDevicesComponent ]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(VideoDevicesComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -1,49 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { RemoteUserService, LocalUserService, WebrtcService } from '../../../public-api';
import { CdkOverlayService } from '../../services/cdk-overlay/cdk-overlay.service';
import { DocumentService } from '../../services/document/document.service';
import { CdkOverlayServiceMock } from '../../services/cdk-overlay/cdk-overlay.service.mock';
import { DocumentServiceMock } from '../../services/document/document.service.mock';
import { LayoutService } from '../../services/layout/layout.service';
import { LocalUserServiceMock } from '../../services/local-user/local-user.service.mock';
import { LayoutServiceMock } from '../../services/layout/layout.service.mock';
import { RemoteUserServiceMock } from '../../services/remote-user/remote-user.service.mock';
import { StorageService } from '../../services/storage/storage.service';
import { StorageServiceMock } from '../../services/storage/storage.service.mock';
import { WebrtcServiceMock } from '../../services/webrtc/webrtc.service.mock';
import { ParticipantComponent } from './participant.component';
describe('ParticipantComponent', () => {
let component: ParticipantComponent;
let fixture: ComponentFixture<ParticipantComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ParticipantComponent],
providers: [
{ provide: DocumentService, useClass: DocumentServiceMock },
{ provide: StorageService, useClass: StorageServiceMock },
{ provide: RemoteUserService, useClass: RemoteUserServiceMock },
{ provide: LocalUserService, useClass: LocalUserServiceMock },
{ provide: WebrtcService, useClass: WebrtcServiceMock },
{ provide: CdkOverlayService, useClass: CdkOverlayServiceMock },
{ provide: LayoutService, useClass: LayoutServiceMock }
]
}).compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(ParticipantComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -1,51 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ActionService } from '../../services/action/action.service';
import { ActionServiceMock } from '../../services/action/action.service.mock';
import { ChatService } from '../../services/chat/chat.service';
import { ChatServiceMock } from '../../services/chat/chat.service.mock';
import { DeviceService } from '../../services/device/device.service';
import { DeviceServiceMock } from '../../services/device/device.service.mock';
import { DocumentService } from '../../services/document/document.service';
import { DocumentServiceMock } from '../../services/document/document.service.mock';
import { LocalUserService } from '../../services/local-user/local-user.service';
import { LocalUserServiceMock } from '../../services/local-user/local-user.service.mock';
import { LoggerService } from '../../services/logger/logger.service';
import { LoggerServiceMock } from '../../services/logger/logger.service.mock';
import { WebrtcService } from '../../services/webrtc/webrtc.service';
import { WebrtcServiceMock } from '../../services/webrtc/webrtc.service.mock';
import { ToolbarComponent } from './toolbar.component';
describe('ToolbarComponent', () => {
let component: ToolbarComponent;
let fixture: ComponentFixture<ToolbarComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ ToolbarComponent ],
providers: [
{ provide: ActionService, useClass: ActionServiceMock },
{ provide: ChatService, useClass: ChatServiceMock },
{ provide: LocalUserService, useClass: LocalUserServiceMock },
{ provide: DocumentService, useClass: DocumentServiceMock },
{ provide: LoggerService, useClass: LoggerServiceMock },
{ provide: DeviceService, useClass: DeviceServiceMock },
{ provide: WebrtcService, useClass: WebrtcServiceMock }
]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(ToolbarComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -1,25 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { VideoconferenceComponent } from './videoconference.component';
describe('VideoconferenceComponent', () => {
let component: VideoconferenceComponent;
let fixture: ComponentFixture<VideoconferenceComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ VideoconferenceComponent ]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(VideoconferenceComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -9,10 +9,10 @@ export class ActionServiceMock {
}
openDialog(titleMessage: string, descriptionMessage: string, allowClose = true) {
openConnectionDialog(titleMessage: string, descriptionMessage: string, allowClose = true) {
}
closeDialog() {
closeConnectionDialog() {
}
}

View File

@ -1,28 +1,81 @@
import { TestBed } from '@angular/core/testing';
import { MatDialog } from '@angular/material/dialog';
import { fakeAsync, TestBed, tick } from '@angular/core/testing';
import { MatDialog, MatDialogRef } from '@angular/material/dialog';
import { MatSnackBarModule } from '@angular/material/snack-bar';
import { ActionService } from './action.service';
import { TranslateService } from '../translate/translate.service';
import { TranslateServiceMock } from '../translate/translate.service.mock';
export class MatDialogMock {
open() {}
close() {}
open() {
return { close: () => {} } as MatDialogRef<any>;
}
}
describe('ActionService', () => {
let service: ActionService;
let service: ActionService;
let dialog: MatDialog;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [MatSnackBarModule],
providers: [
{ provide: MatDialog, useClass: MatDialogMock }
beforeEach(() => {
TestBed.configureTestingModule({
imports: [MatSnackBarModule],
providers: [
{ provide: MatDialog, useClass: MatDialogMock },
{ provide: TranslateService, useClass: TranslateServiceMock },
{ provide: 'OPENVIDU_COMPONENTS_CONFIG', useValue: { production: false } }
]
});
service = TestBed.inject(ActionService);
});
});
it('should be created', () => {
expect(service).toBeTruthy();
});
service = TestBed.inject(ActionService);
dialog = TestBed.inject(MatDialog);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
it('should open connection dialog', fakeAsync(() => {
const dialogSpy = spyOn(dialog, 'open').and.callThrough();
service.openConnectionDialog('Test Title', 'Test Description', false);
expect(dialogSpy).toHaveBeenCalled();
expect(service['isConnectionDialogOpen']).toBeTrue();
}));
it('should not open connection dialog if one is already open', () => {
service['isConnectionDialogOpen'] = true;
const dialogSpy = spyOn(dialog, 'open').and.callThrough();
service.openConnectionDialog('Test Title', 'Test Description', false);
expect(dialogSpy).not.toHaveBeenCalled();
});
it('should close connection dialog and reset state', fakeAsync(() => {
service.openConnectionDialog('Test Title', 'Test Description', false);
tick(2000);
expect(service['isConnectionDialogOpen']).toBeTrue();
service.closeConnectionDialog();
expect(service['isConnectionDialogOpen']).toBeFalse();
}));
it('should open connection dialog only once', fakeAsync(() => {
// Spy on the dialog open method
const dialogSpy = spyOn(dialog, 'open').and.callThrough();
service.openConnectionDialog('Test Title', 'Test Description', false);
// Verify that the dialog has been called only once
expect(dialogSpy).toHaveBeenCalledTimes(1);
expect(service['isConnectionDialogOpen']).toBeTrue();
// Try to open the dialog again
service.openConnectionDialog('Test Title', 'Test Description', false);
service.openConnectionDialog('Test Title', 'Test Description', false);
service.openConnectionDialog('Test Title', 'Test Description', false);
// Verify that the dialog has been called only once
expect(dialogSpy).toHaveBeenCalledTimes(1);
}));
});

View File

@ -1,16 +0,0 @@
import { TestBed } from '@angular/core/testing';
import { BroadcastingService } from './broadcasting.service';
describe('BroadcastingService', () => {
let service: BroadcastingService;
beforeEach(() => {
TestBed.configureTestingModule({});
service = TestBed.inject(BroadcastingService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
});

View File

@ -1,16 +0,0 @@
import { TestBed } from '@angular/core/testing';
import { CaptionService } from './caption.service';
describe('CaptionService', () => {
let service: CaptionService;
beforeEach(() => {
TestBed.configureTestingModule({});
service = TestBed.inject(CaptionService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
});

View File

@ -1,14 +0,0 @@
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class CdkOverlayServiceMock {
constructor() {}
setSelector(selector: string) {
}
}

View File

@ -1,29 +0,0 @@
import { TestBed } from '@angular/core/testing';
import { CdkOverlayContainer } from '../../config/custom-cdk-overlay';
import { CdkOverlayService } from './cdk-overlay.service';
export class CdkOverlayContainerMock {
protected _createContainer(): void {}
setSelector(selector: string) {}
private getElement(selector: string): Element {
return null;
}
}
describe('CdkOverlayService', () => {
let service: CdkOverlayService;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [{ provide: CdkOverlayContainer, useClass: CdkOverlayContainerMock }]
});
service = TestBed.inject(CdkOverlayService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
});

View File

@ -1,31 +0,0 @@
import { TestBed } from '@angular/core/testing';
import { ActionService } from '../action/action.service';
import { ActionServiceMock } from '../action/action.service.mock';
import { LocalUserService } from '../local-user/local-user.service';
import { LocalUserServiceMock } from '../local-user/local-user.service.mock';
import { LoggerService } from '../logger/logger.service';
import { LoggerServiceMock } from '../logger/logger.service.mock';
import { WebrtcService } from '../webrtc/webrtc.service';
import { WebrtcServiceMock } from '../webrtc/webrtc.service.mock';
import { ChatService } from './chat.service';
describe('ChatService', () => {
let service: ChatService;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
{ provide: LoggerService, useClass: LoggerServiceMock },
{ provide: WebrtcService, useClass: WebrtcServiceMock },
{ provide: LocalUserService, useClass: LocalUserServiceMock },
{ provide: ActionService, useClass: ActionServiceMock }
]
});
service = TestBed.inject(ChatService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
});

View File

@ -1,22 +0,0 @@
import { Injectable } from '@angular/core';
@Injectable()
export class DocumentServiceMock {
constructor() {}
getHTMLElementByClassName(element: HTMLElement, className: string): HTMLElement {
return null;
}
toggleFullscreen(elementId: string) {}
removeAllBigElementClass() {}
removeBigElementClass(element: HTMLElement | Element) {}
toggleBigElementClass(element: HTMLElement | Element) {}
isSmallElement(element: HTMLElement | Element): boolean {
return false;
}
}

View File

@ -1,16 +0,0 @@
import { TestBed } from '@angular/core/testing';
import { DocumentService } from './document.service';
describe('DocumentService', () => {
let service: DocumentService;
beforeEach(() => {
TestBed.configureTestingModule({});
service = TestBed.inject(DocumentService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
});

View File

@ -1,36 +0,0 @@
import { Injectable } from '@angular/core';
import { BehaviorSubject, Observable } from 'rxjs';
import { LayoutClass, OpenViduLayout, OpenViduLayoutOptions } from '../../models/layout.model';
import { DocumentService } from '../document/document.service';
@Injectable({
providedIn: 'root'
})
export class LayoutServiceMock {
layoutWidthObs: Observable<number>;
private _layoutWidthObs: BehaviorSubject<number> = new BehaviorSubject(0);
private openviduLayout: OpenViduLayout;
private openviduLayoutOptions: OpenViduLayoutOptions;
constructor() {}
initialize(timeout: number = null) {}
private _initialize() {}
getOptions(): OpenViduLayoutOptions {
return null;
}
update(timeout?: number) {}
getLayout() {
return this.openviduLayout;
}
clear() {
this.openviduLayout = null;
}
private sendLayoutWidthEvent() {}
}

View File

@ -1,16 +0,0 @@
import { TestBed } from '@angular/core/testing';
import { LayoutService } from './layout.service';
describe('LayoutService', () => {
let service: LayoutService;
beforeEach(() => {
TestBed.configureTestingModule({});
service = TestBed.inject(LayoutService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
});

View File

@ -1,22 +0,0 @@
import { TestBed } from '@angular/core/testing';
import { LibraryConfigService } from '../library-config/library-config.service';
import { LibraryConfigServiceMock } from '../library-config/library-config.service.mock';
import { LoggerService } from './logger.service';
describe('LoggerService', () => {
let service: LoggerService;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
{ provide: LibraryConfigService, useClass: LibraryConfigServiceMock },
]
});
service = TestBed.inject(LoggerService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
});

View File

@ -1,102 +0,0 @@
import { Injectable } from '@angular/core';
import { Session, PublisherProperties, OpenVidu, Publisher, Connection } from 'openvidu-browser';
import { Signal } from '../../models/signal.model';
@Injectable({
providedIn: 'root'
})
export class OpenViduServiceMock {
private OV: OpenVidu = null;
private OVScreen: OpenVidu = null;
private webcamSession: Session = null;
private screenSession: Session = null;
private videoSource = undefined;
private audioSource = undefined;
private screenMediaStream: MediaStream = null;
private webcamMediaStream: MediaStream = null;
constructor() {}
initialize() {}
initSessions() {}
getWebcamSession(): Session {
return null;
}
initializeWebcamSession(): void {}
initializeScreenSession(): void {}
getScreenSession(): Session {
return null;
}
async connectWebcamSession(token: string): Promise<any> {}
disconnectWebcamSession(): void {}
async connectScreenSession(token: string): Promise<any> {}
disconnectScreenSession(): void {}
disconnect() {}
initPublisher(targetElement: string | HTMLElement, properties: PublisherProperties): Publisher {
return null;
}
initPublisherAsync(targetElement: string | HTMLElement, properties: PublisherProperties): Promise<Publisher> {
return null;
}
destroyWebcamPublisher(): void {}
destroyScreenPublisher(): void {}
async publishWebcamPublisher(): Promise<any> {}
unpublishWebcamPublisher(): void {}
async publishScreenPublisher(): Promise<any> {}
unpublishScreenPublisher(): void {}
publishWebcamVideo(active: boolean): void {}
publishWebcamAudio(active: boolean): void {}
publishScreenAudio(active: boolean): void {}
replaceTrack(videoSource: string, audioSource: string, mirror: boolean = true): Promise<any> {
return new Promise((resolve, reject) => {});
}
sendSignal(type: Signal, connection?: Connection, data?: any): void {}
createPublisherProperties(
videoSource: string | MediaStreamTrack | boolean,
audioSource: string | MediaStreamTrack | boolean,
publishVideo: boolean,
publishAudio: boolean,
mirror: boolean
): PublisherProperties {
return {};
}
async replaceScreenTrack() {}
stopAudioTracks(mediaStream: MediaStream) {}
stopVideoTracks(mediaStream: MediaStream) {}
needSendNicknameSignal(): boolean {
return false;
}
isMyOwnConnection(connectionId: string): boolean {
return false;
}
getSessionOfUserConnected(): Session {
return null;
}
private stopScreenTracks() {}
}

View File

@ -1,32 +0,0 @@
import { TestBed } from '@angular/core/testing';
import { LoggerService } from '../logger/logger.service';
import { LoggerServiceMock } from '../logger/logger.service.mock';
import { LocalUserService } from '../local-user/local-user.service';
import { LocalUserServiceMock } from '../local-user/local-user.service.mock';
import { OpenViduService } from './openvidu.service';
import { PlatformService } from '../platform/platform.service';
import { PlatformServiceMock } from '../platform/platform.service.mock';
import { LibraryConfigService } from '../library-config/library-config.service';
import { LibraryConfigServiceMock } from '../library-config/library-config.service.mock';
describe('OpenViduService', () => {
let service: OpenViduService;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
{ provide: LoggerService, useClass: LoggerServiceMock },
{ provide: LocalUserService, useClass: LocalUserServiceMock },
{ provide: PlatformService, useClass: PlatformServiceMock },
{ provide: LibraryConfigService, useClass: LibraryConfigServiceMock }
]
});
service = TestBed.inject(OpenViduService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
});

View File

@ -1,16 +0,0 @@
import { TestBed } from '@angular/core/testing';
import { PanelService } from './panel.service';
describe('SidenavMenuService', () => {
let service: PanelService;
beforeEach(() => {
TestBed.configureTestingModule({});
service = TestBed.inject(PanelService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
});

View File

@ -1,94 +0,0 @@
import { Injectable } from '@angular/core';
import { Observable, BehaviorSubject } from 'rxjs';
import { ParticipantModel } from '../../models/participant.model';
@Injectable({
providedIn: 'root'
})
export class ParticipantServiceMock {
OVUsers: Observable<ParticipantModel[]>;
screenShareState: Observable<boolean>;
webcamVideoActive: Observable<boolean>;
private _OVUsers = <BehaviorSubject<ParticipantModel[]>>new BehaviorSubject([]);
private _screenShareState = <BehaviorSubject<boolean>>new BehaviorSubject(false);
private _webcamVideoActive = <BehaviorSubject<boolean>>new BehaviorSubject(true);
constructor() {
this.OVUsers = this._OVUsers.asObservable();
this.screenShareState = this._screenShareState.asObservable();
this.webcamVideoActive = this._webcamVideoActive.asObservable();
}
initialize() {}
setWebcamPublisher(publisher: Publisher) {}
getScreenPublisher(): Publisher {
return null;
}
setScreenPublisher(publisher: Publisher) {}
enableWebcamUser() {}
disableWebcamUser() {}
enableScreenUser(screenPublisher: Publisher) {}
disableScreenUser() {}
updateUsersStatus() {}
clear() {}
isMyCameraEnabled(): boolean {
return false;
}
isOnlyMyScreenEnabled(): boolean {
return false;
}
hasCameraVideoActive(): boolean {
return false;
}
hasCameraAudioActive(): boolean {
return false;
}
hasScreenAudioActive(): boolean {
return false;
}
areBothEnabled(): boolean {
return false;
}
isOnlyMyCameraEnabled(): boolean {
return false;
}
isScreenShareEnabled(): boolean {
return false;
}
updateUsersNickname(nickname: string) {}
getWebcamAvatar(): string {
return '';
}
getWebcamNickname(): string {
return '';
}
getScreenNickname() {}
resetUsersZoom() {}
toggleZoom(connectionId: string) {}
}

View File

@ -1,16 +0,0 @@
import { TestBed } from '@angular/core/testing';
import { ParticipantService } from './participant.service';
describe('ParticipantService', () => {
let service: ParticipantService;
beforeEach(() => {
TestBed.configureTestingModule({});
service = TestBed.inject(ParticipantService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
});

View File

@ -1,16 +0,0 @@
import { TestBed } from '@angular/core/testing';
import { PlatformService } from './platform.service';
describe('PlatformService', () => {
let service: PlatformService;
beforeEach(() => {
TestBed.configureTestingModule({});
service = TestBed.inject(PlatformService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
});

View File

@ -1,16 +0,0 @@
import { TestBed } from '@angular/core/testing';
import { RecordingService } from './recording.service';
describe('RecordingService', () => {
let service: RecordingService;
beforeEach(() => {
TestBed.configureTestingModule({});
service = TestBed.inject(RecordingService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
});

View File

@ -1,18 +0,0 @@
import { Injectable } from '@angular/core';
@Injectable()
export class StorageServiceMock {
store = {};
constructor() {}
public set(key: string, item: any) {
this.store[key] = item;
}
public get(key: string): any {
return this.store[key] || '{}';
}
public clear() {
this.store = {};
}
}

View File

@ -1,73 +0,0 @@
import { TestBed } from '@angular/core/testing';
import { LoggerService } from '../logger/logger.service';
import { LoggerServiceMock } from '../logger/logger.service.mock';
import { StorageService } from './storage.service';
describe('StorageService', () => {
let service: StorageService;
const key = 'key';
const item = 'item';
let store = {};
let spyStoreGetItem;
let spyStoreSetItem;
let spyStoreClear;
beforeEach(() => {
TestBed.configureTestingModule({ providers: [{ provide: LoggerService, useClass: LoggerServiceMock }] });
service = TestBed.inject(StorageService);
spyStoreGetItem = spyOn(window.localStorage, 'getItem').and.callFake((keyFake) => {
return store[keyFake] || '{}';
});
spyStoreSetItem = spyOn(window.localStorage, 'setItem').and.callFake((keyFake, value) => {
store[keyFake] = value;
});
spyStoreClear = spyOn(window.localStorage, 'clear').and.callFake(() => {
store = {};
});
});
it('should be created', () => {
expect(service).toBeTruthy();
});
it('should be created', () => {
expect(service).toBeTruthy();
});
it('should set an item', () => {
const spyServiceSet = spyOn(service, 'set').and.callThrough();
service.set(key, item);
expect(spyServiceSet).toHaveBeenCalledWith(key, item);
});
it('should get an item added', () => {
const spyServiceSet = spyOn(service, 'set').and.callThrough();
const spyServiceGet = spyOn(service, 'get').and.callThrough();
service.set(key, item);
expect(spyServiceSet).toHaveBeenCalledWith(key, item);
const value = service.get(key);
expect(spyServiceGet).toHaveBeenCalledWith(key);
expect(value).toEqual(item);
});
it('should clear local storage', () => {
const spyServiceSet = spyOn(service, 'set').and.callThrough();
const spyServiceGet = spyOn(service, 'get').and.callThrough();
const spyServiceClear = spyOn(service, 'clear').and.callThrough();
service.set(key, item);
expect(spyServiceSet).toHaveBeenCalledWith(key, item);
let value = service.get(key);
expect(spyServiceGet).toHaveBeenCalledWith(key);
expect(value).toEqual(item);
service.clear();
expect(spyServiceClear).toHaveBeenCalled();
value = service.get(key);
expect(value).toEqual(null);
});
});

View File

@ -0,0 +1,44 @@
import { Injectable } from '@angular/core';
import { BehaviorSubject, Observable } from 'rxjs';
import { LangOption } from '../../models/lang.model';
@Injectable({
providedIn: 'root'
})
export class TranslateServiceMock {
// Simulación de las opciones de lenguaje
private languageOptions: LangOption[] = [
{ name: 'English', lang: 'en' },
{ name: 'Español', lang: 'es' }
];
// Comportamiento simulado del BehaviorSubject
private _selectedLanguageSubject: BehaviorSubject<LangOption> = new BehaviorSubject<LangOption>(this.languageOptions[0]);
selectedLanguageOption$: Observable<LangOption> = this._selectedLanguageSubject.asObservable();
private activeTranslations: Record<string, any> = { hello: 'Hello', goodbye: 'Goodbye' }; // Simulación de traducciones
// Métodos simulados
addTranslations(translations: Partial<Record<string, any>>): void {
// Puedes agregar lógica para simular la adición de traducciones
}
async setCurrentLanguage(lang: string): Promise<void> {
const matchingOption = this.languageOptions.find(option => option.lang === lang);
if (matchingOption) {
this._selectedLanguageSubject.next(matchingOption);
}
}
getSelectedLanguage(): LangOption {
return this._selectedLanguageSubject.getValue();
}
getAvailableLanguages(): LangOption[] {
return this.languageOptions;
}
translate(key: string): string {
// Retorna la traducción simulada
return this.activeTranslations[key] || '';
}
}

View File

@ -1,16 +0,0 @@
import { TestBed } from '@angular/core/testing';
import { TranslateService } from './translate.service';
describe('TranslateService', () => {
let service: TranslateService;
beforeEach(() => {
TestBed.configureTestingModule({});
service = TestBed.inject(TranslateService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
});

View File

@ -1,16 +0,0 @@
import { TestBed } from '@angular/core/testing';
import { VirtualBackgroundService } from './virtual-background.service';
describe('VirtualBackgroundService', () => {
let service: VirtualBackgroundService;
beforeEach(() => {
TestBed.configureTestingModule({});
service = TestBed.inject(VirtualBackgroundService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
});

View File

@ -13,7 +13,7 @@
"declarationMap": true,
"inlineSources": true,
"resolveJsonModule": true,
"types": ["node"],
"types": ["jasmine", "node"],
"allowSyntheticDefaultImports": true
},
"exclude": ["node_modules", "src/test.ts", "**/*.spec.ts", "**/*.mock.ts"]

View File

@ -8,7 +8,8 @@
"node"
],
"moduleResolution": "node",
"experimentalDecorators": true
"experimentalDecorators": true,
"resolveJsonModule": true
},
"files": [
"src/test.ts"

View File

@ -4,7 +4,7 @@
"compilerOptions": {
"outDir": "./out-tsc/spec",
"types": [
"jasmine"
"jasmine", "node"
]
},
"files": [