Skip to content

Commit ddebd19

Browse files
committed
Improved reliability of automated testing.
1 parent 47afef1 commit ddebd19

File tree

5 files changed

+11
-17
lines changed

5 files changed

+11
-17
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
Added automated validation of userscript with [eslint](https://github.com/eslint/eslint) and [semgrep](https://github.com/semgrep/semgrep).
66

77
* Applied eslint recommendations.
8+
* Improved reliability of automated testing.
89

910
`eslint` and `semgrep` are used to check for risky/insecure code inside the userscript.
1011
This is a measure to build reliability and trust by making it easier to audit the code.

linting/package.json

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,6 @@
66
"devDependencies": {
77
"@eslint/js": "^9.39.1",
88
"eslint": "^9.39.1",
9-
"eslint-config-standard": "^17.1.0",
10-
"eslint-plugin-import": "^2.32.0",
11-
"eslint-plugin-n": "^16.6.2",
12-
"eslint-plugin-promise": "^6.6.0",
139
"globals": "^16.5.0"
1410
},
1511
"scripts": {

script.user.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
}
5252

5353
// TODO: look into rewriting this "trick" to improve quality of this script
54-
if (window.getOwnPropertyDescriptor('trustedTypes') && !window.trustedTypes.defaultPolicy) {
54+
if ('trustedTypes' in window && !window.trustedTypes.defaultPolicy) {
5555
window.trustedTypes.createPolicy('default', { createHTML: string => string });
5656
}
5757

testing/src/Helpers.purs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ import Effect.Aff (Aff)
66
import Node.FS.Aff (readTextFile)
77
import Node.Encoding (Encoding(UTF8))
88

9-
injectScript :: String -> T.Page -> Aff Unit
10-
injectScript script page =
11-
void $ T.unsafeEvaluateStringFunction script page
9+
setUpJS :: String -> T.Page -> Aff Unit
10+
setUpJS script page =
11+
void $ T.unsafeEvaluateOnNewDocument ("document.addEventListener('DOMContentLoaded', () => {\n" <> script <> "\n});") page
1212

13-
injectUserscript :: T.Page -> Aff Unit
14-
injectUserscript page = do
13+
setUpUserscript :: T.Page -> Aff Unit
14+
setUpUserscript page = do
1515
src <- readTextFile UTF8 "../script.user.js"
16-
injectScript "window.GM_info = { script: { version: '21110101-0-test' } };" page
17-
injectScript src page
16+
setUpJS "window.GM_info = { script: { version: '21110101-0-test' } };" page
17+
setUpJS src page
1818

1919
waitForAndClick :: String -> T.Page -> Aff Unit
2020
waitForAndClick selector page = do

testing/src/Script.purs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import Prelude
44
import Toppokki as T
55
import Effect.Aff (Aff, delay)
66
import Info (info)
7-
import Helpers (injectUserscript, waitForAndClick, ytpaSelector)
7+
import Helpers (setUpUserscript, waitForAndClick, ytpaSelector)
88
import Data.Time.Duration (Milliseconds(Milliseconds))
99
import Foreign (isNull, isUndefined, readString)
1010
import Control.Monad.Except (runExcept)
@@ -41,6 +41,7 @@ script = do
4141
browser <- T.launch { args: [ "--no-sandbox", "--disable-setuid-sandbox"] }
4242
page <- T.newPage browser
4343

44+
setUpUserscript page
4445
T.goto (T.URL "https://youtube.com") page
4546

4647
info "Waiting to reject cookies..."
@@ -50,8 +51,6 @@ script = do
5051
delay (Milliseconds 500.0)
5152
_ <- T.pageWaitForSelector (T.Selector "[aria-label*=\"Your YouTube history is off\"]") {} page
5253
delay (Milliseconds 1000.0)
53-
injectUserscript page
54-
delay (Milliseconds 1000.0)
5554

5655
-- Actual testing
5756

@@ -100,7 +99,6 @@ script = do
10099
_ <- T.pageWaitForSelector (T.Selector "#lock") {} page'
101100
delay (Milliseconds 500.0)
102101
T.goto (T.URL "https://www.youtube.com/@TechnologyConnections/videos") page'
103-
injectUserscript page'
104102
delay (Milliseconds 500.0)
105103
_ <- T.pageWaitForSelector (T.Selector "yt-tab-shape[tab-title=\"Videos\"]") {} page'
106104
delay (Milliseconds 500.0)
@@ -168,7 +166,6 @@ script = do
168166
_ <- T.pageWaitForSelector (T.Selector "#lock") {} page'
169167
delay (Milliseconds 500.0)
170168
T.goto (T.URL "https://www.youtube.com/@Insym/streams") page'
171-
injectUserscript page'
172169
delay (Milliseconds 500.0)
173170
_ <- T.pageWaitForSelector (T.Selector "yt-tab-shape[tab-title=\"Live\"]") {} page'
174171
delay (Milliseconds 500.0)

0 commit comments

Comments
 (0)