tests: create some initial Cypress integration tests (#93)

This commit is contained in:
Tyler Wilding 2022-05-07 22:08:45 -04:00 committed by GitHub
parent dd346ee8af
commit 16bc41ea52
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
26 changed files with 5298 additions and 20 deletions

67
.github/workflows/tests.yaml vendored Normal file
View file

@ -0,0 +1,67 @@
name: Cypress Tests
on:
push:
branches:
- '*'
pull_request:
branches:
- main
# TODO - there are improvements that can be made here in terms of caching
# https://docs.cypress.io/guides/continuous-integration/github-actions
# Keeping it simple for the beginning
jobs:
ui-chrome-tests:
name: "Chrome"
timeout-minutes: 15
runs-on: ubuntu-latest
container:
image: xtvaser/cypress-with-hugo:node14.17.0-chrome91-ff89
steps:
- name: Checkout
uses: actions/checkout@v3
- name: "UI Tests - Chrome"
uses: cypress-io/github-action@v2
with:
start: npm run hugo
working-directory: tests
wait-on: "http://localhost:1313"
wait-on-timeout: 120
browser: chrome
record: true
env:
CYPRESS_PROJECT_ID: ${{ secrets.CYPRESS_PROJECT_ID }}
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
# Recommended: pass the GitHub token lets this action correctly
# determine the unique run id necessary to re-run the checks
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ui-firefox-tests:
name: "Firefox"
timeout-minutes: 15
runs-on: ubuntu-latest
container:
image: xtvaser/cypress-with-hugo:node14.17.0-chrome91-ff89
options: --user 1001
steps:
- name: Checkout
uses: actions/checkout@v3
- name: "UI Tests - Firefox"
uses: cypress-io/github-action@v2
with:
start: npm run hugo
working-directory: tests
wait-on: "http://localhost:1313"
wait-on-timeout: 120
browser: firefox
record: true
env:
CYPRESS_PROJECT_ID: ${{ secrets.CYPRESS_PROJECT_ID }}
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
# Recommended: pass the GitHub token lets this action correctly
# determine the unique run id necessary to re-run the checks
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

2
.gitignore vendored
View file

@ -4,3 +4,5 @@ public/
node_modules/
data*.json
!static/compat/*.json
tests/cypress/screenshots
tests/cypress/videos

View file

@ -0,0 +1,7 @@
# https://github.com/cypress-io/cypress/issues/18415
# - recording is currently broken on FF93+
FROM cypress/browsers:node14.17.0-chrome91-ff89
RUN wget https://github.com/gohugoio/hugo/releases/download/v0.96.0/hugo_extended_0.96.0_Linux-64bit.deb
RUN DEBIAN_FRONTEND=noninteractive dpkg --install ./hugo_extended_0.96.0_Linux-64bit.deb

4
tests/cypress.json Normal file
View file

@ -0,0 +1,4 @@
{
"baseUrl": "http://localhost:1313",
"scrollBehavior": "center"
}

View file

@ -0,0 +1,64 @@
[
{
"title": "Test Game 1",
"serial": "SLUS-1234",
"crc": "TEST1234",
"region": "us",
"status": "Playable",
"last_tested_version": "1.1.0",
"last_tested_date": "2015-01-03T00:00:00",
"wiki_link": "https://wiki.pcsx2.net/index.php/Gungriffon_Blaze",
"forum_link": "https://forums.pcsx2.net/showthread.php?tid=28303&action=lastpost"
},
{
"title": "Test Game 2",
"serial": "SLUS-5678",
"crc": "TEST1234",
"region": "us",
"status": "Perfect",
"last_tested_version": "1.1.0",
"last_tested_date": "2015-01-03T00:00:00",
"wiki_link": "https://wiki.pcsx2.net/index.php/Gungriffon_Blaze",
"forum_link": "https://forums.pcsx2.net/showthread.php?tid=28303&action=lastpost"
},
{
"title": "Test Game 3",
"serial": "SLUS-1234",
"crc": "VERYUNIQUE",
"region": "us",
"status": "Nothing",
"last_tested_version": "1.1.0",
"last_tested_date": "2015-01-03T00:00:00",
"wiki_link": "https://wiki.pcsx2.net/index.php/Gungriffon_Blaze",
"forum_link": "https://forums.pcsx2.net/showthread.php?tid=28303&action=lastpost"
},
{
"title": "Only Wiki Link",
"serial": "SLUS-1234",
"crc": "TEST1234",
"region": "us",
"status": "Intro",
"last_tested_version": "1.1.0",
"last_tested_date": "2015-01-03T00:00:00",
"wiki_link": "https://wiki.pcsx2.net/test"
},
{
"title": "Only Forum Link",
"serial": "SLUS-1234",
"crc": "TEST1234",
"region": "us",
"status": "Ingame",
"last_tested_version": "1.1.0",
"last_tested_date": "2015-01-03T00:00:00",
"forum_link": "https://forums.pcsx2.net/test"
},
{
"title": "No Links",
"serial": "SLUS-1234",
"crc": "TEST1234",
"region": "us",
"status": "Menus",
"last_tested_version": "1.1.0",
"last_tested_date": "2015-01-03T00:00:00"
}
]

View file

@ -0,0 +1,721 @@
{
"stableReleases": {
"data": [
{
"version": "v1.6.0",
"url": "https://github.com/PCSX2/pcsx2/releases/tag/v1.6.0",
"semverMajor": 1,
"semverMinor": 6,
"semverPatch": 0,
"description": "Release of Stable Version - v1.6.0",
"assets": {
"Windows": [
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.6.0/pcsx2-v1.6.0-windows-32bit-installer.exe",
"displayName": "Windows 32bit",
"additionalTags": ["installer"],
"downloadCount": 78364
},
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.6.0/pcsx2-v1.6.0-windows-32bit-portable.7z",
"displayName": "Windows 32bit",
"additionalTags": ["portable"],
"downloadCount": 30311
}
],
"Linux": [],
"MacOS": []
},
"type": 1,
"prerelease": false,
"createdAt": "2020-05-07T05:37:51.000Z",
"publishedAt": "2020-05-07T06:31:55.000Z"
},
{
"version": "v1.6.1",
"url": "https://github.com/PCSX2/pcsx2/releases/tag/v1.6.0",
"semverMajor": 1,
"semverMinor": 6,
"semverPatch": 0,
"description": "Release of Stable Version - v1.6.0",
"assets": {
"Windows": [
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.6.0/pcsx2-v1.6.0-windows-32bit-installer.exe",
"displayName": "Windows 32bit",
"additionalTags": ["installer"],
"downloadCount": 78364
},
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.6.0/pcsx2-v1.6.0-windows-32bit-portable.7z",
"displayName": "Windows 32bit",
"additionalTags": ["portable"],
"downloadCount": 30311
}
],
"Linux": [],
"MacOS": []
},
"type": 1,
"prerelease": false,
"createdAt": "2020-05-07T05:37:51.000Z",
"publishedAt": "2020-05-07T06:31:55.000Z"
},
{
"version": "v1.6.2",
"url": "https://github.com/PCSX2/pcsx2/releases/tag/v1.6.0",
"semverMajor": 1,
"semverMinor": 6,
"semverPatch": 0,
"description": "Release of Stable Version - v1.6.0",
"assets": {
"Windows": [
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.6.0/pcsx2-v1.6.0-windows-32bit-installer.exe",
"displayName": "Windows 32bit",
"additionalTags": ["installer"],
"downloadCount": 78364
},
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.6.0/pcsx2-v1.6.0-windows-32bit-portable.7z",
"displayName": "Windows 32bit",
"additionalTags": ["portable"],
"downloadCount": 30311
}
],
"Linux": [],
"MacOS": []
},
"type": 1,
"prerelease": false,
"createdAt": "2020-05-07T05:37:51.000Z",
"publishedAt": "2020-05-07T06:31:55.000Z"
},
{
"version": "v1.6.3",
"url": "https://github.com/PCSX2/pcsx2/releases/tag/v1.6.0",
"semverMajor": 1,
"semverMinor": 6,
"semverPatch": 0,
"description": "Release of Stable Version - v1.6.0",
"assets": {
"Windows": [
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.6.0/pcsx2-v1.6.0-windows-32bit-installer.exe",
"displayName": "Windows 32bit",
"additionalTags": ["installer"],
"downloadCount": 78364
},
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.6.0/pcsx2-v1.6.0-windows-32bit-portable.7z",
"displayName": "Windows 32bit",
"additionalTags": ["portable"],
"downloadCount": 30311
}
],
"Linux": [],
"MacOS": []
},
"type": 1,
"prerelease": false,
"createdAt": "2020-05-07T05:37:51.000Z",
"publishedAt": "2020-05-07T06:31:55.000Z"
},
{
"version": "v1.6.4",
"url": "https://github.com/PCSX2/pcsx2/releases/tag/v1.6.0",
"semverMajor": 1,
"semverMinor": 6,
"semverPatch": 0,
"description": "Release of Stable Version - v1.6.0",
"assets": {
"Windows": [
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.6.0/pcsx2-v1.6.0-windows-32bit-installer.exe",
"displayName": "Windows 32bit",
"additionalTags": ["installer"],
"downloadCount": 78364
},
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.6.0/pcsx2-v1.6.0-windows-32bit-portable.7z",
"displayName": "Windows 32bit",
"additionalTags": ["portable"],
"downloadCount": 30311
}
],
"Linux": [],
"MacOS": []
},
"type": 1,
"prerelease": false,
"createdAt": "2020-05-07T05:37:51.000Z",
"publishedAt": "2020-05-07T06:31:55.000Z"
},
{
"version": "v1.6.5",
"url": "https://github.com/PCSX2/pcsx2/releases/tag/v1.6.0",
"semverMajor": 1,
"semverMinor": 6,
"semverPatch": 0,
"description": "Release of Stable Version - v1.6.0",
"assets": {
"Windows": [
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.6.0/pcsx2-v1.6.0-windows-32bit-installer.exe",
"displayName": "Windows 32bit",
"additionalTags": ["installer"],
"downloadCount": 78364
},
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.6.0/pcsx2-v1.6.0-windows-32bit-portable.7z",
"displayName": "Windows 32bit",
"additionalTags": ["portable"],
"downloadCount": 30311
}
],
"Linux": [],
"MacOS": []
},
"type": 1,
"prerelease": false,
"createdAt": "2020-05-07T05:37:51.000Z",
"publishedAt": "2020-05-07T06:31:55.000Z"
},
{
"version": "v1.6.6",
"url": "https://github.com/PCSX2/pcsx2/releases/tag/v1.6.0",
"semverMajor": 1,
"semverMinor": 6,
"semverPatch": 0,
"description": "Release of Stable Version - v1.6.0",
"assets": {
"Windows": [
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.6.0/pcsx2-v1.6.0-windows-32bit-installer.exe",
"displayName": "Windows 32bit",
"additionalTags": ["installer"],
"downloadCount": 78364
},
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.6.0/pcsx2-v1.6.0-windows-32bit-portable.7z",
"displayName": "Windows 32bit",
"additionalTags": ["portable"],
"downloadCount": 30311
}
],
"Linux": [],
"MacOS": []
},
"type": 1,
"prerelease": false,
"createdAt": "2020-05-07T05:37:51.000Z",
"publishedAt": "2020-05-07T06:31:55.000Z"
},
{
"version": "v1.6.7",
"url": "https://github.com/PCSX2/pcsx2/releases/tag/v1.6.0",
"semverMajor": 1,
"semverMinor": 6,
"semverPatch": 0,
"description": "Release of Stable Version - v1.6.0",
"assets": {
"Windows": [
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.6.0/pcsx2-v1.6.0-windows-32bit-installer.exe",
"displayName": "Windows 32bit",
"additionalTags": ["installer"],
"downloadCount": 78364
},
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.6.0/pcsx2-v1.6.0-windows-32bit-portable.7z",
"displayName": "Windows 32bit",
"additionalTags": ["portable"],
"downloadCount": 30311
}
],
"Linux": [],
"MacOS": []
},
"type": 1,
"prerelease": false,
"createdAt": "2020-05-07T05:37:51.000Z",
"publishedAt": "2020-05-07T06:31:55.000Z"
},
{
"version": "v1.6.8",
"url": "https://github.com/PCSX2/pcsx2/releases/tag/v1.6.0",
"semverMajor": 1,
"semverMinor": 6,
"semverPatch": 0,
"description": "Release of Stable Version - v1.6.0",
"assets": {
"Windows": [
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.6.0/pcsx2-v1.6.0-windows-32bit-installer.exe",
"displayName": "Windows 32bit",
"additionalTags": ["installer"],
"downloadCount": 78364
},
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.6.0/pcsx2-v1.6.0-windows-32bit-portable.7z",
"displayName": "Windows 32bit",
"additionalTags": ["portable"],
"downloadCount": 30311
}
],
"Linux": [],
"MacOS": []
},
"type": 1,
"prerelease": false,
"createdAt": "2020-05-07T05:37:51.000Z",
"publishedAt": "2020-05-07T06:31:55.000Z"
},
{
"version": "v1.6.9",
"url": "https://github.com/PCSX2/pcsx2/releases/tag/v1.6.0",
"semverMajor": 1,
"semverMinor": 6,
"semverPatch": 0,
"description": "Release of Stable Version - v1.6.0",
"assets": {
"Windows": [
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.6.0/pcsx2-v1.6.0-windows-32bit-installer.exe",
"displayName": "Windows 32bit",
"additionalTags": ["installer"],
"downloadCount": 78364
},
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.6.0/pcsx2-v1.6.0-windows-32bit-portable.7z",
"displayName": "Windows 32bit",
"additionalTags": ["portable"],
"downloadCount": 30311
}
],
"Linux": [],
"MacOS": []
},
"type": 1,
"prerelease": false,
"createdAt": "2020-05-07T05:37:51.000Z",
"publishedAt": "2020-05-07T06:31:55.000Z"
},
{
"version": "v1.6.10",
"url": "https://github.com/PCSX2/pcsx2/releases/tag/v1.6.0",
"semverMajor": 1,
"semverMinor": 6,
"semverPatch": 0,
"description": "Release of Stable Version - v1.6.0",
"assets": {
"Windows": [
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.6.0/pcsx2-v1.6.0-windows-32bit-installer.exe",
"displayName": "Windows 32bit",
"additionalTags": ["installer"],
"downloadCount": 78364
},
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.6.0/pcsx2-v1.6.0-windows-32bit-portable.7z",
"displayName": "Windows 32bit",
"additionalTags": ["portable"],
"downloadCount": 30311
}
],
"Linux": [],
"MacOS": []
},
"type": 1,
"prerelease": false,
"createdAt": "2020-05-07T05:37:51.000Z",
"publishedAt": "2020-05-07T06:31:55.000Z"
}
],
"pageInfo": { "total": 11 }
},
"nightlyReleases": {
"data": [
{
"version": "v1.7.0",
"url": "https://github.com/PCSX2/pcsx2/releases/tag/v1.7.2581",
"semverMajor": 1,
"semverMinor": 7,
"semverPatch": 2581,
"description": "- GS: Flush PRIM on write if pending PRIM draw had TME\n",
"assets": {
"Windows": [],
"Linux": [
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.7.2581/pcsx2-v1.7.2581-linux-AppImage-64bit.AppImage",
"displayName": "Linux AppImage",
"additionalTags": ["64bit"],
"downloadCount": 0
}
],
"MacOS": []
},
"type": 2,
"prerelease": true,
"createdAt": "2022-04-08T10:47:02.000Z",
"publishedAt": "2022-04-08T11:00:48.000Z"
},
{
"version": "v1.7.1",
"url": "https://github.com/PCSX2/pcsx2/releases/tag/v1.7.2581",
"semverMajor": 1,
"semverMinor": 7,
"semverPatch": 2581,
"description": "- GS: Flush PRIM on write if pending PRIM draw had TME\n",
"assets": {
"Windows": [],
"Linux": [
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.7.2581/pcsx2-v1.7.2581-linux-AppImage-64bit.AppImage",
"displayName": "Linux AppImage",
"additionalTags": ["64bit"],
"downloadCount": 0
}
],
"MacOS": []
},
"type": 2,
"prerelease": true,
"createdAt": "2022-04-08T10:47:02.000Z",
"publishedAt": "2022-04-08T11:00:48.000Z"
},
{
"version": "v1.7.2",
"url": "https://github.com/PCSX2/pcsx2/releases/tag/v1.7.2581",
"semverMajor": 1,
"semverMinor": 7,
"semverPatch": 2581,
"description": "- GS: Flush PRIM on write if pending PRIM draw had TME\n",
"assets": {
"Windows": [],
"Linux": [
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.7.2581/pcsx2-v1.7.2581-linux-AppImage-64bit.AppImage",
"displayName": "Linux AppImage",
"additionalTags": ["64bit"],
"downloadCount": 0
}
],
"MacOS": []
},
"type": 2,
"prerelease": true,
"createdAt": "2022-04-08T10:47:02.000Z",
"publishedAt": "2022-04-08T11:00:48.000Z"
},
{
"version": "v1.7.3",
"url": "https://github.com/PCSX2/pcsx2/releases/tag/v1.7.2581",
"semverMajor": 1,
"semverMinor": 7,
"semverPatch": 2581,
"description": "- GS: Flush PRIM on write if pending PRIM draw had TME\n",
"assets": {
"Windows": [],
"Linux": [
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.7.2581/pcsx2-v1.7.2581-linux-AppImage-64bit.AppImage",
"displayName": "Linux AppImage",
"additionalTags": ["64bit"],
"downloadCount": 0
}
],
"MacOS": []
},
"type": 2,
"prerelease": true,
"createdAt": "2022-04-08T10:47:02.000Z",
"publishedAt": "2022-04-08T11:00:48.000Z"
},
{
"version": "v1.7.4",
"url": "https://github.com/PCSX2/pcsx2/releases/tag/v1.7.2581",
"semverMajor": 1,
"semverMinor": 7,
"semverPatch": 2581,
"description": "- GS: Flush PRIM on write if pending PRIM draw had TME\n",
"assets": {
"Windows": [],
"Linux": [
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.7.2581/pcsx2-v1.7.2581-linux-AppImage-64bit.AppImage",
"displayName": "Linux AppImage",
"additionalTags": ["64bit"],
"downloadCount": 0
}
],
"MacOS": []
},
"type": 2,
"prerelease": true,
"createdAt": "2022-04-08T10:47:02.000Z",
"publishedAt": "2022-04-08T11:00:48.000Z"
},
{
"version": "v1.7.5",
"url": "https://github.com/PCSX2/pcsx2/releases/tag/v1.7.2581",
"semverMajor": 1,
"semverMinor": 7,
"semverPatch": 2581,
"description": "- GS: Flush PRIM on write if pending PRIM draw had TME\n",
"assets": {
"Windows": [],
"Linux": [
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.7.2581/pcsx2-v1.7.2581-linux-AppImage-64bit.AppImage",
"displayName": "Linux AppImage",
"additionalTags": ["64bit"],
"downloadCount": 0
}
],
"MacOS": []
},
"type": 2,
"prerelease": true,
"createdAt": "2022-04-08T10:47:02.000Z",
"publishedAt": "2022-04-08T11:00:48.000Z"
},
{
"version": "v1.7.6",
"url": "https://github.com/PCSX2/pcsx2/releases/tag/v1.7.2581",
"semverMajor": 1,
"semverMinor": 7,
"semverPatch": 2581,
"description": "- GS: Flush PRIM on write if pending PRIM draw had TME\n",
"assets": {
"Windows": [],
"Linux": [
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.7.2581/pcsx2-v1.7.2581-linux-AppImage-64bit.AppImage",
"displayName": "Linux AppImage",
"additionalTags": ["64bit"],
"downloadCount": 0
}
],
"MacOS": []
},
"type": 2,
"prerelease": true,
"createdAt": "2022-04-08T10:47:02.000Z",
"publishedAt": "2022-04-08T11:00:48.000Z"
},
{
"version": "v1.7.7",
"url": "https://github.com/PCSX2/pcsx2/releases/tag/v1.7.2581",
"semverMajor": 1,
"semverMinor": 7,
"semverPatch": 2581,
"description": "- GS: Flush PRIM on write if pending PRIM draw had TME\n",
"assets": {
"Windows": [],
"Linux": [
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.7.2581/pcsx2-v1.7.2581-linux-AppImage-64bit.AppImage",
"displayName": "Linux AppImage",
"additionalTags": ["64bit"],
"downloadCount": 0
}
],
"MacOS": []
},
"type": 2,
"prerelease": true,
"createdAt": "2022-04-08T10:47:02.000Z",
"publishedAt": "2022-04-08T11:00:48.000Z"
},
{
"version": "v1.7.8",
"url": "https://github.com/PCSX2/pcsx2/releases/tag/v1.7.2581",
"semverMajor": 1,
"semverMinor": 7,
"semverPatch": 2581,
"description": "- GS: Flush PRIM on write if pending PRIM draw had TME\n",
"assets": {
"Windows": [],
"Linux": [
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.7.2581/pcsx2-v1.7.2581-linux-AppImage-64bit.AppImage",
"displayName": "Linux AppImage",
"additionalTags": ["64bit"],
"downloadCount": 0
}
],
"MacOS": []
},
"type": 2,
"prerelease": true,
"createdAt": "2022-04-08T10:47:02.000Z",
"publishedAt": "2022-04-08T11:00:48.000Z"
},
{
"version": "v1.7.9",
"url": "https://github.com/PCSX2/pcsx2/releases/tag/v1.7.2581",
"semverMajor": 1,
"semverMinor": 7,
"semverPatch": 2581,
"description": "- GS: Flush PRIM on write if pending PRIM draw had TME\n",
"assets": {
"Windows": [],
"Linux": [
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.7.2581/pcsx2-v1.7.2581-linux-AppImage-64bit.AppImage",
"displayName": "Linux AppImage",
"additionalTags": ["64bit"],
"downloadCount": 0
}
],
"MacOS": []
},
"type": 2,
"prerelease": true,
"createdAt": "2022-04-08T10:47:02.000Z",
"publishedAt": "2022-04-08T11:00:48.000Z"
},
{
"version": "v1.7.10",
"url": "https://github.com/PCSX2/pcsx2/releases/tag/v1.7.2581",
"semverMajor": 1,
"semverMinor": 7,
"semverPatch": 2581,
"description": "- GS: Flush PRIM on write if pending PRIM draw had TME\n",
"assets": {
"Windows": [],
"Linux": [
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.7.2581/pcsx2-v1.7.2581-linux-AppImage-64bit.AppImage",
"displayName": "Linux AppImage",
"additionalTags": ["64bit"],
"downloadCount": 0
}
],
"MacOS": []
},
"type": 2,
"prerelease": true,
"createdAt": "2022-04-08T10:47:02.000Z",
"publishedAt": "2022-04-08T11:00:48.000Z"
}
],
"pageInfo": { "total": 11 }
},
"pullRequestBuilds": {
"data": [
{
"number": 5839,
"link": "https://github.com/PCSX2/pcsx2/pull/5839",
"githubUser": "Someone",
"updatedAt": "2022-04-08T22:06:11.000Z",
"body": "Stuff",
"title": "Things",
"additions": 1,
"deletions": 1
},
{
"number": 5839,
"link": "https://github.com/PCSX2/pcsx2/pull/5839",
"githubUser": "Someone",
"updatedAt": "2022-04-08T22:06:11.000Z",
"body": "Stuff",
"title": "Things",
"additions": 1,
"deletions": 1
},
{
"number": 5839,
"link": "https://github.com/PCSX2/pcsx2/pull/5839",
"githubUser": "Someone",
"updatedAt": "2022-04-08T22:06:11.000Z",
"body": "Stuff",
"title": "Things",
"additions": 1,
"deletions": 1
},
{
"number": 5839,
"link": "https://github.com/PCSX2/pcsx2/pull/5839",
"githubUser": "Someone",
"updatedAt": "2022-04-08T22:06:11.000Z",
"body": "Stuff",
"title": "Things",
"additions": 1,
"deletions": 1
},
{
"number": 5839,
"link": "https://github.com/PCSX2/pcsx2/pull/5839",
"githubUser": "Someone",
"updatedAt": "2022-04-08T22:06:11.000Z",
"body": "Stuff",
"title": "Things",
"additions": 1,
"deletions": 1
},
{
"number": 5839,
"link": "https://github.com/PCSX2/pcsx2/pull/5839",
"githubUser": "Someone",
"updatedAt": "2022-04-08T22:06:11.000Z",
"body": "Stuff",
"title": "Things",
"additions": 1,
"deletions": 1
},
{
"number": 5839,
"link": "https://github.com/PCSX2/pcsx2/pull/5839",
"githubUser": "Someone",
"updatedAt": "2022-04-08T22:06:11.000Z",
"body": "Stuff",
"title": "Things",
"additions": 1,
"deletions": 1
},
{
"number": 5839,
"link": "https://github.com/PCSX2/pcsx2/pull/5839",
"githubUser": "Someone",
"updatedAt": "2022-04-08T22:06:11.000Z",
"body": "Stuff",
"title": "Things",
"additions": 1,
"deletions": 1
},
{
"number": 5839,
"link": "https://github.com/PCSX2/pcsx2/pull/5839",
"githubUser": "Someone",
"updatedAt": "2022-04-08T22:06:11.000Z",
"body": "Stuff",
"title": "Things",
"additions": 1,
"deletions": 1
},
{
"number": 5839,
"link": "https://github.com/PCSX2/pcsx2/pull/5839",
"githubUser": "Someone",
"updatedAt": "2022-04-08T22:06:11.000Z",
"body": "Stuff",
"title": "Things",
"additions": 1,
"deletions": 1
},
{
"number": 5839,
"link": "https://github.com/PCSX2/pcsx2/pull/5839",
"githubUser": "Someone",
"updatedAt": "2022-04-08T22:06:11.000Z",
"body": "Stuff",
"title": "Things",
"additions": 1,
"deletions": 1
}
],
"pageInfo": { "total": 11 }
}
}

View file

@ -0,0 +1,14 @@
{
"stableReleases": {
"data": [],
"pageInfo": { "total": 0 }
},
"nightlyReleases": {
"data": [],
"pageInfo": { "total": 0 }
},
"pullRequestBuilds": {
"data": [],
"pageInfo": { "total": 0 }
}
}

View file

@ -0,0 +1,70 @@
{
"stableReleases": {
"data": [
{
"version": "v1.6.0",
"url": "https://github.com/PCSX2/pcsx2/releases/tag/v1.6.0",
"semverMajor": 1,
"semverMinor": 6,
"semverPatch": 0,
"description": "Release of Stable Version - v1.6.0",
"assets": {
"Windows": [
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.6.0/pcsx2-v1.6.0-windows-32bit-installer.exe",
"displayName": "Windows 32bit",
"additionalTags": ["installer"],
"downloadCount": 78364
},
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.6.0/pcsx2-v1.6.0-windows-32bit-portable.7z",
"displayName": "Windows 32bit",
"additionalTags": ["portable"],
"downloadCount": 30311
}
],
"Linux": [],
"MacOS": []
},
"type": 1,
"prerelease": false,
"createdAt": "2020-05-07T05:37:51.000Z",
"publishedAt": "2020-05-07T06:31:55.000Z"
}
],
"pageInfo": { "total": 1 }
},
"nightlyReleases": {
"data": [
{
"version": "v1.7.2581",
"url": "https://github.com/PCSX2/pcsx2/releases/tag/v1.7.2581",
"semverMajor": 1,
"semverMinor": 7,
"semverPatch": 2581,
"description": "- GS: Flush PRIM on write if pending PRIM draw had TME\n",
"assets": {
"Windows": [],
"Linux": [
{
"url": "https://github.com/PCSX2/pcsx2/releases/download/v1.7.2581/pcsx2-v1.7.2581-linux-AppImage-64bit.AppImage",
"displayName": "Linux AppImage",
"additionalTags": ["64bit"],
"downloadCount": 0
}
],
"MacOS": []
},
"type": 2,
"prerelease": true,
"createdAt": "2022-04-08T10:47:02.000Z",
"publishedAt": "2022-04-08T11:00:48.000Z"
}
],
"pageInfo": { "total": 1 }
},
"pullRequestBuilds": {
"data": [],
"pageInfo": { "total": 0 }
}
}

View file

@ -0,0 +1,26 @@
describe('Cookie consent', () => {
beforeEach('ensure the page loads', () => {
cy.visit('/');
});
it('appears and is dismissable', () => {
cy.server();
cy.get('.cc-window');
cy.get('.cc-deny');
cy.get('.cc-allow').click();
cy.get('.cc-window').should('not.visible');
cy.route('GET', 'https://pagead2.googlesyndication.com/**').as('get')
cy.wait('@get').should((xhr) => {
expect(xhr.url, 'get url').to.match(/.*pagead2\.googlesyndication.*/);
});
});
it('no reaching out to google prior to consent', () => {
cy.server();
cy.get('.cc-window');
cy.get('.cc-deny').click();
cy.get('.cc-window').should('not.visible');
cy.wait(1000);
cy.requestsCountByUrlPrefix('https://pagead2.googlesyndication.com').should('eq', 0);
});
});

