Skip to content

Clone-native jaffle-shop + Playwright E2E + docs refresh#60

Closed
KKranthi6881 wants to merge 4 commits into
feat/stabilize-phases-0-4from
feat/clone-native-jaffle-and-e2e
Closed

Clone-native jaffle-shop + Playwright E2E + docs refresh#60
KKranthi6881 wants to merge 4 commits into
feat/stabilize-phases-0-4from
feat/clone-native-jaffle-and-e2e

Conversation

@KKranthi6881

Copy link
Copy Markdown
Collaborator

Summary

Stacks on top of #59. Replaces the bundled jaffle-shop fixture (11 YAMLs shipped inside the web-app bundle) with a clone-from-GitHub flow: users clone https://github.com/dbt-labs/jaffle-shop and walk the same Local folder or Git URL path as any other dbt repo. Adds Playwright E2E coverage, a CI workflow, and a full docs refresh.

Base branch: feat/stabilize-phases-0-4. Once #59 merges, I'll rebase this onto main and re-point the PR base.

What changed

Removed

  • packages/web-app/src/fixtures/jaffle-shop/ — all 11 YAML files + README
  • Demo tab in ImportDbtRepoDialog (default tab is now "git")
  • "Load jaffle-shop demo" palette entry in Shell.jsx

Onboarding text

  • Tour step: "Paste a public git URL (e.g. https://github.com/dbt-labs/jaffle-shop) or pick a local folder."
  • Welcome dialog bullet: "Import your dbt repo (local folder or public git URL)"
  • api-server comment: "git-URL import flow"

Playwright E2E scaffold

  • playwright.config.js — serial mode, chromium; webServer starts api-server on :3006 + Vite on :5173 with DM_ENABLE_DIRECT_APPLY=1
  • e2e/global-setup.js — one-shot git clone --depth 1 --branch main https://github.com/dbt-labs/jaffle-shop to test-results/jaffle-shop/; respects OFFLINE=1; re-uses cached clone on subsequent runs
  • e2e/import-api.spec.js — 2 backend contract tests for POST /api/dbt/import
  • e2e/critical-path.spec.js — always-on smoke (dismiss onboarding, import local folder, verify explorer + apply dialog); full loop (rename, autosave, auto-commit, DDL dry-run) gated behind E2E_FULL=1 with selector TODOs
  • e2e/README.md — run instructions

CI

  • .github/workflows/e2e-tests.yml — two jobs: unit (web-app + api-server) and e2e (needs: unit). Installs core_engine via pip install -e, runs playwright install --with-deps chromium, uploads report on failure

Docs

  • README tutorial table row rewritten
  • docs/getting-started.md Scenario 1 → "Clone jaffle-shop"
  • docs/tutorials/jaffle-shop-walkthrough.md full rewrite: two entry options, rename-cascade step, auto-commit, Apply-to-warehouse dry run, ⌘⇧E PNG export
  • CONTRIBUTING.md full rewrite: bootstrap, run modes, test matrix, CI overview

Test plan

  • npm test in packages/web-app — 55 passing (unchanged)
  • npm test in packages/api-server — 59 passing (unchanged)
  • npm run test:e2e locally with a real clone — smoke test passes
  • Manual: open Import dbt repo dialog → no Demo tab; paste https://github.com/dbt-labs/jaffle-shop → import succeeds
  • CI: e2e workflow runs green on PR

Follow-ups

After both PRs land, cut v1.0.7 release to PyPI (bumps pyproject.toml, dates CHANGELOG.md unreleased section, tag push triggers publish.yml).

🤖 Generated with Claude Code

KKranthi6881 and others added 4 commits April 22, 2026 11:32
Replaces the bundled jaffle-shop fixture (10+ YAMLs shipped inside the
web-app bundle) with a clone-from-GitHub flow. Users who want the demo
now clone `https://github.com/dbt-labs/jaffle-shop` and follow the
same Local folder or Git URL path as any other real dbt repo.

Changes:
  - Remove src/fixtures/jaffle-shop/ (all 11 YAMLs + README)
  - ImportDbtRepoDialog: drop Demo tab; default tab is now "git"; placeholder
    hints at dbt-labs/jaffle-shop as a known-good public URL
  - Shell palette: remove "Load jaffle-shop demo" command
  - Onboarding tour + welcome dialog: update copy to reflect the two paths
  - api-server comment tweaked ("git-URL import flow")

Playwright E2E scaffold (new):
  - playwright.config.js — serial mode, chromium; webServer starts api-server
    on :3006 and Vite on :5173 with DM_ENABLE_DIRECT_APPLY=1
  - e2e/global-setup.js — clones jaffle-shop once to test-results/jaffle-shop/
    (respects OFFLINE=1; re-uses cached clone)
  - e2e/import-api.spec.js — backend contract for POST /api/dbt/import
  - e2e/critical-path.spec.js — always-on smoke (import local folder, apply
    dialog wired); full rename + autosave + auto-commit loop gated behind
    E2E_FULL=1 with documented selector TODOs
  - e2e/README.md — run instructions and clone-cache explanation

CI:
  - .github/workflows/e2e-tests.yml — unit job + e2e job (needs: unit);
    installs core_engine via pip -e, api-server + web-app via npm ci,
    playwright install --with-deps chromium; uploads report on failure

Docs:
  - README tutorial table row: "Nothing — want to try with a known-good
    dbt repo" → clone jaffle-shop walkthrough (5 min)
  - docs/getting-started.md Scenario 1: rewritten as "Clone jaffle-shop"
    using `git clone` + Git URL or Local folder
  - docs/tutorials/jaffle-shop-walkthrough.md: full rewrite with two entry
    options (in-UI git URL vs. local clone with edit-in-place), rename
    cascade, auto-commit, Apply-to-warehouse dry run, ⌘⇧E PNG export
  - CONTRIBUTING.md: full rewrite with bootstrap, run modes, test matrix
  - .gitignore: test-results/, playwright-report/, playwright/.cache/

package.json:
  - Add @playwright/test ^1.48.0 devDep
  - Add test:e2e / test:e2e:ui scripts

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
npm ci was failing because package.json added @playwright/test but the
lock file wasn't regenerated.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The Python project's pyproject.toml lives at the repo top level
(the datalex-cli distribution bundles core_engine via setuptools
package discovery). packages/core_engine has no pyproject.toml of
its own, so `pip install -e packages/core_engine` was failing.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
… tool

The e2e-tests.yml workflow cloned jaffle-shop fresh every PR and tried
to run the full Playwright suite against it. That path is broken by
design: jaffle-shop has no target/manifest.json checked in (it's
emitted by dbt parse), so the /api/dbt/import step failed with
"manifest.json not found" until we also install dbt-core, dbt-duckdb,
run dbt deps + dbt parse, provide a profile, etc. — a multi-minute
setup that's flaky on every link.

The UX intent of PR is unchanged: users clone a real dbt repo locally
and follow the Local folder / Git URL import flow. That's a user-side
workflow, not a CI workflow. The backend contracts are already covered
by the existing api-server unit tests, and the UI path is better caught
by local Playwright runs while iterating.

Keeping the Playwright scaffold (config + specs + global-setup) as
local-dev tooling; updated e2e/README.md and CONTRIBUTING.md to reflect
that CI does not run it and what the dev must do to parse the fixture
before running locally.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@KKranthi6881 KKranthi6881 deleted the branch feat/stabilize-phases-0-4 April 22, 2026 16:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant