From 3e49c0ac51d4289600beb97a9835fdd27b4f222a Mon Sep 17 00:00:00 2001
From: Codeon <313085171+codeon89@users.noreply.github.com>
Date: Thu, 3 Sep 2026 22:34:17 -0700
Subject: [PATCH 1/3] changed: console toggle trigger on settings page should
not lose window focus
---
electron/ipc/settings.js | 6 +++++-
src/components/settings/Interface.jsx | 2 +-
tests/debug-console-focus.test.js | 16 ++++++++++++++++
tests/devtools-gating.test.js | 7 ++-----
tests/interface-debug-console.test.js | 3 +--
5 files changed, 25 insertions(+), 9 deletions(-)
create mode 100644 tests/debug-console-focus.test.js
diff --git a/electron/ipc/settings.js b/electron/ipc/settings.js
index 59005cd..1101191 100644
--- a/electron/ipc/settings.js
+++ b/electron/ipc/settings.js
@@ -269,11 +269,15 @@ module.exports = function registerSettingsHandlers(ctx) {
BrowserWindow.getAllWindows().forEach((win) => {
if (win.isDestroyed()) return
if (nextShowDebugConsole) {
- if (!win.webContents.isDevToolsOpened()) win.webContents.openDevTools()
+ // Open in place without stealing focus from Settings.
+ if (!win.webContents.isDevToolsOpened()) win.webContents.openDevTools({ activate: false })
} else if (win.webContents.isDevToolsOpened()) {
win.webContents.closeDevTools()
}
})
+ // Not every Electron version honors activate: false, so keep Settings on top.
+ const senderWin = BrowserWindow.fromWebContents(event.sender)
+ if (senderWin && !senderWin.isDestroyed()) senderWin.focus()
}
// Applies a switch that passed validation above.
diff --git a/src/components/settings/Interface.jsx b/src/components/settings/Interface.jsx
index 7cb631d..16dc6fa 100644
--- a/src/components/settings/Interface.jsx
+++ b/src/components/settings/Interface.jsx
@@ -307,7 +307,7 @@ const Interface = () => {
override this for a single query.
- {/* No restart needed: save-settings opens/closes DevTools on all open windows live. */}
+ {/* Applies live, no restart needed. */}
{
+ test('live-toggle opens DevTools without activating', () => {
+ expect(src).toMatch(/openDevTools\(\{\s*activate:\s*false\s*\}\)/)
+ })
+
+ test('sender window is refocused after the toggle', () => {
+ expect(src).toMatch(/BrowserWindow\.fromWebContents\(event\.sender\)/)
+ })
+})
diff --git a/tests/devtools-gating.test.js b/tests/devtools-gating.test.js
index 2a5aabd..0bf9011 100644
--- a/tests/devtools-gating.test.js
+++ b/tests/devtools-gating.test.js
@@ -4,9 +4,7 @@ import path from 'path'
const src = fs.readFileSync(path.join(__dirname, '..', 'electron', 'main.js'), 'utf8')
-// DevTools previously opened automatically when running under `process.defaultApp`
-// (electron . / npm start). The `Interface.showDebugConsole` setting already
-// exists for this — it should be the sole gate.
+// showDebugConsole is the sole gate for DevTools (no auto-open in dev mode).
describe('DevTools gating (Dev-Only)', () => {
test('no DevTools open is gated by process.defaultApp', () => {
expect(src).not.toMatch(/process\.defaultApp\s*\|\|\s*appConfig\?\.Interface\?\.showDebugConsole/)
@@ -14,8 +12,7 @@ describe('DevTools gating (Dev-Only)', () => {
test('every openDevTools call is gated only by showDebugConsole', () => {
const guards = [...src.matchAll(/if\s*\(appConfig\?\.Interface\?\.showDebugConsole\)\s*\{\s*\n\s*.*openDevTools\(\)/g)]
- // createWindow, createSettingsWindow, createThemeBuilderWindow,
- // createBannerEditorWindow, createImporterWindow, createGameDetailsWindow
+ // main, settings, theme builder, banner editor, importer, game details
expect(guards.length).toBe(6)
})
diff --git a/tests/interface-debug-console.test.js b/tests/interface-debug-console.test.js
index da7a375..7e1a1d0 100644
--- a/tests/interface-debug-console.test.js
+++ b/tests/interface-debug-console.test.js
@@ -7,8 +7,7 @@ const src = fs.readFileSync(
'utf8',
)
-// The debug-console toggle applies live via save-settings (main opens/closes
-// DevTools on all open windows), so it must not show a restart popup or hint.
+// The toggle applies live, so no restart popup or hint.
describe('Interface debug console (no restart)', () => {
test('toggling never pops a restart alert', () => {
expect(src).not.toMatch(/debug console setting requires a restart/i)
From 1542c79813ea13784d27478d757d69438819cf2c Mon Sep 17 00:00:00 2001
From: Codeon <313085171+codeon89@users.noreply.github.com>
Date: Sun, 6 Sep 2026 18:12:13 -0700
Subject: [PATCH 2/3] feat: add {atlasId} to the supported key in install /
import folder scheme
---
CHANGELOG.md | 1 +
electron/ipc/importer.js | 1 +
electron/library/importRules.js | 1 +
src/components/downloads/LibraryStructureModal.jsx | 3 ++-
src/components/importer/Importer.jsx | 1 +
src/components/importer/steps/SettingsStep.jsx | 4 +++-
src/components/settings/Library.jsx | 2 +-
tests/importer-helpers.test.js | 13 ++++++++++++-
8 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f8cfb17..656cbcd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,7 @@
- Path resolution highlighting: red if invalid, green if path exists or pass the check.
### Added
+- Importer and Library folder scheme now support `{atlasId}`, so installs can be matched back to AtlasDB on re-import / rebuild.
- Custom media uploads in the Game Details Media tab: add preview images from local files, a drag-and-drop zone, or an image URL, with live progress. Previews can be reordered by drag and the order persists in a new `preview_sort` table keyed by remote URL (or relative path for custom uploads), so it survives re-downloads, stream/download switches and metadata refreshes. Previews now carry a source logo and a storage-location badge, and custom previews can be deleted independently of downloaded ones.
- Add Buzzheavier host support (`buzzheavier.com`, `bzzhr.to`, `bzzhr.co`). The download route is behind a Cloudflare challenge, so the resolve runs in a browser window: it clicks the htmx download button, captures the `HX-Redirect` (or an attachment via `will-download`), and hands the resolved CDN link plus the browser's own cookies/UA back to the downloader. The resolve partition is persistent so a solved challenge survives a restart -- only Cloudflare's own challenge cookies are kept, everything else is stripped after each resolve -- and resolves run one at a time, since a shared session cannot carry two concurrently. Each time your IP changes there is a brief auto-resolve window while the challenge is re-solved.
- The version readout in the topnav and sidebar is now a button that opens that version's GitHub release page. The tag it builds matches what the release workflows publish -- `v` for stable and `v-nightly.` for nightly -- so it lands on the real release rather than a 404. (#143)
diff --git a/electron/ipc/importer.js b/electron/ipc/importer.js
index 842729c..11e0d2e 100644
--- a/electron/ipc/importer.js
+++ b/electron/ipc/importer.js
@@ -4771,6 +4771,7 @@ ipcMain.handle("downloads-install", async (event, { id, version, onComplete, kee
currentConfig?.Library?.libraryFolderStructure,
{
f95Id: record.f95_id || record.f95Id || "",
+ atlasId: record.atlas_id || record.atlasId || "",
engine: record.engine || "Unknown",
creator: record.creator,
title: record.title,
diff --git a/electron/library/importRules.js b/electron/library/importRules.js
index 3c1a830..3ed7ecf 100644
--- a/electron/library/importRules.js
+++ b/electron/library/importRules.js
@@ -73,6 +73,7 @@ function buildStructuredImportPath(targetLibrary, format, game) {
if (key === "version") return normalizeVersionName(game.version);
if (key === "engine") return game.engine || "Unknown";
if (key === "f95id") return game.f95Id || "Unknown";
+ if (key === "atlasid") return game.atlasId || game.atlas_id || "Unknown";
if (key === "lcid" || key === "lewdcornerid") return game.lcId || game.lewdCornerId || "Unknown";
return "Unknown";
}),
diff --git a/src/components/downloads/LibraryStructureModal.jsx b/src/components/downloads/LibraryStructureModal.jsx
index 529060a..8d7fe07 100644
--- a/src/components/downloads/LibraryStructureModal.jsx
+++ b/src/components/downloads/LibraryStructureModal.jsx
@@ -59,7 +59,8 @@ const previewPath = (pattern) =>
.replace(/\{title\}/g, SAMPLE.title)
.replace(/\{version\}/g, SAMPLE.version)
.replace(/\{engine\}/g, 'RenPy')
- .replace(/\{f95Id\}/g, '12345'),
+ .replace(/\{f95Id\}/g, '12345')
+ .replace(/\{atlasId\}/g, '6789'),
)
.filter(Boolean)
diff --git a/src/components/importer/Importer.jsx b/src/components/importer/Importer.jsx
index bf23408..dca0d77 100644
--- a/src/components/importer/Importer.jsx
+++ b/src/components/importer/Importer.jsx
@@ -995,6 +995,7 @@ const Importer = () => {
engine: groups.engine || '',
f95Id: groups.f95id || '',
lcId: groups.lcid || '',
+ atlasId: groups.atlasid || '',
}
if (!cancelled) {
setLivePreview({
diff --git a/src/components/importer/steps/SettingsStep.jsx b/src/components/importer/steps/SettingsStep.jsx
index 0238bbf..f5c5430 100644
--- a/src/components/importer/steps/SettingsStep.jsx
+++ b/src/components/importer/steps/SettingsStep.jsx
@@ -31,6 +31,7 @@ export default function SettingsStep({
{ label: 'Creator / Title - Version', value: '{creator}/{title} - {version}' },
{ label: 'Title / Version, Creator', value: '{title}/{version},{creator}' },
{ label: 'F95 ID / Title / Version', value: '{f95Id}/{title}/{version}' },
+ { label: 'Atlas ID / Title / Version', value: '{atlasId}/{title}/{version}' },
{ label: 'LewdCorner ID / Title / Version', value: '{lcId}/{title}/{version}' },
]
// "Auto detect" (unstructured name guessing) has been removed for now, so the
@@ -167,6 +168,7 @@ export default function SettingsStep({
['Engine', livePreview.fields.engine, false],
['F95 ID', livePreview.fields.f95Id, false],
['LC ID', livePreview.fields.lcId, false],
+ ['Atlas ID', livePreview.fields.atlasId, false],
].filter(([, value, always]) => always || value).map(([label, value]) => (
Used when imports are moved or archives are extracted into the default
library folder. Options: {"{creator}"}, {"{title}"}, {"{version}"},{" "}
- {"{engine}"}, {"{f95Id}"}.
+ {"{engine}"}, {"{f95Id}"}, {"{atlasId}"}.
Example: {"{f95Id}/{creator}/{title}/{version}"}
diff --git a/tests/importer-helpers.test.js b/tests/importer-helpers.test.js
index ea104ca..281895f 100644
--- a/tests/importer-helpers.test.js
+++ b/tests/importer-helpers.test.js
@@ -79,6 +79,17 @@ describe('buildStructuredImportPath', () => {
const out = T.buildStructuredImportPath('/lib', '{lcid}', { lcId: 'LC9' })
expect(out).toBe(path.join('/lib', 'LC9'))
})
+
+ it('supports atlasid from camelCase or snake_case, any casing', () => {
+ expect(T.buildStructuredImportPath('/lib', '{atlasId}', { atlasId: '456' })).toBe(path.join('/lib', '456'))
+ expect(T.buildStructuredImportPath('/lib', '{atlasId}', { atlas_id: 456 })).toBe(path.join('/lib', '456'))
+ expect(T.buildStructuredImportPath('/lib', '{AtlasID}', { atlasId: '456' })).toBe(path.join('/lib', '456'))
+ })
+
+ it('falls back to Unknown for a missing atlas id, even mid-segment', () => {
+ const out = T.buildStructuredImportPath('/lib', '{title} [{atlasId}]/{version}', { title: 'My Game', version: '1.0' })
+ expect(out).toBe(path.join('/lib', 'My Game [Unknown]', '1.0'))
+ })
})
@@ -121,7 +132,7 @@ test('downloads-install passes required fields in buildStructuredImportPath', ()
if (!obj) throw new Error('buildStructuredImportPath was not given an object literal')
const keys = obj.properties.map((p) => p.key.name)
- const required = ['f95Id', 'engine', 'creator', 'title', 'version']
+ const required = ['f95Id', 'atlasId', 'engine', 'creator', 'title', 'version']
for (const key of required) {
expect(keys).toContain(key)
From bc79bd5680ef56c6c1ca0879283978eb04b2de29 Mon Sep 17 00:00:00 2001
From: Codeon <313085171+codeon89@users.noreply.github.com>
Date: Sun, 6 Sep 2026 18:43:02 -0700
Subject: [PATCH 3/3] fix: resolve repo workflow issue due to repo name change
---
.github/workflows/ci-patched.yml | 2 +-
.github/workflows/nightly-patched.yml | 2 +-
.github/workflows/pr-policy.yml | 2 +-
CHANGELOG.PATCHED.md | 6 +++---
PATCHES.md | 6 +++---
docs/FORK-PATCHED-RELEASES.md | 2 +-
docs/FORK-PATCHED-RUNBOOK.md | 2 +-
electron/main.js | 2 +-
package.json | 2 +-
scripts/build-patched.js | 2 +-
src/utils/releaseUrl.js | 2 +-
tests/patched-ci-workflow.test.js | 2 +-
tests/patched-release-workflow.test.js | 2 +-
tests/patched-updates.test.js | 3 ++-
tests/release-url.test.js | 2 +-
15 files changed, 20 insertions(+), 19 deletions(-)
diff --git a/.github/workflows/ci-patched.yml b/.github/workflows/ci-patched.yml
index 38d31de..ee25bfd 100644
--- a/.github/workflows/ci-patched.yml
+++ b/.github/workflows/ci-patched.yml
@@ -17,7 +17,7 @@ jobs:
name: Patched checks
# Never runs outside the fork: if this file ever reaches upstream by a bad
# merge, it stays silent there instead of double-running their CI.
- if: github.repository == 'codeon89/Atlas'
+ if: github.repository == 'codeon89/Atlas-Patched'
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
diff --git a/.github/workflows/nightly-patched.yml b/.github/workflows/nightly-patched.yml
index a048e9f..58994ad 100644
--- a/.github/workflows/nightly-patched.yml
+++ b/.github/workflows/nightly-patched.yml
@@ -23,7 +23,7 @@ jobs:
# This file must never publish from anywhere else: not from a fork of this
# fork, not from a feature branch. Downstream jobs cascade-skip when this
# one does, so guarding here covers the whole workflow.
- if: github.repository == 'codeon89/Atlas' && github.ref == 'refs/heads/nightly-patched'
+ if: github.repository == 'codeon89/Atlas-Patched' && github.ref == 'refs/heads/nightly-patched'
runs-on: ubuntu-latest
timeout-minutes: 20
outputs:
diff --git a/.github/workflows/pr-policy.yml b/.github/workflows/pr-policy.yml
index f054251..1424ab8 100644
--- a/.github/workflows/pr-policy.yml
+++ b/.github/workflows/pr-policy.yml
@@ -5,7 +5,7 @@ name: PR Policy
# the heavier CI job so contributors find out about a wrong base branch in
# seconds rather than after a fifteen-minute build.
#
-# Fork divergence (codeon89/Atlas): Rule 1 also accepts `nightly-patched`
+# Fork divergence (codeon89/Atlas-Patched): Rule 1 also accepts `nightly-patched`
# (the fork's integration branch); changelog and AI-disclosure rules are not
# enforced. Review upstream changes to this file on every merge-down.
diff --git a/CHANGELOG.PATCHED.md b/CHANGELOG.PATCHED.md
index 309c33f..0b80218 100644
--- a/CHANGELOG.PATCHED.md
+++ b/CHANGELOG.PATCHED.md
@@ -6,13 +6,13 @@
**v0.9.9-patched.nightly.494.2**
- Removed the stale restart popup and hint on the Show debug console toggle — it applies immediately to all open windows.[#399](https://github.com/towerwatchman/Atlas/pull/399)
- (Dev-Only) DevTools no longer auto-opens in dev mode unless explicitly enabled in config.
- - Nightly-Patched: support Linux builds & patch ci runs. [#20](https://github.com/codeon89/Atlas/pull/20)
+ - Nightly-Patched: support Linux builds & patch ci runs. [#20](https://github.com/codeon89/Atlas-Patched/pull/20)
**v0.9.9-patched.nightly.494.1**
- Update debounce logic for Browse and Library: Search in Catalog Browse and Library now debounces the text input and waits for a pause before filtering. Previously every keystroke updated `activeFilters.text` and ran `filterGamesWithState` (Library) or scheduled a catalog fetch, causing input lag on large libraries and a wasted local-filter pass even while browsing the server-side catalog. The input still echoes instantly from local state; clear bypasses the delay.[#398](https://github.com/towerwatchman/Atlas/pull/398)
- LewdCorner member tier detection. Atlas now scrapes your LewdCorner account's shop page to determine your membership tier (Standard / Plus) and stores it alongside your credentials. Browse filters content by tier so Plus users see everything while Standard or non-login users only see what their subscription allows.[#391](https://github.com/towerwatchman/Atlas/pull/391)
- - Support `[no-build]` detection in your HEAD commit message when pushing without wanting a release (docs or changelog-only pushes) or merge existing change from original Atlas.[#19](https://github.com/codeon89/Atlas/pull/19)
- - Nightly-Patched releases: the fork ships its own Windows + Linux installer line (`{base}-patched.nightly.{nightly}.{p}`) with a third update channel under Settings > App Updates. Patched builds check only the fork feed; upstream nightlies surface as a read-only notice, never a download. See `docs/FORK-PATCHED-RUNBOOK.md`.[#19](https://github.com/codeon89/Atlas/pull/19)
+ - Support `[no-build]` detection in your HEAD commit message when pushing without wanting a release (docs or changelog-only pushes) or merge existing change from original Atlas.[#19](https://github.com/codeon89/Atlas-Patched/pull/19)
+ - Nightly-Patched releases: the fork ships its own Windows + Linux installer line (`{base}-patched.nightly.{nightly}.{p}`) with a third update channel under Settings > App Updates. Patched builds check only the fork feed; upstream nightlies surface as a read-only notice, never a download. See `docs/FORK-PATCHED-RUNBOOK.md`.[#19](https://github.com/codeon89/Atlas-Patched/pull/19)
**Previously merged before packaging**
diff --git a/PATCHES.md b/PATCHES.md
index 1e0c05f..7106b1d 100644
--- a/PATCHES.md
+++ b/PATCHES.md
@@ -14,9 +14,9 @@
## Fork's System Change
*internal change that's not features but backend requirement for forks to release self-builds*
- - Support Linux builds & patch ci runs. [#20](https://github.com/codeon89/Atlas/pull/20)
- - Support `[no-build]` detection in your HEAD commit message when pushing without wanting a release (docs or changelog-only pushes) or merge existing change from original Atlas.[#19](https://github.com/codeon89/Atlas/pull/19)
- - Nightly-Patched releases: the fork ships its own Windows + Linux installer line (`{base}-patched.nightly.{nightly}.{p}`) with a third update channel under Settings > App Updates. Patched builds check only the fork feed; upstream nightlies surface as a read-only notice, never a download. See `docs/FORK-PATCHED-RUNBOOK.md`. [#19](https://github.com/codeon89/Atlas/pull/19)
+ - Support Linux builds & patch ci runs. [#20](https://github.com/codeon89/Atlas-Patched/pull/20)
+ - Support `[no-build]` detection in your HEAD commit message when pushing without wanting a release (docs or changelog-only pushes) or merge existing change from original Atlas.[#19](https://github.com/codeon89/Atlas-Patched/pull/19)
+ - Nightly-Patched releases: the fork ships its own Windows + Linux installer line (`{base}-patched.nightly.{nightly}.{p}`) with a third update channel under Settings > App Updates. Patched builds check only the fork feed; upstream nightlies surface as a read-only notice, never a download. See `docs/FORK-PATCHED-RUNBOOK.md`. [#19](https://github.com/codeon89/Atlas-Patched/pull/19)
## Merged to thetowerman/Atlas's Nightly
diff --git a/docs/FORK-PATCHED-RELEASES.md b/docs/FORK-PATCHED-RELEASES.md
index 9151907..e9a7f51 100644
--- a/docs/FORK-PATCHED-RELEASES.md
+++ b/docs/FORK-PATCHED-RELEASES.md
@@ -1,4 +1,4 @@
-# Nightly-Patched releases (codeon89/Atlas)
+# Nightly-Patched releases (codeon89/Atlas-Patched)
Plain-language reference for the fork's own release line. Procedures live in
`docs/FORK-PATCHED-RUNBOOK.md`.
diff --git a/docs/FORK-PATCHED-RUNBOOK.md b/docs/FORK-PATCHED-RUNBOOK.md
index 7cb5a12..0a1dfd8 100644
--- a/docs/FORK-PATCHED-RUNBOOK.md
+++ b/docs/FORK-PATCHED-RUNBOOK.md
@@ -1,4 +1,4 @@
-# Nightly-Patched runbook (codeon89/Atlas)
+# Nightly-Patched runbook (codeon89/Atlas-Patched)
Evergreen fork-only operations. Plain-language overview:
`docs/FORK-PATCHED-RELEASES.md`.
diff --git a/electron/main.js b/electron/main.js
index 1e2a028..c0efc6f 100644
--- a/electron/main.js
+++ b/electron/main.js
@@ -657,7 +657,7 @@ function configureAppUpdateBranch(branch, { resetStatus = false } = {}) {
// upstream. A fork build pointed at upstream would offer to replace itself
// with an official build that lacks the fork feed entirely.
owner: normalizedBranch === 'patched' ? 'codeon89' : 'towerwatchman',
- repo: 'Atlas',
+ repo: normalizedBranch === 'patched' ? 'Atlas-Patched' : 'Atlas',
channel,
})
diff --git a/package.json b/package.json
index 8dbd7f9..5821046 100644
--- a/package.json
+++ b/package.json
@@ -108,7 +108,7 @@
"publish": {
"provider": "github",
"owner": "codeon89",
- "repo": "Atlas",
+ "repo": "Atlas-Patched",
"releaseType": "draft",
"channel": "patched",
"vPrefixedTagName": true
diff --git a/scripts/build-patched.js b/scripts/build-patched.js
index 82e4296..9e32a13 100644
--- a/scripts/build-patched.js
+++ b/scripts/build-patched.js
@@ -86,7 +86,7 @@ async function run() {
// Deliberately explicit: neither an inherited upstream config nor a new
// remote can redirect a personal publish into someone else's repository.
publish: {
- provider: 'github', owner: 'codeon89', repo: 'Atlas', channel: 'patched',
+ provider: 'github', owner: 'codeon89', repo: 'Atlas-Patched', channel: 'patched',
releaseType: 'draft', vPrefixedTagName: true,
},
},
diff --git a/src/utils/releaseUrl.js b/src/utils/releaseUrl.js
index e32ed97..a3ea7f4 100644
--- a/src/utils/releaseUrl.js
+++ b/src/utils/releaseUrl.js
@@ -18,6 +18,6 @@ import { LINKS } from './links.js'
*/
export function releaseUrlFor(version) {
const tag = String(version ?? '').trim().replace(/^v+/i, '')
- const repo = tag.includes('-patched.') ? 'https://github.com/codeon89/Atlas' : LINKS.github
+ const repo = tag.includes('-patched.') ? 'https://github.com/codeon89/Atlas-Patched' : LINKS.github
return `${repo}/releases/tag/v${tag}`
}
diff --git a/tests/patched-ci-workflow.test.js b/tests/patched-ci-workflow.test.js
index 05b955f..da6b719 100644
--- a/tests/patched-ci-workflow.test.js
+++ b/tests/patched-ci-workflow.test.js
@@ -12,7 +12,7 @@ const upstream = fs.readFileSync(path.join(here, '../.github/workflows/ci.yml'),
describe('ci-patched workflow', () => {
it('runs only in the fork repo', () => {
- expect(workflow).toContain("github.repository == 'codeon89/Atlas'")
+ expect(workflow).toContain("github.repository == 'codeon89/Atlas-Patched'")
})
it('restores node_modules and skips reinstall on a hit', () => {
diff --git a/tests/patched-release-workflow.test.js b/tests/patched-release-workflow.test.js
index af86336..79d5d05 100644
--- a/tests/patched-release-workflow.test.js
+++ b/tests/patched-release-workflow.test.js
@@ -12,7 +12,7 @@ const workflow = fs.readFileSync(path.join(here, '../.github/workflows/nightly-p
describe('nightly-patched release workflow', () => {
it('fires only on the fork branch and only in the fork repo', () => {
expect(workflow).toContain('branches: [nightly-patched]')
- expect(workflow).toContain("github.repository == 'codeon89/Atlas' && github.ref == 'refs/heads/nightly-patched'")
+ expect(workflow).toContain("github.repository == 'codeon89/Atlas-Patched' && github.ref == 'refs/heads/nightly-patched'")
})
it('queues runs instead of cancelling (no duplicate release numbers)', () => {
diff --git a/tests/patched-updates.test.js b/tests/patched-updates.test.js
index f7369ed..182490e 100644
--- a/tests/patched-updates.test.js
+++ b/tests/patched-updates.test.js
@@ -65,7 +65,8 @@ describe('patched update channel', () => {
])('routes %s to its own feed and installed-version baseline', (branch, owner, channel, prerelease, baseline) => {
const ctx = updaterContext()
ctx.configureAppUpdateBranch(branch)
- expect(ctx.autoUpdater.setFeedURL).toHaveBeenCalledWith({ provider: 'github', owner, repo: 'Atlas', channel })
+ const repo = branch === 'patched' ? 'Atlas-Patched' : 'Atlas'
+ expect(ctx.autoUpdater.setFeedURL).toHaveBeenCalledWith({ provider: 'github', owner, repo, channel })
expect(ctx.autoUpdater.channel).toBe(channel)
expect(ctx.autoUpdater.allowPrerelease).toBe(prerelease)
expect(ctx.autoUpdater.allowDowngrade).toBe(false)
diff --git a/tests/release-url.test.js b/tests/release-url.test.js
index 2c85eae..d015cbe 100644
--- a/tests/release-url.test.js
+++ b/tests/release-url.test.js
@@ -46,7 +46,7 @@ describe('releaseUrlFor', () => {
// even when the user currently follows an official channel.
it('points patched builds at the fork releases', () => {
expect(releaseUrlFor('0.9.9-patched.nightly.494.1')).toBe(
- 'https://github.com/codeon89/Atlas/releases/tag/v0.9.9-patched.nightly.494.1'
+ 'https://github.com/codeon89/Atlas-Patched/releases/tag/v0.9.9-patched.nightly.494.1'
)
})
})