View file

@ -0,0 +1,197 @@
describe('navbar - desktop', () => {
beforeEach(() => {
cy.viewport(1024, 768);
cy.visit('/');
cy.get('.cc-deny').click();
cy.get('.navbar-toggler').should('not.visible');
});
it('download page', () => {
cy.get('.nav-middle > :nth-child(1) > .nav-link')
.should('have.attr', 'href')
.and('equal', '/downloads')
.then((href) => {
cy.visit(href)
});
});
it('compatibility page', () => {
cy.get('.nav-middle > :nth-child(2) > .nav-link')
.should('have.attr', 'href')
.and('equal', '/compat')
.then((href) => {
cy.visit(href)
});
});
it('blog page', () => {
cy.get('.nav-middle > :nth-child(3) > .nav-link')
.should('have.attr', 'href')
.and('equal', '/blog')
.then((href) => {
cy.visit(href)
});
});
it('discord link', () => {
cy.get(':nth-child(4) > :nth-child(1) > .nav-link')
.should('contain.text', "Discord")
.should('have.attr', 'href')
.should('match', /^https:\/\/discord.com\/invite\/.*/);
});
it('github link', () => {
cy.get(':nth-child(4) > :nth-child(2) > .nav-link')
.should('contain.text', "Github")
.should('have.attr', 'href')
.should('equal', "https://github.com/PCSX2");
});
it('forum link', () => {
cy.get(':nth-child(4) > :nth-child(3) > .nav-link')
.should('contain.text', "Forums")
.should('have.attr', 'href')
.should('equal', "https://forums.pcsx2.net/");
});
it('wiki link', () => {
cy.get(':nth-child(4) > :nth-child(4) > .nav-link')
.should('contain.text', "Wiki")
.should('have.attr', 'href')
.should('equal', "https://wiki.pcsx2.net");
});
it('twitter link', () => {
cy.get(':nth-child(4) > :nth-child(5) > .nav-link')
.should('contain.text', "Twitter")
.should('have.attr', 'href')
.should('equal', 'https://twitter.com/PCSX2');
});
it('youtube link', () => {
cy.get(':nth-child(4) > :nth-child(6) > .nav-link')
.should('contain.text', "YouTube")
.should('have.attr', 'href')
.should('equal', 'https://www.youtube.com/user/PCSX2team');
});
it('theme is switchable', () => {
// get current theme
cy.get("html").then(($el) => {
if ($el.hasClass('theme-dark')) {
cy.get('.theme-toggle-label').click();
cy.get("html").should('have.class', 'theme-light');
} else {
cy.get('.theme-toggle-label').click();
cy.get("html").should('have.class', 'theme-dark');
}
});
});
});
describe('navbar - mobile', () => {
beforeEach(() => {
cy.viewport(320, 568);
cy.visit('/');
cy.get('.cc-deny').click();
});
it('is collapsed', () => {
cy.get('[data-test-id="about-section"]').contains('PCSX2');
});
it('can be expanded', () => {
cy.get('.nav-middle > :nth-child(1) > .nav-link').should('not.visible');
cy.get('.navbar-toggler').click();
cy.get('.nav-middle > :nth-child(1) > .nav-link');
});
describe('test links', () => {
beforeEach(() => {
cy.visit('/');
cy.get('.navbar-toggler').click();
});
it('download page', () => {
cy.get('.nav-middle > :nth-child(1) > .nav-link')
.should('have.attr', 'href')
.and('equal', '/downloads')
.then((href) => {
cy.visit(href)
});
});
it('compatibility page', () => {
cy.get('.nav-middle > :nth-child(2) > .nav-link')
.should('have.attr', 'href')
.and('equal', '/compat')
.then((href) => {
cy.visit(href)
});
});
it('blog page', () => {
cy.get('.nav-middle > :nth-child(3) > .nav-link')
.should('have.attr', 'href')
.and('equal', '/blog')
.then((href) => {
cy.visit(href)
});
});
it('discord link', () => {
cy.get(':nth-child(4) > :nth-child(1) > .nav-link')
.should('contain.text', "Discord")
.should('have.attr', 'href')
.should('match', /^https:\/\/discord.com\/invite\/.*/);
});
it('github link', () => {
cy.get(':nth-child(4) > :nth-child(2) > .nav-link')
.should('contain.text', "Github")
.should('have.attr', 'href')
.should('equal', "https://github.com/PCSX2");
});
it('forum link', () => {
cy.get(':nth-child(4) > :nth-child(3) > .nav-link')
.should('contain.text', "Forums")
.should('have.attr', 'href')
.should('equal', "https://forums.pcsx2.net/");
});
it('wiki link', () => {
cy.get(':nth-child(4) > :nth-child(4) > .nav-link')
.should('contain.text', "Wiki")
.should('have.attr', 'href')
.should('equal', "https://wiki.pcsx2.net");
});
it('twitter link', () => {
cy.get(':nth-child(4) > :nth-child(5) > .nav-link')
.should('contain.text', "Twitter")
.should('have.attr', 'href')
.should('equal', 'https://twitter.com/PCSX2');
});
it('youtube link', () => {
cy.get(':nth-child(4) > :nth-child(6) > .nav-link')
.should('contain.text', "YouTube")
.should('have.attr', 'href')
.should('equal', 'https://www.youtube.com/user/PCSX2team');
});
it('theme is switchable', () => {
// get current theme
cy.get("html").then(($el) => {
if ($el.hasClass('theme-dark')) {
cy.get('.theme-toggle-label').click();
cy.get("html").should('have.class', 'theme-light');
} else {
cy.get('.theme-toggle-label').click();
cy.get("html").should('have.class', 'theme-dark');
}
});
});
});
});

View file

@ -0,0 +1,59 @@
describe('Blog Page - Desktop', () => {
beforeEach('ensure the page loads', () => {
cy.viewport(1024, 768);
cy.visit('/blog');
cy.get('.cc-deny').click();
});
it('all categories active by default', { scrollBehavior: 'center' }, () => {
cy.get('[data-test-id="tag-button-all"]').should('have.class', 'active');
});
it('pagination functions', { scrollBehavior: 'center' }, () => {
cy.get('.pagination > .active > .page-link').contains("1");
cy.get('.pagination > :nth-child(4) > .page-link').click();
cy.location('href').should('eq', Cypress.config("baseUrl") + '/blog/page/2/');
});
it('scope to developer blogs', { scrollBehavior: 'center' }, () => {
cy.get('[data-test-id="tag-button-row"]').find('.btn').contains('Developer Blogs').click();
cy.location('href').should('eq', Cypress.config("baseUrl") + '/tags/devblog/');
cy.get('[data-test-id="tag-button-row"]').find('.btn').contains('Developer Blogs').should('have.class', 'active');
});
it('scope to progress reports', { scrollBehavior: 'center' }, () => {
cy.get('[data-test-id="tag-button-row"]').find('.btn').contains('Progress Reports').click();
cy.location('href').should('eq', Cypress.config("baseUrl") + '/tags/progress-report/');
cy.get('[data-test-id="tag-button-row"]').find('.btn').contains('Progress Reports').should('have.class', 'active');
});
});
describe('Blog Page - Mobile', () => {
beforeEach('ensure the page loads', () => {
cy.viewport(320, 568);
cy.visit('/blog');
cy.get('.cc-deny').click();
});
it('all categories active by default', { scrollBehavior: 'center' }, () => {
cy.get('[data-test-id="tag-button-all"]').should('have.class', 'active');
});
it('pagination functions', { scrollBehavior: 'center' }, () => {
cy.get('.pagination > .active > .page-link').contains("1");
cy.get('.pagination > :nth-child(4) > .page-link').click();
cy.location('href').should('eq', Cypress.config("baseUrl") + '/blog/page/2/');
});
it('scope to developer blogs', { scrollBehavior: 'center' }, () => {
cy.get('[data-test-id="tag-button-row"]').find('.btn').contains('Developer Blogs').click();
cy.location('href').should('eq', Cypress.config("baseUrl") + '/tags/devblog/');
cy.get('[data-test-id="tag-button-row"]').find('.btn').contains('Developer Blogs').should('have.class', 'active');
});
it('scope to progress reports', { scrollBehavior: 'center' }, () => {
cy.get('[data-test-id="tag-button-row"]').find('.btn').contains('Progress Reports').click();
cy.location('href').should('eq', Cypress.config("baseUrl") + '/tags/progress-report/');
cy.get('[data-test-id="tag-button-row"]').find('.btn').contains('Progress Reports').should('have.class', 'active');
});
});

