You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
|#453| Zoeken: filters van slag met filter Type=Koppeling | Verify Type=Koppeling filter correctly scopes other facets |
49
49
|#455| Tabblad koppelingen en contactpersonen publiekelijk niet getoond | Verify Koppelingen and Contactpersonen tabs visible on public app detail pages |
50
+
|#205| Gedepubliceerde applicatie nog vindbaar | Verify depublished applications do NOT appear in public search |
51
+
|#333| UUID uit filters refcomp en standaarden | Verify reference component and standards filters show names, not UUIDs |
52
+
|#398| Zoeken: Filter met UUID's onder leveranciers | Verify leverancier filter shows readable names, not UUIDs |
53
+
|#438| Zoeken: verschillende vormgeving Diensten na filteren | Verify dienst card layout is consistent across filter combinations |
54
+
|#440| Zoeken: Organisatietype teveel aan opties | Verify Organisatietype filter shows only 4 options: gemeente, samenwerking, leverancier, community |
Copy file name to clipboardExpand all lines: README.md
+150-4Lines changed: 150 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -189,6 +189,69 @@ Full documentation is available at **[softwarecatalog.app](https://softwarecatal
189
189
|[User Guide](docs/USER_GUIDE.md)| End-user and administrator guide |
190
190
|[Configuration](docs/CONFIGURATION.md)| Setup instructions and troubleshooting |
191
191
192
+
## Testing
193
+
194
+
Software Catalogus is tested through three complementary layers that together provide comprehensive quality assurance.
195
+
196
+
### Code Quality (Conduction Quality Workflow)
197
+
198
+
Every commit runs through the [Conduction quality workflow](https://github.com/ConductionNL/softwarecatalog/actions) — a strict CI/CD pipeline that enforces:
199
+
200
+
-**PHP Lint** — syntax validation
201
+
-**PHPCS** — coding standards (PEAR + PSR-12 + custom Conduction rules, including forbidden functions and named parameter enforcement)
-**Psalm** — static analysis (level 4, with unused code detection)
204
+
-**PHPStan** — static analysis (level 5)
205
+
-**PHPUnit** — unit and integration tests (strict mode: `failOnRisky`, output detection, execution order by dependency)
206
+
-**ESLint** — JavaScript/Vue linting
207
+
-**Stylelint** — CSS linting
208
+
209
+
All checks must pass before a release. Run locally with `composer check:strict` (full PHP pipeline) or `npm run lint` (frontend).
210
+
211
+
### API Tests (454 Assertions)
212
+
213
+
A dedicated Newman/Postman collection validates the entire API surface with **454 automated assertions** across 334 requests organized in 11 test folders:
214
+
215
+
| Folder | Coverage |
216
+
|--------|----------|
217
+
| Setup | Test data creation and environment validation |
218
+
| Public API & Search | Faceted search, pagination, UUID resolution |
219
+
| RBAC & Organization Scoping | Multi-tenant access control |
220
+
| Object CRUD | Create, read, update, delete across all entity types |
221
+
| Data Migration & Import | CSV/Magic Mapper imports |
222
+
| ArchiMate & Views | GEMMA architecture elements and relations |
AI-driven browser agents test the application from **7 real-world persona perspectives**, each with their own Nextcloud account, role-based permissions, and test scenarios. The agents use Playwright to interact with the live application exactly as a human would — navigating pages, filling forms, clicking buttons, and verifying results.
Together these agents validate **1,026 acceptance criteria** across 137 GitHub issues, covering end-to-end user journeys, RBAC boundaries, wizard completions, and data integrity. Each persona receives a dedicated skill file (`.claude/skills/test-{persona}.md`) containing their assigned issues and test instructions. Results are stored in `test-results/` with per-persona reports.
246
+
247
+
Run with: `.claude/commands/test.md` (all tests) or individual persona skills.
248
+
249
+
### Issue Management & Acceptance Criteria
250
+
251
+
VNG did not begin filing issues for the Softwarecatalogus until October 2025, and when they did, the issues contained only descriptions — no structured acceptance criteria. Since our agentic test pipeline requires explicit, verifiable acceptance criteria to determine pass/fail outcomes, we set up a parallel system of **markdown shadow issues** in `test-results/api/issues/`. Each shadow issue mirrors a VNG GitHub issue but adds the structured acceptance criteria (AC1, AC2, …) that our API and browser agents need.
252
+
253
+
The master file `issues.md` tracks all 137 IGS (In Review/Scoped) issues with their **1,026 acceptance criteria**, each tagged by test type (`[API]`, `[UI]`, or `[HYBRID]`). Of these, **316 criteria** are covered by the automated Newman/Postman suite, while the remainder are validated by the persona-based browser agents. This approach maintains full traceability back to the original VNG issues while giving our test automation the concrete, testable assertions it requires.
254
+
192
255
## Standards & Compliance
193
256
194
257
-**Data standard:** GEMMA Softwarecatalogus (VNG)
@@ -198,11 +261,94 @@ Full documentation is available at **[softwarecatalog.app](https://softwarecatal
198
261
-**Audit trail:** Full change history on all objects
199
262
-**Localization:** English and Dutch
200
263
201
-
## Related Apps
264
+
## Required Repositories
265
+
266
+
The Softwarecatalogus is not a standalone application — it runs as a Nextcloud app backed by several other apps, with a separate React-based public frontend.
267
+
268
+
| Repository | Role | Required |
269
+
|-----------|------|----------|
270
+
|[OpenRegister](https://github.com/ConductionNL/openregister)| Data storage layer — all objects (applications, modules, organizations, contacts) are stored as JSON objects in OpenRegister. Also provides the Docker environment (`docker-compose.yml`). | Yes |
271
+
|[OpenCatalogi](https://github.com/ConductionNL/opencatalogi)| Publication and catalog management — handles public search, faceted filtering, and federated publishing of catalog data. | Yes |
272
+
|[NL Design](https://github.com/ConductionNL/nldesign)| Design token theming — applies Dutch government (NL Design System) styling via CSS custom properties. | Yes |
273
+
|[Tilburg WOO UI](https://github.com/ConductionNL/tilburg-woo-ui)|**Separate public frontend** — a React/Preact SPA that serves as the citizen-facing interface at `localhost:3000`. Provides public search, detail pages, and registration forms (product, usage, integration, organization). This is **not** a Nextcloud app but a standalone web application that communicates with Nextcloud via the OpenRegister and OpenCatalogi APIs. | Yes |
274
+
|[MyDash](https://github.com/ConductionNL/mydash)| Dashboard widgets for the Nextcloud dashboard page. | Recommended |
275
+
276
+
## Installation
277
+
278
+
### 1. Start the Docker environment
279
+
280
+
The Docker environment is managed from the OpenRegister repository:
For a complete test environment with users, organizations, and sample data:
330
+
331
+
```bash
332
+
bash softwarecatalog/test-setup.sh
333
+
```
334
+
335
+
This creates 7 test users across 4 organizations (leverancier, gemeente, samenwerking, admin), seeds contact persons and sample applications, and verifies RBAC scoping.
336
+
337
+
### 4. Build frontends
338
+
339
+
```bash
340
+
# Nextcloud app frontend (Vue 2)
341
+
cd softwarecatalog && npm install && npm run build
342
+
343
+
# Public frontend (React) — only needed if not using Docker
344
+
cd tilburg-woo-ui && yarn install && yarn build
345
+
```
346
+
347
+
## Support
348
+
349
+
For support, contact us at [support@conduction.nl](mailto:support@conduction.nl).
Copy file name to clipboardExpand all lines: appinfo/info.xml
+4Lines changed: 4 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -21,6 +21,8 @@
21
21
**Requires:** [OpenRegister](https://apps.nextcloud.com/apps/openregister) (install from the [Nextcloud App Store](https://apps.nextcloud.com/apps/openregister)).
22
22
23
23
Free and open source under the EUPL license.
24
+
25
+
**Support:** For support, contact support@conduction.nl. For a Service Level Agreement (SLA), contact sales@conduction.nl.
24
26
]]></description>
25
27
<descriptionlang="nl">< (installeer via de [Nextcloud App Store](https://apps.nextcloud.com/apps/openregister)).
38
40
39
41
Vrij en open source onder de EUPL-licentie.
42
+
43
+
**Ondersteuning:** Voor ondersteuning, neem contact op via support@conduction.nl. Voor een Service Level Agreement (SLA), neem contact op via sales@conduction.nl.
0 commit comments