From f9e6228226492e90725355128e8cfd35d88ab85a Mon Sep 17 00:00:00 2001 From: Annie Date: Thu, 23 Nov 2023 00:16:14 +0800 Subject: [PATCH 01/10] Add 3 stage color: locked, unlocked, completed --- app/src/components/QuestMap.vue | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/app/src/components/QuestMap.vue b/app/src/components/QuestMap.vue index a4fcc1d..b7e72c3 100644 --- a/app/src/components/QuestMap.vue +++ b/app/src/components/QuestMap.vue @@ -1,3 +1,4 @@ + diff --git a/server/package.json b/server/package.json index 581bd9b..b127f77 100644 --- a/server/package.json +++ b/server/package.json @@ -16,7 +16,6 @@ "@linux-odyssey/file-graph": "*", "@linux-odyssey/models": "*", "@linux-odyssey/utils": "*", - "animejs": "^3.2.1", "bcrypt": "^5.1.1", "commander": "^11.0.0", "connect-mongo": "^5.0.0", diff --git a/yarn.lock b/yarn.lock index 501edf5..e5c7d07 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1328,11 +1328,6 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -animejs@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/animejs/-/animejs-3.2.1.tgz#de9fe2e792f44a777a7fdf6ae160e26604b0cdda" - integrity sha512-sWno3ugFryK5nhiDm/2BKeFCpZv7vzerWUcUPyAZLDhMek3+S/p418ldZJbJXo5ZUOpfm2kP2XRO4NJcULMy9A== - ansi-colors@^4.1.1: version "4.1.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" @@ -4556,6 +4551,11 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + lodash.includes@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" @@ -4636,6 +4636,11 @@ long-timeout@0.1.1: resolved "https://registry.yarnpkg.com/long-timeout/-/long-timeout-0.1.1.tgz#9721d788b47e0bcb5a24c2e2bee1a0da55dab514" integrity sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w== +lottie-web@5.12.2: + version "5.12.2" + resolved "https://registry.yarnpkg.com/lottie-web/-/lottie-web-5.12.2.tgz#579ca9fe6d3fd9e352571edd3c0be162492f68e5" + integrity sha512-uvhvYPC8kGPjXT3MyKMrL3JitEAmDMp30lVkuq/590Mw9ok6pWcFCwXJveo0t5uqYw1UREQHofD+jVpdjBv8wg== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -6620,6 +6625,14 @@ vue-toastification@^2.0.0-rc.5: resolved "https://registry.yarnpkg.com/vue-toastification/-/vue-toastification-2.0.0-rc.5.tgz#92798604d806ae473cfb76ed776fae294280f8f8" integrity sha512-q73e5jy6gucEO/U+P48hqX+/qyXDozAGmaGgLFm5tXX4wJBcVsnGp4e/iJqlm9xzHETYOilUuwOUje2Qg1JdwA== +vue3-lottie@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/vue3-lottie/-/vue3-lottie-3.2.0.tgz#7f95831d3483dc304c680a9b2cac6ed098070a2a" + integrity sha512-PtNXbv7iD4XGmK8CXd71aLWmILIR6P6VzLMDw6ZzmDAeuJZuJ0MdOVnn50LOARgq+cOFJsn/2z+7tZh0F9T9qw== + dependencies: + lodash-es "^4.17.21" + lottie-web "5.12.2" + vue@^3.3.4: version "3.3.4" resolved "https://registry.yarnpkg.com/vue/-/vue-3.3.4.tgz#8ed945d3873667df1d0fcf3b2463ada028f88bd6" From c9500c75752d6bbd5abe9832def958896573228d Mon Sep 17 00:00:00 2001 From: Annie Huang Date: Thu, 23 Nov 2023 16:51:18 +0800 Subject: [PATCH 04/10] set back if completed --- app/src/views/GamePage.vue | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/views/GamePage.vue b/app/src/views/GamePage.vue index e641e93..b307d05 100644 --- a/app/src/views/GamePage.vue +++ b/app/src/views/GamePage.vue @@ -90,8 +90,7 @@ onMounted(async () => { - - + From a7eeb8470aff3f71f7b61f198271405bb9c14565 Mon Sep 17 00:00:00 2001 From: Annie Huang Date: Thu, 23 Nov 2023 16:55:34 +0800 Subject: [PATCH 05/10] edit link text --- tests/cypress/e2e/helloworld.cy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/cypress/e2e/helloworld.cy.js b/tests/cypress/e2e/helloworld.cy.js index aaba53f..5c5890b 100644 --- a/tests/cypress/e2e/helloworld.cy.js +++ b/tests/cypress/e2e/helloworld.cy.js @@ -187,7 +187,7 @@ describe('example helloworld app', () => { // Check survey dialog pop up cy.CheckTextElement('#QuestCompleted', '關卡完成!', 'Quest Completed!') cy.get('div[class="modal"]').find('p').should('be.visible') - cy.findByRole('link', { name: '填寫問卷' }).should('be.visible') + cy.findByRole('link', { name: '回到地圖' }).should('be.visible') }) }) }) From 84cf74cdfcbc8313a4864088ee3ad8df04929e6e Mon Sep 17 00:00:00 2001 From: Annie Huang Date: Thu, 23 Nov 2023 17:00:30 +0800 Subject: [PATCH 06/10] extend timeout --- tests/cypress/e2e/helloworld.cy.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/cypress/e2e/helloworld.cy.js b/tests/cypress/e2e/helloworld.cy.js index 5c5890b..a152066 100644 --- a/tests/cypress/e2e/helloworld.cy.js +++ b/tests/cypress/e2e/helloworld.cy.js @@ -187,7 +187,9 @@ describe('example helloworld app', () => { // Check survey dialog pop up cy.CheckTextElement('#QuestCompleted', '關卡完成!', 'Quest Completed!') cy.get('div[class="modal"]').find('p').should('be.visible') - cy.findByRole('link', { name: '回到地圖' }).should('be.visible') + cy.findByRole('link', { name: '回到地圖' }, { timeout: 30000 }).should( + 'be.visible' + ) }) }) }) From 66adfec365268ed815a9ccd1ef896e6fad7bdce3 Mon Sep 17 00:00:00 2001 From: Annie Huang Date: Thu, 23 Nov 2023 22:48:26 +0800 Subject: [PATCH 07/10] fix method --- app/src/components/CompleteModal.vue | 4 ++-- app/src/components/QuestMap.vue | 21 ++++++--------------- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/app/src/components/CompleteModal.vue b/app/src/components/CompleteModal.vue index 81e632d..057a474 100644 --- a/app/src/components/CompleteModal.vue +++ b/app/src/components/CompleteModal.vue @@ -8,7 +8,7 @@ import CompleteAnimation from '../img/complete-animation.json' const showModal = ref(true) // Controls whether the modal is visible or not const router = useRouter() - +const toast = useToast() const closeModal = () => { showModal.value = false } @@ -27,7 +27,7 @@ const backtoMap = async () => { router.push({ name: 'map' }) } catch (err) { // useToast().error('Failed to load map') - useToast().error('無法讀取地圖') + toast.error('無法讀取地圖') console.error(err) } } diff --git a/app/src/components/QuestMap.vue b/app/src/components/QuestMap.vue index 40e9a46..734c2ab 100644 --- a/app/src/components/QuestMap.vue +++ b/app/src/components/QuestMap.vue @@ -77,22 +77,13 @@ const genOption = (nodes, edges) => ({ const { data: { completed, unlocked }, } = params - switch (completed !== unlocked) { - case false: { - // completed==unlocked, when completed or not yet unlocked - if (completed) { - return '#00ff00' - } - return '#454552' - } - case true: { - // completed!=unlocked, only when unlocked but not completed - return '#ADADB5' - } - default: { - return '#454552' - } + if (completed) { + return '#00ff00' } + if (unlocked) { + return '#ADADB5' + } + return '454552' }, }, }, From 277d619518729ae50843f08f95f00e356334948c Mon Sep 17 00:00:00 2001 From: Annie Huang Date: Thu, 23 Nov 2023 23:27:58 +0800 Subject: [PATCH 08/10] fix cypress fail --- tests/cypress/e2e/helloworld.cy.js | 6 ++---- tests/cypress/support/commands.js | 14 +++++++++----- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/tests/cypress/e2e/helloworld.cy.js b/tests/cypress/e2e/helloworld.cy.js index a152066..1dfcb9c 100644 --- a/tests/cypress/e2e/helloworld.cy.js +++ b/tests/cypress/e2e/helloworld.cy.js @@ -137,7 +137,7 @@ describe('example helloworld app', () => { it('Typing in Terminal', () => { cy.typeInCommand('12345{enter}') cy.get('@Terminaltextbox') - .should('contain', 'zsh: command not found: 12345') + .should('contain', 'zsh: command not found: 12345', { timeout: 50000 }) .and('contain', '12345') }) it('Complete the Game(relating UI)', () => { @@ -187,9 +187,7 @@ describe('example helloworld app', () => { // Check survey dialog pop up cy.CheckTextElement('#QuestCompleted', '關卡完成!', 'Quest Completed!') cy.get('div[class="modal"]').find('p').should('be.visible') - cy.findByRole('link', { name: '回到地圖' }, { timeout: 30000 }).should( - 'be.visible' - ) + cy.get('#BacktoMap').should('contain', '回到地圖').and('be.visible') }) }) }) diff --git a/tests/cypress/support/commands.js b/tests/cypress/support/commands.js index de19392..9edb868 100644 --- a/tests/cypress/support/commands.js +++ b/tests/cypress/support/commands.js @@ -9,13 +9,21 @@ Cypress.Commands.add('LoginWithPassword', (username, password) => { }) Cypress.Commands.add('PrepareForGame', () => { cy.visit('/') + // make sure the login page is loaded + cy.url().should('satisfy', (elements) => { + const text = elements + return text.includes('login') || text.includes('register') + }) cy.LoginWithPassword( Cypress.env('defaultAccount'), Cypress.env('defaultPassword') ) + // make sure the map page is loaded cy.url().should('include', '/map') cy.visit('/game/helloworld') - cy.get('.xterm-screen', { timeout: 10000 }) + // make sure the game page is loaded + cy.url().should('include', '/game/helloworld') + cy.get('.xterm-screen', { timeout: 30000 }) .as('Terminaltextbox') .should('be.visible') cy.CheckTextElement('#reset', '重來', 'Reset').click() @@ -24,10 +32,6 @@ Cypress.Commands.add('PrepareForGame', () => { 'contain', 'commander:~ $' ) - cy.get('@Terminaltextbox', { timeout: 150000 }).should( - 'contain', - 'commander:~ $' - ) }) Cypress.Commands.add('typeInCommand', (command) => { cy.get('.xterm-screen', { timeout: 150000 }).type(command) From 1944a69b5311dfd052dc902f48bc74f10fd1ff97 Mon Sep 17 00:00:00 2001 From: Annie Huang Date: Thu, 23 Nov 2023 23:30:38 +0800 Subject: [PATCH 09/10] extend timeout --- tests/cypress/support/commands.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/cypress/support/commands.js b/tests/cypress/support/commands.js index 9edb868..c5e99d1 100644 --- a/tests/cypress/support/commands.js +++ b/tests/cypress/support/commands.js @@ -23,7 +23,7 @@ Cypress.Commands.add('PrepareForGame', () => { cy.visit('/game/helloworld') // make sure the game page is loaded cy.url().should('include', '/game/helloworld') - cy.get('.xterm-screen', { timeout: 30000 }) + cy.get('.xterm-screen', { timeout: 50000 }) .as('Terminaltextbox') .should('be.visible') cy.CheckTextElement('#reset', '重來', 'Reset').click() From fe604f37816e26cbeddd256e45f0dc9d8ea9307b Mon Sep 17 00:00:00 2001 From: Annie Huang Date: Thu, 23 Nov 2023 23:36:30 +0800 Subject: [PATCH 10/10] change verify order --- tests/cypress/e2e/helloworld.cy.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/cypress/e2e/helloworld.cy.js b/tests/cypress/e2e/helloworld.cy.js index 1dfcb9c..533ae77 100644 --- a/tests/cypress/e2e/helloworld.cy.js +++ b/tests/cypress/e2e/helloworld.cy.js @@ -137,8 +137,8 @@ describe('example helloworld app', () => { it('Typing in Terminal', () => { cy.typeInCommand('12345{enter}') cy.get('@Terminaltextbox') - .should('contain', 'zsh: command not found: 12345', { timeout: 50000 }) - .and('contain', '12345') + .should('contain', '12345') + .and('contain', 'zsh: command not found: 12345', { timeout: 50000 }) }) it('Complete the Game(relating UI)', () => { // get answersheet