View file

@ -0,0 +1,470 @@
describe('Compatibility Page - Desktop', () => {
beforeEach('set viewport size', () => {
cy.viewport(1024, 768);
});
describe('pagination', { scrollBehavior: 'center' }, () => {
before('load page', () => {
cy.visit('/compat');
cy.get('.cc-deny').click();
});
it('successfully loads', () => {
cy.get(".table-responsive").find(".game-title").its('length').should('gt', 0);
});
it('pagination works', () => {
cy.get(".table-responsive").first(".game-title").contains("0 Story");
cy.get('#compat-pagination-container > :nth-child(2) > button').click();
cy.get(".table-responsive").first(".game-title").contains("Ace Combat Zero - The Belkan War");
});
});
describe('page size', { scrollBehavior: 'center' }, () => {
before('load page', () => {
cy.visit('/compat');
cy.get('.cc-deny').click();
});
it('successfully loads', () => {
cy.get(".table-responsive").find(".game-title").its('length').should('gt', 0);
});
it('can change page size - 50', () => {
cy.get('#compat-page-size').click();
cy.get(':nth-child(2) > .dropdown-item').click();
cy.get(".table-responsive").find(".game-title").its('length').should('gte', 50);
});
it('can change page size - 100', () => {
cy.get('#compat-page-size').click();
cy.get(':nth-child(3) > .dropdown-item').click();
cy.get(".table-responsive").find(".game-title").its('length').should('gte', 100);
});
it('can change page size - 250', () => {
cy.get('#compat-page-size').click();
cy.get(':nth-child(4) > .dropdown-item').click();
cy.get(".table-responsive").find(".game-title").its('length').should('gte', 250);
});
});
describe('compat data empty', { scrollBehavior: 'center' }, () => {
before('load page', () => {
cy.intercept(
{
method: 'GET',
url: '/compat/data.min.json',
},
[]
).as('getCompatData')
cy.visit('/compat');
cy.get('.cc-deny').click();
});
it('successfully loads', () => {
cy.get("#compat-table-body").contains("No Results Found");
});
});
describe('compatibility and filtering', { scrollBehavior: 'center' }, () => {
before('load page', () => {
cy.intercept(
{
method: 'GET',
url: '/compat/data.min.json',
},
{ fixture: 'compat_search_data.json' }
).as('getCompatData')
cy.visit('/compat');
cy.get('.cc-deny').click();
});
it('successfully loads', () => {
cy.get(".table-responsive").find(".game-title").its('length').should('eq', 6);
});
it('percentages are correct', () => {
cy.get('#compat-filter-perfect').contains("16.67%");
cy.get('#compat-filter-playable').contains("16.67%");
cy.get('#compat-filter-ingame').contains("16.67%");
cy.get('#compat-filter-menus').contains("16.67%");
cy.get('#compat-filter-intro').contains("16.67%");
cy.get('#compat-filter-nothing').contains("16.67%");
});
it('only perfect', () => {
// cy.get('#compat-filter-perfect').click();
cy.get('#compat-filter-playable').click({force: true});
cy.get('#compat-filter-ingame').click({force: true});
cy.get('#compat-filter-menus').click({force: true});
cy.get('#compat-filter-intro').click({force: true});
cy.get('#compat-filter-nothing').click({force: true});
cy.get(".table-responsive").find(".game-title").its('length').should('eq', 1);
cy.get(".table-responsive").first(".game-title").contains("Test Game 2");
cy.get(".table-responsive").first(".game-title").get("i.Perfect");
});
it('only playble', () => {
cy.get('#compat-filter-perfect').click({force: true});
cy.get('#compat-filter-playable').click({force: true});
// cy.get('#compat-filter-ingame').click();
// cy.get('#compat-filter-menus').click();
// cy.get('#compat-filter-intro').click();
// cy.get('#compat-filter-nothing').click();
cy.get(".table-responsive").find(".game-title").its('length').should('eq', 1);
cy.get(".table-responsive").first(".game-title").contains("Test Game 1");
cy.get(".table-responsive").first(".game-title").get("i.Playable");
});
it('only ingame', () => {
// cy.get('#compat-filter-perfect').click();
cy.get('#compat-filter-playable').click({force: true});
cy.get('#compat-filter-ingame').click({force: true});
// cy.get('#compat-filter-menus').click();
// cy.get('#compat-filter-intro').click();
// cy.get('#compat-filter-nothing').click();
cy.get(".table-responsive").find(".game-title").its('length').should('eq', 1);
cy.get(".table-responsive").first(".game-title").contains("Only Forum Link");
cy.get(".table-responsive").first(".game-title").get("i.Ingame");
});
it('only menus', () => {
// cy.get('#compat-filter-perfect').click();
// cy.get('#compat-filter-playable').click();
cy.get('#compat-filter-ingame').click({force: true});
cy.get('#compat-filter-menus').click({force: true});
// cy.get('#compat-filter-intro').click();
// cy.get('#compat-filter-nothing').click();
cy.get(".table-responsive").find(".game-title").its('length').should('eq', 1);
cy.get(".table-responsive").first(".game-title").contains("No Links");
cy.get(".table-responsive").first(".game-title").get("i.Menus");
});
it('only intros', () => {
// cy.get('#compat-filter-perfect').click();
// cy.get('#compat-filter-playable').click();
// cy.get('#compat-filter-ingame').click();
cy.get('#compat-filter-menus').click({force: true});
cy.get('#compat-filter-intro').click({force: true});
// cy.get('#compat-filter-nothing').click();
cy.get(".table-responsive").find(".game-title").its('length').should('eq', 1);
cy.get(".table-responsive").first(".game-title").contains("Only Wiki Link");
cy.get(".table-responsive").first(".game-title").get("i.Intro");
});
it('only nothing', () => {
// cy.get('#compat-filter-perfect').click();
// cy.get('#compat-filter-playable').click();
// cy.get('#compat-filter-ingame').click();
// cy.get('#compat-filter-menus').click();
cy.get('#compat-filter-intro').click({force: true});
cy.get('#compat-filter-nothing').click({force: true});
cy.get(".table-responsive").find(".game-title").its('length').should('eq', 1);
cy.get(".table-responsive").first(".game-title").contains("Test Game 3");
cy.get(".table-responsive").first(".game-title").get("i.Nothing");
});
});
describe('searching', { scrollBehavior: 'center' }, () => {
before('load page', () => {
cy.intercept(
{
method: 'GET',
url: '/compat/data.min.json',
},
{ fixture: 'compat_search_data.json' }
).as('getCompatData')
cy.visit('/compat');
cy.get('.cc-deny').click();
});
it('successfully loads', () => {
cy.get(".table-responsive").find(".game-title").its('length').should('gt', 0);
});
it('entry with no links', () => {
cy.get("tr").contains("No Links").siblings().find("a").should('not.exist');
});
it('entry with only wiki link', () => {
cy.get("tr").contains("Only Wiki Link").siblings().get('a > .fa-circle-info');
});
it('search by name - many', () => {
cy.get('#compat-search').type("{selectAll}tEsT gAeM");
cy.get(".table-responsive").find(".game-title").its('length').should('eq', 3);
});
it('search by name - unique', () => {
cy.get('#compat-search').type("{selectAll}No Links");
cy.get(".table-responsive").find(".game-title").its('length').should('eq', 1);
});
it('search by crc - many', () => {
cy.get('#compat-search').type("{selectAll}TEST1234");
cy.get(".table-responsive").find(".game-title").its('length').should('eq', 5);
});
it('search by crc - unique', () => {
cy.get('#compat-search').type("{selectAll}VERYUNIQUE");
cy.get(".table-responsive").find(".game-title").its('length').should('eq', 1);
});
it('search by serial - many', () => {
cy.get('#compat-search').type("{selectAll}SLUS-1234");
cy.get(".table-responsive").find(".game-title").its('length').should('eq', 5);
});
it('search by serial - unique', () => {
cy.get('#compat-search').type("{selectAll}SLUS-4567");
cy.get(".table-responsive").find(".game-title").its('length').should('eq', 1);
});
it('search - no results', () => {
cy.get('#compat-search').type("{selectAll}complete garbage");
cy.get("#compat-table-body").contains("No Results Found");
});
});
});
describe('Compatibility Page - Mobile', () => {
beforeEach('set viewport size', () => {
cy.viewport(320, 568);
});
describe('correct columns are hidden', { scrollBehavior: 'center' }, () => {
before('load page', () => {
cy.visit('/compat');
cy.get('.cc-deny').click();
});
it('successfully loads', () => {
cy.get(".table-responsive").find(".game-title").its('length').should('gt', 0);
});
});
describe('pagination', { scrollBehavior: 'center' }, () => {
before('load page', () => {
cy.visit('/compat');
cy.get('.cc-deny').click();
});
it('successfully loads', () => {
cy.get(".table-responsive").find(".game-title").its('length').should('gt', 0);
});
it('pagination works', () => {
cy.get(".table-responsive").first(".game-title").contains("0 Story");
cy.get('#compat-pagination-container > :nth-child(2) > button').click();
cy.get(".table-responsive").first(".game-title").contains("Ace Combat Zero - The Belkan War");
});
});
describe('page size', { scrollBehavior: 'center' }, () => {
before('load page', () => {
cy.visit('/compat');
cy.get('.cc-deny').click();
});
it('successfully loads', () => {
cy.get(".table-responsive").find(".game-title").its('length').should('gt', 0);
});
it('can change page size - 50', () => {
cy.get('#compat-page-size').click({force: true});
cy.get(':nth-child(2) > .dropdown-item').click({force: true});
cy.get(".table-responsive").find(".game-title").its('length').should('gte', 50);
});
it('can change page size - 100', () => {
cy.get('#compat-page-size').click({force: true});
cy.get(':nth-child(3) > .dropdown-item').click({force: true});
cy.get(".table-responsive").find(".game-title").its('length').should('gte', 100);
});
it('can change page size - 250', () => {
cy.get('#compat-page-size').click({force: true});
cy.get(':nth-child(4) > .dropdown-item').click({force: true});
cy.get(".table-responsive").find(".game-title").its('length').should('gte', 250);
});
});
describe('compat data empty', { scrollBehavior: 'center' }, () => {
before('load page', () => {
cy.intercept(
{
method: 'GET',
url: '/compat/data.min.json',
},
[]
).as('getCompatData')
cy.visit('/compat');
cy.get('.cc-deny').click();
});
it('successfully loads', () => {
cy.get("#compat-table-body").contains("No Results Found");
});
});
describe('compatibility and filtering', { scrollBehavior: 'center' }, () => {
before('load page', () => {
cy.intercept(
{
method: 'GET',
url: '/compat/data.min.json',
},
{ fixture: 'compat_search_data.json' }
).as('getCompatData')
cy.visit('/compat');
cy.get('.cc-deny').click();
});
it('successfully loads', () => {
cy.get(".table-responsive").find(".game-title").its('length').should('eq', 6);
});
it('percentages are correct', () => {
cy.get('#compat-filter-perfect').contains("16.67%");
cy.get('#compat-filter-playable').contains("16.67%");
cy.get('#compat-filter-ingame').contains("16.67%");
cy.get('#compat-filter-menus').contains("16.67%");
cy.get('#compat-filter-intro').contains("16.67%");
cy.get('#compat-filter-nothing').contains("16.67%");
});
it('only perfect', () => {
// cy.get('#compat-filter-perfect').click();
cy.get('#compat-filter-playable').click({force: true});
cy.get('#compat-filter-ingame').click({force: true});
cy.get('#compat-filter-menus').click({force: true});
cy.get('#compat-filter-intro').click({force: true});
cy.get('#compat-filter-nothing').click({force: true});
cy.get(".table-responsive").find(".game-title").its('length').should('eq', 1);
cy.get(".table-responsive").first(".game-title").contains("Test Game 2");
cy.get(".table-responsive").first(".game-title").get("i.Perfect");
});
it('only playble', () => {
cy.get('#compat-filter-perfect').click({force: true});
cy.get('#compat-filter-playable').click({force: true});
// cy.get('#compat-filter-ingame').click();
// cy.get('#compat-filter-menus').click();
// cy.get('#compat-filter-intro').click();
// cy.get('#compat-filter-nothing').click();
cy.get(".table-responsive").find(".game-title").its('length').should('eq', 1);
cy.get(".table-responsive").first(".game-title").contains("Test Game 1");
cy.get(".table-responsive").first(".game-title").get("i.Playable");
});
it('only ingame', () => {
// cy.get('#compat-filter-perfect').click();
cy.get('#compat-filter-playable').click({force: true});
cy.get('#compat-filter-ingame').click({force: true});
// cy.get('#compat-filter-menus').click();
// cy.get('#compat-filter-intro').click();
// cy.get('#compat-filter-nothing').click();
cy.get(".table-responsive").find(".game-title").its('length').should('eq', 1);
cy.get(".table-responsive").first(".game-title").contains("Only Forum Link");
cy.get(".table-responsive").first(".game-title").get("i.Ingame");
});
it('only menus', () => {
// cy.get('#compat-filter-perfect').click();
// cy.get('#compat-filter-playable').click();
cy.get('#compat-filter-ingame').click({force: true});
cy.get('#compat-filter-menus').click({force: true});
// cy.get('#compat-filter-intro').click();
// cy.get('#compat-filter-nothing').click();
cy.get(".table-responsive").find(".game-title").its('length').should('eq', 1);
cy.get(".table-responsive").first(".game-title").contains("No Links");
cy.get(".table-responsive").first(".game-title").get("i.Menus");
});
it('only intros', () => {
// cy.get('#compat-filter-perfect').click();
// cy.get('#compat-filter-playable').click();
// cy.get('#compat-filter-ingame').click();
cy.get('#compat-filter-menus').click({force: true});
cy.get('#compat-filter-intro').click({force: true});
// cy.get('#compat-filter-nothing').click();
cy.get(".table-responsive").find(".game-title").its('length').should('eq', 1);
cy.get(".table-responsive").first(".game-title").contains("Only Wiki Link");
cy.get(".table-responsive").first(".game-title").get("i.Intro");
});
it('only nothing', () => {
// cy.get('#compat-filter-perfect').click();
// cy.get('#compat-filter-playable').click();
// cy.get('#compat-filter-ingame').click();
// cy.get('#compat-filter-menus').click();
cy.get('#compat-filter-intro').click({force: true});
cy.get('#compat-filter-nothing').click({force: true});
cy.get(".table-responsive").find(".game-title").its('length').should('eq', 1);
cy.get(".table-responsive").first(".game-title").contains("Test Game 3");
cy.get(".table-responsive").first(".game-title").get("i.Nothing");
});
});
describe('searching', { scrollBehavior: 'center' }, () => {
before('load page', () => {
cy.intercept(
{
method: 'GET',
url: '/compat/data.min.json',
},
{ fixture: 'compat_search_data.json' }
).as('getCompatData')
cy.visit('/compat');
cy.get('.cc-deny').click();
});
it('successfully loads', () => {
cy.get(".table-responsive").find(".game-title").its('length').should('gt', 0);
});
it('entry with no links', () => {
cy.get("tr").contains("No Links").siblings().find("a").should('not.exist');
});
it('entry with only wiki link', () => {
cy.get("tr").contains("Only Wiki Link").siblings().get('a > .fa-circle-info');
});
it('search by name - many', () => {
cy.get('#compat-search').type("{selectAll}tEsT gAeM");
cy.get(".table-responsive").find(".game-title").its('length').should('eq', 3);
});
it('search by name - unique', () => {
cy.get('#compat-search').type("{selectAll}No Links");
cy.get(".table-responsive").find(".game-title").its('length').should('eq', 1);
});
it('search by crc - many', () => {
cy.get('#compat-search').type("{selectAll}TEST1234");
cy.get(".table-responsive").find(".game-title").its('length').should('eq', 5);
});
it('search by crc - unique', () => {
cy.get('#compat-search').type("{selectAll}VERYUNIQUE");
cy.get(".table-responsive").find(".game-title").its('length').should('eq', 1);
});
it('search by serial - many', () => {
cy.get('#compat-search').type("{selectAll}SLUS-1234");
cy.get(".table-responsive").find(".game-title").its('length').should('eq', 5);
});
it('search by serial - unique', () => {
cy.get('#compat-search').type("{selectAll}SLUS-4567");
cy.get(".table-responsive").find(".game-title").its('length').should('eq', 1);
});
it('search - no results', () => {
cy.get('#compat-search').type("{selectAll}complete garbage");
cy.get("#compat-table-body").contains("No Results Found");
});
});
});

