From 05c8e88004ca680876335cc3ec3c7145d468819d Mon Sep 17 00:00:00 2001 From: Rob Spectre Date: Fri, 29 Apr 2022 13:03:21 -0400 Subject: [PATCH] 1) Added `vue-advanced-chat` component. 2) Created `GameChatMessages` for displaying a SMS-like conversation in-game. 3) Added tests for `GameChat Messages`. --- jest.config.js | 3 +- package-lock.json | 374 ++++++++++++++++++++--- package.json | 4 + src/components/base/GameChatMessages.vue | 90 ++++++ tests/setupTests.js | 3 + tests/unit/base/GameChatMessages.spec.js | 56 ++++ 6 files changed, 483 insertions(+), 47 deletions(-) create mode 100644 src/components/base/GameChatMessages.vue create mode 100644 tests/unit/base/GameChatMessages.spec.js diff --git a/jest.config.js b/jest.config.js index a1f6d2e..02880f8 100644 --- a/jest.config.js +++ b/jest.config.js @@ -9,7 +9,8 @@ module.exports = { }, testEnvironment: 'jsdom', setupFiles: [ - './tests/setupTests.js' + './tests/setupTests.js', + 'fake-indexeddb/auto' ], setupFilesAfterEnv: [ '/jest.setup.js' diff --git a/package-lock.json b/package-lock.json index 0efa1ff..a88f8ec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,9 +18,8 @@ "pug-plain-loader": "^1.0.0", "reveal.js": "^4.3.0", "vue": "^3.2.31", - "vue-router": "^4.0.13", - "vuex": "^4.0.2", - "vuex-persist": "^3.1.3" + "vue-advanced-chat": "https://github.com/antoine92190/vue-advanced-chat/tarball/next", + "vue-router": "^4.0.13" }, "devDependencies": { "@babel/preset-env": "^7.16.11", @@ -30,15 +29,18 @@ "@vue/test-utils": "^2.0.0-rc.18", "@vue/vue3-jest": "^27.0.0-alpha.4", "autoprefixer": "^10.4.4", + "dexie": "^3.2.2", "eslint": "^8.12.0", "eslint-plugin-import": "^2.25.4", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^6.0.0", "eslint-plugin-standard": "^5.0.0", "eslint-plugin-vue": "^8.5.0", + "fake-indexeddb": "^3.1.7", "flush-promises": "^1.0.2", "jest": "^27.5.1", "lint-staged": "^12.3.7", + "node-fetch": "^2.6.6", "postcss": "^8.4.12", "regenerator-runtime": "^0.13.9", "sass": "^1.49.9", @@ -3672,6 +3674,15 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/base64-arraybuffer-es6": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/base64-arraybuffer-es6/-/base64-arraybuffer-es6-0.7.0.tgz", + "integrity": "sha512-ESyU/U1CFZDJUdr+neHRhNozeCv72Y7Vm0m1DCbjX3KBjT6eYocvAJlSk6+8+HkVwXlT1FNxhGW6q3UKAlCvvw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -4307,6 +4318,17 @@ "safe-buffer": "~5.1.1" } }, + "node_modules/core-js": { + "version": "3.22.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.22.3.tgz", + "integrity": "sha512-1t+2a/d2lppW1gkLXx3pKPVGbBdxXAkqztvWb1EJ8oF8O2gIGiytzflNiFEehYwVK/t2ryUsGBoOFFvNx95mbg==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/core-js-compat": { "version": "3.21.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz", @@ -4591,6 +4613,7 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4670,6 +4693,15 @@ "node": ">=0.8.0" } }, + "node_modules/dexie": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/dexie/-/dexie-3.2.2.tgz", + "integrity": "sha512-q5dC3HPmir2DERlX+toCBbHQXW5MsyrFqPFcovkH9N2S/UW/H3H5AWAB6iEOExeraAu+j+zRDG+zg/D7YhH0qg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -4810,6 +4842,11 @@ "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, + "node_modules/emoji-picker-element": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/emoji-picker-element/-/emoji-picker-element-1.11.3.tgz", + "integrity": "sha512-2pPwqgZ1JLn7hdu3LdJpfyREmvCWP5gKhkGFqAK/mIXKz/uYx+U6DZsMoGAHjdkh+njE+CEkHjHW3eTq/eYAfQ==" + }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -6059,6 +6096,15 @@ "node >=0.6.0" ] }, + "node_modules/fake-indexeddb": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/fake-indexeddb/-/fake-indexeddb-3.1.7.tgz", + "integrity": "sha512-CUGeCzCOVjmeKi2C0pcvSh6NDU6uQIaS+7YyR++tO/atJJujkBYVhDvfePdz/U8bD33BMVWirsr1MKczfAqbjA==", + "dev": true, + "dependencies": { + "realistic-structured-clone": "^2.0.1" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -6179,7 +6225,8 @@ "node_modules/flatted": { "version": "3.2.5", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==" + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true }, "node_modules/flush-promises": { "version": "1.0.2", @@ -9270,6 +9317,15 @@ "node": ">=6" } }, + "node_modules/lamejs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/lamejs/-/lamejs-1.2.0.tgz", + "integrity": "sha1-Aln4PbRmYUGntnG4yqY2nZUXfQg=", + "optional": true, + "dependencies": { + "use-strict": "1.0.1" + } + }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -9306,6 +9362,16 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "node_modules/linkifyjs": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-2.1.9.tgz", + "integrity": "sha512-74ivurkK6WHvHFozVaGtQWV38FzBwSTGNmJolEgFp7QgR2bl6ArUWlvT4GcHKbPe1z3nWYi+VUdDZk16zDOVug==", + "peerDependencies": { + "jquery": ">= 1.11.0", + "react": ">= 0.14.0", + "react-dom": ">= 0.14.0" + } + }, "node_modules/lint-staged": { "version": "12.3.7", "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.3.7.tgz", @@ -10017,6 +10083,48 @@ "node": ">= 0.6" } }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/node-gyp": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", @@ -11420,6 +11528,33 @@ "node": ">=8.10.0" } }, + "node_modules/realistic-structured-clone": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/realistic-structured-clone/-/realistic-structured-clone-2.0.4.tgz", + "integrity": "sha512-lItAdBIFHUSe6fgztHPtmmWqKUgs+qhcYLi3wTRUl4OTB3Vb8aBVSjGfQZUvkmJCKoX3K9Wf7kyLp/F/208+7A==", + "dev": true, + "dependencies": { + "core-js": "^3.4", + "domexception": "^1.0.1", + "typeson": "^6.1.0", + "typeson-registry": "^1.0.0-alpha.20" + } + }, + "node_modules/realistic-structured-clone/node_modules/domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "dependencies": { + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/realistic-structured-clone/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -12788,6 +12923,29 @@ "is-typedarray": "^1.0.0" } }, + "node_modules/typeson": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/typeson/-/typeson-6.1.0.tgz", + "integrity": "sha512-6FTtyGr8ldU0pfbvW/eOZrEtEkczHRUtduBnA90Jh9kMPCiFNnXIon3vF41N0S4tV1HHQt4Hk1j4srpESziCaA==", + "dev": true, + "engines": { + "node": ">=0.1.14" + } + }, + "node_modules/typeson-registry": { + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npmjs.org/typeson-registry/-/typeson-registry-1.0.0-alpha.39.tgz", + "integrity": "sha512-NeGDEquhw+yfwNhguLPcZ9Oj0fzbADiX4R0WxvoY8nGhy98IbzQy1sezjoEFWOywOboj/DWehI+/aUlRVrJnnw==", + "dev": true, + "dependencies": { + "base64-arraybuffer-es6": "^0.7.0", + "typeson": "^6.0.0", + "whatwg-url": "^8.4.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", @@ -12907,6 +13065,12 @@ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", "dev": true }, + "node_modules/use-strict": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/use-strict/-/use-strict-1.0.1.tgz", + "integrity": "sha1-C7gNlPSaSgUZK4Sox9NOlfGn46A=", + "optional": true + }, "node_modules/util": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", @@ -13055,6 +13219,22 @@ "@vue/shared": "3.2.31" } }, + "node_modules/vue-advanced-chat": { + "version": "1.5.3", + "resolved": "https://github.com/antoine92190/vue-advanced-chat/tarball/next", + "integrity": "sha512-TdxWpJVrg0MbDrnSvRCOywMunc/+cUIHx3onFMAOZto42bCmy+E/19a8Z0B0jwf6YDb0xGnexkpxDuCwY4Rkaw==", + "license": "MIT", + "dependencies": { + "emoji-picker-element": "^1.8.1", + "linkifyjs": "^2.1.9" + }, + "optionalDependencies": { + "lamejs": "1.2.0" + }, + "peerDependencies": { + "vue": "^3.2.22" + } + }, "node_modules/vue-demi": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.12.5.tgz", @@ -13133,29 +13313,6 @@ "vue": "^3.2.0" } }, - "node_modules/vuex": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.0.2.tgz", - "integrity": "sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==", - "dependencies": { - "@vue/devtools-api": "^6.0.0-beta.11" - }, - "peerDependencies": { - "vue": "^3.0.2" - } - }, - "node_modules/vuex-persist": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/vuex-persist/-/vuex-persist-3.1.3.tgz", - "integrity": "sha512-QWOpP4SxmJDC5Y1+0+Yl/F4n7z27syd1St/oP+IYCGe0X0GFio0Zan6kngZFufdIhJm+5dFGDo3VG5kdkCGeRQ==", - "dependencies": { - "deepmerge": "^4.2.2", - "flatted": "^3.0.5" - }, - "peerDependencies": { - "vuex": ">=2.5" - } - }, "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -16382,6 +16539,12 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "base64-arraybuffer-es6": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/base64-arraybuffer-es6/-/base64-arraybuffer-es6-0.7.0.tgz", + "integrity": "sha512-ESyU/U1CFZDJUdr+neHRhNozeCv72Y7Vm0m1DCbjX3KBjT6eYocvAJlSk6+8+HkVwXlT1FNxhGW6q3UKAlCvvw==", + "dev": true + }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -16882,6 +17045,12 @@ "safe-buffer": "~5.1.1" } }, + "core-js": { + "version": "3.22.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.22.3.tgz", + "integrity": "sha512-1t+2a/d2lppW1gkLXx3pKPVGbBdxXAkqztvWb1EJ8oF8O2gIGiytzflNiFEehYwVK/t2ryUsGBoOFFvNx95mbg==", + "dev": true + }, "core-js-compat": { "version": "3.21.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz", @@ -17121,7 +17290,8 @@ "deepmerge": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true }, "define-properties": { "version": "1.1.3", @@ -17180,6 +17350,12 @@ "minimist": "^1.1.1" } }, + "dexie": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/dexie/-/dexie-3.2.2.tgz", + "integrity": "sha512-q5dC3HPmir2DERlX+toCBbHQXW5MsyrFqPFcovkH9N2S/UW/H3H5AWAB6iEOExeraAu+j+zRDG+zg/D7YhH0qg==", + "dev": true + }, "didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -17304,6 +17480,11 @@ "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", "dev": true }, + "emoji-picker-element": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/emoji-picker-element/-/emoji-picker-element-1.11.3.tgz", + "integrity": "sha512-2pPwqgZ1JLn7hdu3LdJpfyREmvCWP5gKhkGFqAK/mIXKz/uYx+U6DZsMoGAHjdkh+njE+CEkHjHW3eTq/eYAfQ==" + }, "emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -18130,6 +18311,15 @@ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, + "fake-indexeddb": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/fake-indexeddb/-/fake-indexeddb-3.1.7.tgz", + "integrity": "sha512-CUGeCzCOVjmeKi2C0pcvSh6NDU6uQIaS+7YyR++tO/atJJujkBYVhDvfePdz/U8bD33BMVWirsr1MKczfAqbjA==", + "dev": true, + "requires": { + "realistic-structured-clone": "^2.0.1" + } + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -18234,7 +18424,8 @@ "flatted": { "version": "3.2.5", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==" + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true }, "flush-promises": { "version": "1.0.2", @@ -20528,6 +20719,15 @@ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true }, + "lamejs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/lamejs/-/lamejs-1.2.0.tgz", + "integrity": "sha1-Aln4PbRmYUGntnG4yqY2nZUXfQg=", + "optional": true, + "requires": { + "use-strict": "1.0.1" + } + }, "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -20555,6 +20755,11 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "linkifyjs": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-2.1.9.tgz", + "integrity": "sha512-74ivurkK6WHvHFozVaGtQWV38FzBwSTGNmJolEgFp7QgR2bl6ArUWlvT4GcHKbPe1z3nWYi+VUdDZk16zDOVug==" + }, "lint-staged": { "version": "12.3.7", "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.3.7.tgz", @@ -21094,6 +21299,39 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, "node-gyp": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", @@ -22151,6 +22389,35 @@ "picomatch": "^2.2.1" } }, + "realistic-structured-clone": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/realistic-structured-clone/-/realistic-structured-clone-2.0.4.tgz", + "integrity": "sha512-lItAdBIFHUSe6fgztHPtmmWqKUgs+qhcYLi3wTRUl4OTB3Vb8aBVSjGfQZUvkmJCKoX3K9Wf7kyLp/F/208+7A==", + "dev": true, + "requires": { + "core-js": "^3.4", + "domexception": "^1.0.1", + "typeson": "^6.1.0", + "typeson-registry": "^1.0.0-alpha.20" + }, + "dependencies": { + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "requires": { + "webidl-conversions": "^4.0.2" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + } + } + }, "redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -23194,6 +23461,23 @@ "is-typedarray": "^1.0.0" } }, + "typeson": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/typeson/-/typeson-6.1.0.tgz", + "integrity": "sha512-6FTtyGr8ldU0pfbvW/eOZrEtEkczHRUtduBnA90Jh9kMPCiFNnXIon3vF41N0S4tV1HHQt4Hk1j4srpESziCaA==", + "dev": true + }, + "typeson-registry": { + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npmjs.org/typeson-registry/-/typeson-registry-1.0.0-alpha.39.tgz", + "integrity": "sha512-NeGDEquhw+yfwNhguLPcZ9Oj0fzbADiX4R0WxvoY8nGhy98IbzQy1sezjoEFWOywOboj/DWehI+/aUlRVrJnnw==", + "dev": true, + "requires": { + "base64-arraybuffer-es6": "^0.7.0", + "typeson": "^6.0.0", + "whatwg-url": "^8.4.0" + } + }, "unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", @@ -23295,6 +23579,12 @@ } } }, + "use-strict": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/use-strict/-/use-strict-1.0.1.tgz", + "integrity": "sha1-C7gNlPSaSgUZK4Sox9NOlfGn46A=", + "optional": true + }, "util": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", @@ -23409,6 +23699,15 @@ "@vue/shared": "3.2.31" } }, + "vue-advanced-chat": { + "version": "https://github.com/antoine92190/vue-advanced-chat/tarball/next", + "integrity": "sha512-TdxWpJVrg0MbDrnSvRCOywMunc/+cUIHx3onFMAOZto42bCmy+E/19a8Z0B0jwf6YDb0xGnexkpxDuCwY4Rkaw==", + "requires": { + "emoji-picker-element": "^1.8.1", + "lamejs": "1.2.0", + "linkifyjs": "^2.1.9" + } + }, "vue-demi": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.12.5.tgz", @@ -23448,23 +23747,6 @@ "@vue/devtools-api": "^6.0.0" } }, - "vuex": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.0.2.tgz", - "integrity": "sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==", - "requires": { - "@vue/devtools-api": "^6.0.0-beta.11" - } - }, - "vuex-persist": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/vuex-persist/-/vuex-persist-3.1.3.tgz", - "integrity": "sha512-QWOpP4SxmJDC5Y1+0+Yl/F4n7z27syd1St/oP+IYCGe0X0GFio0Zan6kngZFufdIhJm+5dFGDo3VG5kdkCGeRQ==", - "requires": { - "deepmerge": "^4.2.2", - "flatted": "^3.0.5" - } - }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", diff --git a/package.json b/package.json index 92c65bf..1b2b98e 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "pug-plain-loader": "^1.0.0", "reveal.js": "^4.3.0", "vue": "^3.2.31", + "vue-advanced-chat": "https://github.com/antoine92190/vue-advanced-chat/tarball/next", "vue-router": "^4.0.13" }, "devDependencies": { @@ -36,15 +37,18 @@ "@vue/test-utils": "^2.0.0-rc.18", "@vue/vue3-jest": "^27.0.0-alpha.4", "autoprefixer": "^10.4.4", + "dexie": "^3.2.2", "eslint": "^8.12.0", "eslint-plugin-import": "^2.25.4", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^6.0.0", "eslint-plugin-standard": "^5.0.0", "eslint-plugin-vue": "^8.5.0", + "fake-indexeddb": "^3.1.7", "flush-promises": "^1.0.2", "jest": "^27.5.1", "lint-staged": "^12.3.7", + "node-fetch": "^2.6.6", "postcss": "^8.4.12", "regenerator-runtime": "^0.13.9", "sass": "^1.49.9", diff --git a/src/components/base/GameChatMessages.vue b/src/components/base/GameChatMessages.vue new file mode 100644 index 0000000..8beb45f --- /dev/null +++ b/src/components/base/GameChatMessages.vue @@ -0,0 +1,90 @@ + + + + + diff --git a/tests/setupTests.js b/tests/setupTests.js index abf6292..bd15b86 100644 --- a/tests/setupTests.js +++ b/tests/setupTests.js @@ -1 +1,4 @@ import 'regenerator-runtime/runtime' +import fetch from 'node-fetch' + +global.fetch = fetch diff --git a/tests/unit/base/GameChatMessages.spec.js b/tests/unit/base/GameChatMessages.spec.js new file mode 100644 index 0000000..b11ab1a --- /dev/null +++ b/tests/unit/base/GameChatMessages.spec.js @@ -0,0 +1,56 @@ +import { mount } from '@vue/test-utils' + +import { createTestingPinia } from '@pinia/testing' + +import GameChatMessages from '@/components/base/GameChatMessages.vue' + +describe('GameChatMessages', () => { + let wrapper + + beforeEach(() => { + wrapper = mount(GameChatMessages, { + props: { + currentUser: 'Rick Sanchez', + messages: [ + { username: 'Rick Sanchez', content: 'I am Pickle Rick!' }, + { username: 'Morty', content: 'Oh jeez.' } + ] + }, + global: { + plugins: [createTestingPinia({ + initialState: { + 'hack.party game board': { + game: { + players: [ + { + index: 0, + name: 'Morty', + score: 0, + team: undefined + }, + { + index: 1, + name: 'noob noob', + score: 0, + team: undefined + }, + { + index: 2, + name: 'Rick', + score: 0, + team: undefined + } + ] + } + } + } + })] + } + }) + }) + + it('renders with players', async () => { + const players = await wrapper.vm.players + expect(players.length).toBe(3) + }) +})