diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 402eeb701..e61e63f34 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -9,7 +9,7 @@ on: - 'v*' env: - DOCKER_REPO_NAME: kaw393939/mywebclass + DOCKER_REPO_NAME: tawanaarthur/project1 jobs: build: diff --git a/Team_Productivity_Log.md b/Team_Productivity_Log.md new file mode 100644 index 000000000..fc3abad51 --- /dev/null +++ b/Team_Productivity_Log.md @@ -0,0 +1,16 @@ +# Team Productivity Log + +This table tracks the progress of tasks in our project, including the issue title, story points, issue link, status, assigned to and assigned on, completed on, category, and status notes. + +| Issue title | Story points | Issue link | Status | Assigned to, Assigned on | Completed on | Category | Status notes | +|------------------------------------------|--------------|-----------------------------------------------------------------------|-------------|--------------------------|--------------|---------------|----------------------------------------------------------| +| Team Productivity Log | 1 | [Link](https://github.com/tawana0518/mywebclass-simulation/issues/11) | Completed | Rajiv, 2022-03-16 | 2022-03-16 | Documentation | Completed documenting Marked Down File | +| Internationalization Research | 2 | [Link](https://github.com/tawana0518/mywebclass-simulation/issues/3) | In Progress | Rajiv, 2022-03-15 | - | Research | Drafted initial version on Internationalization Research | +| Home Page | 5 | [Link](https://github.com/tawana0518/mywebclass-simulation/issues/2) | In Progress | Rajiv, 2022-03-14 | - | Enhancement | Initial analysis in progress | +| Front End Responsive Frameworks Research | 3 | [Link](https://github.com/tawana0518/mywebclass-simulation/issues/13) | To do | Rajiv, 2022-03-16 | - | Research | | +| Accessibility Research | 2 | [Link](https://github.com/tawana0518/mywebclass-simulation/issues/4) | Completed | Berta, 2022-03-14 | 2022-03-15 | Research | Drafted initial version on Accessibility Research | +| Legal compliance Research | 2 | [Link](https://github.com/tawana0518/mywebclass-simulation/issues/6) | Completed | Berta, 2022-03-14 | 2022-03-15 | Research | Drafted initial version for legal compliance and privacy policy Research | +| SEO research | 2 | [Link](https://github.com/tawana0518/mywebclass-simulation/issues/5) | Completed | Tawana, 2022-03-14 | 2022-03-15 | Research | Researched and draft SEO Research - found in Wiki | +|Playwright Tests Research | 3 | [Link](https://github.com/tawana0518/mywebclass-simulation/issues/12) | In progress | Tawana, 2022-03-17 | - | Research | Continuing research on playwright testing and lighthouse reports | +To add a new task to the table, a team member should create an issue on GitHub and add the link to the table with the relevant details. By keeping track of our progress in this table, we can ensure that tasks are assigned and completed efficiently and effectively. + diff --git a/docker-compose.yml b/docker-compose.yml index 80050ddea..f8bc5479d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.8" services: master_branch: development_branch: - image: kaw393939/mywebclass:development + image: tawanaarthur/project1:development container_name: development_branch pull_policy: always restart: always diff --git a/package-lock.json b/package-lock.json index ff94ff7f0..daec82f8e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mywebclass.org", - "version": "0.1.0", + "version": "0.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mywebclass.org", - "version": "0.1.0", + "version": "0.1.1", "license": "MIT", "dependencies": { "@popperjs/core": "^2.11.6" diff --git a/package.json b/package.json index 9a0bbb78d..fd7eb9d2b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mywebclass.org", - "version": "0.1.0", + "version": "0.1.1", "description": "Help for students and teachers learning advanced technologies.", "main": "src/index.js", "directories": { @@ -25,14 +25,14 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/NJIT-WIS/mywebclass.git" + "url": "git+https://github.com/tawana0518/mywebclass-simulation.git" }, "author": "Keith Williams @ NJIT.EDU", "license": "MIT", "bugs": { - "url": "https://github.com/NJIT-WIS/mywebclass/issues" + "url": "https://github.com/tawana0518/mywebclass-simulation/issues" }, - "homepage": "https://github.com/NJIT-WIS/mywebclass#readme", + "homepage": "https://github.com/tawana0518/mywebclass-simulation#readme", "devDependencies": { "@playwright/test": "^1.31.1", "autoprefixer": "^10.4.13", diff --git a/src/index.html b/src/index.html index ad76fc58c..b069be521 100644 --- a/src/index.html +++ b/src/index.html @@ -1,4 +1,5 @@ + diff --git a/src/js/main.js b/src/js/main.js index 1558c49d5..c7fe348c5 100644 --- a/src/js/main.js +++ b/src/js/main.js @@ -8,6 +8,8 @@ import allPage from './allPages' import contentPage from './contentPage' document.addEventListener('DOMContentLoaded', () => { + // @Rajiv 19th March - Call the setLanguage() function when the DOM content is loaded + setLanguage() allPage.initialize() contentPage.initialize() }) @@ -109,3 +111,15 @@ document.addEventListener('DOMContentLoaded', () => { createPrivacyModal() loadGoogleAnalytics() }) + +// @Rajiv 19th March - Create a JavaScript function in the main.js file to set the language attribute dynamically based on the user's language preference: +function setLanguage () { + // Get the user's preferred language + const userLang = navigator.language || navigator.userLanguage + + // Check if the user's language is supported (in this example, we're checking for English) + const supportedLang = userLang.substring(0, 2).toLowerCase() === 'en' ? 'en' : 'en' + + // Set the 'lang' attribute of the 'html' tag to the supported language + document.documentElement.setAttribute('lang', supportedLang) +} diff --git a/src/scss/styles.scss b/src/scss/styles.scss index 309c1d9d5..259321c3e 100644 --- a/src/scss/styles.scss +++ b/src/scss/styles.scss @@ -26,4 +26,6 @@ body.banner-offset { } } + + \ No newline at end of file diff --git a/tests/mywebclass_internationalization.spec.js b/tests/mywebclass_internationalization.spec.js new file mode 100644 index 000000000..8d7389866 --- /dev/null +++ b/tests/mywebclass_internationalization.spec.js @@ -0,0 +1,26 @@ +import { test, expect } from '@playwright/test' + +test.describe('MyWebClass.org internationalization', () => { + let page + + test.beforeEach(async ({ browser }) => { + page = await browser.newPage() + await page.goto('http://localhost:3000') + }) + + test.afterEach(async () => { + await page.close() + }) + + test('should display the site in "en" when the "Accept-Language" header is set to "en"', async () => { + // Set the Accept-Language header and navigate to the website + await page.setExtraHTTPHeaders({ 'Accept-Language': 'en' }) + await page.goto('http://localhost:3000') + + // Check if the lang attribute of the HTML tag is set to "en" + const langAttribute = await page.getAttribute('html', 'lang') + expect(langAttribute).toBe('en', 'The lang attribute of the HTML tag is not set to "en".') + + // Perform any additional checks for the "en" language version of the website here, e.g., checking specific text or elements + }) +}) diff --git a/tests/mywebclass_privacy.spec.js b/tests/mywebclass_privacy.spec.js new file mode 100644 index 000000000..36b3676fd --- /dev/null +++ b/tests/mywebclass_privacy.spec.js @@ -0,0 +1,21 @@ +/* global localStorage */ +import { test, expect } from '@playwright/test' + +test('test', async ({ page }) => { + await page.goto('http://localhost:3000/') + await page.getByRole('button', { name: 'Agree', exact: true }).click() + + // Retrieve the privacyPolicyAgreed item from local storage + const privacyPolicyAgreed = await page.evaluate(() => { + return localStorage.getItem('privacyPolicyAgreed') + }) + + // Check if privacyPolicyAgreed is set in local storage + expect(privacyPolicyAgreed).toBeTruthy() + + // Click the "Content Template" link + await page.getByRole('link', { name: 'Content Template' }).click() + + // Click the "Section 3" link + await page.getByRole('link', { name: 'Section 3' }).click() +}) diff --git a/tests/mywebclass_seo.spec.js b/tests/mywebclass_seo.spec.js new file mode 100644 index 000000000..9de5d80a9 --- /dev/null +++ b/tests/mywebclass_seo.spec.js @@ -0,0 +1,27 @@ +import { test, expect } from '@playwright/test' + +test.describe('MyWebClass.org tests', () => { + test('SEO tests', async ({ page }) => { + await page.goto('http://localhost:3000/') + // Test for keyword research + const keywords = ['MyWebClass.org'] + const pageContent = await page.textContent('body') + const hasKeywords = keywords.every(keyword => pageContent.includes(keyword)) + expect(hasKeywords).toBeTruthy() + // Test for meta tags + const pageTitle = await page.title() + const pageMetaDescription = await page.$eval('meta[name="description"]', el => el.content) + const pageMetaKeywords = await page.$eval('meta[name="keywords"]', el => el.content) + const hasMetaTags = Boolean(pageTitle && pageMetaDescription && pageMetaKeywords) + expect(hasMetaTags).toBeTruthy() + // Test for URL structure + const pageUrl = page.url() + const pageUrlPathname = new URL(pageUrl).pathname + const hasProperUrlStructure = Boolean(pageUrl && !pageUrl.includes('%20') && pageUrlPathname === '/') + expect(hasProperUrlStructure).toBeTruthy() + // Test for fast load times + const pageLoadTime = await page.evaluate(() => window.performance.timing.domContentLoadedEventEnd - window.performance.timing.navigationStart) + const isFastLoading = pageLoadTime <= 3000 + expect(isFastLoading).toBeTruthy() + }) +})