View file

@ -0,0 +1,263 @@
describe('Download Page - Desktop', () => {
beforeEach('ensure the page loads', () => {
cy.viewport(1024, 768);
});
describe('downtime scenario', { scrollBehavior: 'center' }, () => {
before('load page', () => {
cy.visit('/downloads');
cy.get('.cc-deny').click();
});
it('help guides point to the right page', () => {
cy.get('[data-test-id="setup-guide"]').its('length').should('eq', 2);;
});
it('handles downtime gracefully', { scrollBehavior: 'center' }, () => {
cy.get('[data-test-id="downtime-notification"]');
cy.get('[data-test-id="latest-release-artifacts-loading"]').find('button').its('length').should('eq', 3);
cy.get('#stable-table-body').find('.skeleton-line').its('length').should('gt', 0);
cy.get('[data-test-id="latest-nightly-artifacts-loading"]').find('button').its('length').should('eq', 3);
cy.get('#nightly-table-body').find('.skeleton-line').its('length').should('gt', 0);
});
});
describe('latest artifacts', { scrollBehavior: 'center' }, () => {
before('load page', () => {
cy.intercept(
{
method: 'GET',
url: 'http://localhost:3000/v1/latestReleasesAndPullRequests',
},
{ fixture: 'downloads/only_latest.json' }
).as('getDownloadData')
cy.visit('/downloads');
cy.get('.cc-deny').click();
});
it('latest buttons populated as expected', { scrollBehavior: 'center' }, () => {
cy.get('#latest-release-artifacts > :nth-child(1) .artifact-dropdown').click();
cy.get('#latest-release-artifacts > :nth-child(1) > .dropdown > .dropdown-menu > :nth-child(1) > .dropdown-item').contains("Windows 32bit");
cy.get('#latest-release-artifacts > :nth-child(2) .artifact-dropdown').contains("Linux").should('be.disabled');
cy.get('#latest-nightly-artifacts > :nth-child(1) .artifact-dropdown').contains("Windows").should('be.disabled');
cy.get('#latest-nightly-artifacts > :nth-child(2) .artifact-dropdown').click({force: true});
cy.get('#latest-nightly-artifacts > :nth-child(2) > .dropdown > .dropdown-menu > :nth-child(1) > .dropdown-item').contains("AppImage");
});
it('pull requests are empty', { scrollBehavior: 'center' }, () => {
cy.get('#pull-request-table-body > tr > td').contains("No Pull Requests to Display!");
});
});
describe('no data to show', { scrollBehavior: 'center' }, () => {
before('load page', () => {
cy.intercept(
{
method: 'GET',
url: 'http://localhost:3000/v1/latestReleasesAndPullRequests',
},
{ fixture: 'downloads/no_data.json' }
).as('getDownloadData')
cy.visit('/downloads');
cy.get('.cc-deny').click();
});
it('stable releases are empty', { scrollBehavior: 'center' }, () => {
cy.get('#stable-table-body > tr > td').contains("No Releases to Display!");
});
it('nightly releases are empty', { scrollBehavior: 'center' }, () => {
cy.get('#nightly-table-body > tr > td').contains("No Releases to Display!");
});
it('pull requests are empty', { scrollBehavior: 'center' }, () => {
cy.get('#pull-request-table-body > tr > td').contains("No Pull Requests to Display!");
});
});
describe('multiple pages', { scrollBehavior: 'center' }, () => {
before('load page', () => {
cy.intercept(
{
method: 'GET',
url: 'http://localhost:3000/v1/latestReleasesAndPullRequests',
},
{ fixture: 'downloads/multi_page.json' }
).as('getDownloadData');
cy.visit('/downloads');
cy.get('.cc-deny').click();
});
it('stable releases', { scrollBehavior: 'center' }, () => {
cy.get("#stable-table-body").find("tr").its('length').should('eq', 10);
cy.intercept(
{
method: 'GET',
url: 'http://localhost:3000/v1/stableReleases?offset=10',
},
{ data: [] }
);
cy.get('#stable-pagination-container > :nth-child(2) > .btn').click();
cy.get("#stable-table-body").find("tr").its('length').should('eq', 1);
});
it('nightly releases are empty', { scrollBehavior: 'center' }, () => {
cy.get("#nightly-table-body").find("tr").its('length').should('eq', 10);
cy.intercept(
{
method: 'GET',
url: 'http://localhost:3000/v1/nightlyReleases?offset=10',
},
{ data: [] }
);
cy.get('#nightly-pagination-container > :nth-child(2) > .btn').click({force: true});
cy.get("#nightly-table-body").find("tr").its('length').should('eq', 1);
});
it('pull requests are empty', { scrollBehavior: 'center' }, () => {
cy.get("#pull-request-table-body").find("tr").its('length').should('eq', 10);
cy.intercept(
{
method: 'GET',
url: 'http://localhost:3000/v1/pullRequests?offset=10',
},
{ data: [] }
);
cy.get('#pull-request-pagination-container > :nth-child(2) > .btn').click({force: true});
cy.get("#pull-request-table-body").find("tr").its('length').should('eq', 1);
});
});
});
describe('Download Page - Mobile', () => {
beforeEach('ensure the page loads', () => {
cy.viewport(320, 568);
});
describe('downtime scenario', { scrollBehavior: 'center' }, () => {
before('load page', () => {
cy.visit('/downloads');
cy.get('.cc-deny').click();
});
it('help guides point to the right page', () => {
cy.get('[data-test-id="setup-guide"]').its('length').should('eq', 2);;
});
it('handles downtime gracefully', { scrollBehavior: 'center' }, () => {
cy.get('[data-test-id="downtime-notification"]');
cy.get('[data-test-id="latest-release-artifacts-loading"]').find('button').its('length').should('eq', 3);
cy.get('#stable-table-body').find('.skeleton-line').its('length').should('gt', 0);
cy.get('[data-test-id="latest-nightly-artifacts-loading"]').find('button').its('length').should('eq', 3);
cy.get('#nightly-table-body').find('.skeleton-line').its('length').should('gt', 0);
});
});
describe('latest artifacts', { scrollBehavior: 'center' }, () => {
before('load page', () => {
cy.intercept(
{
method: 'GET',
url: 'http://localhost:3000/v1/latestReleasesAndPullRequests',
},
{ fixture: 'downloads/only_latest.json' }
).as('getDownloadData')
cy.visit('/downloads');
cy.get('.cc-deny').click();
});
it('latest buttons populated as expected', { scrollBehavior: 'center' }, () => {
cy.get('#latest-release-artifacts > :nth-child(1) .artifact-dropdown').click();
cy.get('#latest-release-artifacts > :nth-child(1) > .dropdown > .dropdown-menu > :nth-child(1) > .dropdown-item').contains("Windows 32bit");
cy.get('#latest-release-artifacts > :nth-child(2) .artifact-dropdown').contains("Linux").should('be.disabled');
cy.get('#latest-nightly-artifacts > :nth-child(1) .artifact-dropdown').contains("Windows").should('be.disabled');
cy.get('#latest-nightly-artifacts > :nth-child(2) .artifact-dropdown').click({force: true});
cy.get('#latest-nightly-artifacts > :nth-child(2) > .dropdown > .dropdown-menu > :nth-child(1) > .dropdown-item').contains("AppImage");
});
it('pull requests are empty', { scrollBehavior: 'center' }, () => {
cy.get('#pull-request-table-body > tr > td').contains("No Pull Requests to Display!");
});
});
describe('no data to show', { scrollBehavior: 'center' }, () => {
before('load page', () => {
cy.intercept(
{
method: 'GET',
url: 'http://localhost:3000/v1/latestReleasesAndPullRequests',
},
{ fixture: 'downloads/no_data.json' }
).as('getDownloadData')
cy.visit('/downloads');
cy.get('.cc-deny').click();
});
it('stable releases are empty', { scrollBehavior: 'center' }, () => {
cy.get('#stable-table-body > tr > td').contains("No Releases to Display!");
});
it('nightly releases are empty', { scrollBehavior: 'center' }, () => {
cy.get('#nightly-table-body > tr > td').contains("No Releases to Display!");
});
it('pull requests are empty', { scrollBehavior: 'center' }, () => {
cy.get('#pull-request-table-body > tr > td').contains("No Pull Requests to Display!");
});
});
describe('multiple pages', { scrollBehavior: 'center' }, () => {
before('load page', () => {
cy.intercept(
{
method: 'GET',
url: 'http://localhost:3000/v1/latestReleasesAndPullRequests',
},
{ fixture: 'downloads/multi_page.json' }
).as('getDownloadData');
cy.visit('/downloads');
cy.get('.cc-deny').click();
});
it('stable releases', { scrollBehavior: 'center' }, () => {
cy.get("#stable-table-body").find("tr").its('length').should('eq', 10);
cy.intercept(
{
method: 'GET',
url: 'http://localhost:3000/v1/stableReleases?offset=10',
},
{ data: [] }
);
cy.get('#stable-pagination-container > :nth-child(2) > .btn').click();
cy.get("#stable-table-body").find("tr").its('length').should('eq', 1);
});
it('nightly releases are empty', { scrollBehavior: 'center' }, () => {
cy.get("#nightly-table-body").find("tr").its('length').should('eq', 10);
cy.intercept(
{
method: 'GET',
url: 'http://localhost:3000/v1/nightlyReleases?offset=10',
},
{ data: [] }
);
cy.get('#nightly-pagination-container > :nth-child(2) > .btn').click({force: true});
cy.get("#nightly-table-body").find("tr").its('length').should('eq', 1);
});
it('pull requests are empty', { scrollBehavior: 'center' }, () => {
cy.get("#pull-request-table-body").find("tr").its('length').should('eq', 10);
cy.intercept(
{
method: 'GET',
url: 'http://localhost:3000/v1/pullRequests?offset=10',
},
{ data: [] }
);
cy.get('#pull-request-pagination-container > :nth-child(2) > .btn').click({force: true});
cy.get("#pull-request-table-body").find("tr").its('length').should('eq', 1);
});
});
});

