mirror of
https://github.com/got-feedBack/feedBack.git
synced 2026-08-12 11:49:28 +00:00
feat(career): bundle the AXA club venue pack (career stage 2) (#963)
ship-ci / ci (push) Waiting to run
ship-ci / ci (push) Waiting to run
The Velvet Room (50 stars) now ships in every build like the bar and arena: 4 reactive crowd loops, 2 stingers, and a balcony flyover intro rendered from the AXA Music Stage scene (110 spectators, state-scaled stage washes over the venue's own neon). Audio files are dive-bar placeholders until club-scale recordings land. The installed/delete test now asserts bundled-fallback semantics: with every venue bundled, deleting a downloaded pack reveals the bundled copy instead of uninstalling. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
af611770aa
commit
2991612531
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"venue": "club",
|
||||||
|
"version": 1,
|
||||||
|
"loops": {"bored": "bored.mp4", "neutral": "neutral.mp4", "engaged": "engaged.mp4", "ecstatic": "ecstatic.mp4"},
|
||||||
|
"stingers": {"clap": "clap.mp4", "cheer": "cheer.mp4"},
|
||||||
|
"intro": {"video": "intro.mp4", "audio": "club-ambience.mp3"},
|
||||||
|
"sfx": {"up": "sfx-up.mp3", "down": "sfx-down.mp3"}
|
||||||
|
}
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -76,6 +76,31 @@ test('arena venue pack ships with full media in the plugin checkout', () => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('club venue pack ships with full media in the plugin checkout', () => {
|
||||||
|
const packDir = path.join(PLUGIN_DIR, 'venue-packs', 'club');
|
||||||
|
const manifest = JSON.parse(fs.readFileSync(path.join(packDir, 'manifest.json'), 'utf8'));
|
||||||
|
assert.equal(manifest.venue, 'club');
|
||||||
|
assert.deepEqual(manifest.loops, {
|
||||||
|
bored: 'bored.mp4', neutral: 'neutral.mp4',
|
||||||
|
engaged: 'engaged.mp4', ecstatic: 'ecstatic.mp4',
|
||||||
|
});
|
||||||
|
assert.deepEqual(manifest.stingers, { clap: 'clap.mp4', cheer: 'cheer.mp4' });
|
||||||
|
assert.deepEqual(manifest.sfx, { up: 'sfx-up.mp3', down: 'sfx-down.mp3' });
|
||||||
|
assert.equal(manifest.intro.video, 'intro.mp4');
|
||||||
|
assert.equal(manifest.intro.audio, 'club-ambience.mp3');
|
||||||
|
for (const f of [
|
||||||
|
...Object.values(manifest.loops),
|
||||||
|
...Object.values(manifest.stingers),
|
||||||
|
manifest.intro.video,
|
||||||
|
manifest.intro.audio,
|
||||||
|
manifest.sfx.up,
|
||||||
|
manifest.sfx.down,
|
||||||
|
]) {
|
||||||
|
const stat = fs.statSync(path.join(packDir, f));
|
||||||
|
assert.ok(stat.size > 0, `${f} must be present`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
test('shell promotes the career plugin into the sidebar', () => {
|
test('shell promotes the career plugin into the sidebar', () => {
|
||||||
const src = fs.readFileSync(SHELL_JS, 'utf8');
|
const src = fs.readFileSync(SHELL_JS, 'utf8');
|
||||||
assert.match(src, /key: 'career',\s*screen: 'plugin-career'/);
|
assert.match(src, /key: 'career',\s*screen: 'plugin-career'/);
|
||||||
|
|||||||
@@ -121,12 +121,17 @@ def test_pack_file_serving_and_traversal_guard(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_state_reports_installed_and_delete_removes(client):
|
def test_state_reports_installed_and_delete_removes(client):
|
||||||
|
# All three venues now ship bundled, so deleting the downloaded copy
|
||||||
|
# falls back to the bundled pack: installed stays True by design
|
||||||
|
# (downloaded packs override bundled ones, never replace them).
|
||||||
_install_fake_pack("club")
|
_install_fake_pack("club")
|
||||||
state = client.get("/api/plugins/career/state").json()
|
state = client.get("/api/plugins/career/state").json()
|
||||||
assert {v["id"]: v["installed"] for v in state["venues"]}["club"] is True
|
assert {v["id"]: v["installed"] for v in state["venues"]}["club"] is True
|
||||||
assert client.delete("/api/plugins/career/packs/club").status_code == 200
|
assert client.delete("/api/plugins/career/packs/club").status_code == 200
|
||||||
state = client.get("/api/plugins/career/state").json()
|
state = client.get("/api/plugins/career/state").json()
|
||||||
assert {v["id"]: v["installed"] for v in state["venues"]}["club"] is False
|
assert {v["id"]: v["installed"] for v in state["venues"]}["club"] is True
|
||||||
|
# the downloaded override itself is gone
|
||||||
|
assert not (career_routes._venue_dir("club") / "manifest.json").exists()
|
||||||
|
|
||||||
|
|
||||||
def test_download_worker_end_to_end(client, tmp_path):
|
def test_download_worker_end_to_end(client, tmp_path):
|
||||||
|
|||||||
Reference in New Issue
Block a user