From 2e53a8767b0b5ddeaa2165b51c18aa46ee58e8f5 Mon Sep 17 00:00:00 2001 From: Doar Mihai Date: Sat, 18 Jul 2026 18:08:07 +0300 Subject: [PATCH] chore: scaffold reddit-post Playwright sidecar project --- sidecars/reddit-post/.gitignore | 3 + sidecars/reddit-post/README.md | 21 ++++++ sidecars/reddit-post/package-lock.json | 78 +++++++++++++++++++++++ sidecars/reddit-post/package.json | 12 ++++ sidecars/reddit-post/playwright.config.js | 21 ++++++ 5 files changed, 135 insertions(+) create mode 100644 sidecars/reddit-post/.gitignore create mode 100644 sidecars/reddit-post/README.md create mode 100644 sidecars/reddit-post/package-lock.json create mode 100644 sidecars/reddit-post/package.json create mode 100644 sidecars/reddit-post/playwright.config.js diff --git a/sidecars/reddit-post/.gitignore b/sidecars/reddit-post/.gitignore new file mode 100644 index 0000000..dbd64df --- /dev/null +++ b/sidecars/reddit-post/.gitignore @@ -0,0 +1,3 @@ +node_modules/ +test-results/ +playwright-report/ diff --git a/sidecars/reddit-post/README.md b/sidecars/reddit-post/README.md new file mode 100644 index 0000000..04a2663 --- /dev/null +++ b/sidecars/reddit-post/README.md @@ -0,0 +1,21 @@ +# Reddit Post Sidecar + +A Playwright acceptance test that logs into Reddit with supplied credentials +and creates a text post in a given subreddit. + +## One-time setup + + cd sidecars/reddit-post + npm install + npx playwright install chromium + +## Usage + + ./run.sh --username=YOUR_USERNAME --password=YOUR_PASSWORD \ + --subreddit=test --title="Hello" --body="Post body text" [--headed] + +Prints a single JSON line to stdout and exits 0 on success, exits 1 on +failure: + + {"success": true, "url": "https://www.reddit.com/r/test/comments/.../"} + {"success": false, "error": "Login did not complete — possible CAPTCHA or 2FA prompt"} diff --git a/sidecars/reddit-post/package-lock.json b/sidecars/reddit-post/package-lock.json new file mode 100644 index 0000000..5e8697c --- /dev/null +++ b/sidecars/reddit-post/package-lock.json @@ -0,0 +1,78 @@ +{ + "name": "reddit-post-sidecar", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "reddit-post-sidecar", + "version": "1.0.0", + "devDependencies": { + "@playwright/test": "^1.61.1" + } + }, + "node_modules/@playwright/test": { + "version": "1.61.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.61.1.tgz", + "integrity": "sha512-8nKv6+0RJSL9FE4jYOEGXnPeM/Hg12qZpmqzZjRh3qM0Y7c3z1mrOTfFLids72RDQYVh9WpLEfR5WdpNX4fkig==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.61.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/playwright": { + "version": "1.61.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.61.1.tgz", + "integrity": "sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.61.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.61.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.61.1.tgz", + "integrity": "sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + } + } +} diff --git a/sidecars/reddit-post/package.json b/sidecars/reddit-post/package.json new file mode 100644 index 0000000..56e453e --- /dev/null +++ b/sidecars/reddit-post/package.json @@ -0,0 +1,12 @@ +{ + "name": "reddit-post-sidecar", + "private": true, + "version": "1.0.0", + "description": "Playwright acceptance test that logs into Reddit and creates a text post, invoked via run.sh", + "scripts": { + "test": "playwright test" + }, + "devDependencies": { + "@playwright/test": "^1.61.1" + } +} diff --git a/sidecars/reddit-post/playwright.config.js b/sidecars/reddit-post/playwright.config.js new file mode 100644 index 0000000..d97dd9b --- /dev/null +++ b/sidecars/reddit-post/playwright.config.js @@ -0,0 +1,21 @@ +// @ts-check +const { defineConfig, devices } = require('@playwright/test'); + +module.exports = defineConfig({ + testDir: './tests', + timeout: 60_000, + expect: { timeout: 15_000 }, + retries: 0, + reporter: [['list']], + use: { + headless: process.env.HEADLESS !== 'false', + screenshot: 'only-on-failure', + trace: 'retain-on-failure', + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], +});