View file

@ -0,0 +1,51 @@
describe('Home Page - Desktop', () => {
beforeEach('ensure the page loads', () => {
cy.viewport(1024, 768);
cy.visit('/');
cy.get('.cc-deny').click();
});
it('about section', { scrollBehavior: 'center' }, () => {
cy.get('[data-test-id="about-section"] > .col-md-4');
cy.get('[data-test-id="about-section"] > .col-md-8').find('a[href="/compat"]').click({force: true});
cy.location('href').should('eq', Cypress.config("baseUrl") + '/compat/');
});
it('progress report section', { scrollBehavior: 'center' }, () => {
cy.get('[data-test-id="progress-report-section"] > .col-md-8').find(".card").its('length').should('eq', 2);
cy.get('[data-test-id="progress-report-section"] > .col-md-4').find(".btn").click({force: true});
cy.location('href').should('eq', Cypress.config("baseUrl") + '/tags/progress-report/');
});
it('blog post section', { scrollBehavior: 'center' }, () => {
cy.get('[data-test-id="blog-post-section"] > .col-md-8').find(".card").its('length').should('eq', 2);
cy.get('[data-test-id="blog-post-section"] > .col-md-4').find(".btn").click({force: true});
cy.location('href').should('eq', Cypress.config("baseUrl") + '/tags/devblog/');
});
});
describe('Home Page - Mobile', () => {
beforeEach('ensure the page loads', () => {
cy.viewport(320, 568);
cy.visit('/');
cy.get('.cc-deny').click();
});
it('about section', { scrollBehavior: 'center' }, () => {
cy.get('[data-test-id="about-section"] > .col-md-4');
cy.get('[data-test-id="about-section"] > .col-md-8').find('a[href="/compat"]').click({force: true});
cy.location('href').should('eq', Cypress.config("baseUrl") + '/compat/');
});
it('progress report section', { scrollBehavior: 'center' }, () => {
cy.get('[data-test-id="progress-report-section"] > .col-md-8').find(".card").its('length').should('eq', 2);
cy.get('[data-test-id="progress-report-section"] > .col-md-4').find(".btn").click({force: true});
cy.location('href').should('eq', Cypress.config("baseUrl") + '/tags/progress-report/');
});
it('blog post section', { scrollBehavior: 'center' }, () => {
cy.get('[data-test-id="blog-post-section"] > .col-md-8').find(".card").its('length').should('eq', 2);
cy.get('[data-test-id="blog-post-section"] > .col-md-4').find(".btn").click({force: true});
cy.location('href').should('eq', Cypress.config("baseUrl") + '/tags/devblog/');
});
});

View file

@ -0,0 +1,22 @@
/// <reference types="cypress" />
// ***********************************************************
// This example plugins/index.js can be used to load plugins
//
// You can change the location of this file or turn off loading
// the plugins file with the 'pluginsFile' configuration option.
//
// You can read more here:
// https://on.cypress.io/plugins-guide
// ***********************************************************
// This function is called when a project is opened or re-opened (e.g. due to
// the project's config changing)
/**
* @type {Cypress.PluginConfig}
*/
// eslint-disable-next-line no-unused-vars
module.exports = (on, config) => {
// `on` is used to hook into various events Cypress emits
// `config` is the resolved Cypress config
}

View file

@ -0,0 +1,32 @@
// ***********************************************
// This example commands.js shows you how to
// create various custom commands and overwrite
// existing commands.
//
// For more comprehensive examples of custom
// commands please read more here:
// https://on.cypress.io/custom-commands
// ***********************************************
//
//
// -- This is a parent command --
// Cypress.Commands.add('login', (email, password) => { ... })
//
//
// -- This is a child command --
// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... })
//
//
// -- This is a dual command --
// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })
//
//
// -- This will overwrite an existing command --
// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
Cypress.Commands.add('requestsCountByUrlPrefix', url =>
cy.wrap().then(() => {
const requests = cy.state('requests') || [];
return requests.filter(req => req.xhr.url.startsWith(url)).length;
})
);

