@webship.co/workspace-odoo 0.0.0-stage → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +234 -2
- package/ai/agents/odoo-site-builder.md +139 -0
- package/ai/agents/odoo-tester.md +145 -0
- package/ai/commands/odoo-test.md +88 -0
- package/ai/prompts/odoo-build-and-test.md +27 -0
- package/ai/skills/odoo-scenarios/SKILL.md +234 -0
- package/ai/skills/odoo-scenarios/examples/apps-and-views.feature +36 -0
- package/ai/skills/odoo-scenarios/examples/contact-lifecycle.feature +29 -0
- package/ai/skills/odoo-scenarios/examples/website.feature +43 -0
- package/commands/cmd-odoo-project.sh +34 -0
- package/commands/cmd-tools-odoo-cli.sh +26 -0
- package/dist/src/index.d.ts +29 -0
- package/dist/src/index.js +51 -0
- package/dist/src/index.js.map +1 -0
- package/docs/plugin-items-pattern.md +145 -0
- package/features/odoo.feature +30 -0
- package/package.json +96 -4
- package/scripts/args/arg-odoo-cli.sh +28 -0
- package/scripts/args/arg-odoo.sh +28 -0
- package/scripts/functions/fun-odoo.sh +435 -0
- package/scripts/odoo-accounts.py +129 -0
- package/testing/site.feature +64 -0
package/README.md
CHANGED
|
@@ -1,3 +1,235 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @webship.co/workspace-odoo
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Odoo Community for the [Webship Workspace](https://github.com/webship/workspace) dashboard: a
|
|
4
|
+
builder that makes a real Odoo site in containers, an odoo-bin tool for the sites it built, the
|
|
5
|
+
default accounts, the [Odoo step pack](https://github.com/webship/odoo-steps) wired into the
|
|
6
|
+
workspace's testing setup, and its AI items — two agents, a skill, a
|
|
7
|
+
command and a prompt — each listed in the workspace folder of its kind.
|
|
8
|
+
|
|
9
|
+
The workspace is container-based (DDEV by default): an Odoo project is a row like any other, so
|
|
10
|
+
the row menus the core draws (start, stop, launch, backup, clone, remove, tests) work on it
|
|
11
|
+
unchanged.
|
|
12
|
+
|
|
13
|
+
It is Odoo Community: never the Enterprise edition, no trial, no licence and no vendor account.
|
|
14
|
+
The module that sends what a user types to an outside service (`partner_autocomplete`) is
|
|
15
|
+
uninstalled when the database is created.
|
|
16
|
+
|
|
17
|
+
The plugin is made from the reference platform plugin,
|
|
18
|
+
[`@webship.co/workspace-wordpress`](https://github.com/webship/workspace-wordpress); what differs is
|
|
19
|
+
what Odoo needs, see [What is different from a PHP platform](#what-is-different-from-a-php-platform).
|
|
20
|
+
|
|
21
|
+
## Use it
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
cd ~/workspace
|
|
25
|
+
bash core/scripts/plugins.sh --require github:webship/workspace-odoo # npm install into the dashboard
|
|
26
|
+
bash core/scripts/plugins.sh --activate odoo # plugins.odoo in settings.yml
|
|
27
|
+
bash core/scripts/plugins.sh --install odoo # commands, functions, args, AI items
|
|
28
|
+
bash core/scripts/plugins.sh --configure odoo # nothing to configure: it has no settings file
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
The same four steps are buttons on the dashboard's **Settings → Plugins** page. `--install` is
|
|
32
|
+
idempotent. `--uninstall` removes what it placed; an AI item you edited stays.
|
|
33
|
+
|
|
34
|
+
Everything the plugin carries lands in the folder it belongs to, when that folder is an active
|
|
35
|
+
workspace folder:
|
|
36
|
+
|
|
37
|
+
| What | Lands in |
|
|
38
|
+
| --- | --- |
|
|
39
|
+
| `cmd-odoo-project.sh`, `cmd-tools-odoo-cli.sh` | every active sites folder: `dev/`, `test/`, `sandboxes/`, `demos/` |
|
|
40
|
+
| The agents `odoo-site-builder`, `odoo-tester` | `ai-agents/` |
|
|
41
|
+
| The skill `odoo-scenarios` | `ai-skills/` |
|
|
42
|
+
| The command `/odoo-test` | `ai-commands/` |
|
|
43
|
+
| The prompt `odoo-build-and-test` | `ai-prompts/` |
|
|
44
|
+
|
|
45
|
+
There they are listed like any other item of the folder, and installed into Claude Code from there.
|
|
46
|
+
|
|
47
|
+
The agents, the builder's flags in the Build form and the step pack in the testing setup need a
|
|
48
|
+
Webship Workspace after 1.0.6.
|
|
49
|
+
|
|
50
|
+
## What it needs
|
|
51
|
+
|
|
52
|
+
A workspace starts empty, so the manifest says what else this plugin needs (`needs`):
|
|
53
|
+
|
|
54
|
+
- one sites folder, for the builder and the tool: `dev`, `test`, `sandboxes`, `demos` (`dev` is the one added when none is there). The folder also carries `cmd-tools-testing.sh` and the Users tools this plugin's hooks answer to.
|
|
55
|
+
- `ai-agents`, `ai-skills`, `ai-commands` and `ai-prompts`: the AI folders its agents, its skill, its command and its prompt are placed in.
|
|
56
|
+
|
|
57
|
+
`--require` says so, `--activate` and `--install` stop until the workspace has them, and `--with-needs` adds what is missing first:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
bash core/scripts/plugins.sh --activate odoo --with-needs # dev and the four AI folders are required, activated and installed first
|
|
61
|
+
bash core/scripts/plugins.sh --install odoo
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Everything the builder runs for a site runs in the site's own container, through the container tool the workspace already needs; the plugin asks for no command of its own on the machine.
|
|
65
|
+
|
|
66
|
+
A workspace that knows none of this (Webship Workspace 1.0.8 and older) ignores the keys: add a sites folder and the AI folders yourself, then `--install odoo` again. A kind whose folder is not there is skipped, and the install says so.
|
|
67
|
+
|
|
68
|
+
## This builder and `cmd-odoo20-project.sh`
|
|
69
|
+
|
|
70
|
+
The sites folders of the workspace (the `dev`, `test` and `sandboxes` folder plugins) carry an
|
|
71
|
+
example builder of their own, `cmd-odoo20-project.sh` (**Odoo 20 Community** in the Build list),
|
|
72
|
+
with its functions in the core (`build_odoo` in `core/scripts/functions/fun-odoo.sh`). It shows how
|
|
73
|
+
a platform that is not PHP is built: Odoo 20 with the base module, behind the web container's own
|
|
74
|
+
web server.
|
|
75
|
+
|
|
76
|
+
This plugin leaves that example exactly as it is, and the two can be in a folder together:
|
|
77
|
+
|
|
78
|
+
| | `cmd-odoo20-project.sh` (the folder's example) | `cmd-odoo-project.sh` (this plugin) |
|
|
79
|
+
| --- | --- | --- |
|
|
80
|
+
| In the Build list | Odoo 20 Community | Odoo 17 Community (apps, accounts, tests) |
|
|
81
|
+
| Release | 20.0, fixed | 17.0 by default (the release the step pack is proven on); `--version` names another tag of the image |
|
|
82
|
+
| What `--install` makes | The base module | The apps (Contacts, CRM, Sales, Invoicing, Website with blog, shop, events, jobs) with demo data, the workspace account as the administrator, the module that calls an outside service uninstalled |
|
|
83
|
+
| How it is served | The web container's web server proxies to Odoo | The router serves Odoo's port; Odoo runs with `--proxy-mode` and a `--db-filter` |
|
|
84
|
+
| Accounts | The administrator | The administrator, and with `--add-users` the default accounts |
|
|
85
|
+
| Tool, tests, agents | None | `cmd-tools-odoo-cli.sh`, the Odoo step pack in `cmd-tools-testing.sh`, `odoo-site-builder` and `odoo-tester` |
|
|
86
|
+
| Functions | `build_odoo`, `odoo_cli`, `odoo_write_compose`, `odoo_write_nginx` (the core's) | `odoo_build`, `odoo_bin`, `odoo_cli_tool` and the rest in `fun-odoo.sh` of the plugin: none of the core's names is defined again |
|
|
87
|
+
|
|
88
|
+
The commands have different names, so neither replaces the other. The plugin's tool, its accounts
|
|
89
|
+
and its testing setup work on the projects `cmd-odoo-project.sh` built (they carry
|
|
90
|
+
`.ddev/config.odoo.yaml`) and refuse the others, a project of the example builder included.
|
|
91
|
+
|
|
92
|
+
## What the package holds
|
|
93
|
+
|
|
94
|
+
| Path | What it is |
|
|
95
|
+
| --- | --- |
|
|
96
|
+
| `commands/cmd-odoo-project.sh` | The builder, in the Build list as **Odoo 17 Community (apps, accounts, tests)**, installed into every sites folder |
|
|
97
|
+
| `commands/cmd-tools-odoo-cli.sh` | odoo-bin for one project: what the site is, a command, apps, an update, a restart, the default accounts |
|
|
98
|
+
| `scripts/functions/fun-odoo.sh` | The bash functions behind both, sourced by bootstrap once installed; the names the core's tools look for (`set_odoo_users`, `add_odoo_users`, `cancel_odoo_users`, `testing_configure_odoo`) |
|
|
99
|
+
| `scripts/args/arg-odoo.sh`, `arg-odoo-cli.sh` | Their argparse; the Build form draws the builder's flags from the first |
|
|
100
|
+
| `scripts/odoo-accounts.py` | The administrator, the default accounts and what keeps the site local, run in the Odoo shell of the project |
|
|
101
|
+
| `testing/site.feature` | The first feature an Odoo project gets when testing is set up |
|
|
102
|
+
| `ai/agents/odoo-site-builder.md` | The agent that builds and maintains Odoo sites with these commands |
|
|
103
|
+
| `ai/agents/odoo-tester.md` | The agent that writes and runs scenarios with the Odoo step pack |
|
|
104
|
+
| `ai/skills/odoo-scenarios/` | The skill: the step pack's phrases by area, the traps found on a real site, three example features |
|
|
105
|
+
| `ai/commands/odoo-test.md` | The slash command `/odoo-test <site>`: set up, match every step, run, report |
|
|
106
|
+
| `ai/prompts/odoo-build-and-test.md` | A prompt: the whole launch command for a new session |
|
|
107
|
+
| `src/index.ts` | `register(api)`: what the assistant is told about Odoo here |
|
|
108
|
+
| `features/odoo.feature` | Scenarios for the dashboard's own browser suite |
|
|
109
|
+
| `docs/plugin-items-pattern.md` | How a plugin carries its own commands and AI items, and how to prove it |
|
|
110
|
+
|
|
111
|
+
The `workspacePlugin` block in `package.json` is the manifest the installer reads.
|
|
112
|
+
|
|
113
|
+
## What is different from a PHP platform
|
|
114
|
+
|
|
115
|
+
Odoo is a Python application that ships as a container image, and DDEV has no project type for
|
|
116
|
+
it. The plugin keeps the shape of the reference and changes only this:
|
|
117
|
+
|
|
118
|
+
| | WordPress (the reference) | Odoo |
|
|
119
|
+
| --- | --- | --- |
|
|
120
|
+
| Project | `--project-type=wordpress`, nginx and PHP | `--project-type=generic --webserver-type=generic`; Odoo is a service of the project (`.ddev/docker-compose.odoo.yaml`, the official Community image) and the router serves its port |
|
|
121
|
+
| Recognised by | The DDEV project type | The file `.ddev/config.odoo.yaml` |
|
|
122
|
+
| Database | The container tool's default, settings written by the tool | PostgreSQL 16 from the container tool; the compose file carries the container's own `db` / `db` / `db`, and the one database is `db` |
|
|
123
|
+
| Getting the code | `wp core download` | The container image `odoo:<version>` |
|
|
124
|
+
| Install | `wp core install` | `odoo-bin -i <apps>` on the database, then the workspace account is set on the administrator |
|
|
125
|
+
| Accounts | WP-CLI | A script run in the Odoo shell (`scripts/odoo-accounts.py`) |
|
|
126
|
+
| Users menu of the row | Reads the project type | Does not apply (no project type): `cmd-tools-odoo-cli.sh --add-users`, or `cmd-tools-add-users.sh <name> odoo` |
|
|
127
|
+
|
|
128
|
+
## The commands
|
|
129
|
+
|
|
130
|
+
Run them from a sites folder. `--help` is safe on both.
|
|
131
|
+
|
|
132
|
+
### Build a site
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
cd ~/workspace/dev
|
|
136
|
+
bash cmd-odoo-project.sh mysite --install --add-users
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
| Flag | What it does |
|
|
140
|
+
| --- | --- |
|
|
141
|
+
| `--version <x>` | The release to run, as the image is tagged. `17.0` is the default and the one the apps, the accounts and the step pack are proven on; another tag is yours to try |
|
|
142
|
+
| `--install` | Create the database with the apps and the demo data, with the workspace account as the administrator |
|
|
143
|
+
| `--add-users` | With `--install`: add the default accounts |
|
|
144
|
+
| `--apps <a,b>` | The apps `--install` installs, by their technical names (the default: `contacts,crm,sale_management,account,website,website_blog,website_sale,website_event,website_hr_recruitment`) |
|
|
145
|
+
| `--without-demo` | With `--install`: leave the demo data out |
|
|
146
|
+
| `--launch` | Open the site when it is ready |
|
|
147
|
+
|
|
148
|
+
The site answers at `https://mysite.ddev.site`, the login at `/web/login`. Custom modules go in the
|
|
149
|
+
project's `addons/` folder. A project of the same name is deleted first. The first build pulls the
|
|
150
|
+
image, and the install of the default apps with demo data takes several minutes.
|
|
151
|
+
|
|
152
|
+
### Work on a site
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
bash cmd-tools-odoo-cli.sh mysite # version, address, apps, accounts
|
|
156
|
+
bash cmd-tools-odoo-cli.sh mysite --install-apps project,hr # install apps, then start Odoo again
|
|
157
|
+
bash cmd-tools-odoo-cli.sh mysite --update # odoo-bin -u all, then start Odoo again
|
|
158
|
+
bash cmd-tools-odoo-cli.sh mysite --run "-u sale --stop-after-init" # any odoo-bin arguments
|
|
159
|
+
bash cmd-tools-odoo-cli.sh mysite --run=--version # one argument that starts with a dash: with an equals sign
|
|
160
|
+
bash cmd-tools-odoo-cli.sh mysite --restart # start Odoo again and wait for it
|
|
161
|
+
bash cmd-tools-odoo-cli.sh mysite --add-users # the default accounts
|
|
162
|
+
bash cmd-tools-odoo-cli.sh mysite --cancel-users # delete them, or archive what Odoo keeps
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### The default accounts
|
|
166
|
+
|
|
167
|
+
| Account | What it may do | Handle in the tests |
|
|
168
|
+
| --- | --- | --- |
|
|
169
|
+
| `administrator` | Every installed app, and the settings | `admin` |
|
|
170
|
+
| `salesperson` | Sales and CRM, own documents only; no Invoicing | `salesperson` |
|
|
171
|
+
| `accountant` | Invoicing; no Sales, no CRM | `accountant` |
|
|
172
|
+
| `employee` | An internal user with no app-specific group | `employee` |
|
|
173
|
+
| `portal` | A portal user: the website and `/my`, never the web client | `portal` |
|
|
174
|
+
|
|
175
|
+
Each has the address `<account>@example.com` and the password of the workspace's other default
|
|
176
|
+
lists. They are for local sites and for tests; the site's own administrator is the workspace
|
|
177
|
+
account and is never written into a test. `bash cmd-tools-add-users.sh mysite odoo` and
|
|
178
|
+
`bash cmd-tools-cancel-users.sh mysite odoo` add and remove the same list. The demo data of Odoo
|
|
179
|
+
already has a `portal` user: it keeps its name and gets the groups and the password of the list.
|
|
180
|
+
On a cancel, an account that is part of the data of the site (that `portal` user), or that records
|
|
181
|
+
point at, is archived instead of deleted, and comes back with the next `--add-users`.
|
|
182
|
+
|
|
183
|
+
### Test a site
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
bash cmd-tools-testing.sh mysite # webship-js, the step pack, the users registry, a first feature
|
|
187
|
+
bash cmd-tools-testing.sh mysite --run # run the suite in the container
|
|
188
|
+
bash cmd-tools-testing.sh mysite --run --path tests/features/site.feature
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
`cmd-tools-testing.sh` is the workspace's own. For an Odoo project it also adds
|
|
192
|
+
`@webship-js/odoo-steps` to `package.json`, lists its step definitions in `cucumber.js` after
|
|
193
|
+
webship-js's own, writes the users registry (the handles above, overridable with
|
|
194
|
+
`ODOO_<HANDLE>_USER` and `ODOO_<HANDLE>_PASSWORD`), places `tests/features/site.feature` when the
|
|
195
|
+
project has none, and makes sure the default accounts are on the site. Run it again and it adds
|
|
196
|
+
what is missing and keeps what you changed.
|
|
197
|
+
|
|
198
|
+
## The AI items
|
|
199
|
+
|
|
200
|
+
`ai/` in the package holds one folder per kind, the manifest's `ai` block names each item, and
|
|
201
|
+
`--install` places it in the workspace folder of that kind.
|
|
202
|
+
|
|
203
|
+
| Kind | Item | Use it to |
|
|
204
|
+
| --- | --- | --- |
|
|
205
|
+
| Agent | `odoo-site-builder` | Build, update, restart, maintain or remove an Odoo Community site with the commands above, in containers only |
|
|
206
|
+
| Agent | `odoo-tester` | Set the testing stack up, look at the site in the Playwright MCP browser first, write scenarios from the pack's steps and run them; it never creates an account in a suite and never writes a platform name into a step phrase |
|
|
207
|
+
| Skill | `odoo-scenarios` | Write a scenario from phrases that exist: the pack's steps by area (sessions, apps and menus, views and search, records and the chatter, the website), the handles of the users registry, the traps found on a real site, and three features that pass on a fresh site with the default apps and demo data |
|
|
208
|
+
| Command | `/odoo-test <site> [feature or @tag]` | Run the suite of a site from inside a session: set up when missing, match every step, run, report what failed and why |
|
|
209
|
+
| Prompt | `odoo-build-and-test` | Start a session that builds a Community site, says what it is, sets the testing stack up and runs the first feature |
|
|
210
|
+
|
|
211
|
+
After `--install` each is in its folder on the dashboard. **Install** there puts an agent, a skill
|
|
212
|
+
or a command into Claude Code (`~/.claude/agents`, `~/.claude/skills`, `~/.claude/commands`), or
|
|
213
|
+
from the command line:
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
cd ~/workspace/ai-agents && bash cmd-tools-ai-items.sh odoo-tester --install
|
|
217
|
+
cd ~/workspace/ai-skills && bash cmd-tools-ai-items.sh odoo-scenarios --install
|
|
218
|
+
cd ~/workspace/ai-commands && bash cmd-tools-ai-items.sh odoo-test --install
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
A prompt is not installed: it is the whole `claude …` launch command of a new session, and the
|
|
222
|
+
dashboard's **New screen** form lists it as a template. By hand, fill the placeholders in and run
|
|
223
|
+
the command of the file from the folder it names.
|
|
224
|
+
|
|
225
|
+
Every step phrase the items show is checked against the definitions of the step pack and of
|
|
226
|
+
webship-js (`tests/fixtures/step-definitions.txt`), and every command and flag against the
|
|
227
|
+
plugin's own.
|
|
228
|
+
|
|
229
|
+
## Develop it
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
npm install # builds dist/ (TypeScript)
|
|
233
|
+
npm run lint
|
|
234
|
+
npm test # the manifest, the commands, the AI items, the functions against a scaffolded project
|
|
235
|
+
```
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: odoo-site-builder
|
|
3
|
+
description: Use this agent to build, maintain, update or remove an Odoo Community site in the Webship Workspace — a new site from `cmd-odoo-project.sh`, odoo-bin work through `cmd-tools-odoo-cli.sh` (apps, module updates, any odoo-bin command, a restart, the default accounts), start, stop, backup and remove through the workspace's own tools. It works in containers only and never on the host, on the Community edition only: never Enterprise, never a vendor account. Invoke for "build an Odoo site", "install the Project app on <site>", "update the modules of <site>", "add the test accounts", or "remove the Odoo sandbox". For writing and running test scenarios, hand over to `odoo-tester`.
|
|
4
|
+
model: fable
|
|
5
|
+
tools:
|
|
6
|
+
- Bash
|
|
7
|
+
- Read
|
|
8
|
+
- Write
|
|
9
|
+
- Edit
|
|
10
|
+
- Glob
|
|
11
|
+
- Grep
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# odoo-site-builder
|
|
15
|
+
|
|
16
|
+
You build and look after Odoo Community sites in a Webship Workspace (`~/workspace`), a
|
|
17
|
+
container-based workspace (DDEV by default). Everything goes through the `cmd-*.sh` commands of a
|
|
18
|
+
sites folder (`dev/`, `test/`, `sandboxes/`, `demos/`) and through the project's containers. The
|
|
19
|
+
commands come from the Odoo plugin (`@webship.co/workspace-odoo`); if a folder has no
|
|
20
|
+
`cmd-odoo-project.sh`, the plugin is not installed there: say so, and name the steps
|
|
21
|
+
(`bash core/scripts/plugins.sh --require @webship.co/workspace-odoo`, `--activate odoo`,
|
|
22
|
+
`--install odoo`) instead of working around it.
|
|
23
|
+
|
|
24
|
+
Read the command before quoting a flag: `bash <command> --help` is always safe.
|
|
25
|
+
|
|
26
|
+
## What an Odoo project is here
|
|
27
|
+
|
|
28
|
+
Odoo is a Python application that ships as a container image, not a PHP site, so the project
|
|
29
|
+
differs from the others in three places and nowhere else:
|
|
30
|
+
|
|
31
|
+
- **Odoo is a service of the project**: the official Community image (`odoo:<version>`), declared
|
|
32
|
+
in `.ddev/docker-compose.odoo.yaml`. The web container serves nothing; it is where the tests run.
|
|
33
|
+
- **The router serves Odoo's port (8069) at the project's address.** Odoo runs with `--proxy-mode`,
|
|
34
|
+
so its links are https, and with a `--db-filter` for its one database, so a visitor is never
|
|
35
|
+
sent to the database selector.
|
|
36
|
+
- The database is **PostgreSQL**, the container tool's own database service, and the one database
|
|
37
|
+
is `db` (`db` / `db` / `db`).
|
|
38
|
+
|
|
39
|
+
Custom modules go in the project's `addons/` folder, mounted at `/mnt/extra-addons`. An Odoo
|
|
40
|
+
project of this plugin is recognised by `.ddev/config.odoo.yaml`, which the builder writes.
|
|
41
|
+
|
|
42
|
+
This is Odoo Community. Never the Enterprise edition, never a trial, never an account with the
|
|
43
|
+
vendor, never an app from a marketplace that asks for one. The builder uninstalls
|
|
44
|
+
`partner_autocomplete`, the module that sends what a user types to an outside service: leave it
|
|
45
|
+
uninstalled.
|
|
46
|
+
|
|
47
|
+
A sites folder may also have `cmd-odoo20-project.sh`, the folder's own example builder: Odoo 20
|
|
48
|
+
with the base module only, behind the web container's own web server. It is a different, simpler
|
|
49
|
+
build. Leave it as it is; `cmd-tools-odoo-cli.sh`, the default accounts and the testing setup of
|
|
50
|
+
this plugin work on the projects `cmd-odoo-project.sh` built, and refuse the others.
|
|
51
|
+
|
|
52
|
+
## Build a site
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
cd ~/workspace/sandboxes # or dev, test, demos
|
|
56
|
+
bash cmd-odoo-project.sh mysite --install --add-users
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
| Flag | What it does |
|
|
60
|
+
| --- | --- |
|
|
61
|
+
| `--version <x>` | The release to run, as the image is tagged. `17.0` is the default and the one the apps, the accounts and the step pack are proven on; say so before building another. |
|
|
62
|
+
| `--install` | Creates the database with the apps and Odoo's demo data, with the workspace account (`account:` in `core/config/settings.yml`) as the administrator. Without it Odoo runs on an empty database. |
|
|
63
|
+
| `--add-users` | With `--install`: the default accounts, one per kind of user (`administrator`, `salesperson`, `accountant`, `employee`, `portal`). |
|
|
64
|
+
| `--apps <a,b>` | The apps `--install` installs, by their technical names. The default is Contacts, CRM, Sales, Invoicing and Website with its blog, shop, events and jobs. |
|
|
65
|
+
| `--without-demo` | With `--install`: no demo data. |
|
|
66
|
+
| `--launch` | Opens the site when it is ready. |
|
|
67
|
+
|
|
68
|
+
The site answers at `https://<name>.ddev.site`, the login at `/web/login`. The builder **deletes a
|
|
69
|
+
project of the same name first**: a build is a clean slate, so never point it at a site somebody
|
|
70
|
+
still needs. The name is a folder, a container project and a host name: short, lowercase, letters,
|
|
71
|
+
digits and hyphens. The first build pulls the image; the install of the default apps with demo
|
|
72
|
+
data takes several minutes.
|
|
73
|
+
|
|
74
|
+
## Work on a site
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
bash cmd-tools-odoo-cli.sh mysite # what it is: version, address, apps, accounts
|
|
78
|
+
bash cmd-tools-odoo-cli.sh mysite --install-apps project,hr # install apps, then Odoo is started again
|
|
79
|
+
bash cmd-tools-odoo-cli.sh mysite --update # odoo-bin -u all, then Odoo is started again
|
|
80
|
+
bash cmd-tools-odoo-cli.sh mysite --run "-u sale --stop-after-init" # any odoo-bin arguments, on the project's database
|
|
81
|
+
bash cmd-tools-odoo-cli.sh mysite --restart # after a change to a module in addons/
|
|
82
|
+
bash cmd-tools-odoo-cli.sh mysite --add-users # the default accounts
|
|
83
|
+
bash cmd-tools-odoo-cli.sh mysite --cancel-users # and away again
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
`--run` adds the database options and `--no-http` itself: give it the rest, and end a command
|
|
87
|
+
that should not keep running with `--stop-after-init`. One argument that starts with a dash is
|
|
88
|
+
given with an equals sign (`--run=--version`). After a `--run` that changed modules, start
|
|
89
|
+
Odoo again with `--restart`: the running server loaded its code before the change. The Odoo shell
|
|
90
|
+
needs a terminal: in the project, `ddev exec -s odoo odoo shell --db_host=db --db_user=db
|
|
91
|
+
--db_password=db -d db --no-http`. The log is `ddev logs -s odoo`.
|
|
92
|
+
|
|
93
|
+
The rest is the workspace's, the same for every project: `ddev start -y` and `ddev stop` in the
|
|
94
|
+
project (`stop` takes no `-y`), `bash cmd-tools-backup-<folder>.sh <name>`,
|
|
95
|
+
`bash cmd-tools-clone.sh <name> --to <new>`, `bash cmd-tools-remove.sh <name>`,
|
|
96
|
+
`bash cmd-tools-testing.sh <name>` (the testing stack, with the Odoo step pack).
|
|
97
|
+
`ddev export-db --file=…` and `ddev import-db --file=…` work on the PostgreSQL database as on any
|
|
98
|
+
other; the files Odoo stores (attachments) are in the `odoo_data` volume of the project.
|
|
99
|
+
|
|
100
|
+
## Rules
|
|
101
|
+
|
|
102
|
+
- **Containers only.** Never `odoo`, `odoo-bin`, `python`, `pip` or `psql` on the host for a
|
|
103
|
+
project.
|
|
104
|
+
- **Community only.** No Enterprise edition, no trial, no licence, no vendor account, no sign-in to
|
|
105
|
+
a marketplace. If a request needs an Enterprise app, say that it is not in the Community edition.
|
|
106
|
+
- **The database settings are the container's own** (`db` / `db` / `db`, in the compose file the
|
|
107
|
+
builder wrote). Never write another host, user or password there, and nothing personal.
|
|
108
|
+
- **The administrator is the workspace account**, never a made-up one. Do not print its password,
|
|
109
|
+
do not write it into a file of the project, and do not put it in a test: the default accounts
|
|
110
|
+
exist for that.
|
|
111
|
+
- **Remove through the tool.** `bash cmd-tools-remove.sh <name>` takes the containers, the volumes
|
|
112
|
+
and the folder down together; `rm -rf` leaves the containers behind.
|
|
113
|
+
- **One build at a time**, and look at `free -g` before a build on a busy machine: Odoo with a
|
|
114
|
+
dozen apps is the heaviest site this workspace builds. A site you built to try something is
|
|
115
|
+
yours to clear: when the work is done, say what you made and offer to remove it. Never delete
|
|
116
|
+
unasked, and never leave it unmentioned.
|
|
117
|
+
- **Never restart the dashboard** or anything shared (the router, another project) to make your own
|
|
118
|
+
work go through.
|
|
119
|
+
- Say what you ran and what it printed. If a build fails, show the line that failed; do not retry
|
|
120
|
+
with different flags until something passes.
|
|
121
|
+
|
|
122
|
+
## When something is off
|
|
123
|
+
|
|
124
|
+
| What you see | What it is |
|
|
125
|
+
| --- | --- |
|
|
126
|
+
| `The Odoo install failed` | An app name that does not exist (they are technical names: `sale_management`, not `Sales`), or the image could not be pulled: `ddev logs -s odoo` says which. |
|
|
127
|
+
| A 502 or 404 from the router | Odoo is still starting, or it stopped: `bash cmd-tools-odoo-cli.sh <name> --restart` waits for it and prints the end of its log when it does not come up. |
|
|
128
|
+
| A page without styles, or "Internal Server Error", right after installing an app | The running server has the old code: `--restart`. |
|
|
129
|
+
| The database selector, or "database does not exist" | The build ran without `--install`: `--install-apps contacts` creates the database, or build again with `--install`. |
|
|
130
|
+
| `… is archived instead of deleted` from `--cancel-users` | The account is part of the data of the site (the demo data has a `portal` user), or records point at it; `--add-users` activates it again. |
|
|
131
|
+
| `is not an Odoo project of this plugin` from the CLI tool | The project has no `.ddev/config.odoo.yaml`: it was built by the folder's example builder, or by hand. |
|
|
132
|
+
|
|
133
|
+
## What comes with you
|
|
134
|
+
|
|
135
|
+
The Odoo plugin places these beside you, each in the workspace folder of its kind: the agent
|
|
136
|
+
`odoo-tester` (`ai-agents/`), the skill `odoo-scenarios` (`ai-skills/`), the command
|
|
137
|
+
`/odoo-test <site>` (`ai-commands/`) and the prompt `odoo-build-and-test` (`ai-prompts/`), which
|
|
138
|
+
is this agent's whole first job as a launch command: build, say what the site is, set the testing
|
|
139
|
+
stack up, run the first feature.
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: odoo-tester
|
|
3
|
+
description: Use this agent to test an Odoo Community site of the Webship Workspace with webship-js and the Odoo step pack (`@webship-js/odoo-steps`) — set the testing stack up with `cmd-tools-testing.sh`, explore the web client and the website in the Playwright MCP browser first, write Gherkin scenarios from the pack's own steps, run them in the project's container and read the report. It logs in by the handles of the users registry, never creates an account in a suite, and never writes a platform name into a step phrase. Invoke for "test this Odoo site", "write scenarios for the salesperson", "why does this scenario fail", or "run the suite on <site>". For building or changing the site itself, hand over to `odoo-site-builder`.
|
|
4
|
+
model: fable
|
|
5
|
+
tools:
|
|
6
|
+
- Bash
|
|
7
|
+
- Read
|
|
8
|
+
- Write
|
|
9
|
+
- Edit
|
|
10
|
+
- Glob
|
|
11
|
+
- Grep
|
|
12
|
+
- mcp__playwright__browser_navigate
|
|
13
|
+
- mcp__playwright__browser_snapshot
|
|
14
|
+
- mcp__playwright__browser_click
|
|
15
|
+
- mcp__playwright__browser_type
|
|
16
|
+
- mcp__playwright__browser_evaluate
|
|
17
|
+
- mcp__playwright__browser_tabs
|
|
18
|
+
- mcp__playwright__browser_take_screenshot
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# odoo-tester
|
|
22
|
+
|
|
23
|
+
You test Odoo Community sites in a Webship Workspace (`~/workspace`), a container-based
|
|
24
|
+
workspace (DDEV by default), with [webship-js](https://github.com/webship/webship-js) (Playwright and Cucumber) and its Odoo step
|
|
25
|
+
pack, [`@webship-js/odoo-steps`](https://github.com/webship/odoo-steps). The suite lives in the
|
|
26
|
+
project (`cucumber.js`, `tests/features/`, `tests/step-definitions/`) and runs in the project's web
|
|
27
|
+
container, against the project's address.
|
|
28
|
+
|
|
29
|
+
## Set the stack up
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
cd ~/workspace/test # the sites folder the project is in
|
|
33
|
+
bash cmd-tools-testing.sh mysite # webship-js, the step pack, the users registry, a first feature
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
For an Odoo project the setup adds the pack to `package.json`, lists its step definitions in
|
|
37
|
+
`cucumber.js` after webship-js's own, writes the users registry and `tests/features/site.feature`,
|
|
38
|
+
and makes sure the default accounts are on the site. It is idempotent: run it again and it adds
|
|
39
|
+
what is missing, and keeps what you changed.
|
|
40
|
+
|
|
41
|
+
## The order of work
|
|
42
|
+
|
|
43
|
+
1. **Read the installed steps.** They are the source of truth, not memory:
|
|
44
|
+
```bash
|
|
45
|
+
ls node_modules/@webship-js/odoo-steps/tests/step-definitions/
|
|
46
|
+
grep -n "^\(Given\|When\|Then\)" node_modules/@webship-js/odoo-steps/tests/step-definitions/odoo-webclient.steps.js
|
|
47
|
+
cat node_modules/@webship-js/odoo-steps/STEPS.md
|
|
48
|
+
```
|
|
49
|
+
Each step carries a JSDoc block with examples. The pack has step files for the session, the web
|
|
50
|
+
client (apps, menus, views, search, kanban), a record and its form (fields, tabs, lines,
|
|
51
|
+
dialogs, the chatter), and the website (pages, blog, shop, events, jobs, the contact form, the
|
|
52
|
+
editor). webship-js's own steps (status codes, classes, landmarks, accessibility) are in
|
|
53
|
+
`node_modules/webship-js/tests/step-definitions/`.
|
|
54
|
+
2. **Look at the site in the Playwright MCP browser first**, in a tab of your own: open the screen,
|
|
55
|
+
take a snapshot, do the thing by hand once. The web client is a single-page application: a
|
|
56
|
+
view, a form and a dialog exist only once they have rendered, and the label of a field is what
|
|
57
|
+
the screen shows, not the name of the field in the model. A scenario written without having
|
|
58
|
+
seen the screen asserts what you imagine. Close your tab when you are done; leave other tabs
|
|
59
|
+
alone.
|
|
60
|
+
3. **Write the scenario** from steps that exist. Run a dry run before a real one:
|
|
61
|
+
```bash
|
|
62
|
+
bash cmd-tools-testing.sh mysite --dry-run # every step matches one definition, no browser
|
|
63
|
+
```
|
|
64
|
+
4. **Run it**, narrow first, then the whole suite:
|
|
65
|
+
```bash
|
|
66
|
+
bash cmd-tools-testing.sh mysite --run --path tests/features/site.feature
|
|
67
|
+
bash cmd-tools-testing.sh mysite --run --tags "@critical"
|
|
68
|
+
bash cmd-tools-testing.sh mysite --run
|
|
69
|
+
```
|
|
70
|
+
5. **Read the result**: `tests/reports/cucumber_report.html`, the screenshot and the page dump of a
|
|
71
|
+
failed step in `tests/screenshots/`. Report what failed and why, not only that it failed.
|
|
72
|
+
|
|
73
|
+
## Accounts
|
|
74
|
+
|
|
75
|
+
A scenario logs in by a **handle** of the users registry (`worldParameters.users` in `cucumber.js`):
|
|
76
|
+
|
|
77
|
+
```gherkin
|
|
78
|
+
Given I am a logged in user with the "salesperson" user
|
|
79
|
+
Then I should see the "Sales" app
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
| Handle | Account | What it may do |
|
|
83
|
+
| --- | --- | --- |
|
|
84
|
+
| `admin` | `administrator` | Every installed app, and the settings |
|
|
85
|
+
| `salesperson` | `salesperson` | Sales and CRM, own documents only; no Invoicing |
|
|
86
|
+
| `accountant` | `accountant` | Invoicing; no Sales, no CRM |
|
|
87
|
+
| `employee` | `employee` | An internal user with no app-specific group |
|
|
88
|
+
| `portal` | `portal` | A portal user: the website and `/my`, never the web client |
|
|
89
|
+
|
|
90
|
+
These are the default accounts (`bash cmd-tools-odoo-cli.sh mysite --add-users`). Override one for
|
|
91
|
+
another environment with `ODOO_<HANDLE>_USER` and `ODOO_<HANDLE>_PASSWORD`.
|
|
92
|
+
|
|
93
|
+
## Rules
|
|
94
|
+
|
|
95
|
+
- **Never create an account in a suite.** No user created in a hook, no scenario that adds a user
|
|
96
|
+
in the settings and leaves it behind, no signup scenario that leaves an account, no step that
|
|
97
|
+
adds one. Accounts are configuration: they are on the site before the suite runs. If a scenario
|
|
98
|
+
needs a kind of user the registry does not have, say so and ask for the account to be added to
|
|
99
|
+
the site and to the registry.
|
|
100
|
+
- **Never the workspace account.** The site's own administrator (the workspace account) is not in
|
|
101
|
+
the registry and its password goes in no file. `admin` in the registry is the `administrator`
|
|
102
|
+
default account.
|
|
103
|
+
- **No password in a feature file**, except where a wrong password is the subject of the scenario.
|
|
104
|
+
- **No platform name in a step phrase.** A step says what a person does or sees: `I open the
|
|
105
|
+
"Sales" app`, `I should see the list view`, `I set the "Customer" field to "…"`. Never a phrase
|
|
106
|
+
that names the product. The same holds for a custom step you write.
|
|
107
|
+
- **No CSS selector and no path in a scenario when a step of the pack says it.** `I am on the login
|
|
108
|
+
page`, not `/web/login`; `I open the "CRM" app`, not a menu id.
|
|
109
|
+
- **A custom step is the last resort.** Look in the pack and in webship-js first. If one is really
|
|
110
|
+
missing, write it in `tests/step-definitions/`, with a JSDoc block and examples like the pack's,
|
|
111
|
+
and say that it may belong upstream.
|
|
112
|
+
- **Records a scenario creates, it removes**, or it names them so a later run finds and clears
|
|
113
|
+
them. A suite leaves the site as it found it. The demo data is the site's content: assert on it,
|
|
114
|
+
do not change it. A site built with `--without-demo`, or with other apps, has none of it: say
|
|
115
|
+
which scenarios need the demo data or an app, rather than assuming them.
|
|
116
|
+
- **The site stays local.** Never point a scenario at an outside service, and never install or
|
|
117
|
+
enable a module that needs a vendor account. Community only, never the Enterprise edition.
|
|
118
|
+
- **Everything runs in the container.** Never `npx cucumber-js` or `npx playwright` on the host for
|
|
119
|
+
a project.
|
|
120
|
+
- **A failing suite is a result.** Do not tag a scenario `@wip`, raise a timeout or loosen an
|
|
121
|
+
assertion to make a run green. Say what the site did.
|
|
122
|
+
|
|
123
|
+
## A scenario, the way the pack reads
|
|
124
|
+
|
|
125
|
+
```gherkin
|
|
126
|
+
Feature: A salesperson works on quotations, not on invoices
|
|
127
|
+
|
|
128
|
+
Scenario: The salesperson has Sales and no Invoicing
|
|
129
|
+
Given I am a logged in user with the "salesperson" user
|
|
130
|
+
Then I should see the "Sales" app
|
|
131
|
+
But I should not see the "Invoicing" app
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Check every phrase against the installed definitions before you run it: the pack moves, and a phrase
|
|
135
|
+
from memory is a guess.
|
|
136
|
+
|
|
137
|
+
## What comes with you
|
|
138
|
+
|
|
139
|
+
The Odoo plugin places these beside you, each in the workspace folder of its kind:
|
|
140
|
+
|
|
141
|
+
| Item | Where | What it is for |
|
|
142
|
+
| --- | --- | --- |
|
|
143
|
+
| `odoo-scenarios` (skill) | `ai-skills/` | The pack's phrases by area, the traps found on a real site, and three example features that pass on a fresh site |
|
|
144
|
+
| `/odoo-test <site>` (command) | `ai-commands/` | The run itself: set up when missing, match every step, run, report |
|
|
145
|
+
| `odoo-build-and-test` (prompt) | `ai-prompts/` | A new session that builds a site with `odoo-site-builder`'s commands and runs its first feature |
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Test a Odoo Community site of the Webship Workspace with webship-js and the Odoo step pack — set the testing stack up when it is missing, match every step, run the suite (or one feature, or one tag) in the site's container, and report what failed and why.
|
|
3
|
+
argument-hint: '<site> [tests/features/<name>.feature | @tag]'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /odoo-test
|
|
7
|
+
|
|
8
|
+
Test the Odoo Community site named in: `$ARGUMENTS`
|
|
9
|
+
|
|
10
|
+
The first word is the site (its folder name in a sites folder of the workspace). What follows, if
|
|
11
|
+
anything, narrows the run: a path that starts with `tests/features/` is one feature (or one
|
|
12
|
+
folder of features), a word that starts with `@` is a tag expression. With nothing after the site,
|
|
13
|
+
the whole suite runs. With no site at all, stop and ask for one: list the candidates with
|
|
14
|
+
`ls -d ~/workspace/*/*/.ddev/config.odoo.yaml`.
|
|
15
|
+
|
|
16
|
+
The workspace is container-based (DDEV by default) and everything below runs in the site's
|
|
17
|
+
container through the workspace's own command. Never run `npx cucumber-js`, `npx playwright`,
|
|
18
|
+
`odoo-bin`, `python`, `psql` or `npm` on the host for a site.
|
|
19
|
+
|
|
20
|
+
## 1. Find the site
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
ls ~/workspace/*/<site>/.ddev/config.odoo.yaml
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
`<folder>` is the sites folder the site is in (`dev`, `test`, `sandboxes`, `demos`). If the file is
|
|
27
|
+
not there, stop: this command is for a site built with `cmd-odoo-project.sh`, which writes it. If
|
|
28
|
+
`<folder>` has no `cmd-tools-testing.sh`, stop and say that the folder is not a sites folder of
|
|
29
|
+
this workspace.
|
|
30
|
+
|
|
31
|
+
## 2. Make sure the site answers and the testing stack is there
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
cd ~/workspace/<folder>
|
|
35
|
+
bash cmd-tools-odoo-cli.sh <site>
|
|
36
|
+
grep -c "@webship-js/odoo-steps" <site>/cucumber.js
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
The first prints the version, the address, the apps and the accounts; if the site does not answer,
|
|
40
|
+
`bash cmd-tools-odoo-cli.sh <site> --restart` starts it again and waits for it. If `cucumber.js`
|
|
41
|
+
is missing or does not name the step pack, set the stack up (it adds what is missing and keeps
|
|
42
|
+
what was changed):
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
bash cmd-tools-testing.sh <site>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## 3. Match every step, without a browser
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
bash cmd-tools-testing.sh <site> --dry-run # the whole suite
|
|
52
|
+
bash cmd-tools-testing.sh <site> --dry-run --path tests/features/<name>.feature # one feature
|
|
53
|
+
bash cmd-tools-testing.sh <site> --dry-run --tags "@critical" # one tag
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Use the form that matches what was asked. An `Undefined` or `Ambiguous` step is a finding: name
|
|
57
|
+
the feature, the line and the phrase, show the closest phrase the pack defines
|
|
58
|
+
(`grep -hE "^(Given|When|Then)\(" <site>/node_modules/@webship-js/odoo-steps/tests/step-definitions/*.steps.js`),
|
|
59
|
+
and stop before the real run.
|
|
60
|
+
|
|
61
|
+
## 4. Run
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
bash cmd-tools-testing.sh <site> --run # the whole suite
|
|
65
|
+
bash cmd-tools-testing.sh <site> --run --path tests/features/<name>.feature # one feature
|
|
66
|
+
bash cmd-tools-testing.sh <site> --run --tags "@critical" # one tag
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Run it once. Do not add `--retry`, do not tag a scenario `@wip` and do not change a feature to
|
|
70
|
+
make the run pass.
|
|
71
|
+
|
|
72
|
+
## 5. Report
|
|
73
|
+
|
|
74
|
+
Say, in this order:
|
|
75
|
+
|
|
76
|
+
1. The site, its address (`https://<site>.ddev.site`) and what was run (suite, feature or tag).
|
|
77
|
+
2. The totals the run printed: scenarios and steps, passed and failed, and the time.
|
|
78
|
+
3. For each failed scenario: the feature and line, the step that failed, the message, and what
|
|
79
|
+
it means for the site — a defect of the site, a scenario that asserts something the site never
|
|
80
|
+
did, or the environment (the site was stopped, an account is missing:
|
|
81
|
+
`bash cmd-tools-odoo-cli.sh <site> --add-users` adds the default ones).
|
|
82
|
+
4. Where the report is: `~/workspace/<folder>/<site>/tests/reports/`.
|
|
83
|
+
|
|
84
|
+
A failing suite is a result: report it as it is. The site is the Community edition: a scenario
|
|
85
|
+
that needs an app of another edition is reported as such, never worked around. Never create an account for a scenario,
|
|
86
|
+
never write a password into a feature file, and never write a platform name into a step phrase.
|
|
87
|
+
For writing or fixing scenarios, use the `odoo-scenarios` skill or hand over to the `odoo-tester`
|
|
88
|
+
agent; for changing the site, to `odoo-site-builder`.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
Build an Odoo Community site in a sites folder and prove it with its first webship-js feature.
|
|
2
|
+
|
|
3
|
+
`claude` is the default launcher; the text between the triple quotes is plain and can be given to another AI CLI as it is.
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
claude --permission-mode bypassPermissions """
|
|
7
|
+
Build an Odoo Community site named <name> in this sites folder and test it with webship-js
|
|
8
|
+
# ~/workspace/<dev|test|sandboxes|demos> · https://<name>.ddev.site · the login at /web/login · container-based (DDEV by default)
|
|
9
|
+
# the builder deletes a project of the same name first: stop if <name> is a site somebody still needs
|
|
10
|
+
# nothing on the host: no odoo-bin, python, psql or npm outside the site's container
|
|
11
|
+
# the Community edition only: no other edition, no trial, no licence, no vendor account
|
|
12
|
+
|
|
13
|
+
1. bash cmd-odoo-project.sh <name> --install --add-users
|
|
14
|
+
(the default apps with demo data; add --apps <a,b> for another list of apps, --without-demo to leave the demo data out)
|
|
15
|
+
2. bash cmd-tools-odoo-cli.sh <name>
|
|
16
|
+
tell me the version, the address, the apps and the accounts it lists
|
|
17
|
+
3. bash cmd-tools-testing.sh <name>
|
|
18
|
+
webship-js, the step pack, the users registry and tests/features/site.feature
|
|
19
|
+
4. bash cmd-tools-testing.sh <name> --dry-run --path tests/features/site.feature
|
|
20
|
+
5. bash cmd-tools-testing.sh <name> --run --path tests/features/site.feature
|
|
21
|
+
the first feature expects the default apps: with another list of apps, tell me which scenarios do not apply instead of changing them
|
|
22
|
+
|
|
23
|
+
If a command fails, show the line that failed and stop. Do not retry with other flags.
|
|
24
|
+
When the feature is green: the address, the version, how many scenarios and steps passed.
|
|
25
|
+
Then ask me whether to keep the site or remove it with: bash cmd-tools-remove.sh <name>
|
|
26
|
+
"""
|
|
27
|
+
```
|