View file

@ -0,0 +1,20 @@
// ***********************************************************
// This example support/index.js is processed and
// loaded automatically before your test files.
//
// This is a great place to put global configuration and
// behavior that modifies Cypress.
//
// You can change the location of this file or turn off
// automatically serving support files with the
// 'supportFile' configuration option.
//
// You can read more here:
// https://on.cypress.io/configuration
// ***********************************************************
// Import commands.js using ES2015 syntax:
import './commands'
// Alternatively you can use CommonJS syntax:
// require('./commands')

3174
tests/package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

15
tests/package.json Normal file
View file

@ -0,0 +1,15 @@
{
"name": "pcsx2-net-www-tests",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"hugo": "cd .. && hugo server -D --noHTTPCache",
"cypress:open": "cypress open"
},
"author": "",
"license": "ISC",
"devDependencies": {
"cypress": "^9.5.2"
}
}

View file

@ -1,16 +1,16 @@
{{ define "main" }}
<div class="container">
<div class="row mt-5">
<div class="row mt-5" data-test-id="tag-button-row">
{{ $currURL := .RelPermalink }}
<div class="col-6 col-md-auto mb-2 mt-2">
<a role="button" class="btn btn-tags{{ if strings.HasSuffix $currURL "/blog/" }} active{{ end }}" href="/blog">
<a role="button" data-test-id="tag-button-all" class="btn btn-tags{{ if strings.HasSuffix $currURL "/blog/" }} active{{ end }}" href="/blog">
All Categories
</a>
</div>
{{ range $name, $taxonomy := .Site.Taxonomies.tags }}
{{ with $.Site.GetPage (printf "/tags/%s" $name) }}
<div class="col-6 col-md-auto mb-2 mt-2">
<a role="button" class="btn btn-tags{{ if strings.HasSuffix $currURL (printf "/%s/" $name) }} active{{ end }}" href="{{ .RelPermalink }}">
<a role="button" data-test-id="tag-button" class="btn btn-tags{{ if strings.HasSuffix $currURL (printf "/%s/" $name) }} active{{ end }}" href="{{ .RelPermalink }}">
{{ .Title }}
</a>
</div>

View file

@ -11,7 +11,7 @@
</div>
<div class="container-fluid">
<div class="container pt-5 pb-5">
<div class="row">
<div class="row" data-test-id="about-section">
<div class="col-md-4 mb-3 mb-md-0 d-flex align-items-center">
<div class="container">
<div class="row">
@ -80,7 +80,7 @@
<div class="vGap100"></div>
<div class="container-fluid polygon">
<div class="container pt-5 pb-5">
<div class="row">
<div class="row" data-test-id="progress-report-section">
<div class="col-md-4 mt-5 mt-md-0 mb-5 mb-md-0 d-flex align-items-center">
<div class="container">
<div class="row">
@ -119,7 +119,7 @@
<div class="vGap100"></div>
<div class="container-fluid">
<div class="container pt-5 pb-5">
<div class="row flex-column-reverse flex-md-row">
<div class="row flex-column-reverse flex-md-row" data-test-id="blog-post-section">
<div class="col-md-8">
<div class="container">
<div class="row mt-3">

View file

@ -1,7 +1,7 @@
{{ define "main" }}
<div class="container">
<div class="row mt-5">
<h2>Compatiblity List</h2>
<h2>Compatibility List</h2>
</div>
<div class="row mt-3">
<p>

View file

@ -17,7 +17,7 @@
</nav>
<div class="row mb-3 mt-3" id="outage-alert" style="display: none;">
<div class="col">
<div class="card">
<div class="card" data-test-id="downtime-notification">
<div class="row">
<div class="col card-title">
<h3><i class="fas fa-exclamation-triangle error-icon"></i>Unable to fetch release information. This can be
@ -47,7 +47,7 @@
for setting
up the release is included in the download. For information on how to get started with using PCSX2 (Dumping your
BIOS and games),
<a href="/guides/basic-setup">see the following guide</a>.
<a href="/guides/basic-setup" data-test-id="setup-guide">see the following guide</a>.
</p>
<p>
If you encounter issues on the latest stable release, you can reach out for assistance on the <a
@ -56,7 +56,7 @@
<div id="latest-release-notes"></div>
</div>
<div class="row mt-5 d-flex justify-content-center" id="latest-release-artifacts"></div>
<div class="row skeleton-wrapper">
<div class="row skeleton-wrapper" data-test-id="latest-release-artifacts-loading">
<div class="col-12 col-sm mb-4 d-flex justify-content-center">
<div class="dropdown">
<button class="btn btn-primary artifact-dropdown btn-lg dropdown-toggle" type="button" id="dropdownMenuButton"
@ -117,7 +117,7 @@
Nightly builds are based on the latest in-developement version. As a result, these releases are intended
for those who want to, or require, being on the bleeding edge. They may contain unresolved bugs or issues,
use at your own discretion with this in mind. For information on how to get started with using PCSX2 (Dumping
your BIOS and games), <a href="/guides/basic-setup">see the following guide</a>.
your BIOS and games), <a href="/guides/basic-setup" data-test-id="setup-guide">see the following guide</a>.
</p>
<p>
For information on how to use the nightly releases <a
@ -126,7 +126,7 @@
<div id="latest-nightly-notes"></div>
</div>
<div class="row mt-5 d-flex justify-content-center" id="latest-nightly-artifacts"></div>
<div class="row skeleton-wrapper">
<div class="row skeleton-wrapper" data-test-id="latest-nightly-artifacts-loading">
<div class="col-12 col-sm mb-4 d-flex justify-content-center">
<div class="dropdown">
<button class="btn btn-primary artifact-dropdown btn-lg dropdown-toggle" type="button" id="dropdownMenuButton"

View file

@ -1,6 +1,6 @@
<nav class="navbar navbar-dark bg-faded sticky-top justify-content-center navbar-expand-lg">
<div class="container pl-5">
<a class="navbar-brand d-block d-lg-none" href="/">
<a class="navbar-brand d-block d-lg-none" href="/" data-test-id="navbar-brand-mobile">
<img class="brand-logo lazy" data-src="/img/pcsx2-logo.webp" alt="PCSX2 Logo">
PCSX2
</a>

View file

@ -242,7 +242,7 @@ let rowTemplate = doT.template(`
</td>
<td class="table-no-wrap">
<span>
{{? it.links && it.links.wikiLink && it.links.forumLink }}
{{? it.links }}
{{? it.links.wikiLink }}
<a href="{{=it.links.wikiLink}}"><i class="fa-solid fa-circle-info"></i></a>
{{?}}
@ -265,7 +265,7 @@ function renderTable() {
// Handle no results uniquely
if (currentData.length <= 0) {
tableBody.innerHTML = `<tr style="align-content: center;text-align: center;"><td colspan="5">No Results Found</object></td></tr>`;
tableBody.innerHTML = `<tr style="align-content: center;text-align: center;"><td colspan="6">No Results Found</object></td></tr>`;
}
else {
let offset = currentPage * pageSize;

View file

@ -156,7 +156,7 @@ $('document').ready(async function () {
renderLatestRelease(latestRelease, "#latest-release-artifacts");
}
if ('stableReleases' in releasesAndBuilds && releasesAndBuilds.stableReleases.data.length > 1) {
if ('stableReleases' in releasesAndBuilds) {
prevStableReleases = releasesAndBuilds.stableReleases.data;
totalPrevStable = releasesAndBuilds.stableReleases.pageInfo.total;
renderPreviousReleases("stable", true);
@ -168,13 +168,13 @@ $('document').ready(async function () {
renderLatestRelease(latestNightly, "#latest-nightly-artifacts");
}
if ('nightlyReleases' in releasesAndBuilds && releasesAndBuilds.nightlyReleases.data.length > 1) {
if ('nightlyReleases' in releasesAndBuilds) {
prevNightlies = releasesAndBuilds.nightlyReleases.data;
totalPrevNightly = releasesAndBuilds.nightlyReleases.pageInfo.total;
renderPreviousReleases("nightly", true);
}
if ('pullRequestBuilds' in releasesAndBuilds && releasesAndBuilds.pullRequestBuilds.data.length > 0) {
if ('pullRequestBuilds' in releasesAndBuilds) {
passingPRs = releasesAndBuilds.pullRequestBuilds.data;
totalPullRequests = releasesAndBuilds.pullRequestBuilds.pageInfo.total;
renderPullRequests(true);
@ -237,7 +237,7 @@ function renderPreviousReleases(category, noScroll) {
if (previousReleases.length == 0) {
$(selector).html(tableMessage({
colspan: 4,
message: "No Previous Releases to Display!"
message: "No Releases to Display!"
}));
return;
}
@ -301,7 +301,7 @@ function renderPullRequests(noScroll) {
if (passingPRs.length == 0) {
$("#pull-request-table-body").html(tableMessage({
colspan: 5,
message: "No Previous Releases to Display!"
message: "No Pull Requests to Display!"
}));
return;
}